Commit Graph

103 Commits

Author SHA1 Message Date
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
thomaspblock
d77b111b15 Update desktop navigation chrome and search (#779)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 08:26:41 -07:00
tlongwell-block
5ee2cd0517 feat(desktop): reload webview on Cmd/Ctrl+R (#785) 2026-05-29 10:24:56 -04:00
Will Pfleger
3f3ec64791 feat(desktop): thread-aware notifications with mutable follow/mute controls (#761) 2026-05-28 18:43:41 -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
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
Will Pfleger
839097112c fix(deps): migrate Tailwind CSS from v3 to v4 (#711) 2026-05-22 20:45:47 -04:00
thomaspblock
441b6c4b1a Fix inbox thread navigation highlights (#720)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 22:17:52 -04:00
Will Pfleger
091e38ff0a Fix SPROUT_SHARE_IDENTITY worktree dev workflow breaks (#702) 2026-05-21 17:53:20 -04:00
tlongwell-block
a96cb487f4 fix(desktop): project home read-state from the shared NIP-RS marker (#631)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-05-20 17:13:59 -04:00
tlongwell-block
2fed74bdcd Show channels in command search (#617)
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
2026-05-19 14:33:53 -04:00
thomaspblock
137a4e268f Update inbox conversation experience (#608)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-18 13:48:47 -04:00
Wes
4425f1f713 feat(desktop): add message more-actions dropdown menu (#590)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 15:31:55 -07:00
thomaspblock
8a2d24e4fd Redesign Home as an inbox (#582)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-14 13:35:17 -07:00
thomaspblock
9e76a08a47 fix(desktop): refine header scaling and shadow (#573)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-14 10:07:15 -07:00
Matt Toohey
f0549b5038 feat(desktop): channel hover state and right-click mark-unread context menu (#578)
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-14 08:33:57 -07:00
thomaspblock
5e6083ef9e fix(desktop): inline update control in header (#561)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-13 08:34:26 -07:00
Wes
ef5fdca792 feat(desktop): add Projects as first-class top-level view (#546)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-12 10:51:09 -07:00
Wes
11778f4250 feat(desktop): image download, drag-drop prevention, and drop zone indicator (#542)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-11 23:26:12 +00:00
Wes
1b9f6169ee feat(desktop): channel templates — reusable project settings (#538)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-11 12:31:25 -07:00
thomaspblock
f94e44c382 Polish compact desktop headers (#514)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 08:15:13 -07:00
Bradley Axen
e902037913 Use platform-native app shortcuts on macOS (#521) 2026-05-09 19:34:05 -07:00
Bradley Axen
db4a3efb9c Fix workspace switch cache isolation (#517) 2026-05-09 12:07:21 -07:00
Wes
d7714d50fd Onboarding cleanup: notifications + profile polish (#508)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-08 16:14:37 +00:00
Wes
5fff9239fa feat(desktop): notification sound + sender names in titles (#501)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-07 17:25:29 -07:00
Wes
ec489c5b1a feat(desktop): add keep awake while agents are active setting (#484)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-05 13:14:00 -07:00
Wes
89f4b5de07 fix: bug sweep — profile, mentions, deep links, channel links, doctor page (#480)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-05 12:08:22 -07:00
Wes
4d0cd58d35 feat: pnpm workspace, deep links, and web repos page (#476)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-04 17:09:25 -07:00
Wes
56f5062b74 feat: add NIP-38 user status for desktop and mobile (#449)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-01 17:02:59 -07:00
Wes
351fc3bfb8 feat(desktop): silent auto-download updates with non-blocking UI (#444)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-30 20:56:00 -07:00
tlongwell-block
f29f790f15 feat: replace presence polling with WS subscription + targeted cache updates (#434)
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-04-30 13:02:08 -04:00
Wes
2a01ca590d Implement NIP-RS unread state sync (#420)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-28 20:54:09 -07:00
Wes
00a4aaba3d fix(desktop): key-based React remount for workspace switching (#415)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-28 18:13:12 +00:00
Wes
a9024c2c78 Add multi-workspace support to desktop app (#409)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-28 04:47:11 +00:00
Wes
8abeb3d3ca feat: always notify on DM messages like Slack/Discord (#405)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-27 13:10:11 -07:00
Wes
a05565e687 feat: improve desktop app update UX (#401)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-26 16:51:28 -07:00
Wes
da0506f4ea feat(desktop): improve auto-updater UX and add global update indicator (#394)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 14:13:31 -07:00
Wes
f5b2e4f8b1 feat(desktop): keyboard shortcuts registry + settings panel (#387)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-22 15:45:56 -07:00
Wes
36c97a6e2e feat(desktop): first-run onboarding flow + Lilac accent (#386)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 14:06:35 -07:00
Wes
818b4885e2 fix(desktop): plug memory leaks from log reads, stale caches, and unbounded maps (#377)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-21 07:44:58 -07:00
Wes
fe93ac05a2 fix(desktop): eliminate 10+ second UI freeze on startup (#361)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 10:06:55 -07:00
Wes
12dca80e1a feat(desktop): improve huddle bar UX + audio device selection (#340)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 19:36:46 +00:00
Wes
3050531e7e feat(home): add activity and agent feed sections with deep-linking (#330)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 13:44:21 -07:00
tlongwell-block
dd6107d0d0 feat: Sprout Huddles — voice conversations with AI agents (#299) 2026-04-14 13:11:09 -04:00
Wes
1211b0edc6 feat(desktop): add Pulse social notes surface (#296)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 17:09:38 -07:00
Wes
7e4bcfb8c2 [codex] Reduce desktop release startup work (#269) 2026-04-08 11:13:14 -07:00
Wes
ef15e38730 [codex] hide archived channels from sidebar (#260) 2026-04-07 14:41:22 -07:00
Wes
e10d4529de Add router-backed app navigation and skeleton loading states (#259) 2026-04-07 12:20:42 -07:00
Bradley Axen
c07b14bd9f feat: ephemeral channels with TTL-based auto-archiving (#232)
Co-authored-by: Wes <wesbillman@users.noreply.github.com>
2026-04-07 11:37:51 -07:00
Wes
35588a0594 Add desktop badge and notification ground work (#257) 2026-04-07 10:26:13 -07:00