@managoat/fountain-sdk 6.4.0 → 6.5.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,15 @@ server releases.
11
11
 
12
12
  ---
13
13
 
14
+ ## [6.5.0] - 2026-10-02
15
+
16
+ ### Added
17
+
18
+ - The generated types carry `snapshot_at` on `SandboxListing`, `SandboxFile`,
19
+ `SandboxDiff` and `SandboxStatus` (#2552, ADR 0063). It is set when the
20
+ sandbox is parked and the read was answered from the snapshot its park
21
+ took, and absent on a live read.
22
+
14
23
  ## [6.4.0] - 2026-10-02
15
24
 
16
25
  ### Added
@@ -1987,7 +1987,7 @@ export interface paths {
1987
1987
  };
1988
1988
  /**
1989
1989
  * git diff on a sandbox
1990
- * @description `git diff` of the repository containing `path` (default: the agent's working directory), redacted like a file read. `staged=true` compares the index (`--cached`); `ref` compares against a commit, branch or tag (`422 invalid_ref` for a malformed one, `404 ref_not_found` for an unknown one). A directory outside any repository is `422 not_a_repository`. Full scope.
1990
+ * @description `git diff` of the repository containing `path` (default: the agent's working directory), redacted like a file read. `staged=true` compares the index (`--cached`); `ref` compares against a commit, branch or tag (`422 invalid_ref` for a malformed one, `404 ref_not_found` for an unknown one). A directory outside any repository is `422 not_a_repository`. Full scope. A parked (`suspended`) sandbox is not woken: it answers from the snapshot its park took, with `snapshot_at` saying when, wherever that snapshot holds the answer — the git repositories under the working directory, their files up to 256 KiB, their listings, and the default diff and status (ADR 0063). Anything else on a parked sandbox, or a parked sandbox with no snapshot, is `409 sandbox_not_ready`.
1991
1991
  */
1992
1992
  get: operations["FountainWeb.SandboxFilesController.diff"];
1993
1993
  put?: never;
@@ -2007,7 +2007,7 @@ export interface paths {
2007
2007
  };
2008
2008
  /**
2009
2009
  * Read a file on a sandbox
2010
- * @description The bytes of one file, redacted: every value of the sandbox's environment and vault is replaced with `[REDACTED]`, as in the transcript. `content` is the text when it is valid UTF-8 (`encoding: utf-8`) and base64 otherwise (`encoding: base64`). `size` is the whole file; `truncated` says whether `content` is short of it, which happens when the file is longer than `max_bytes` and also when redaction grows what was read past that cap. Full scope.
2010
+ * @description The bytes of one file, redacted: every value of the sandbox's environment and vault is replaced with `[REDACTED]`, as in the transcript. `content` is the text when it is valid UTF-8 (`encoding: utf-8`) and base64 otherwise (`encoding: base64`). `size` is the whole file; `truncated` says whether `content` is short of it, which happens when the file is longer than `max_bytes` and also when redaction grows what was read past that cap. Full scope. A parked (`suspended`) sandbox is not woken: it answers from the snapshot its park took, with `snapshot_at` saying when, wherever that snapshot holds the answer — the git repositories under the working directory, their files up to 256 KiB, their listings, and the default diff and status (ADR 0063). Anything else on a parked sandbox, or a parked sandbox with no snapshot, is `409 sandbox_not_ready`.
2011
2011
  */
2012
2012
  get: operations["FountainWeb.SandboxFilesController.show"];
2013
2013
  put?: never;
@@ -2027,7 +2027,7 @@ export interface paths {
2027
2027
  };
2028
2028
  /**
2029
2029
  * List a directory on a sandbox
2030
- * @description The entries of one directory, directories first then by name. Without `path`, the agent's working directory. Only a `ready` sandbox answers (`409 sandbox_not_ready`): a parked one is not woken for a read. A sandbox being parked or destroyed is `503 sandbox_unavailable`; retry after the `Retry-After`. Full scope.
2030
+ * @description The entries of one directory, directories first then by name. Without `path`, the agent's working directory. A sandbox being parked or destroyed is `503 sandbox_unavailable`; retry after the `Retry-After`. Full scope. A parked (`suspended`) sandbox is not woken: it answers from the snapshot its park took, with `snapshot_at` saying when, wherever that snapshot holds the answer — the git repositories under the working directory, their files up to 256 KiB, their listings, and the default diff and status (ADR 0063). Anything else on a parked sandbox, or a parked sandbox with no snapshot, is `409 sandbox_not_ready`.
2031
2031
  */
2032
2032
  get: operations["FountainWeb.SandboxFilesController.index"];
2033
2033
  put?: never;
@@ -2047,7 +2047,7 @@ export interface paths {
2047
2047
  };
2048
2048
  /**
2049
2049
  * git status on a sandbox
2050
- * @description `git status` of the repository containing `path` (default: the agent's working directory), one entry per changed path. This is the view that shows a file the agent created and never staged: `/diff` compares tracked content, so an untracked file is invisible to it whatever flags it is given. Entries cover the whole repository whatever `path` names inside it, and each entry's `path` is relative to `repo_root`. `index` and `worktree` are git's two porcelain columns read separately, so a file staged and then edited again reports a state in both; an untracked file reads `untracked` in both. `renamed_from` is set only where that side is a rename or a copy. `branch` is null on a detached HEAD. A directory outside any repository is `422 not_a_repository`. Full scope.
2050
+ * @description `git status` of the repository containing `path` (default: the agent's working directory), one entry per changed path. This is the view that shows a file the agent created and never staged: `/diff` compares tracked content, so an untracked file is invisible to it whatever flags it is given. Entries cover the whole repository whatever `path` names inside it, and each entry's `path` is relative to `repo_root`. `index` and `worktree` are git's two porcelain columns read separately, so a file staged and then edited again reports a state in both; an untracked file reads `untracked` in both. `renamed_from` is set only where that side is a rename or a copy. `branch` is null on a detached HEAD. A directory outside any repository is `422 not_a_repository`. Full scope. A parked (`suspended`) sandbox is not woken: it answers from the snapshot its park took, with `snapshot_at` saying when, wherever that snapshot holds the answer — the git repositories under the working directory, their files up to 256 KiB, their listings, and the default diff and status (ADR 0063). Anything else on a parked sandbox, or a parked sandbox with no snapshot, is `409 sandbox_not_ready`.
2051
2051
  */
2052
2052
  get: operations["FountainWeb.SandboxFilesController.git_status"];
2053
2053
  put?: never;
@@ -4808,6 +4808,11 @@ export interface components {
4808
4808
  ref?: string | null;
4809
4809
  /** @description The repository's top-level directory. */
4810
4810
  repo_root: string;
4811
+ /**
4812
+ * Format: date-time
4813
+ * @description Present when the sandbox is parked and this answer comes from the snapshot its park took (ADR 0063): the disk as of this instant, not now. Absent on a live read.
4814
+ */
4815
+ snapshot_at?: string | null;
4811
4816
  /** @description True when the index was diffed (`--cached`). */
4812
4817
  staged: boolean;
4813
4818
  /** @description True when `diff` is not the whole diff: either it is longer than `max_bytes`, or redaction grew what was read past it. False means `diff` is everything. */
@@ -4843,6 +4848,11 @@ export interface components {
4843
4848
  path: string;
4844
4849
  /** @description The whole file, in bytes. */
4845
4850
  size: number;
4851
+ /**
4852
+ * Format: date-time
4853
+ * @description Present when the sandbox is parked and this answer comes from the snapshot its park took (ADR 0063): the disk as of this instant, not now. Absent on a live read.
4854
+ */
4855
+ snapshot_at?: string | null;
4846
4856
  /** @description True when `content` is not the whole file: either the file is longer than `max_bytes`, or redaction grew what was read past it. False means `content` is everything. */
4847
4857
  truncated: boolean;
4848
4858
  };
@@ -4862,6 +4872,11 @@ export interface components {
4862
4872
  entries: components["schemas"]["SandboxEntry"][];
4863
4873
  /** @description The directory listed, absolute. */
4864
4874
  path: string;
4875
+ /**
4876
+ * Format: date-time
4877
+ * @description Present when the sandbox is parked and this answer comes from the snapshot its park took (ADR 0063): the disk as of this instant, not now. Absent on a live read.
4878
+ */
4879
+ snapshot_at?: string | null;
4865
4880
  /** @description True when the directory holds more entries than were returned. */
4866
4881
  truncated: boolean;
4867
4882
  };
@@ -4918,6 +4933,11 @@ export interface components {
4918
4933
  path: string;
4919
4934
  /** @description The repository's top-level directory. */
4920
4935
  repo_root: string;
4936
+ /**
4937
+ * Format: date-time
4938
+ * @description Present when the sandbox is parked and this answer comes from the snapshot its park took (ADR 0063): the disk as of this instant, not now. Absent on a live read.
4939
+ */
4940
+ snapshot_at?: string | null;
4921
4941
  /** @description True when the repository holds more changes than were returned. */
4922
4942
  truncated: boolean;
4923
4943
  /**
@@ -15142,7 +15162,7 @@ export interface operations {
15142
15162
  "application/json": components["schemas"]["NegotiationError"];
15143
15163
  };
15144
15164
  };
15145
- /** @description Sandbox is not ready */
15165
+ /** @description Sandbox is not ready, and a parked one's snapshot cannot answer this read */
15146
15166
  409: {
15147
15167
  headers: {
15148
15168
  [name: string]: unknown;
@@ -15241,7 +15261,7 @@ export interface operations {
15241
15261
  "application/json": components["schemas"]["NegotiationError"];
15242
15262
  };
15243
15263
  };
15244
- /** @description Sandbox is not ready */
15264
+ /** @description Sandbox is not ready, and a parked one's snapshot cannot answer this read */
15245
15265
  409: {
15246
15266
  headers: {
15247
15267
  [name: string]: unknown;
@@ -15338,7 +15358,7 @@ export interface operations {
15338
15358
  "application/json": components["schemas"]["NegotiationError"];
15339
15359
  };
15340
15360
  };
15341
- /** @description Sandbox is not ready */
15361
+ /** @description Sandbox is not ready, and a parked one's snapshot cannot answer this read */
15342
15362
  409: {
15343
15363
  headers: {
15344
15364
  [name: string]: unknown;
@@ -15437,7 +15457,7 @@ export interface operations {
15437
15457
  "application/json": components["schemas"]["NegotiationError"];
15438
15458
  };
15439
15459
  };
15440
- /** @description Sandbox is not ready */
15460
+ /** @description Sandbox is not ready, and a parked one's snapshot cannot answer this read */
15441
15461
  409: {
15442
15462
  headers: {
15443
15463
  [name: string]: unknown;
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/6.4.0";
18
+ export declare const USER_AGENT = "fountain-sdk-js/6.5.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/6.4.0";
8
+ export const USER_AGENT = "fountain-sdk-js/6.5.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": "6.4.0",
3
+ "version": "6.5.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": {