Commit Graph

385 Commits

Author SHA1 Message Date
Will Pfleger
77ef419fdb fix(desktop): improve Doctor panel clarity for CLI vs ACP adapter status
Rename section header to "Agent CLIs and ACP runtimes" with a
descriptive subheader. Show both CLI and ACP adapter paths when a
provider has a separate adapter (Claude Code, Codex). Add "ACP support
built-in" note for providers with native ACP (Goose, Sprout Agent).
2026-05-22 20:03:41 -04:00
Will Pfleger
a8a25998ae refactor(desktop): split install_hint into cli_install_hint and adapter_install_hint
The single install_hint field was semantically ambiguous — it referred
to the CLI for some providers and the adapter for others. Split into
two fields so each provider clearly describes both install steps. The
dynamic hint composition in discover_acp_providers selects the right
hint based on availability state: CliMissing shows the CLI hint,
AdapterMissing shows the adapter hint, NotInstalled shows both.
2026-05-22 19:49:47 -04:00
Will Pfleger
a2ba77f305 fix(desktop): use official install script for Claude Code CLI
Claude Code is now a Rust binary with platform-specific npm packaging.
Their docs recommend the native install script over npm. Switch to
curl -fsSL https://claude.ai/install.sh | bash.
2026-05-22 19:41:48 -04:00
Will Pfleger
aed67c1edf fix(desktop): use official install script for Codex CLI instead of npm
@openai/codex on npm uses platform-specific sub-packages and the latest
alpha publishes only a win32-x64 variant, causing EBADPLATFORM on macOS.
Switch to the official install script which handles platform detection.
2026-05-22 19:40:41 -04:00
Will Pfleger
54b618e656 style(desktop): fix cargo fmt long line in install concurrency guard 2026-05-22 19:38:58 -04:00
Will Pfleger
6560d96ba5 feat(desktop): add cli_missing availability state for ACP providers
When the ACP adapter binary is found but the underlying CLI is missing
(e.g. codex-acp installed without codex), classify_provider now returns
CliMissing instead of Available. The adapter can't function without the
CLI, so Doctor shows an amber warning with an Install button that will
set up the missing CLI.
2026-05-22 19:35:44 -04:00
Will Pfleger
d4b9ac16d8 fix(desktop): clear resolve cache on re-run, per-provider concurrency, dynamic install hints
Re-run button now clears the binary resolve cache so it actually
re-probes the filesystem instead of returning stale cached results.

Replace global AtomicBool install guard with per-provider
Mutex<HashSet<String>> so concurrent installs for different providers
(e.g. claude + codex) can proceed in parallel.

Add codex CLI install command (npm install -g @openai/codex) so
clicking Install when both CLI and adapter are missing installs both.

Compute install_hint dynamically based on availability state so the
UI accurately describes what the Install button will do.
2026-05-22 19:26:15 -04:00
Will Pfleger
4696cc4cd6 fix(desktop): correct ACP provider install semantics for Goose and Codex
Goose has native ACP support (no separate adapter), so the install
script belongs in cli_install_commands, not adapter_install_commands.
Also sets underlying_cli to "goose" since the CLI binary exists.

Codex ACP adapter is available on npm as @zed-industries/codex-acp —
enable auto-install and point docs link to the actual adapter repo
instead of the main Codex repo.
2026-05-22 18:44:06 -04:00
Will Pfleger
338f0aff1d fix(desktop): use tauri-plugin-opener for external URLs in Doctor panel
Tauri does not open external URLs via <a target="_blank"> — the click
is silently swallowed. Use openUrl() from @tauri-apps/plugin-opener
which correctly dispatches to the system default browser.
2026-05-22 17:35:03 -04:00
Will Pfleger
f1821bce8e fix(desktop): fix broken install links, wrong adapter package, and hermit env leak
Replace window.open() with <a target="_blank"> for "View instructions"
links — Tauri blocks window.open but handles anchor tags correctly.

