Commit Graph

138 Commits

Author SHA1 Message Date
npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w
0ca05eddc5 test(e2e): derive preview-feature list from features.json
Both the screenshot 'all on' test and the bridge mock seed were
hand-maintaining a parallel array of preview feature ids. tier
transitions (e.g. promoting huddles to stable) required updating
two places that the type system couldn't help us with.

Add tests/helpers/features.ts as a single source of truth that
imports /features.json directly and filters tier === 'preview'.
The 'all on' test now loops over PREVIEW_FEATURE_IDS, and bridge.ts
re-uses the same constant for its localStorage seeding.

12/12 screenshot-feature-flags tests pass locally.

Signed-off-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:59 -07:00
npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w
0c5c43d591 fix: auto-seed preview features in E2E mock bridge
CI was failing 16 smoke tests (workflows.spec, channels.spec, smoke.spec,
file-attachment.spec) because preview-gated UI (workflows, forum, pulse,
projects) didn't render in mock-bridge tests. Tests clicked testIDs that
were behind <FeatureGate>, timing out.

- bridge.ts: seed sprout-feature-overrides-v1 in localStorage with all
  preview feature IDs enabled by default via addInitScript. New
  seedPreviewFeatures option (default true) opts out for specs that
  exercise the toggle UI itself.
- screenshot-feature-flags.ts: pass seedPreviewFeatures: false so the
  Experiments toggle flow still drives each feature on via the UI.

59/59 affected smoke tests passing locally.

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:59 -07:00
Taylor Ho
dcd558910d fix: promote Huddles back to stable — remove all gating
- Remove huddles entry from features.json (stable = no manifest entry)
- Unwrap FeatureGate wrappers in AppShell.tsx and ChannelMembersBar.tsx
- Remove unused FeatureGate imports
- Remove huddles screenshot test and view-huddles.png
- Remove huddles toggle from 'all on' test (now 4 features)

12/12 E2E tests passing.

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:59 -07:00
Taylor Ho
09ddabc8cb fix: move Experiments into App nav group in settings sidebar
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:59 -07:00
Taylor Ho
e923241e2e feat: promote mesh-compute to stable (remove from preview list)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:59 -07:00
Taylor Ho
7194016d48 fix: regenerate E2E screenshots for 2-tier feature system
- Rewrote screenshot-feature-flags.ts: removed stale 'unstable' tier
  references (relay-members, identity-archive), updated close button
  selector to settings-back-to-app
- Deleted all old screenshots + feature-flags-tour/ artifacts
- Regenerated 13 fresh screenshots matching current UI
- Added Experiments nav group to SettingsView (was defined but missing
  from settingsNavGroups)
