Add a Fountain engine: fountain acp as an ACP driver - #1
Closed
jhgaylor wants to merge 2 commits into
Closed
Conversation
Fountain (BinaryBourbon/fountain) runs agents in sandboxes on a hosted instance; its CLI's `fountain acp` speaks the Agent Client Protocol on stdio, so it slots into the existing ACP driver core as one more support (server/drivers/acp/fountain.ts). Three things are different from every other ACP harness, and the support encodes each: - The model picker chooses a Fountain *agent*: an agent already carries its model, runtime, skills, MCP servers and environment. The catalog is `fountain agent list --json` filtered to ACP-capable runtimes, and the pick becomes `fountain acp --agent <id>`. A failed listing keeps the last catalog instead of emptying the picker. - The ACP session id is the Fountain conversation id, so the resume cursor core.ts already stores survives restarts and machines. - `fountain acp` ignores mcpServers/cwd (the agent runs elsewhere), so the support declares no MCP integrations. That needed a small core hook — AcpSupport.mcp — so a bot is never told it has a computer or peers its driver cannot mount. spawnArgs also now receives the child env, so per-instance knobs (FOUNTAIN_ACP_VAULT / _ENVIRONMENT → --vault / --environment) can become flags. Credentials stay the CLI's: sign-in is probed with `fountain auth whoami` (or trusted from FOUNTAIN_API_KEY), and no authenticate RPC is sent — the adapter advertises none when the CLI is signed in. Registered in builtIn.ts and the default fleet as a custom-only engine beside qwen/hermes, with a provider mark, docs/fountain.md, and a test file that runs the driver against the shared fake ACP CLI (argv, env plumbing, catalog, sign-in probe, canonical event sequence). Verified live against a real instance: 24-agent catalog, one turn streamed to turn.completed, the conversation visible in `fountain conv list`. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
access: "custom" routes the picker to the local-models (inject) pane, where a catalog of hosted agents never lists — the picker showed "No local models found". The agents run on a hosted instance and the catalog is a real one, so the engine is subscription/cloud-rail like claude and codex. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Owner
Author
|
Superseded by upstream PR milind-soni#245 (same branch). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Fountain as an OpenMausBot engine. Fountain runs agents in sandboxes on a hosted instance; its CLI's
fountain acpspeaks ACP on stdio, so this is one moreAcpSupporton the existing core (server/drivers/acp/fountain.ts).How it maps
fountain agent list --json, ACP-capable runtimes only) →fountain acp --agent <id>. A failed listing keeps the last catalog.session/loadreplays from the server).fountain acpignoresmcpServers/cwd, so the support declares no MCP integrations. New core hookAcpSupport.mcp(defaults to today's all-true) makes that possible;spawnArgsnow also receives the child env soFOUNTAIN_ACP_VAULT/FOUNTAIN_ACP_ENVIRONMENTbecome--vault/--environmentper instance.fountain auth whoami(or trusted fromFOUNTAIN_API_KEY); noauthenticateRPC is sent.Registered in
builtIn.ts+ default fleet as custom-only (beside qwen/hermes), provider mark,docs/fountain.md.Tests:
server/drivers/acp/fountain.test.ts(21) against the shared fake ACP CLI — catalog parsing, argv/env plumbing, sign-in probe, canonical event sequence. Fullvitest run server/784 passed;pnpm typecheckclean. Verified live against a real instance withserver/testing/live-fountain.ts: 24-agent catalog, one turn streamed toturn.completed, conversation visible infountain conv list.Not covered (by design, documented): approval cards (fountain#643 —
fountain acpdoesn't forward permission requests yet), computer/connectors/peer comms, effort control.🤖 Generated with Claude Code