Commit Graph

199 Commits

Author SHA1 Message Date
Michael Neale
fc832f4d5d fix(serverless): membership via direct kind:39002 (join/leave/add/remove) + CLI channel ops
In serverless mode there's no relay to process membership command kinds
(9021 join, 9022 leave, 9000/9001 add/remove member). The client now mutates
the replaceable kind:39002 member-list event directly (read-modify-write).

- desktop: join/leave/add/remove_channel_member publish 39002 directly
- sprout-sdk: build_channel_metadata_serverless (39000) +
  build_channel_members_serverless (39002), shared builders
- sprout-cli: channels create/join/leave/add-member/remove-member serverless
  branches (fixes agent replies + CLI parity with desktop)

Verified end-to-end against wss://relay.damus.io: create -> list -> send ->
read all round-trip with zero Sprout infrastructure.
2026-06-02 08:33:06 +10:00
Michael Neale
84f84931f1 feat(serverless): run channels, DMs, messages, and agents against a generic Nostr relay
Adds a 'serverless' workspace mode that points the desktop app at any generic
public Nostr relay (e.g. wss://relay.damus.io) with zero Sprout server
infrastructure — no Postgres, no HTTP /query|/events bridge, no NIP-98 auth.
Reuses Sprout's native event kinds (39000 channel metadata, 39002 membership,
kind 9 messages, h-tag scoping); 'serverless' is purely a transport + auth
concern, so the server-mode path is untouched.

Transport: reads/writes go over plain WebSocket (REQ/EOSE, EVENT/OK) instead
of the HTTP bridge; NIP-42 AUTH is answered only if the relay challenges.

Desktop backend:
- AppState.serverless flag + is_serverless(); apply_workspace gains a flag
- ws_relay.rs: query_relay_ws / submit_event_ws / publish_signed_event_ws
- relay.rs: query_relay/submit_event + agent profile sync branch to WS
- events.rs: build_channel_metadata_serverless (39000) + members (39002)
- create_channel/open_dm publish those events directly (DM ids = UUIDv5 over
  sorted participants so both sides converge without a server)
- managed agents inherit SPROUT_SERVERLESS into the ACP subprocess env

Agents (full support, not a follow-up):
- sprout-acp: RestClient + HarnessRelay gain serverless mode; query/submit use
  plain WS, NIP-42 handshake skipped on (re)connect; SPROUT_SERVERLESS env/arg
- sprout-cli: SproutClient serverless WS query/submit; --serverless flag,
  to_ws_url helper, NetworkMsg error variant
- npub respond-to permissions are in-process and work unchanged

Frontend:
- Workspace.mode + workspaceMode()/isServerlessWorkspace() helpers
- relayClient.setServerless() skips the AUTH-wait on connect; late challenges
  still answered so writes succeed on relays that require auth
- ServerlessContext/useIsServerless() hides search, pulse, projects, workflows
- Serverless toggle in the Add Workspace dialog and Welcome screen