- Registered test in playwright.config.ts smoke project

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:58 -07:00
Taylor Ho
3cf8c38484 refactor: remove unstable tier, simplify to stable/preview only
- Remove 'unstable' from FeatureTier type and resolveEnabled logic
- Remove identity-archive and relay-members from manifest (stable, permission-gated)
- Move mesh-compute to preview tier
- Flatten ExperimentalFeaturesCard to simple list (no disclosure/badges)
- Fix semantic HTML: replace <label> with <div> + aria-labelledby
- Remove featureGate from relay-members settings (role-gated only)
- Remove unstable tier tests

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:58 -07:00
Taylor Ho
a5ea4ce7b3 refactor: rename tiers to stable/preview/unstable, remove dev-build gate
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-06-08 13:02:58 -07:00
klopez4212
ecca5e77e4 Collapse channel header actions (#901) 2026-06-08 16:18:11 +00:00
klopez4212
b384354e2b Restyle settings sections (#894) 2026-06-08 14:59:26 +00:00
klopez4212
32039b9a25 Move settings into the app shell (#893) 2026-06-08 07:23:11 -07:00
Will Pfleger
0a6067ca1b refactor: rename ACP "provider" to "runtime" across the codebase (#783) 2026-06-07 14:40:59 -04:00
Wes
1b7b6978fc Show hover cards for inline message emoji (#885)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-05 14:01:06 -07:00
Wes
5268fac2d8 Fix monotonic read-state merges (#884)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-05 14:00:50 -07:00
klopez4212
0a4783c6f8 Refine sidebar behavior and borders (#869) 2026-06-05 14:00:37 -07:00
klopez4212
5c2476a71e Polish thread summaries and reactions (#881) 2026-06-05 20:50:19 +01:00
klopez4212
b84f8e6a01 Polish message row hover states (#880) 2026-06-05 20:32:35 +01:00
Wes
bc53008676 Improve emoji naming and custom emoji UX (#878)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-05 18:51:46 +00:00
Wes
5bdac0566f Fix custom emoji status in profile popover (#874)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-05 09:26:13 -07:00
Will Pfleger
269b35e8de fix(mobile+desktop): cross-device read state sync + diagnostic logging (#843) 2026-06-04 18:55:40 -04:00
Wes
c10b4f8f5c feat(desktop): star channels (Slack-style favorites) (#860)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-04 15:32:28 -07:00
Will Pfleger
1fe7bf2872 feat: channel muting for desktop and mobile (#838) 2026-06-04 15:53:53 -04:00
tlongwell-block
34ac3ba1d1 fix(desktop): harden relay mesh connect p-tag (#834) 2026-06-04 11:50:49 -04:00
thomaspblock
a13691b620 Polish desktop profile menu interactions (#836)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-04 08:48:57 -07:00
Will Pfleger
3b78dc5690 feat(mobile+desktop): two-tier Slack-style app icon badge (#802) 2026-06-03 18:16:49 -07:00
Wes
d8b602a359 fix(desktop): robust emoji picker — unify picker + fix custom emoji in editing, status, reactions (#837)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-03 15:13:25 -07:00
Will Pfleger
06bc67fd34 feat(desktop): reusable screenshot workflow for agents (#826)
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
2026-06-03 19:33:56 +00:00
tlongwell-block
9f0c22a43a desktop(mesh-llm): let a serving node route a different model (#833)
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
2026-06-03 14:30:46 -04:00
Wes
82ae85f79a fix: native arbitrary-file download + image context-menu flash (#830)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-03 09:59:57 -07:00
Wes
7797ae77f6 fix(desktop): custom emoji reaction rendering + picker autofocus (#831)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-03 08:53:43 -07:00
tlongwell-block
33cfc85293 Mesh-LLM v1: relay-gated direct-iroh inference between users (WAN) (#822)
Signed-off-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Max <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
2026-06-03 10:49:09 -04:00
Will Pfleger
56c504a4c7 feat: code block rendering, syntax highlighting, and compose fixes (#803) 2026-06-02 14:43:08 -07:00
Wes
2349421304 feat: custom emoji — user-owned NIP-30 sets with a client-side union (#816)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
2026-06-02 14:19:07 -07:00
Wes
41a3fc1589 fix(desktop): let channel members add members and bots without admin (#815)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-02 09:55:09 -07:00
tlongwell-block
ede8ddb425 Sprout × mesh-llm: in-process mesh node (serve/consume) + relay admission (#798) 2026-06-02 10:28:20 -04:00
Will Pfleger
6481428e2b fix(desktop): resolve flaky integration tests via project-level assertion timeout (#812) 2026-06-01 18:48:37 -04:00
Wes
2b052eb465 feat(media): support arbitrary file types with download cards (#810)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-01 12:57:04 -07:00
Wes
d810608d85 feat(desktop): keyboard shortcuts — ⌘⇧N new channel + ↑-to-edit last message (#809)
Signed-off-by: npub1yxv5wk0u0fh6dwt925wntn7h397jvteyj4r87ttcd9xae7n2t3lqqj9jmm <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1yxv5wk0u0fh6dwt925wntn7h397jvteyj4r87ttcd9xae7n2t3lqqj9jmm <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-01 09:12:45 -07:00
Will Pfleger
10f37e4cab feat(desktop): add standalone Playwright screenshot helper (#795) 2026-05-29 17:10:56 -04: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
Wes
8da9acbad9 chore(release): release version 0.3.2 (#774) 2026-05-28 12:00:40 -07:00
Wes
35821574c0 feat(desktop): redesign status UI with full emoji picker and presence sub-menu (#760)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
2026-05-27 13:13:33 -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
tlongwell-block
59f51a8ac7 feat(desktop): hide archived identities from discovery surfaces (NIP-IA) (#734)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
2026-05-23 13:58:01 -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
4269fd2720 Show all ACP runtimes with install status and one-click install (#724) 2026-05-22 20:33:35 -04:00
tlongwell-block
4373a13fb3 fix(relay): avoid websocket writes in stall watchdog (#697)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-05-21 12:56:12 -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
Mat Balez
2da3402f10 [codex] Add copy button for rendered code blocks (#619)
Signed-off-by: Mat Balez <60949391+matbalez@users.noreply.github.com>
2026-05-20 14:25:03 +00:00