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