@managoat/fountain-sdk 1.25.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -11,6 +11,13 @@ server releases.
11
11
 
12
12
  ---
13
13
 
14
+ ## [1.26.0] — 2026-09-10
15
+
16
+ ### Changed
17
+
18
+ - Generated types carry an agent's `runtime_command`, the shell line the new `acp` runtime launches inside the sandbox, and `acp` joins the runtime enum.
19
+ - `Agent["model"]` is `string | null`, and `AgentRequest["model"]` and `AgentUpdate["model"]` are optional and nullable. An `acp` agent needs no model, and clearing one is how an existing agent converts to that runtime. Code that assumed a string needs a null check.
20
+
14
21
  ## [1.25.0] — 2026-09-10
15
22
 
16
23
  ### Changed
@@ -2585,15 +2585,17 @@ export interface components {
2585
2585
  metadata?: {
2586
2586
  [key: string]: unknown;
2587
2587
  };
2588
- /** @description Canonical provider/model_id (e.g. anthropic/claude-sonnet-4-6). The provider must match the runtime — anthropic for claude, openai for codex, google for gemini; opencode accepts any of the three. Other providers are rejected: Fountain has no credentials to export for them. The model id is not checked against a list, so a newly released model works without a Fountain release. The isolated fountain-fixture runtime is the exception: it accepts only fixture/deterministic-v1. */
2589
- model: string;
2588
+ /** @description Canonical provider/model_id (e.g. anthropic/claude-sonnet-4-6). The provider must match the runtime — anthropic for claude, openai for codex, google for gemini; opencode accepts any of the three. Other providers are rejected: Fountain has no credentials to export for them. The model id is not checked against a list, so a newly released model works without a Fountain release. The isolated fountain-fixture runtime is the exception: it accepts only fixture/deterministic-v1. Null on the acp runtime, which resolves no inference credential and reads no model. */
2589
+ model: string | null;
2590
2590
  name: string;
2591
2591
  /** @description Per-tool permission policy: a map of key to verdict, plus an optional "default" key. A key is matched against the tool card's title first and then ACP's kind (execute, edit, read, fetch, …); prefer a kind, because claude titles a tool call with the command it is about to run. Unset keys fall back to the default, and an unset default is auto_allow — today's behaviour. "ask" holds the tool until a human answers it on the conversation stream, and denies if nobody does before the timeout. A runtime that never asks (opencode) refuses anything stricter than auto_allow with 422 permission_policy_unenforceable. */
2592
2592
  permission_policy?: {
2593
2593
  [key: string]: "auto_allow" | "ask" | "auto_deny";
2594
2594
  } | null;
2595
2595
  /** @enum {string} */
2596
- runtime: "claude" | "codex" | "gemini" | "opencode" | "fountain-fixture";
2596
+ runtime: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
2597
+ /** @description The command the acp runtime launches inside the sandbox, as a shell line resolved there (for example `chant acp`). Required when runtime is acp, and rejected on every other runtime, which resolves its own executable. A free string by design: it runs under the same isolation as an environment's setup script. */
2598
+ runtime_command?: string | null;
2597
2599
  /**
2598
2600
  * @description Where a conversation of this agent runs by default (ADR 0023). ephemeral: a sandbox per conversation, reclaimed with it. persistent: one sandbox per agent identity (agent, environment, vault) — the agent's computer — that every conversation of that identity lands on and shares; it survives a conversation ending and is parked, not destroyed, at the ceiling. A launch may name the other with sandbox_mode on POST /api/conversations.
2599
2601
  * @enum {string}
@@ -2639,14 +2641,16 @@ export interface components {
2639
2641
  metadata?: {
2640
2642
  [key: string]: unknown;
2641
2643
  };
2642
- model: string;
2644
+ model?: string | null;
2643
2645
  name: string;
2644
2646
  /** @description Per-tool permission policy: a map of key to verdict, plus an optional "default" key. A key is matched against the tool card's title first and then ACP's kind (execute, edit, read, fetch, …); prefer a kind, because claude titles a tool call with the command it is about to run. Unset keys fall back to the default, and an unset default is auto_allow. "ask" holds the tool until a human answers it on the conversation stream, and denies if nobody does before the timeout. A conversation may narrow this at launch, never widen it. A runtime that never asks (opencode) refuses anything stricter than auto_allow with 422 permission_policy_unenforceable. */
2645
2647
  permission_policy?: {
2646
2648
  [key: string]: "auto_allow" | "ask" | "auto_deny";
2647
2649
  } | null;
2648
2650
  /** @enum {string} */
2649
- runtime: "claude" | "codex" | "gemini" | "opencode" | "fountain-fixture";
2651
+ runtime: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
2652
+ /** @description The command the acp runtime launches inside the sandbox, as a shell line resolved there (for example `chant acp`). Required when runtime is acp, and rejected on every other runtime, which resolves its own executable. A free string by design: it runs under the same isolation as an environment's setup script. */
2653
+ runtime_command?: string | null;
2650
2654
  /**
2651
2655
  * @description Where a conversation of this agent runs by default (ADR 0023). ephemeral: a sandbox per conversation, reclaimed with it. persistent: one sandbox per agent identity (agent, environment, vault) — the agent's computer — that every conversation of that identity lands on and shares; it survives a conversation ending and is parked, not destroyed, at the ceiling. A launch may name the other with sandbox_mode on POST /api/conversations.
2652
2656
  * @enum {string}
@@ -2689,14 +2693,16 @@ export interface components {
2689
2693
  metadata?: {
2690
2694
  [key: string]: unknown;
2691
2695
  };
2692
- model?: string;
2696
+ model?: string | null;
2693
2697
  name?: string;
2694
2698
  /** @description Per-tool permission policy: a map of key to verdict, plus an optional "default" key. A key is matched against the tool card's title first and then ACP's kind (execute, edit, read, fetch, …); prefer a kind, because claude titles a tool call with the command it is about to run. Unset keys fall back to the default, and an unset default is auto_allow. "ask" holds the tool until a human answers it on the conversation stream, and denies if nobody does before the timeout. A conversation may narrow this at launch, never widen it. A runtime that never asks (opencode) refuses anything stricter than auto_allow with 422 permission_policy_unenforceable. */
2695
2699
  permission_policy?: {
2696
2700
  [key: string]: "auto_allow" | "ask" | "auto_deny";
2697
2701
  } | null;
2698
2702
  /** @enum {string} */
2699
- runtime?: "claude" | "codex" | "gemini" | "opencode" | "fountain-fixture";
2703
+ runtime?: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
2704
+ /** @description The command the acp runtime launches inside the sandbox, as a shell line resolved there (for example `chant acp`). Required when runtime is acp, and rejected on every other runtime, which resolves its own executable. A free string by design: it runs under the same isolation as an environment's setup script. */
2705
+ runtime_command?: string | null;
2700
2706
  /**
2701
2707
  * @description Where a conversation of this agent runs by default (ADR 0023). ephemeral: a sandbox per conversation, reclaimed with it. persistent: one sandbox per agent identity (agent, environment, vault) — the agent's computer — that every conversation of that identity lands on and shares; it survives a conversation ending and is parked, not destroyed, at the ceiling. A launch may name the other with sandbox_mode on POST /api/conversations.
2702
2708
  * @enum {string}
@@ -3509,7 +3515,7 @@ export interface components {
3509
3515
  [key: string]: "auto_allow" | "ask" | "auto_deny";
3510
3516
  } | null;
3511
3517
  /** @enum {string} */
3512
- runtime: "claude" | "codex" | "gemini" | "opencode" | "fountain-fixture";
3518
+ runtime: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
3513
3519
  runtime_session_id?: string | null;
3514
3520
  sandbox?: components["schemas"]["Sandbox"] | null;
3515
3521
  /**
@@ -4173,7 +4179,7 @@ export interface components {
4173
4179
  /** @description True while this conversation is running a turn on the machine. */
4174
4180
  mid_turn: boolean;
4175
4181
  /** @enum {string} */
4176
- runtime?: "claude" | "codex" | "gemini" | "opencode" | "fountain-fixture";
4182
+ runtime?: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
4177
4183
  /** @enum {string} */
4178
4184
  status: "pending" | "running" | "idle" | "failed" | "terminated";
4179
4185
  title?: string | null;
package/dist/http.d.ts CHANGED
@@ -15,7 +15,7 @@ export interface RequestOptions {
15
15
  * this string is already what Fountain's request logs are keyed on. The
16
16
  * version half is asserted against `package.json` by a test.
17
17
  */
18
- export declare const USER_AGENT = "fountain-sdk-js/1.25.0";
18
+ export declare const USER_AGENT = "fountain-sdk-js/1.26.0";
19
19
  export declare class HttpClient {
20
20
  readonly config: ResolvedConfig;
21
21
  private readonly fetchImpl;
package/dist/http.js CHANGED
@@ -5,7 +5,7 @@ import { AuthError, ConnectionError, FountainError, errorForStatus } from "./err
5
5
  * this string is already what Fountain's request logs are keyed on. The
6
6
  * version half is asserted against `package.json` by a test.
7
7
  */
8
- export const USER_AGENT = "fountain-sdk-js/1.25.0";
8
+ export const USER_AGENT = "fountain-sdk-js/1.26.0";
9
9
  /**
10
10
  * The thin layer everything else is built on: one bearer token, JSON in and
11
11
  * out, and errors that say which call failed. `Fountain#api` exposes it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@managoat/fountain-sdk",
3
- "version": "1.25.0",
3
+ "version": "1.26.0",
4
4
  "description": "Run a coding agent on a real computer, with your repos and your credentials, in one call.",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {