tlongwell-block
3ca6918078
mesh-llm plan v6.1: Step 3 — embedded iroh-relay with NIP-98 admission
...
- New module crates/sprout-relay/src/iroh_relay.rs (~290 lines incl. tests).
- pub fn spawn(state, bind_addr) constructs an iroh_relay::server::Server
with AccessConfig::Restricted set to a closure that:
1. Pulls the Bearer token from ClientRequest::auth_token().
2. base64-decodes (accepts STANDARD + URL_SAFE, padded or not).
3. Calls sprout_auth::verify_nip98_event against canonical URL
(= sprout_auth::nip98_canonical_url(public_url, '/relay')).
4. Runs check_relay_membership against the NIP-98 pubkey.
Anything other than Member/ViaOwner/OpenRelay -> Deny.
Per Max's review notes: fail-closed on missing/invalid token, run
membership only after NIP-98 verifies the pubkey, no caching.
- Returns Ok(None) gracefully when SPROUT_IROH_RELAY_PUBLIC_URL is unset
(the canonical URL can't be built without it).
- patched-iroh-relay feature flag reserved for upstream PR C's per-client
max-lifetime hook (kept behind cfg so unpatched rc.0 still compiles).
- MSRV bumped from 1.88.0 -> 1.91.0 (iroh-relay rc.0's MSRV). Repo's
rust-toolchain.toml already pins 1.95.0 so builds are unaffected; the
bump just keeps Cargo.toml honest with the actual transitive floor.
- README updated: 'Rust 1.88+' -> 'Rust 1.91+'.
- crates/sprout-relay/Cargo.toml: added
iroh-relay = { version = "=1.0.0-rc.0", features = ["server"] }
plus the patched-iroh-relay feature.
Tests (rustc 1.95, via rust-toolchain.toml; also verified independently
on 1.91.1):
- sprout-relay --lib: 195 -> 206 (+11 iroh_relay tests covering valid
admission, missing/empty/non-base64/wrong-method/wrong-URL/wrong-kind/
stale-timestamp denials, and bearer-encoding round-trips).
- cargo clippy --workspace --all-targets -- -D warnings: clean.
- cargo fmt --all -- --check: clean.
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com >
Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co >
2026-05-19 15:39:35 -04:00
tlongwell-block
24520aa2b1
NIP-AE: agent engrams (kind:30174) — core memory injection + sprout mem CLI ( #593 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com >
2026-05-19 13:16:37 -04:00
tlongwell-block
70cb53e2c7
Add Sprig all-in-one agent binary ( #605 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
2026-05-17 13:31:58 -04:00
tlongwell-block
92c859043c
dev-mcp: add view_image tool ( #602 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
2026-05-15 16:21:16 -04:00
Wes
1d604e8b2e
Update Rust dependencies for pair relay ( #534 )
2026-05-11 10:47:22 -07:00
tlongwell-block
70a691517b
feat: automatic git auth and signing for sprout agents ( #528 )
2026-05-11 10:38:45 -04:00
tlongwell-block
91f16e326f
feat: embed sprout CLI in dev-mcp, add NIP-OA auth tag support ( #525 )
2026-05-11 06:57:34 -04:00
tlongwell-block
082414bf3f
feat: sprout-agent + sprout-dev-mcp — minimal ACP coding agent ( #493 )
2026-05-10 22:33:58 -04:00
Bradley Axen
c6da3a72ab
Add countdown bot reference example ( #516 )
2026-05-08 15:39:40 -07:00
Wes
3a12369491
feat: serve web UI from relay + repos page redesign ( #479 )
...
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-05-05 19:20:13 +00:00
tlongwell-block
454781caae
Sprout speaks Nostr. Nothing else. ( #475 )
2026-05-05 12:03:06 -04:00
tlongwell-block
df33818b5b
feat(relay): NIP-OA agent authentication for NIP-43 membership (WS + REST + git) ( #471 )
2026-05-04 12:12:22 -04:00
tlongwell-block
15bd9ba2ac
feat: sprout-pair-relay — ephemeral sidecar for NIP-AB device pairing ( #467 )
2026-05-03 21:07:36 -04:00
tlongwell-block
1feb18e2e0
feat(git-sign-nostr): implement NIP-GS git object signing with Nostr keys ( #459 )
2026-05-03 10:05:30 -04:00
tlongwell-block
3899ca566d
feat(git): Role-based push permissions with service-bound auth ( #441 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
Co-authored-by: Tyler Longwell <tlongwell@block.xyz >
2026-05-01 00:25:33 -04:00
tlongwell-block
f23560d3d4
feat: Image & video uploads for MCP and CLI (Blossom protocol) ( #433 )
...
Co-authored-by: Tyler Longwell <tlongwell@block.xyz >
2026-04-30 14:35:02 -04:00
Bradley Axen
fcec10547d
Route ACP observer traffic over relay ( #421 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
Co-authored-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com >
Co-authored-by: Tyler Longwell <tlongwell@squareup.com >
2026-04-30 09:34:37 -04:00
tlongwell-block
121737f93f
NIP-34 git transport: Smart HTTP hosting with NIP-98 auth ( #419 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
2026-04-29 18:04:59 -04:00
Bradley Axen
7c2c556d72
feat: Add local ACP session observer ( #412 )
2026-04-29 04:21:58 +00:00
Wes
e2c94a8538
feat(mobile): image upload + media viewer parity with desktop ( #384 )
...
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 11:54:29 -07:00
renovate[bot]
12afa16cb1
chore(deps): update rust crate axum to v0.8.9 ( #365 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-20 06:28:22 -07:00
tlongwell-block
b8d6a5cf8b
feat: NIP-AB device pairing — Phase 1 (core library + CLI) ( #333 )
2026-04-16 14:56:36 -04:00
tlongwell-block
811c8f3f07
Replace LiveKit with WebSocket Opus audio relay ( #326 )
2026-04-15 15:02:27 -04:00
Wes
3d48be8777
[codex] Add mobile chat timeline rendering and hardening ( #327 )
...
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-15 08:55:32 -07:00
tlongwell-block
dd6107d0d0
feat: Sprout Huddles — voice conversations with AI agents ( #299 )
2026-04-14 13:11:09 -04:00
tlongwell-block
d07385fe02
feat: Markdown-based persona packs (crate + ACP + desktop) ( #297 )
2026-04-11 13:32:14 -04:00
tlongwell-block
61efb883a1
feat: Phase 1 video upload support (Blossom-compliant-ish) ( #285 )
2026-04-10 12:23:29 -04:00
renovate[bot]
7a9218ba54
Update all non-major dependencies ( #248 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Wes <wesb@block.xyz >
2026-04-08 11:55:11 -07:00
tlongwell-block
195fdfff2f
fix(acp): follow-up hardening from PR #200 independent review ( #201 )
2026-03-28 08:11:49 -04:00
tlongwell-block
1dcba0a200
feat(acp): reliability hardening — bulletproof the harness agents live in ( #200 )
2026-03-27 18:25:18 -04:00
tlongwell-block
25ed2dcc23
feat: event-first refactor — unified ingest pipeline, SDK, client migrations ( #162 )
2026-03-24 13:38:36 -04:00
tlongwell-block
4c9b8aae9c
feat: sprout-cli — agent-first CLI with full MCP parity (48 commands) ( #158 )
2026-03-21 21:23:32 -04:00
tlongwell-block
168c1ca8de
feat: remote agent backend providers ( #134 )
2026-03-20 20:32:55 -04:00
Wes
1f37f7ea52
feat(desktop): add #channel link rendering and autocomplete ( #135 )
2026-03-20 15:19:13 -07:00
Wes
a6fd68f9c0
fix: update aws-lc-sys to 0.39.0 (RUSTSEC-2026-0048) ( #131 )
2026-03-20 10:29:40 -07:00
tlongwell-block
c12feb8c9c
feat: add canary release workflow ( #129 )
2026-03-20 11:45:10 -04:00
tlongwell-block
94203d730c
feat: support remote relay deployments (no sprout-admin CLI required) ( #123 )
...
Co-authored-by: Wes <wesbillman@users.noreply.github.com >
2026-03-19 21:13:20 -04:00
tlongwell-block
efed5307a8
fix(mcp): send threaded replies via WebSocket to prevent self-mention echo ( #115 )
2026-03-19 09:51:55 -04:00
tlongwell-block
7fd9f7ae78
feat(metrics): Prometheus observability + CAKE container contract ( #88 )
2026-03-17 19:00:44 -04:00
tlongwell-block
2b08ad80d0
feat: Blossom-compatible media upload (sprout-media crate + relay + desktop) ( #66 )
2026-03-15 15:17:10 -04:00
tlongwell-block
aec02ae8fb
feat(workflow): replace HTTP loopback with ActionSink trait for SendMessage ( #61 )
2026-03-13 22:31:04 -04:00
tlongwell-block
c85a2226a5
fix: harden emoji reactions + feat: configurable ACP event subscriptions ( #59 )
2026-03-13 21:25:50 -04:00
tlongwell-block
6a5fcbb0c2
feat: reliability and security hardening ( #53 )
2026-03-13 15:33:22 -04:00
tlongwell-block
b9bda6b3b0
feat: implement cron and interval triggers for workflows ( #51 )
2026-03-13 11:12:51 -04:00
tlongwell-block
975b7be4a8
feat(proxy): NIP-28 translation proxy for third-party Nostr clients ( #43 )
2026-03-12 22:16:00 -04:00
tlongwell-block
f84da74d3f
feat: self-service token minting via NIP-98 HTTP Auth ( #37 )
2026-03-12 10:11:56 -04:00
tlongwell-block
154abf3da9
feat: agent channel protection — policy-based control over who can add agents to channels ( #34 )
2026-03-11 19:20:44 -04:00
tlongwell-block
397564b434
feat: set_presence REST endpoint, MCP tool, and shared PresenceStatus enum ( #33 )
2026-03-11 16:05:31 -04:00
tlongwell-block
4ecb5d3be2
feat: add sprout-acp harness — bridges Sprout events to ACP agents ( #10 )
...
Co-authored-by: Tyler Longwell <tlongwell@block.xyz >
2026-03-10 22:53:32 -04:00
tlongwell-block
cd3b45f948
Initial backend revisions, workflow expansion ( #5 )
2026-03-10 10:46:06 -04:00