@managoat/fountain-sdk 1.26.0 → 1.28.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 +24 -0
- package/dist/client.d.ts +32 -6
- package/dist/client.js +36 -6
- package/dist/client.js.map +1 -1
- package/dist/conversation.d.ts +8 -0
- package/dist/conversation.js +10 -0
- package/dist/conversation.js.map +1 -1
- package/dist/generated/openapi.d.ts +863 -43
- package/dist/http.d.ts +2 -2
- package/dist/http.js +10 -1
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +4 -0
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1157,7 +1157,7 @@ export interface paths {
|
|
|
1157
1157
|
put?: never;
|
|
1158
1158
|
/**
|
|
1159
1159
|
* Start a conversation
|
|
1160
|
-
* @description Creates a sandbox + conversation pair, starts the runtime in a fresh sprite, and (if `prompt` is supplied) sends it as turn 1. With `channel_id`, resumes the latest live conversation already bound to that channel for the same agent and vault (200, `meta.resumed: true`) instead of opening a new one (201). Pass `X-Fountain-Parent-Conversation-Id` header to record which conversation spawned this one. Legacy `X-AoD-Parent-Conversation-Id` is still accepted for sprites provisioned before the rename.
|
|
1160
|
+
* @description Creates a sandbox + conversation pair, starts the runtime in a fresh sprite, and (if `prompt` is supplied) sends it as turn 1. With `channel_id`, resumes the latest live conversation already bound to that channel for the same agent and vault (200, `meta.resumed: true`) instead of opening a new one (201). `labels` (#1637) are stamped on the new conversation; with `channel_id`, a resume merges them into the conversation it hands back, and a sandbox callback token resuming a conversation it was not minted for is refused with 403. Pass `X-Fountain-Parent-Conversation-Id` header to record which conversation spawned this one. Legacy `X-AoD-Parent-Conversation-Id` is still accepted for sprites provisioned before the rename.
|
|
1161
1161
|
*/
|
|
1162
1162
|
post: operations["FountainWeb.ConversationController.create"];
|
|
1163
1163
|
delete?: never;
|
|
@@ -1228,6 +1228,30 @@ export interface paths {
|
|
|
1228
1228
|
patch?: never;
|
|
1229
1229
|
trace?: never;
|
|
1230
1230
|
};
|
|
1231
|
+
"/api/conversations/{conversation_id}/labels": {
|
|
1232
|
+
parameters: {
|
|
1233
|
+
query?: never;
|
|
1234
|
+
header?: never;
|
|
1235
|
+
path?: never;
|
|
1236
|
+
cookie?: never;
|
|
1237
|
+
};
|
|
1238
|
+
get?: never;
|
|
1239
|
+
put?: never;
|
|
1240
|
+
post?: never;
|
|
1241
|
+
delete?: never;
|
|
1242
|
+
options?: never;
|
|
1243
|
+
head?: never;
|
|
1244
|
+
/**
|
|
1245
|
+
* Set a conversation's labels
|
|
1246
|
+
* @description Merges `labels` into the conversation's own (#1637). A key the body does not name is left alone, and a key whose value is `null` is removed, so a run can stamp one outcome without reading the rest first.
|
|
1247
|
+
*
|
|
1248
|
+
* At most 32 labels survive the merge; a key is at most 64 bytes and a value at most 256 bytes. A 422 names the offending key.
|
|
1249
|
+
*
|
|
1250
|
+
* The account's own key may label any of its conversations. A sandbox callback token may label **only the conversation it was minted for**; another id is refused with 403 `sprite_may_not_label_another_conversation`. An agent inside a turn does not need this route at all: it sends the `_fountain/labels` ACP extension update instead.
|
|
1251
|
+
*/
|
|
1252
|
+
patch: operations["FountainWeb.ConversationController.labels"];
|
|
1253
|
+
trace?: never;
|
|
1254
|
+
};
|
|
1231
1255
|
"/api/conversations/{conversation_id}/prompts": {
|
|
1232
1256
|
parameters: {
|
|
1233
1257
|
query?: never;
|
|
@@ -1514,6 +1538,55 @@ export interface paths {
|
|
|
1514
1538
|
patch?: never;
|
|
1515
1539
|
trace?: never;
|
|
1516
1540
|
};
|
|
1541
|
+
"/api/oauth/clients": {
|
|
1542
|
+
parameters: {
|
|
1543
|
+
query?: never;
|
|
1544
|
+
header?: never;
|
|
1545
|
+
path?: never;
|
|
1546
|
+
cookie?: never;
|
|
1547
|
+
};
|
|
1548
|
+
/**
|
|
1549
|
+
* List OAuth clients
|
|
1550
|
+
* @description The OAuth clients this account registered. Each one is in development mode until an operator publishes it, which means it signs in its owner and refuses every other account.
|
|
1551
|
+
*/
|
|
1552
|
+
get: operations["FountainWeb.OAuthClientController.index"];
|
|
1553
|
+
put?: never;
|
|
1554
|
+
/**
|
|
1555
|
+
* Register an OAuth client
|
|
1556
|
+
* @description Register an app that can offer "Sign in with Fountain". The response carries the generated `client_id` to put in the app. Redirect URIs match exactly, must be https unless they are loopback, and a loopback URI matches on any port. The client starts in development mode, so it signs in nobody but you. A sandbox's public HTTPS URL is valid.
|
|
1557
|
+
*/
|
|
1558
|
+
post: operations["FountainWeb.OAuthClientController.create"];
|
|
1559
|
+
delete?: never;
|
|
1560
|
+
options?: never;
|
|
1561
|
+
head?: never;
|
|
1562
|
+
patch?: never;
|
|
1563
|
+
trace?: never;
|
|
1564
|
+
};
|
|
1565
|
+
"/api/oauth/clients/{id}": {
|
|
1566
|
+
parameters: {
|
|
1567
|
+
query?: never;
|
|
1568
|
+
header?: never;
|
|
1569
|
+
path?: never;
|
|
1570
|
+
cookie?: never;
|
|
1571
|
+
};
|
|
1572
|
+
/** Get an OAuth client */
|
|
1573
|
+
get: operations["FountainWeb.OAuthClientController.show"];
|
|
1574
|
+
put?: never;
|
|
1575
|
+
post?: never;
|
|
1576
|
+
/**
|
|
1577
|
+
* Unregister an OAuth client
|
|
1578
|
+
* @description Deleting a client stops new sign-ins through it. Keys it already issued are ordinary API keys and outlive it — revoke those under the API keys endpoint. A published client can only be removed by an operator, because every account signs in through it.
|
|
1579
|
+
*/
|
|
1580
|
+
delete: operations["FountainWeb.OAuthClientController.delete"];
|
|
1581
|
+
options?: never;
|
|
1582
|
+
head?: never;
|
|
1583
|
+
/**
|
|
1584
|
+
* Change an OAuth client
|
|
1585
|
+
* @description Rename the client or replace its redirect URIs. `client_id` never changes. Publishing is not a self-serve operation, and a published client can only be changed by an operator.
|
|
1586
|
+
*/
|
|
1587
|
+
patch: operations["FountainWeb.OAuthClientController.update"];
|
|
1588
|
+
trace?: never;
|
|
1589
|
+
};
|
|
1517
1590
|
"/api/oauth/revoke": {
|
|
1518
1591
|
parameters: {
|
|
1519
1592
|
query?: never;
|
|
@@ -1684,7 +1757,7 @@ export interface paths {
|
|
|
1684
1757
|
};
|
|
1685
1758
|
/**
|
|
1686
1759
|
* Read a file on a sandbox
|
|
1687
|
-
* @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`
|
|
1760
|
+
* @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.
|
|
1688
1761
|
*/
|
|
1689
1762
|
get: operations["FountainWeb.SandboxFilesController.show"];
|
|
1690
1763
|
put?: never;
|
|
@@ -1715,6 +1788,26 @@ export interface paths {
|
|
|
1715
1788
|
patch?: never;
|
|
1716
1789
|
trace?: never;
|
|
1717
1790
|
};
|
|
1791
|
+
"/api/sandboxes/{sandbox_id}/git-status": {
|
|
1792
|
+
parameters: {
|
|
1793
|
+
query?: never;
|
|
1794
|
+
header?: never;
|
|
1795
|
+
path?: never;
|
|
1796
|
+
cookie?: never;
|
|
1797
|
+
};
|
|
1798
|
+
/**
|
|
1799
|
+
* git status on a sandbox
|
|
1800
|
+
* @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.
|
|
1801
|
+
*/
|
|
1802
|
+
get: operations["FountainWeb.SandboxFilesController.git_status"];
|
|
1803
|
+
put?: never;
|
|
1804
|
+
post?: never;
|
|
1805
|
+
delete?: never;
|
|
1806
|
+
options?: never;
|
|
1807
|
+
head?: never;
|
|
1808
|
+
patch?: never;
|
|
1809
|
+
trace?: never;
|
|
1810
|
+
};
|
|
1718
1811
|
"/api/search": {
|
|
1719
1812
|
parameters: {
|
|
1720
1813
|
query?: never;
|
|
@@ -2008,6 +2101,8 @@ export interface paths {
|
|
|
2008
2101
|
/**
|
|
2009
2102
|
* Message a teammate
|
|
2010
2103
|
* @description A turn on the teammate's conversation. A parked or reaped sandbox wakes; a conversation past resuming is replaced by a fresh one under the same binding, seeded with this message, so the response names the conversation the message went to. 400 `conversation_busy` while the previous turn is still running (the same shape as `POST /api/conversations/:id/prompts`), 503 while the computer is still starting.
|
|
2104
|
+
*
|
|
2105
|
+
* `labels` merges onto the conversation the message lands on (#1637), before the turn is queued, so a label the limits refuse leaves the message unsent.
|
|
2011
2106
|
*/
|
|
2012
2107
|
post: operations["FountainWeb.TeamController.message"];
|
|
2013
2108
|
delete?: never;
|
|
@@ -2589,9 +2684,12 @@ export interface components {
|
|
|
2589
2684
|
model: string | null;
|
|
2590
2685
|
name: string;
|
|
2591
2686
|
/** @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
|
-
permission_policy?: {
|
|
2593
|
-
|
|
2594
|
-
|
|
2687
|
+
permission_policy?: ({
|
|
2688
|
+
/** @description Seconds a permission request that outlived its turn waits before it is denied (#1635). Names no tool, so it is the one key whose value is a number rather than a verdict, which is why the value schema below is a union. Absent leaves the global ask timeout. A request may shorten it with `_meta.fountain.timeout` on its own session/request_permission, and may not lengthen it. A launch may only shorten what the agent set, or the global ask timeout where the agent set nothing. Capped at a year, which is where the deadline stops fitting in a timestamp rather than a limit on how long a wait is useful. */
|
|
2689
|
+
ask_timeout?: number;
|
|
2690
|
+
} & {
|
|
2691
|
+
[key: string]: ("auto_allow" | "ask" | "auto_deny") | number;
|
|
2692
|
+
}) | null;
|
|
2595
2693
|
/** @enum {string} */
|
|
2596
2694
|
runtime: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
|
|
2597
2695
|
/** @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. */
|
|
@@ -2644,9 +2742,12 @@ export interface components {
|
|
|
2644
2742
|
model?: string | null;
|
|
2645
2743
|
name: string;
|
|
2646
2744
|
/** @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. */
|
|
2647
|
-
permission_policy?: {
|
|
2648
|
-
|
|
2649
|
-
|
|
2745
|
+
permission_policy?: ({
|
|
2746
|
+
/** @description Seconds a permission request that outlived its turn waits before it is denied (#1635). Names no tool, so it is the one key whose value is a number rather than a verdict, which is why the value schema below is a union. Absent leaves the global ask timeout. A request may shorten it with `_meta.fountain.timeout` on its own session/request_permission, and may not lengthen it. A launch may only shorten what the agent set, or the global ask timeout where the agent set nothing. Capped at a year, which is where the deadline stops fitting in a timestamp rather than a limit on how long a wait is useful. */
|
|
2747
|
+
ask_timeout?: number;
|
|
2748
|
+
} & {
|
|
2749
|
+
[key: string]: ("auto_allow" | "ask" | "auto_deny") | number;
|
|
2750
|
+
}) | null;
|
|
2650
2751
|
/** @enum {string} */
|
|
2651
2752
|
runtime: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
|
|
2652
2753
|
/** @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. */
|
|
@@ -2696,9 +2797,12 @@ export interface components {
|
|
|
2696
2797
|
model?: string | null;
|
|
2697
2798
|
name?: string;
|
|
2698
2799
|
/** @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. */
|
|
2699
|
-
permission_policy?: {
|
|
2700
|
-
|
|
2701
|
-
|
|
2800
|
+
permission_policy?: ({
|
|
2801
|
+
/** @description Seconds a permission request that outlived its turn waits before it is denied (#1635). Names no tool, so it is the one key whose value is a number rather than a verdict, which is why the value schema below is a union. Absent leaves the global ask timeout. A request may shorten it with `_meta.fountain.timeout` on its own session/request_permission, and may not lengthen it. A launch may only shorten what the agent set, or the global ask timeout where the agent set nothing. Capped at a year, which is where the deadline stops fitting in a timestamp rather than a limit on how long a wait is useful. */
|
|
2802
|
+
ask_timeout?: number;
|
|
2803
|
+
} & {
|
|
2804
|
+
[key: string]: ("auto_allow" | "ask" | "auto_deny") | number;
|
|
2805
|
+
}) | null;
|
|
2702
2806
|
/** @enum {string} */
|
|
2703
2807
|
runtime?: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
|
|
2704
2808
|
/** @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. */
|
|
@@ -3498,6 +3602,10 @@ export interface components {
|
|
|
3498
3602
|
id: string;
|
|
3499
3603
|
/** Format: date-time */
|
|
3500
3604
|
inserted_at?: string;
|
|
3605
|
+
/** @description Free-form key/value strings on the conversation. A program stamps its own run with them (`env=prod`, `drift=true`) and `GET /api/conversations?label=env:prod` filters on them. At most 32 entries; a key is at most 64 bytes and a value at most 256 bytes. Always an object, empty when nothing set one. */
|
|
3606
|
+
labels?: {
|
|
3607
|
+
[key: string]: string;
|
|
3608
|
+
};
|
|
3501
3609
|
/**
|
|
3502
3610
|
* Format: date-time
|
|
3503
3611
|
* @description Most recent runtime output, falling back to creation time. Stage events (reconnects, sandbox lifecycle) do not count.
|
|
@@ -3511,9 +3619,12 @@ export interface components {
|
|
|
3511
3619
|
/** Format: uuid */
|
|
3512
3620
|
parent_conversation_id?: string | null;
|
|
3513
3621
|
/** @description The per-launch permission override this conversation was started with, or null if it had none. The policy actually in force is this merged with the agent's, taking the stricter of the two per tool. */
|
|
3514
|
-
permission_policy?: {
|
|
3515
|
-
|
|
3516
|
-
|
|
3622
|
+
permission_policy?: ({
|
|
3623
|
+
/** @description Seconds a permission request that outlived its turn waits before it is denied (#1635). Names no tool, so it is the one key whose value is a number rather than a verdict, which is why the value schema below is a union. Absent leaves the global ask timeout. A request may shorten it with `_meta.fountain.timeout` on its own session/request_permission, and may not lengthen it. A launch may only shorten what the agent set, or the global ask timeout where the agent set nothing. Capped at a year, which is where the deadline stops fitting in a timestamp rather than a limit on how long a wait is useful. */
|
|
3624
|
+
ask_timeout?: number;
|
|
3625
|
+
} & {
|
|
3626
|
+
[key: string]: ("auto_allow" | "ask" | "auto_deny") | number;
|
|
3627
|
+
}) | null;
|
|
3517
3628
|
/** @enum {string} */
|
|
3518
3629
|
runtime: "claude" | "codex" | "gemini" | "opencode" | "acp" | "fountain-fixture";
|
|
3519
3630
|
runtime_session_id?: string | null;
|
|
@@ -3553,14 +3664,23 @@ export interface components {
|
|
|
3553
3664
|
environment_id?: string | null;
|
|
3554
3665
|
/** @description With channel_id: skip the resume and open a new conversation (201), which then becomes the channel's binding. Sent by a chat harness relaying its owner's rotate command. Ignored without channel_id. */
|
|
3555
3666
|
fresh?: boolean | null;
|
|
3556
|
-
/** @description Optional images to attach to the initial prompt. */
|
|
3667
|
+
/** @description Optional images to attach to the initial prompt. They require that prompt: images with no opening text are refused with 422 invalid_prompt, and an image whose media_type is unsupported or whose decoded bytes are empty or over the 10MB ceiling is refused with 422 invalid_images. Both refusals happen before a sandbox is reserved. */
|
|
3557
3668
|
images?: components["schemas"]["ImageInput"][] | null;
|
|
3558
|
-
/** @description
|
|
3559
|
-
|
|
3560
|
-
[key: string]:
|
|
3669
|
+
/** @description Key/value strings to stamp on the conversation. At most 32 entries; a key is at most 64 bytes and a value at most 256 bytes, and a 422 names the offending key under `errors.labels`. With channel_id, a resume merges these into the conversation it hands back rather than dropping them. */
|
|
3670
|
+
labels?: {
|
|
3671
|
+
[key: string]: string;
|
|
3561
3672
|
} | null;
|
|
3562
|
-
/** @description
|
|
3673
|
+
/** @description Per-launch permission override (#939). Keys are matched against the tool card's title first and then ACP's kind (execute, edit, read, fetch, …); "default" covers the rest. Prefer a kind: claude titles a tool call with the command it is about to run, so a title matches one invocation only. Merged with the agent's own policy, taking the stricter of the two. It may only narrow: a policy that would loosen any tool is refused with 422 permission_policy_widens rather than silently clamped, and one the runtime never consults is refused with 422 permission_policy_unenforceable. */
|
|
3674
|
+
permission_policy?: ({
|
|
3675
|
+
/** @description Seconds a permission request that outlived its turn waits before it is denied (#1635). Names no tool, so it is the one key whose value is a number rather than a verdict, which is why the value schema below is a union. Absent leaves the global ask timeout. A request may shorten it with `_meta.fountain.timeout` on its own session/request_permission, and may not lengthen it. A launch may only shorten what the agent set, or the global ask timeout where the agent set nothing. Capped at a year, which is where the deadline stops fitting in a timestamp rather than a limit on how long a wait is useful. */
|
|
3676
|
+
ask_timeout?: number;
|
|
3677
|
+
} & {
|
|
3678
|
+
[key: string]: ("auto_allow" | "ask" | "auto_deny") | number;
|
|
3679
|
+
}) | null;
|
|
3680
|
+
/** @description Optional first turn prompt. A launch may open with no prompt at all, but a prompt that is present must carry words: blank and whitespace-only text is refused with 422 invalid_prompt, before the launch reserves a sandbox. */
|
|
3563
3681
|
prompt?: string;
|
|
3682
|
+
/** @description When a fresh start reaches the tenant or the fleet concurrency ceiling, wait in the bounded sandbox queue and return 202 with a SandboxRequest instead of 429 or 503 (ADR 0042). Starts carrying images or an explicit sandbox_id are never queued, and a full queue keeps the immediate error. */
|
|
3683
|
+
queue?: boolean | null;
|
|
3564
3684
|
/**
|
|
3565
3685
|
* @description none omits the sandbox Fountain credential on provision and every wake. Requires a fresh ephemeral sandbox; unavailable on attach or policy-changing channel resume.
|
|
3566
3686
|
* @enum {string}
|
|
@@ -3586,6 +3706,16 @@ export interface components {
|
|
|
3586
3706
|
*/
|
|
3587
3707
|
vault_id?: string | null;
|
|
3588
3708
|
};
|
|
3709
|
+
/**
|
|
3710
|
+
* ConversationLabelsRequest
|
|
3711
|
+
* @description Labels to merge into a conversation. A key not named is left alone; a key whose value is null is removed.
|
|
3712
|
+
*/
|
|
3713
|
+
ConversationLabelsRequest: {
|
|
3714
|
+
/** @description The pairs to merge. null removes a key. At most 32 entries survive the merge; a key is at most 64 bytes and a value at most 256 bytes. A 422 names the offending key under `errors.labels`. */
|
|
3715
|
+
labels: {
|
|
3716
|
+
[key: string]: string | null;
|
|
3717
|
+
};
|
|
3718
|
+
};
|
|
3589
3719
|
/** ConversationListResponse */
|
|
3590
3720
|
ConversationListResponse: {
|
|
3591
3721
|
data: components["schemas"]["Conversation"][];
|
|
@@ -3953,6 +4083,56 @@ export interface components {
|
|
|
3953
4083
|
detail: string;
|
|
3954
4084
|
};
|
|
3955
4085
|
};
|
|
4086
|
+
/**
|
|
4087
|
+
* OAuthClient
|
|
4088
|
+
* @description A tenant-owned OAuth client. Unpublished clients are in development mode and can sign in only their owner. Their redirect origins are also admitted by CORS.
|
|
4089
|
+
*/
|
|
4090
|
+
OAuthClient: {
|
|
4091
|
+
/** @description The client_id sent to /oauth/authorize. */
|
|
4092
|
+
client_id: string;
|
|
4093
|
+
/** Format: date-time */
|
|
4094
|
+
created_at: string;
|
|
4095
|
+
/** Format: uuid */
|
|
4096
|
+
id: string;
|
|
4097
|
+
/** @description Shown on the consent page. */
|
|
4098
|
+
name: string;
|
|
4099
|
+
/** @description Origins derived from redirect_uris and admitted by CORS. A loopback origin is admitted on any port, not only the port shown here. */
|
|
4100
|
+
origins: string[];
|
|
4101
|
+
/** @description False means development mode with owner-only sign-in. */
|
|
4102
|
+
published: boolean;
|
|
4103
|
+
/** @description Exact match, except that an unpublished loopback URI matches on any port. */
|
|
4104
|
+
redirect_uris: string[];
|
|
4105
|
+
/** Format: date-time */
|
|
4106
|
+
updated_at: string;
|
|
4107
|
+
};
|
|
4108
|
+
/** OAuthClientListResponse */
|
|
4109
|
+
OAuthClientListResponse: {
|
|
4110
|
+
data: components["schemas"]["OAuthClient"][];
|
|
4111
|
+
};
|
|
4112
|
+
/**
|
|
4113
|
+
* OAuthClientRequest
|
|
4114
|
+
* @example {
|
|
4115
|
+
* "name": "Notes",
|
|
4116
|
+
* "redirect_uris": [
|
|
4117
|
+
* "https://abc123.sprites.app/callback",
|
|
4118
|
+
* "http://localhost:5173/callback"
|
|
4119
|
+
* ]
|
|
4120
|
+
* }
|
|
4121
|
+
*/
|
|
4122
|
+
OAuthClientRequest: {
|
|
4123
|
+
name: string;
|
|
4124
|
+
redirect_uris: string[];
|
|
4125
|
+
};
|
|
4126
|
+
/**
|
|
4127
|
+
* OAuthClientUpdateRequest
|
|
4128
|
+
* @example {
|
|
4129
|
+
* "name": "Notes for Fountain"
|
|
4130
|
+
* }
|
|
4131
|
+
*/
|
|
4132
|
+
OAuthClientUpdateRequest: {
|
|
4133
|
+
name?: string;
|
|
4134
|
+
redirect_uris?: string[];
|
|
4135
|
+
};
|
|
3956
4136
|
/** OAuthTokenRequest */
|
|
3957
4137
|
OAuthTokenRequest: {
|
|
3958
4138
|
client_id: string;
|
|
@@ -4167,6 +4347,26 @@ export interface components {
|
|
|
4167
4347
|
/** Format: uuid */
|
|
4168
4348
|
vault_id?: string | null;
|
|
4169
4349
|
};
|
|
4350
|
+
/**
|
|
4351
|
+
* SandboxChange
|
|
4352
|
+
* @description One path `git status` reports, relative to `repo_root` (ADR 0039). An untracked file reads `untracked` on both sides, which is what git reports for it and the one state a diff cannot show.
|
|
4353
|
+
*/
|
|
4354
|
+
SandboxChange: {
|
|
4355
|
+
/**
|
|
4356
|
+
* @description The staged side: what a commit would record.
|
|
4357
|
+
* @enum {string}
|
|
4358
|
+
*/
|
|
4359
|
+
index: "added" | "copied" | "deleted" | "ignored" | "modified" | "renamed" | "type_changed" | "unchanged" | "unmerged" | "untracked";
|
|
4360
|
+
/** @description Relative to `repo_root`. */
|
|
4361
|
+
path: string;
|
|
4362
|
+
/** @description The old path, when that side is a rename or a copy; null otherwise. */
|
|
4363
|
+
renamed_from?: string | null;
|
|
4364
|
+
/**
|
|
4365
|
+
* @description The unstaged side: what the disk holds beyond the index.
|
|
4366
|
+
* @enum {string}
|
|
4367
|
+
*/
|
|
4368
|
+
worktree: "added" | "copied" | "deleted" | "ignored" | "modified" | "renamed" | "type_changed" | "unchanged" | "unmerged" | "untracked";
|
|
4369
|
+
};
|
|
4170
4370
|
/**
|
|
4171
4371
|
* SandboxConversation
|
|
4172
4372
|
* @description A conversation on a sandbox, as the sandbox lists it.
|
|
@@ -4248,13 +4448,13 @@ export interface components {
|
|
|
4248
4448
|
diff: string;
|
|
4249
4449
|
/** @description The directory the diff was asked for, absolute. */
|
|
4250
4450
|
path: string;
|
|
4251
|
-
/** @description The revision diffed against, or null
|
|
4451
|
+
/** @description The revision diffed against, or null when the caller named none. */
|
|
4252
4452
|
ref?: string | null;
|
|
4253
4453
|
/** @description The repository's top-level directory. */
|
|
4254
4454
|
repo_root: string;
|
|
4255
4455
|
/** @description True when the index was diffed (`--cached`). */
|
|
4256
4456
|
staged: boolean;
|
|
4257
|
-
/** @description True when `diff`
|
|
4457
|
+
/** @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. */
|
|
4258
4458
|
truncated: boolean;
|
|
4259
4459
|
};
|
|
4260
4460
|
/** SandboxDiffResponse */
|
|
@@ -4287,7 +4487,7 @@ export interface components {
|
|
|
4287
4487
|
path: string;
|
|
4288
4488
|
/** @description The whole file, in bytes. */
|
|
4289
4489
|
size: number;
|
|
4290
|
-
/** @description True when `content`
|
|
4490
|
+
/** @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. */
|
|
4291
4491
|
truncated: boolean;
|
|
4292
4492
|
};
|
|
4293
4493
|
/** SandboxFileResponse */
|
|
@@ -4313,10 +4513,63 @@ export interface components {
|
|
|
4313
4513
|
SandboxListingResponse: {
|
|
4314
4514
|
data: components["schemas"]["SandboxListing"];
|
|
4315
4515
|
};
|
|
4516
|
+
/**
|
|
4517
|
+
* SandboxRequest
|
|
4518
|
+
* @description Work waiting for sandbox capacity (ADR 0042).
|
|
4519
|
+
*/
|
|
4520
|
+
SandboxRequest: {
|
|
4521
|
+
/** Format: uuid */
|
|
4522
|
+
agent_id: string;
|
|
4523
|
+
/**
|
|
4524
|
+
* Format: uuid
|
|
4525
|
+
* @description The conversation the request became, once it started.
|
|
4526
|
+
*/
|
|
4527
|
+
conversation_id?: string | null;
|
|
4528
|
+
error?: string | null;
|
|
4529
|
+
/** Format: uuid */
|
|
4530
|
+
id: string;
|
|
4531
|
+
/** Format: date-time */
|
|
4532
|
+
inserted_at?: string;
|
|
4533
|
+
/** @enum {string} */
|
|
4534
|
+
kind: "start" | "schedule_run";
|
|
4535
|
+
/** @description One-based place in the tenant's queue; null once it stops waiting. */
|
|
4536
|
+
position?: number | null;
|
|
4537
|
+
source?: string | null;
|
|
4538
|
+
/** @enum {string} */
|
|
4539
|
+
status: "queued" | "starting" | "started" | "cancelled" | "expired" | "failed";
|
|
4540
|
+
};
|
|
4541
|
+
/** SandboxRequestResponse */
|
|
4542
|
+
SandboxRequestResponse: {
|
|
4543
|
+
data: components["schemas"]["SandboxRequest"];
|
|
4544
|
+
};
|
|
4316
4545
|
/** SandboxResponse */
|
|
4317
4546
|
SandboxResponse: {
|
|
4318
4547
|
data: components["schemas"]["SandboxDetail"];
|
|
4319
4548
|
};
|
|
4549
|
+
/**
|
|
4550
|
+
* SandboxStatus
|
|
4551
|
+
* @description `git status` of a repository on a sandbox, one entry per changed path.
|
|
4552
|
+
*/
|
|
4553
|
+
SandboxStatus: {
|
|
4554
|
+
/** @description The checked-out branch, or null on a detached HEAD. */
|
|
4555
|
+
branch?: string | null;
|
|
4556
|
+
entries: components["schemas"]["SandboxChange"][];
|
|
4557
|
+
/** @description The directory the status was asked for, absolute. */
|
|
4558
|
+
path: string;
|
|
4559
|
+
/** @description The repository's top-level directory. */
|
|
4560
|
+
repo_root: string;
|
|
4561
|
+
/** @description True when the repository holds more changes than were returned. */
|
|
4562
|
+
truncated: boolean;
|
|
4563
|
+
/**
|
|
4564
|
+
* @description What was asked about untracked paths.
|
|
4565
|
+
* @enum {string}
|
|
4566
|
+
*/
|
|
4567
|
+
untracked: "normal" | "all" | "no";
|
|
4568
|
+
};
|
|
4569
|
+
/** SandboxStatusResponse */
|
|
4570
|
+
SandboxStatusResponse: {
|
|
4571
|
+
data: components["schemas"]["SandboxStatus"];
|
|
4572
|
+
};
|
|
4320
4573
|
/**
|
|
4321
4574
|
* SearchHit
|
|
4322
4575
|
* @description One search hit: what matched, and where to jump.
|
|
@@ -4556,6 +4809,10 @@ export interface components {
|
|
|
4556
4809
|
/** TeamMessageRequest */
|
|
4557
4810
|
TeamMessageRequest: {
|
|
4558
4811
|
images?: components["schemas"]["ImageInput"][] | null;
|
|
4812
|
+
/** @description Labels to merge into the conversation this message lands on, whether that is the teammate's current one or the fresh one a retired thread is replaced by. Same limits as everywhere else; null removes a key. */
|
|
4813
|
+
labels?: {
|
|
4814
|
+
[key: string]: string | null;
|
|
4815
|
+
} | null;
|
|
4559
4816
|
prompt: string;
|
|
4560
4817
|
};
|
|
4561
4818
|
/** TeamMessageResponse */
|
|
@@ -10094,6 +10351,8 @@ export interface operations {
|
|
|
10094
10351
|
status?: string;
|
|
10095
10352
|
/** @description Return at most this many conversations, most recently updated first (1 to 500; 400 outside that range). Without it the whole list is returned, which on a busy account is hundreds of rows per call — a client that needs one conversation should filter (`agent_id`, `sandbox_id`, `channel_id`) and cap. */
|
|
10096
10353
|
limit?: number;
|
|
10354
|
+
/** @description Only conversations carrying these `key:value` labels (#1637). Repeat the parameter to combine them with AND: `?label=env:prod&label=drift:true` keeps the conversations that carry both. `label[]=` is accepted as well. Each value splits on its first colon only, so `label=path:a:b` matches the label `path` with the value `a:b`. 400 `invalid_label_filter` on a value with no colon or an empty key. */
|
|
10355
|
+
label?: string[];
|
|
10097
10356
|
};
|
|
10098
10357
|
header?: never;
|
|
10099
10358
|
path?: never;
|
|
@@ -10198,6 +10457,15 @@ export interface operations {
|
|
|
10198
10457
|
"application/json": components["schemas"]["ConversationResponse"];
|
|
10199
10458
|
};
|
|
10200
10459
|
};
|
|
10460
|
+
/** @description Queued for sandbox capacity */
|
|
10461
|
+
202: {
|
|
10462
|
+
headers: {
|
|
10463
|
+
[name: string]: unknown;
|
|
10464
|
+
};
|
|
10465
|
+
content: {
|
|
10466
|
+
"application/json": components["schemas"]["SandboxRequestResponse"];
|
|
10467
|
+
};
|
|
10468
|
+
};
|
|
10201
10469
|
/** @description Invalid request */
|
|
10202
10470
|
400: {
|
|
10203
10471
|
headers: {
|
|
@@ -10228,7 +10496,7 @@ export interface operations {
|
|
|
10228
10496
|
};
|
|
10229
10497
|
};
|
|
10230
10498
|
};
|
|
10231
|
-
/** @description
|
|
10499
|
+
/** @description A sandbox token labelling the conversation a resume landed on */
|
|
10232
10500
|
403: {
|
|
10233
10501
|
headers: {
|
|
10234
10502
|
[name: string]: unknown;
|
|
@@ -10273,7 +10541,7 @@ export interface operations {
|
|
|
10273
10541
|
"application/json": components["schemas"]["UnprocessableEntityError"];
|
|
10274
10542
|
};
|
|
10275
10543
|
};
|
|
10276
|
-
/** @description
|
|
10544
|
+
/** @description Tenant concurrency cap reached */
|
|
10277
10545
|
429: {
|
|
10278
10546
|
headers: {
|
|
10279
10547
|
[name: string]: unknown;
|
|
@@ -10542,6 +10810,87 @@ export interface operations {
|
|
|
10542
10810
|
};
|
|
10543
10811
|
};
|
|
10544
10812
|
};
|
|
10813
|
+
"FountainWeb.ConversationController.labels": {
|
|
10814
|
+
parameters: {
|
|
10815
|
+
query?: never;
|
|
10816
|
+
header?: never;
|
|
10817
|
+
path: {
|
|
10818
|
+
conversation_id: string;
|
|
10819
|
+
};
|
|
10820
|
+
cookie?: never;
|
|
10821
|
+
};
|
|
10822
|
+
/** @description Labels */
|
|
10823
|
+
requestBody?: {
|
|
10824
|
+
content: {
|
|
10825
|
+
"application/json": components["schemas"]["ConversationLabelsRequest"];
|
|
10826
|
+
};
|
|
10827
|
+
};
|
|
10828
|
+
responses: {
|
|
10829
|
+
/** @description Conversation */
|
|
10830
|
+
200: {
|
|
10831
|
+
headers: {
|
|
10832
|
+
[name: string]: unknown;
|
|
10833
|
+
};
|
|
10834
|
+
content: {
|
|
10835
|
+
"application/json": components["schemas"]["ConversationResponse"];
|
|
10836
|
+
};
|
|
10837
|
+
};
|
|
10838
|
+
/** @description Unauthorized */
|
|
10839
|
+
401: {
|
|
10840
|
+
headers: {
|
|
10841
|
+
[name: string]: unknown;
|
|
10842
|
+
};
|
|
10843
|
+
content: {
|
|
10844
|
+
"application/json": components["schemas"]["Error"];
|
|
10845
|
+
};
|
|
10846
|
+
};
|
|
10847
|
+
/** @description A sandbox token labelling another conversation */
|
|
10848
|
+
403: {
|
|
10849
|
+
headers: {
|
|
10850
|
+
[name: string]: unknown;
|
|
10851
|
+
};
|
|
10852
|
+
content: {
|
|
10853
|
+
"application/json": components["schemas"]["Error"];
|
|
10854
|
+
};
|
|
10855
|
+
};
|
|
10856
|
+
/** @description Not found */
|
|
10857
|
+
404: {
|
|
10858
|
+
headers: {
|
|
10859
|
+
[name: string]: unknown;
|
|
10860
|
+
};
|
|
10861
|
+
content: {
|
|
10862
|
+
"application/json": components["schemas"]["Error"];
|
|
10863
|
+
};
|
|
10864
|
+
};
|
|
10865
|
+
/** @description No acceptable representation */
|
|
10866
|
+
406: {
|
|
10867
|
+
headers: {
|
|
10868
|
+
[name: string]: unknown;
|
|
10869
|
+
};
|
|
10870
|
+
content: {
|
|
10871
|
+
"application/json": components["schemas"]["NegotiationError"];
|
|
10872
|
+
};
|
|
10873
|
+
};
|
|
10874
|
+
/** @description Invalid labels */
|
|
10875
|
+
422: {
|
|
10876
|
+
headers: {
|
|
10877
|
+
[name: string]: unknown;
|
|
10878
|
+
};
|
|
10879
|
+
content: {
|
|
10880
|
+
"application/json": components["schemas"]["UnprocessableEntityError"];
|
|
10881
|
+
};
|
|
10882
|
+
};
|
|
10883
|
+
/** @description Too Many Requests */
|
|
10884
|
+
429: {
|
|
10885
|
+
headers: {
|
|
10886
|
+
[name: string]: unknown;
|
|
10887
|
+
};
|
|
10888
|
+
content: {
|
|
10889
|
+
"application/json": components["schemas"]["Error"];
|
|
10890
|
+
};
|
|
10891
|
+
};
|
|
10892
|
+
};
|
|
10893
|
+
};
|
|
10545
10894
|
"FountainWeb.ConversationController.prompt": {
|
|
10546
10895
|
parameters: {
|
|
10547
10896
|
query?: never;
|
|
@@ -11991,7 +12340,7 @@ export interface operations {
|
|
|
11991
12340
|
};
|
|
11992
12341
|
};
|
|
11993
12342
|
};
|
|
11994
|
-
"FountainWeb.
|
|
12343
|
+
"FountainWeb.OAuthClientController.index": {
|
|
11995
12344
|
parameters: {
|
|
11996
12345
|
query?: never;
|
|
11997
12346
|
header?: never;
|
|
@@ -12000,14 +12349,16 @@ export interface operations {
|
|
|
12000
12349
|
};
|
|
12001
12350
|
requestBody?: never;
|
|
12002
12351
|
responses: {
|
|
12003
|
-
/** @description
|
|
12004
|
-
|
|
12352
|
+
/** @description Clients */
|
|
12353
|
+
200: {
|
|
12005
12354
|
headers: {
|
|
12006
12355
|
[name: string]: unknown;
|
|
12007
12356
|
};
|
|
12008
|
-
content
|
|
12357
|
+
content: {
|
|
12358
|
+
"application/json": components["schemas"]["OAuthClientListResponse"];
|
|
12359
|
+
};
|
|
12009
12360
|
};
|
|
12010
|
-
/** @description
|
|
12361
|
+
/** @description Missing or invalid key */
|
|
12011
12362
|
401: {
|
|
12012
12363
|
headers: {
|
|
12013
12364
|
[name: string]: unknown;
|
|
@@ -12016,7 +12367,7 @@ export interface operations {
|
|
|
12016
12367
|
"application/json": components["schemas"]["Error"];
|
|
12017
12368
|
};
|
|
12018
12369
|
};
|
|
12019
|
-
/** @description
|
|
12370
|
+
/** @description Insufficient scope */
|
|
12020
12371
|
403: {
|
|
12021
12372
|
headers: {
|
|
12022
12373
|
[name: string]: unknown;
|
|
@@ -12045,32 +12396,381 @@ export interface operations {
|
|
|
12045
12396
|
};
|
|
12046
12397
|
};
|
|
12047
12398
|
};
|
|
12048
|
-
"FountainWeb.
|
|
12399
|
+
"FountainWeb.OAuthClientController.create": {
|
|
12049
12400
|
parameters: {
|
|
12050
12401
|
query?: never;
|
|
12051
12402
|
header?: never;
|
|
12052
12403
|
path?: never;
|
|
12053
12404
|
cookie?: never;
|
|
12054
12405
|
};
|
|
12055
|
-
/** @description
|
|
12056
|
-
requestBody
|
|
12406
|
+
/** @description Client */
|
|
12407
|
+
requestBody: {
|
|
12057
12408
|
content: {
|
|
12058
|
-
"application/json": components["schemas"]["
|
|
12409
|
+
"application/json": components["schemas"]["OAuthClientRequest"];
|
|
12059
12410
|
};
|
|
12060
12411
|
};
|
|
12061
12412
|
responses: {
|
|
12062
|
-
/** @description
|
|
12063
|
-
|
|
12413
|
+
/** @description Client */
|
|
12414
|
+
201: {
|
|
12064
12415
|
headers: {
|
|
12065
12416
|
[name: string]: unknown;
|
|
12066
12417
|
};
|
|
12067
12418
|
content: {
|
|
12068
|
-
"application/json": components["schemas"]["
|
|
12419
|
+
"application/json": components["schemas"]["OAuthClient"];
|
|
12069
12420
|
};
|
|
12070
12421
|
};
|
|
12071
|
-
/** @description
|
|
12072
|
-
|
|
12073
|
-
headers: {
|
|
12422
|
+
/** @description Missing or invalid key */
|
|
12423
|
+
401: {
|
|
12424
|
+
headers: {
|
|
12425
|
+
[name: string]: unknown;
|
|
12426
|
+
};
|
|
12427
|
+
content: {
|
|
12428
|
+
"application/json": components["schemas"]["Error"];
|
|
12429
|
+
};
|
|
12430
|
+
};
|
|
12431
|
+
/** @description Insufficient scope */
|
|
12432
|
+
403: {
|
|
12433
|
+
headers: {
|
|
12434
|
+
[name: string]: unknown;
|
|
12435
|
+
};
|
|
12436
|
+
content: {
|
|
12437
|
+
"application/json": components["schemas"]["Error"];
|
|
12438
|
+
};
|
|
12439
|
+
};
|
|
12440
|
+
/** @description No acceptable representation */
|
|
12441
|
+
406: {
|
|
12442
|
+
headers: {
|
|
12443
|
+
[name: string]: unknown;
|
|
12444
|
+
};
|
|
12445
|
+
content: {
|
|
12446
|
+
"application/json": components["schemas"]["NegotiationError"];
|
|
12447
|
+
};
|
|
12448
|
+
};
|
|
12449
|
+
/** @description Validation error */
|
|
12450
|
+
422: {
|
|
12451
|
+
headers: {
|
|
12452
|
+
[name: string]: unknown;
|
|
12453
|
+
};
|
|
12454
|
+
content: {
|
|
12455
|
+
"application/json": components["schemas"]["Error"];
|
|
12456
|
+
};
|
|
12457
|
+
};
|
|
12458
|
+
/** @description Too Many Requests */
|
|
12459
|
+
429: {
|
|
12460
|
+
headers: {
|
|
12461
|
+
[name: string]: unknown;
|
|
12462
|
+
};
|
|
12463
|
+
content: {
|
|
12464
|
+
"application/json": components["schemas"]["Error"];
|
|
12465
|
+
};
|
|
12466
|
+
};
|
|
12467
|
+
};
|
|
12468
|
+
};
|
|
12469
|
+
"FountainWeb.OAuthClientController.show": {
|
|
12470
|
+
parameters: {
|
|
12471
|
+
query?: never;
|
|
12472
|
+
header?: never;
|
|
12473
|
+
path: {
|
|
12474
|
+
/** @description Client record id */
|
|
12475
|
+
id: string;
|
|
12476
|
+
};
|
|
12477
|
+
cookie?: never;
|
|
12478
|
+
};
|
|
12479
|
+
requestBody?: never;
|
|
12480
|
+
responses: {
|
|
12481
|
+
/** @description Client */
|
|
12482
|
+
200: {
|
|
12483
|
+
headers: {
|
|
12484
|
+
[name: string]: unknown;
|
|
12485
|
+
};
|
|
12486
|
+
content: {
|
|
12487
|
+
"application/json": components["schemas"]["OAuthClient"];
|
|
12488
|
+
};
|
|
12489
|
+
};
|
|
12490
|
+
/** @description Missing or invalid key */
|
|
12491
|
+
401: {
|
|
12492
|
+
headers: {
|
|
12493
|
+
[name: string]: unknown;
|
|
12494
|
+
};
|
|
12495
|
+
content: {
|
|
12496
|
+
"application/json": components["schemas"]["Error"];
|
|
12497
|
+
};
|
|
12498
|
+
};
|
|
12499
|
+
/** @description Insufficient scope */
|
|
12500
|
+
403: {
|
|
12501
|
+
headers: {
|
|
12502
|
+
[name: string]: unknown;
|
|
12503
|
+
};
|
|
12504
|
+
content: {
|
|
12505
|
+
"application/json": components["schemas"]["Error"];
|
|
12506
|
+
};
|
|
12507
|
+
};
|
|
12508
|
+
/** @description No such client */
|
|
12509
|
+
404: {
|
|
12510
|
+
headers: {
|
|
12511
|
+
[name: string]: unknown;
|
|
12512
|
+
};
|
|
12513
|
+
content: {
|
|
12514
|
+
"application/json": components["schemas"]["Error"];
|
|
12515
|
+
};
|
|
12516
|
+
};
|
|
12517
|
+
/** @description No acceptable representation */
|
|
12518
|
+
406: {
|
|
12519
|
+
headers: {
|
|
12520
|
+
[name: string]: unknown;
|
|
12521
|
+
};
|
|
12522
|
+
content: {
|
|
12523
|
+
"application/json": components["schemas"]["NegotiationError"];
|
|
12524
|
+
};
|
|
12525
|
+
};
|
|
12526
|
+
/** @description Too Many Requests */
|
|
12527
|
+
429: {
|
|
12528
|
+
headers: {
|
|
12529
|
+
[name: string]: unknown;
|
|
12530
|
+
};
|
|
12531
|
+
content: {
|
|
12532
|
+
"application/json": components["schemas"]["Error"];
|
|
12533
|
+
};
|
|
12534
|
+
};
|
|
12535
|
+
};
|
|
12536
|
+
};
|
|
12537
|
+
"FountainWeb.OAuthClientController.delete": {
|
|
12538
|
+
parameters: {
|
|
12539
|
+
query?: never;
|
|
12540
|
+
header?: never;
|
|
12541
|
+
path: {
|
|
12542
|
+
/** @description Client record id */
|
|
12543
|
+
id: string;
|
|
12544
|
+
};
|
|
12545
|
+
cookie?: never;
|
|
12546
|
+
};
|
|
12547
|
+
requestBody?: never;
|
|
12548
|
+
responses: {
|
|
12549
|
+
/** @description Deleted */
|
|
12550
|
+
204: {
|
|
12551
|
+
headers: {
|
|
12552
|
+
[name: string]: unknown;
|
|
12553
|
+
};
|
|
12554
|
+
content?: never;
|
|
12555
|
+
};
|
|
12556
|
+
/** @description Missing or invalid key */
|
|
12557
|
+
401: {
|
|
12558
|
+
headers: {
|
|
12559
|
+
[name: string]: unknown;
|
|
12560
|
+
};
|
|
12561
|
+
content: {
|
|
12562
|
+
"application/json": components["schemas"]["Error"];
|
|
12563
|
+
};
|
|
12564
|
+
};
|
|
12565
|
+
/** @description Insufficient scope */
|
|
12566
|
+
403: {
|
|
12567
|
+
headers: {
|
|
12568
|
+
[name: string]: unknown;
|
|
12569
|
+
};
|
|
12570
|
+
content: {
|
|
12571
|
+
"application/json": components["schemas"]["Error"];
|
|
12572
|
+
};
|
|
12573
|
+
};
|
|
12574
|
+
/** @description No such client */
|
|
12575
|
+
404: {
|
|
12576
|
+
headers: {
|
|
12577
|
+
[name: string]: unknown;
|
|
12578
|
+
};
|
|
12579
|
+
content: {
|
|
12580
|
+
"application/json": components["schemas"]["Error"];
|
|
12581
|
+
};
|
|
12582
|
+
};
|
|
12583
|
+
/** @description No acceptable representation */
|
|
12584
|
+
406: {
|
|
12585
|
+
headers: {
|
|
12586
|
+
[name: string]: unknown;
|
|
12587
|
+
};
|
|
12588
|
+
content: {
|
|
12589
|
+
"application/json": components["schemas"]["NegotiationError"];
|
|
12590
|
+
};
|
|
12591
|
+
};
|
|
12592
|
+
/** @description Refused */
|
|
12593
|
+
422: {
|
|
12594
|
+
headers: {
|
|
12595
|
+
[name: string]: unknown;
|
|
12596
|
+
};
|
|
12597
|
+
content: {
|
|
12598
|
+
"application/json": components["schemas"]["Error"];
|
|
12599
|
+
};
|
|
12600
|
+
};
|
|
12601
|
+
/** @description Too Many Requests */
|
|
12602
|
+
429: {
|
|
12603
|
+
headers: {
|
|
12604
|
+
[name: string]: unknown;
|
|
12605
|
+
};
|
|
12606
|
+
content: {
|
|
12607
|
+
"application/json": components["schemas"]["Error"];
|
|
12608
|
+
};
|
|
12609
|
+
};
|
|
12610
|
+
};
|
|
12611
|
+
};
|
|
12612
|
+
"FountainWeb.OAuthClientController.update": {
|
|
12613
|
+
parameters: {
|
|
12614
|
+
query?: never;
|
|
12615
|
+
header?: never;
|
|
12616
|
+
path: {
|
|
12617
|
+
/** @description Client record id */
|
|
12618
|
+
id: string;
|
|
12619
|
+
};
|
|
12620
|
+
cookie?: never;
|
|
12621
|
+
};
|
|
12622
|
+
/** @description Client changes */
|
|
12623
|
+
requestBody: {
|
|
12624
|
+
content: {
|
|
12625
|
+
"application/json": components["schemas"]["OAuthClientUpdateRequest"];
|
|
12626
|
+
};
|
|
12627
|
+
};
|
|
12628
|
+
responses: {
|
|
12629
|
+
/** @description Client */
|
|
12630
|
+
200: {
|
|
12631
|
+
headers: {
|
|
12632
|
+
[name: string]: unknown;
|
|
12633
|
+
};
|
|
12634
|
+
content: {
|
|
12635
|
+
"application/json": components["schemas"]["OAuthClient"];
|
|
12636
|
+
};
|
|
12637
|
+
};
|
|
12638
|
+
/** @description Missing or invalid key */
|
|
12639
|
+
401: {
|
|
12640
|
+
headers: {
|
|
12641
|
+
[name: string]: unknown;
|
|
12642
|
+
};
|
|
12643
|
+
content: {
|
|
12644
|
+
"application/json": components["schemas"]["Error"];
|
|
12645
|
+
};
|
|
12646
|
+
};
|
|
12647
|
+
/** @description Insufficient scope */
|
|
12648
|
+
403: {
|
|
12649
|
+
headers: {
|
|
12650
|
+
[name: string]: unknown;
|
|
12651
|
+
};
|
|
12652
|
+
content: {
|
|
12653
|
+
"application/json": components["schemas"]["Error"];
|
|
12654
|
+
};
|
|
12655
|
+
};
|
|
12656
|
+
/** @description No such client */
|
|
12657
|
+
404: {
|
|
12658
|
+
headers: {
|
|
12659
|
+
[name: string]: unknown;
|
|
12660
|
+
};
|
|
12661
|
+
content: {
|
|
12662
|
+
"application/json": components["schemas"]["Error"];
|
|
12663
|
+
};
|
|
12664
|
+
};
|
|
12665
|
+
/** @description No acceptable representation */
|
|
12666
|
+
406: {
|
|
12667
|
+
headers: {
|
|
12668
|
+
[name: string]: unknown;
|
|
12669
|
+
};
|
|
12670
|
+
content: {
|
|
12671
|
+
"application/json": components["schemas"]["NegotiationError"];
|
|
12672
|
+
};
|
|
12673
|
+
};
|
|
12674
|
+
/** @description Validation error */
|
|
12675
|
+
422: {
|
|
12676
|
+
headers: {
|
|
12677
|
+
[name: string]: unknown;
|
|
12678
|
+
};
|
|
12679
|
+
content: {
|
|
12680
|
+
"application/json": components["schemas"]["Error"];
|
|
12681
|
+
};
|
|
12682
|
+
};
|
|
12683
|
+
/** @description Too Many Requests */
|
|
12684
|
+
429: {
|
|
12685
|
+
headers: {
|
|
12686
|
+
[name: string]: unknown;
|
|
12687
|
+
};
|
|
12688
|
+
content: {
|
|
12689
|
+
"application/json": components["schemas"]["Error"];
|
|
12690
|
+
};
|
|
12691
|
+
};
|
|
12692
|
+
};
|
|
12693
|
+
};
|
|
12694
|
+
"FountainWeb.OAuthTokenController.revoke": {
|
|
12695
|
+
parameters: {
|
|
12696
|
+
query?: never;
|
|
12697
|
+
header?: never;
|
|
12698
|
+
path?: never;
|
|
12699
|
+
cookie?: never;
|
|
12700
|
+
};
|
|
12701
|
+
requestBody?: never;
|
|
12702
|
+
responses: {
|
|
12703
|
+
/** @description Revoked */
|
|
12704
|
+
204: {
|
|
12705
|
+
headers: {
|
|
12706
|
+
[name: string]: unknown;
|
|
12707
|
+
};
|
|
12708
|
+
content?: never;
|
|
12709
|
+
};
|
|
12710
|
+
/** @description Unauthorized */
|
|
12711
|
+
401: {
|
|
12712
|
+
headers: {
|
|
12713
|
+
[name: string]: unknown;
|
|
12714
|
+
};
|
|
12715
|
+
content: {
|
|
12716
|
+
"application/json": components["schemas"]["Error"];
|
|
12717
|
+
};
|
|
12718
|
+
};
|
|
12719
|
+
/** @description Forbidden */
|
|
12720
|
+
403: {
|
|
12721
|
+
headers: {
|
|
12722
|
+
[name: string]: unknown;
|
|
12723
|
+
};
|
|
12724
|
+
content: {
|
|
12725
|
+
"application/json": components["schemas"]["Error"];
|
|
12726
|
+
};
|
|
12727
|
+
};
|
|
12728
|
+
/** @description No acceptable representation */
|
|
12729
|
+
406: {
|
|
12730
|
+
headers: {
|
|
12731
|
+
[name: string]: unknown;
|
|
12732
|
+
};
|
|
12733
|
+
content: {
|
|
12734
|
+
"application/json": components["schemas"]["NegotiationError"];
|
|
12735
|
+
};
|
|
12736
|
+
};
|
|
12737
|
+
/** @description Too Many Requests */
|
|
12738
|
+
429: {
|
|
12739
|
+
headers: {
|
|
12740
|
+
[name: string]: unknown;
|
|
12741
|
+
};
|
|
12742
|
+
content: {
|
|
12743
|
+
"application/json": components["schemas"]["Error"];
|
|
12744
|
+
};
|
|
12745
|
+
};
|
|
12746
|
+
};
|
|
12747
|
+
};
|
|
12748
|
+
"FountainWeb.OAuthTokenController.token": {
|
|
12749
|
+
parameters: {
|
|
12750
|
+
query?: never;
|
|
12751
|
+
header?: never;
|
|
12752
|
+
path?: never;
|
|
12753
|
+
cookie?: never;
|
|
12754
|
+
};
|
|
12755
|
+
/** @description Token request */
|
|
12756
|
+
requestBody?: {
|
|
12757
|
+
content: {
|
|
12758
|
+
"application/json": components["schemas"]["OAuthTokenRequest"];
|
|
12759
|
+
};
|
|
12760
|
+
};
|
|
12761
|
+
responses: {
|
|
12762
|
+
/** @description Token */
|
|
12763
|
+
200: {
|
|
12764
|
+
headers: {
|
|
12765
|
+
[name: string]: unknown;
|
|
12766
|
+
};
|
|
12767
|
+
content: {
|
|
12768
|
+
"application/json": components["schemas"]["OAuthTokenResponse"];
|
|
12769
|
+
};
|
|
12770
|
+
};
|
|
12771
|
+
/** @description invalid_grant / unsupported_grant_type */
|
|
12772
|
+
400: {
|
|
12773
|
+
headers: {
|
|
12074
12774
|
[name: string]: unknown;
|
|
12075
12775
|
};
|
|
12076
12776
|
content: {
|
|
@@ -12517,7 +13217,7 @@ export interface operations {
|
|
|
12517
13217
|
path?: string;
|
|
12518
13218
|
/** @description Diff the index (`--cached`). */
|
|
12519
13219
|
staged?: boolean;
|
|
12520
|
-
/** @description A commit, branch or tag to diff against
|
|
13220
|
+
/** @description A commit, branch or tag to diff against. Without it the comparison is the working tree against the index, or with `staged`, the index against HEAD. */
|
|
12521
13221
|
ref?: string;
|
|
12522
13222
|
/** @description How many bytes to return, at most 4194304 (default 262144). `truncated` says whether the content stopped short. */
|
|
12523
13223
|
max_bytes?: number;
|
|
@@ -12809,6 +13509,105 @@ export interface operations {
|
|
|
12809
13509
|
};
|
|
12810
13510
|
};
|
|
12811
13511
|
};
|
|
13512
|
+
"FountainWeb.SandboxFilesController.git_status": {
|
|
13513
|
+
parameters: {
|
|
13514
|
+
query?: {
|
|
13515
|
+
/** @description In-sandbox path, absolute or relative to the agent's working directory (`/home/sprite` for claude and codex, `/tmp/gemini-workspace` and `/tmp/opencode-workspace` for the others). Confined to those directories: anything else is `422 path_outside_sandbox`. */
|
|
13516
|
+
path?: string;
|
|
13517
|
+
/** @description What to do about untracked paths: collapse an untracked directory to one entry (`normal`), list every file under it (`all`), or leave them out (`no`). */
|
|
13518
|
+
untracked?: "normal" | "all" | "no";
|
|
13519
|
+
};
|
|
13520
|
+
header?: never;
|
|
13521
|
+
path: {
|
|
13522
|
+
sandbox_id: string;
|
|
13523
|
+
};
|
|
13524
|
+
cookie?: never;
|
|
13525
|
+
};
|
|
13526
|
+
requestBody?: never;
|
|
13527
|
+
responses: {
|
|
13528
|
+
/** @description Status */
|
|
13529
|
+
200: {
|
|
13530
|
+
headers: {
|
|
13531
|
+
[name: string]: unknown;
|
|
13532
|
+
};
|
|
13533
|
+
content: {
|
|
13534
|
+
"application/json": components["schemas"]["SandboxStatusResponse"];
|
|
13535
|
+
};
|
|
13536
|
+
};
|
|
13537
|
+
/** @description Unauthorized */
|
|
13538
|
+
401: {
|
|
13539
|
+
headers: {
|
|
13540
|
+
[name: string]: unknown;
|
|
13541
|
+
};
|
|
13542
|
+
content: {
|
|
13543
|
+
"application/json": components["schemas"]["Error"];
|
|
13544
|
+
};
|
|
13545
|
+
};
|
|
13546
|
+
/** @description Insufficient scope */
|
|
13547
|
+
403: {
|
|
13548
|
+
headers: {
|
|
13549
|
+
[name: string]: unknown;
|
|
13550
|
+
};
|
|
13551
|
+
content: {
|
|
13552
|
+
"application/json": components["schemas"]["Error"];
|
|
13553
|
+
};
|
|
13554
|
+
};
|
|
13555
|
+
/** @description No such sandbox or path */
|
|
13556
|
+
404: {
|
|
13557
|
+
headers: {
|
|
13558
|
+
[name: string]: unknown;
|
|
13559
|
+
};
|
|
13560
|
+
content: {
|
|
13561
|
+
"application/json": components["schemas"]["Error"];
|
|
13562
|
+
};
|
|
13563
|
+
};
|
|
13564
|
+
/** @description No acceptable representation */
|
|
13565
|
+
406: {
|
|
13566
|
+
headers: {
|
|
13567
|
+
[name: string]: unknown;
|
|
13568
|
+
};
|
|
13569
|
+
content: {
|
|
13570
|
+
"application/json": components["schemas"]["NegotiationError"];
|
|
13571
|
+
};
|
|
13572
|
+
};
|
|
13573
|
+
/** @description Sandbox is not ready */
|
|
13574
|
+
409: {
|
|
13575
|
+
headers: {
|
|
13576
|
+
[name: string]: unknown;
|
|
13577
|
+
};
|
|
13578
|
+
content: {
|
|
13579
|
+
"application/json": components["schemas"]["Error"];
|
|
13580
|
+
};
|
|
13581
|
+
};
|
|
13582
|
+
/** @description Not a repository, or outside the sandbox */
|
|
13583
|
+
422: {
|
|
13584
|
+
headers: {
|
|
13585
|
+
[name: string]: unknown;
|
|
13586
|
+
};
|
|
13587
|
+
content: {
|
|
13588
|
+
"application/json": components["schemas"]["Error"];
|
|
13589
|
+
};
|
|
13590
|
+
};
|
|
13591
|
+
/** @description Too Many Requests */
|
|
13592
|
+
429: {
|
|
13593
|
+
headers: {
|
|
13594
|
+
[name: string]: unknown;
|
|
13595
|
+
};
|
|
13596
|
+
content: {
|
|
13597
|
+
"application/json": components["schemas"]["Error"];
|
|
13598
|
+
};
|
|
13599
|
+
};
|
|
13600
|
+
/** @description Sandbox provider unreachable */
|
|
13601
|
+
503: {
|
|
13602
|
+
headers: {
|
|
13603
|
+
[name: string]: unknown;
|
|
13604
|
+
};
|
|
13605
|
+
content: {
|
|
13606
|
+
"application/json": components["schemas"]["Error"];
|
|
13607
|
+
};
|
|
13608
|
+
};
|
|
13609
|
+
};
|
|
13610
|
+
};
|
|
12812
13611
|
"FountainWeb.SearchController.index": {
|
|
12813
13612
|
parameters: {
|
|
12814
13613
|
query: {
|
|
@@ -14246,7 +15045,10 @@ export interface operations {
|
|
|
14246
15045
|
};
|
|
14247
15046
|
"FountainWeb.TeamController.conversations": {
|
|
14248
15047
|
parameters: {
|
|
14249
|
-
query?:
|
|
15048
|
+
query?: {
|
|
15049
|
+
/** @description Only conversations carrying these `key:value` labels (#1637). Repeatable and AND-combined, exactly as on `GET /api/conversations`. 400 `invalid_label_filter` on a value with no colon or an empty key. */
|
|
15050
|
+
label?: string[];
|
|
15051
|
+
};
|
|
14250
15052
|
header?: never;
|
|
14251
15053
|
path: {
|
|
14252
15054
|
agent_id: string;
|
|
@@ -14264,6 +15066,15 @@ export interface operations {
|
|
|
14264
15066
|
"application/json": components["schemas"]["TeammateConversationListResponse"];
|
|
14265
15067
|
};
|
|
14266
15068
|
};
|
|
15069
|
+
/** @description Invalid label filter */
|
|
15070
|
+
400: {
|
|
15071
|
+
headers: {
|
|
15072
|
+
[name: string]: unknown;
|
|
15073
|
+
};
|
|
15074
|
+
content: {
|
|
15075
|
+
"application/json": components["schemas"]["Error"];
|
|
15076
|
+
};
|
|
15077
|
+
};
|
|
14267
15078
|
/** @description Unauthorized */
|
|
14268
15079
|
401: {
|
|
14269
15080
|
headers: {
|
|
@@ -14439,7 +15250,7 @@ export interface operations {
|
|
|
14439
15250
|
"application/json": components["schemas"]["Error"];
|
|
14440
15251
|
};
|
|
14441
15252
|
};
|
|
14442
|
-
/** @description
|
|
15253
|
+
/** @description A sandbox token labelling another conversation */
|
|
14443
15254
|
403: {
|
|
14444
15255
|
headers: {
|
|
14445
15256
|
[name: string]: unknown;
|
|
@@ -14466,6 +15277,15 @@ export interface operations {
|
|
|
14466
15277
|
"application/json": components["schemas"]["NegotiationError"];
|
|
14467
15278
|
};
|
|
14468
15279
|
};
|
|
15280
|
+
/** @description Invalid labels */
|
|
15281
|
+
422: {
|
|
15282
|
+
headers: {
|
|
15283
|
+
[name: string]: unknown;
|
|
15284
|
+
};
|
|
15285
|
+
content: {
|
|
15286
|
+
"application/json": components["schemas"]["ChangesetError"];
|
|
15287
|
+
};
|
|
15288
|
+
};
|
|
14469
15289
|
/** @description Too Many Requests */
|
|
14470
15290
|
429: {
|
|
14471
15291
|
headers: {
|