Commit Graph
607 Commits
Author SHA1 Message Date
Will Pfleger 710cb4295c fix(desktop): always search exe parent dir for bundled sidecar binaries
command_search_dirs gated the exe parent directory behind an AppHandle
check, but discover_acp_providers called find_command with app: None.
In production DMGs, bundled sidecars live in Sprout.app/Contents/MacOS/
next to the main exe, so they were never found. Remove the guard so the
exe parent is always searched regardless of whether an AppHandle is
available.
2026-05-22 21:23:01 -04:00
Will Pfleger d2b548627d fix(desktop): detach install subprocesses from controlling terminal
Install scripts like Codex's install.sh explicitly open /dev/tty to
prompt interactively ("Start Codex now? [y/N]"), bypassing our
stdin(Stdio::null()). Call setsid() in pre_exec to create a new
session without a controlling terminal, forcing the script's fallback
to read from stdin (/dev/null → EOF → default answer).
2026-05-22 20:21:21 -04:00
Will Pfleger 539ca457d5 fix(desktop): close stdin for install subprocesses to prevent interactive hangs
Install commands like the Codex CLI script prompt "Start Codex now?
[y/N]" which blocks forever when the subprocess inherits stdin from
the Tauri process. Redirect stdin from /dev/null so any interactive
prompt gets an immediate EOF and defaults to its non-interactive
behavior.
2026-05-22 20:13:52 -04:00
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 PflegerandGitHub f8a0cb0147 perf(ci): add caching, path filtering, and nextest to speed up CI (#723) 2026-05-22 17:28:13 -04:00
Will PflegerandGitHub a65b7fc06f fix(deps): migrate nostr crate from 0.36 to 0.44 (#708) 2026-05-22 17:17:11 -04:00
8e26836015 Allow owners to read agent memories (#727)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Max (sprout agent) <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
2026-05-22 16:52:02 -04:00
8bc94413eb feat(relay/git): git on Sprout, S3-backed (#726)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Dawn <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@users.noreply.sprout>
Co-authored-by: Sami <sami@users.noreply.sprout>
Co-authored-by: Quinn <quinn@users.noreply.sprout>
Co-authored-by: Mari <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@users.noreply.sprout>
Co-authored-by: Eva <eva@users.noreply.sprout>
Co-authored-by: Tyler Longwell <tyler@block.xyz>
2026-05-22 15:05:07 -04:00
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
7b33c47eb4 fix(sprout-agent): retry on pre-response transport errors (#700)
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-22 10:35:39 -04:00
Will PflegerandGitHub 6dcb04bcd9 Fix CLI output normalization and wrong Nostr kinds (MCP parity) (#612) 2026-05-22 10:32:20 -04:00
741c09d9fe docs(nips): add NIP-IA identity archival (#713)
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Max (sprout agent) <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Quinn (sprout agent) <96f056ad5f2305c8ddf637dc65d048aa4c12d7daeb8867690e34fca46b0ef64c@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Mari (sprout agent) <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co>
2026-05-21 23:46:07 -04:00
3467a67b2a docs: formal spec + machine-checked proof for git refs over object storage (#721)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Eva (sprout agent) <18234bd709ff00c47a3b66f001675bd14c07700d862ed61c21a4423dcc1d9687@sprout-oss.stage.blox.sqprod.co>
2026-05-21 23:43:46 -04:00
504cfea20d feat: sprout notes NIP-23 long-form CLI + relay a-tag deletion (#719)
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>
Co-authored-by: Max (sprout agent) <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Quinn (sprout agent) <96f056ad5f2305c8ddf637dc65d048aa4c12d7daeb8867690e34fca46b0ef64c@sprout-oss.stage.blox.sqprod.co>
2026-05-21 22:30:21 -04:00
441b6c4b1a Fix inbox thread navigation highlights (#720)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 22:17:52 -04:00
Will PflegerandGitHub 4e060bfec2 fix(deps): upgrade Vite v8 and @vitejs/plugin-react v6 (#710) 2026-05-21 19:03:59 -04:00
Will PflegerandGitHub 5b75ce4755 fix(deps): upgrade pnpm to v11 with versioned patch keys (#709) 2026-05-21 18:53:26 -04:00
Taylor HoandGitHub ee4ee5f850 fix: composer UX improvements (cursor, upload guard, scroll, paste, perf) (#694) 2026-05-21 22:53:10 +00:00
Will PflegerandGitHub cfd5a82c7b fix(infra): pin PGDATA path for forward-compatible Postgres upgrades (#707) 2026-05-21 17:57:03 -04:00
Will PflegerandGitHub d0d2670fe2 fix(deps): upgrade redis 1.0 and deadpool-redis 0.23 together (#703) 2026-05-21 17:55:44 -04:00
Will PflegerandGitHub 091e38ff0a Fix SPROUT_SHARE_IDENTITY worktree dev workflow breaks (#702) 2026-05-21 17:53:20 -04:00
Will PflegerandGitHub 4404162f0e fix(mobile): rename IOSOptions/MacOsOptions to AppleOptions (#706) 2026-05-21 17:41:16 -04:00
Will PflegerandGitHub 6fe557852c fix(frontend): remove deprecated baseUrl for TypeScript 6 compatibility (#705) 2026-05-21 17:40:54 -04:00
Will PflegerandGitHub d4f55cee3c fix(deps): upgrade getrandom to 0.4 with fill() rename (#704) 2026-05-21 17:40:18 -04:00
tlongwell-blockandGitHub 962dd7dced feat(sprout-agent): auto-fallback to Databricks OAuth (#699)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
2026-05-21 13:05:58 -04:00
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
fa9e26fa5c feat(sprout-agent): Databricks provider with OAuth 2.0 PKCE auth (#698)
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-21 12:08:24 -04:00
benthecarmanandGitHub 300b51b02a Add Ubuntu desktop release artifacts (#693)
Signed-off-by: benthecarman <benthecarman@live.com>
v0.0.17
2026-05-21 10:09:28 -04:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1220e9938a chore(deps): update all non-major dependencies (#650)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:26:47 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
f7eae0a6cf chore(deps): update dependency nostr-tools to v2.23.5 (#681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 01:24:40 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
740d2545ea chore(deps): update tanstack-router monorepo (#659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:10:05 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
e08a971abf chore(deps): update rust crate dashmap to v6.2.1 (#652)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:09:12 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
9df214d43a chore(deps): update rust crate tower-http to v0.6.11 (#647)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-20 23:08:56 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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