Docs: docs/SPROUT_LITE_MODE.md updated with the implementation + testing steps.
2026-06-01 20:42:29 +10:00
Wes
995189c223 chore(release): release version 0.3.5 (#799) 2026-05-29 14:48:49 -07:00
Will Pfleger
7beb0f8e68 fix(desktop): reap orphaned agent processes on shutdown and restart (#787) 2026-05-29 18:18:55 +00:00
Wes
8fc27b6554 chore(release): release version 0.3.4 (#786) 2026-05-29 09:50:08 -07:00
Will Pfleger
fa7febe40f fix(desktop): sync persona pack directory across worktree instances (#782) 2026-05-28 20:41:23 -04:00
Wes
a28a0e6b42 chore(release): release version 0.3.3 (#781) 2026-05-28 16:51:47 -07:00
Wes
c761a76ff2 fix(release): sync release tags during preflight (#780) 2026-05-28 16:29:25 -07:00
Wes
8da9acbad9 chore(release): release version 0.3.2 (#774) 2026-05-28 12:00:40 -07:00
Wes
9a10e6281e chore(release): release version 0.3.1 (#769) 2026-05-28 09:10:28 -07:00
Wes
30654e95f6 Polish desktop Pulse and Home views (#764)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
2026-05-28 08:17:02 -07:00
Will Pfleger
bcd903edcc feat(release): automate OSS release pipeline with just release (#757) 2026-05-27 19:25:09 -04:00
Will Pfleger
f42839c740 feat(desktop): worktree agent data sync, retired persona cleanup, mcp_command reconciliation (#728)
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
2026-05-27 16:46:16 -04:00
Wes
8946653af8 fix(desktop): add support for deeplinking to channel/messages (#759)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
2026-05-27 12:27:34 -07:00
Wes
9823ff52e2 fix(desktop): clean ANSI escapes from agent log tail + drop dead AppHandle plumbing (#756)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
2026-05-27 09:12:41 -07:00
Wes
f1e25b21da feat(desktop): editable attachments + data-loss fix on message edit (#755)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: summer <summer@sprout>
2026-05-26 19:59:06 -07:00
Will Pfleger
7df4681fee feat(desktop): dock bounce, mark-as-read toggle, and bulk mark-all-read (#753) 2026-05-26 17:38:29 -07:00
Wes
ab71ade9e7 fix: prevent agent settings from being silently deleted on channel deletion (#752)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-26 16:09:09 -07:00
Will Pfleger
b13db17faf feat(desktop): two-layer agent prompts + dynamic AGENTS.md + MCP gating + harness-agnostic skill path (#584)
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
2026-05-26 17:46:30 -04:00
Wes
7ac0466e12 fix: agent management UI fixes (permissions, parallelism, form validation) (#750) 2026-05-26 13:39:49 -07:00
Wes
8a468a9876 fix: UI fixes for system message avatars and agents page (#749)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-26 10:46:34 -07:00
renovate[bot]
e5c35bb59e chore(deps): update rust crate serde_json to v1.0.150 (#737)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
2026-05-23 23:53:59 +00:00
renovate[bot]
8d6a4a9ed2 fix(deps): update rust crate zip to v8 (#692)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-23 20:39:18 +00:00
renovate[bot]
20bac74bea fix(deps): update rust crate rubato to v3 (#689)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-23 13:32:53 -04:00
tlongwell-block
79399d9b8e feat: NIP-IA identity archival (relay backend + desktop) (#733)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
2026-05-23 12:03:38 -04:00
Will Pfleger
9d55baefab fix(desktop): find bundled sidecars in production DMG builds (#731) 2026-05-22 21:26:52 -04:00
Will Pfleger
4269fd2720 Show all ACP runtimes with install status and one-click install (#724) 2026-05-22 20:33:35 -04:00
Will Pfleger
a65b7fc06f fix(deps): migrate nostr crate from 0.36 to 0.44 (#708) 2026-05-22 17:17:11 -04:00
Will Pfleger
55190b18bd Add sprout-cli agent skill to nest initialization (#613)
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
Co-authored-by: npub1rq35h4cfluqvg73mvmcqze6m69xqwuqdschdv8pp53prmnqaj6rsrkj0c2 <18234bd709ff00c47a3b66f001675bd14c07700d862ed61c21a4423dcc1d9687@sprout-oss.stage.blox.sqprod.co>
2026-05-22 11:28:43 -04:00
Will Pfleger
091e38ff0a Fix SPROUT_SHARE_IDENTITY worktree dev workflow breaks (#702) 2026-05-21 17:53:20 -04:00
renovate[bot]
26a2107523 chore(deps): update rust crate tokio to v1.52.3 (#658)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:27:18 +00:00
renovate[bot]
aff627d901 chore(deps): update rust crate sherpa-onnx to v1.13.2 (#657)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:26:24 +00:00
renovate[bot]
109c7d9a8a chore(deps): update rust crate reqwest to v0.13.3 (#639)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:08:09 +00:00
renovate[bot]
7d4c129002 chore(deps): update rust crate sherpa-onnx to v1.12.40 (#640)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:07:37 +00:00
renovate[bot]
55abbfdec6 fix(deps): update rust crate bzip2 to 0.6 (#661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:52:18 +00:00
renovate[bot]
f55dc46c4c chore(deps): update rust crate uuid to v1.23.1 (#648)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:50:02 +00:00
renovate[bot]
3935885bb9 chore(deps): update rust crate tauri-plugin-dialog to v2.7.1 (#644)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:49:41 +00:00
renovate[bot]
42d9eafabd chore(deps): update rust crate tokio to v1.51.3 (#646)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:49:13 +00:00
renovate[bot]
576ef8cf86 chore(deps): update rust crate tauri-plugin-opener to v2.5.4 (#645)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:48:56 +00:00
renovate[bot]
73b4cb797e chore(deps): update rust crate tauri to v2.11.2 (#642)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:48:26 +00:00
renovate[bot]
cbe6f415bd chore(deps): update rust crate tar to v0.4.46 (#641)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 22:47:24 +00:00
renovate[bot]
f62707f4dc chore(deps): update rust crate earshot to v1.1.0 (#654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 17:43:33 -04:00
Taylor Ho
af08b0f0e8 fix: prevent agent proliferation when adding bots to channels (#621) 2026-05-20 12:08:34 -07:00
Will Pfleger
582cfc8885 Bundle sprout CLI in DMG release + agent PATH discoverability (#614) 2026-05-19 20:53:46 -04:00
Will Pfleger
50b350dc58 fix(desktop): worktree support — workspace boundary + shared identity (#610) 2026-05-18 19:11:34 -04:00
tlongwell-block
6e1418e571 feat(huddle): fix concurrent-speaker mixing + jitter buffer + protocol v2 (up to 10 peers) (#609)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
2026-05-18 16:34:52 -04:00
tlongwell-block
c0eb5affcf refactor(huddle): switch local TTS to Pocket TTS (Kyutai/sherpa-onnx) (#607)
Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
Signed-off-by: npub1cc3ha7z055mu0rwwu7806t2wt8mj3pvu0uv5mfp2c50dahaqhczshdalg6 <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1cc3ha7z055mu0rwwu7806t2wt8mj3pvu0uv5mfp2c50dahaqhczshdalg6 <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-05-18 14:28:27 -04:00
tlongwell-block
3daf8d6ae1 feat(huddle): swap STT default to Parakeet TDT-CTC 110M (EN, int8) (#562)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
2026-05-15 22:22:05 -04:00
tlongwell-block
d1097aa91f chore(desktop): upgrade Tauri to 2.11.x to fix blank window after sleep on macOS (#600)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
2026-05-15 18:59:16 -04:00
tlongwell-block
7171d4954d fix(relay,desktop): only advertise NIP-43 when enforced; probe pairing by supported_nips (#601)
Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
2026-05-15 15:11:37 -04:00