Fix Claude Code adapter install command: the package is
@agentclientprotocol/claude-agent-acp (not @anthropic-ai/claude-agent-acp
which doesn't exist on npm).

Strip NPM_CONFIG_PREFIX, NPM_CONFIG_CACHE, and COREPACK_HOME from the
install subprocess environment so npm uses the user's normal registry
rather than inheriting hermit's project-local Artifactory proxy config.
2026-05-22 17:31:00 -04:00
Will Pfleger
39a7aa9015 fix(desktop): update E2E test helper to use consolidated acpProvidersCatalog field
The onboarding E2E test passed `{ acpProviders: [] }` to the mock
bridge, but the bridge handler was renamed to read
`acpProvidersCatalog` during consolidation. The stale field name was
silently ignored, causing the default catalog (with available
providers) to be returned instead of an empty list.
2026-05-22 17:31:00 -04:00
Will Pfleger
e10336d192 fix(desktop): address crossfire review findings for ACP provider consolidation
Fix CI-breaking missing `AcpAvailabilityStatus` import in tauri.ts,
eliminate zombie process leak on install timeout by saving PID before
thread move and sending SIGTERM, remove duplicate Map keys in
check-file-sizes.mjs that silently shadowed earlier entries, clean up
dead `MockAcpProvider` type from e2eBridge, and add missing
`classify_provider` test for the no-underlying-CLI code path.
2026-05-22 17:31:00 -04:00
Will Pfleger
3b26a0df99 refactor(desktop): consolidate ACP provider discovery and address review findings
The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (#1), UTF-8 truncation
panic (#2/#4), adds install concurrency guard (#11), exact provider ID
match (#15), error display stdout fallback (#5), success banner
suppression when already available (#12), misleading re-run text (#13),
IIFE refactor in PersonaDialog (#14), hidden internal query lift (#7),
configurable e2e mocks (#9), shared raw type exports (#8), and
classify_provider unit tests (#10).
2026-05-22 17:31:00 -04:00
Will Pfleger
38bc4bdab9 feat(desktop): show all ACP runtimes with install status and install buttons
The "Preferred runtime" dropdown in Agents > Add Persona and the Doctor
panel only showed runtimes with a resolved ACP adapter binary, silently
hiding Claude Code and Codex when their adapters weren't installed.

Add three-state availability detection (Available / AdapterMissing /
NotInstalled) to distinguish "CLI present but adapter missing" from
"nothing installed." Expose a full provider catalog via
`discover_all_acp_providers` and an `install_acp_runtime` command that
runs server-defined install scripts in a login shell with a 5-minute
timeout.

Doctor panel now shows all four known runtimes with status badges and
Install buttons. PersonaDialog shows all runtimes with status labels so
users can store a preference for later. CreateAgentDialog shows a hint
when additional runtimes are available to install.
2026-05-22 17:31:00 -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
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
4e060bfec2 fix(deps): upgrade Vite v8 and @vitejs/plugin-react v6 (#710) 2026-05-21 19:03:59 -04:00
Taylor Ho
ee4ee5f850 fix: composer UX improvements (cursor, upload guard, scroll, paste, perf) (#694) 2026-05-21 22:53:10 +00:00
Will Pfleger
091e38ff0a Fix SPROUT_SHARE_IDENTITY worktree dev workflow breaks (#702) 2026-05-21 17:53:20 -04:00
Will Pfleger
6fe557852c fix(frontend): remove deprecated baseUrl for TypeScript 6 compatibility (#705) 2026-05-21 17:40:54 -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
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
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
Taylor Ho
af08b0f0e8 fix: prevent agent proliferation when adding bots to channels (#621) 2026-05-20 12:08:34 -07:00
Will Pfleger
c8f99bbc31 fix: surface swallowed errors across crates and emit turn failures to activity log (#628) 2026-05-20 14:55:20 -04:00
thomaspblock
b5e5a39bf0 Refine Pulse composer and post actions (#629)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-20 13:04:47 -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
tlongwell-block
5370a75ca4 feat(relay): surface connection loss in the workspace header (#623)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Dawn <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-05-20 09:36:52 -04:00
Will Pfleger
582cfc8885 Bundle sprout CLI in DMG release + agent PATH discoverability (#614) 2026-05-19 20:53:46 -04:00
tlongwell-block
2392e6523a fix(composer): use native ProseMirror inserts for autocomplete (mentions / channels / emoji) (#618)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Quinn (sprout agent) <96f056ad5f2305c8ddf637dc65d048aa4c12d7daeb8867690e34fca46b0ef64c@sprout-oss.stage.blox.sqprod.co>
2026-05-19 20:28:40 -04:00
thomaspblock
b881d5319c Refine thread reply alignment (#620)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 19:11:49 -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
3973080dce Refine conversation visual affordances (#615)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 08:54:41 -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
thomaspblock
137a4e268f Update inbox conversation experience (#608)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-18 13:48:47 -04:00
thomaspblock
17eea2d267 Fix full-width message layouts (#591)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-17 09:04:09 -04:00