@cat-factory/mcp-server 0.24.0 → 0.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/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/tools.generated.d.ts.map +1 -1
- package/dist/tools.generated.js +73 -16
- package/dist/tools.generated.js.map +1 -1
- package/package.json +2 -2
package/dist/server.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
2
2
|
import { type CatFactoryMcpOptions } from './config.ts';
|
|
3
3
|
import { type CatFactoryTool } from './tools.generated.ts';
|
|
4
4
|
/** The npm version, stamped into the SDK's `User-Agent` so a deployment can attribute calls. */
|
|
5
|
-
export declare const MCP_SERVER_VERSION = "0.
|
|
5
|
+
export declare const MCP_SERVER_VERSION = "0.26.0";
|
|
6
6
|
/** The name this server reports to a host. */
|
|
7
7
|
export declare const MCP_SERVER_NAME = "cat-factory";
|
|
8
8
|
export interface CatFactoryMcpServer {
|
package/dist/server.js
CHANGED
|
@@ -19,7 +19,7 @@ import { CAT_FACTORY_TOOLS } from './tools.generated.js';
|
|
|
19
19
|
// has been round-tripped through a second type system, and every gap in that conversion becomes a
|
|
20
20
|
// tool that misdescribes its own input.
|
|
21
21
|
/** The npm version, stamped into the SDK's `User-Agent` so a deployment can attribute calls. */
|
|
22
|
-
export const MCP_SERVER_VERSION = '0.
|
|
22
|
+
export const MCP_SERVER_VERSION = '0.26.0';
|
|
23
23
|
/** The name this server reports to a host. */
|
|
24
24
|
export const MCP_SERVER_NAME = 'cat-factory';
|
|
25
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.generated.d.ts","sourceRoot":"","sources":["../src/tools.generated.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAA;IACnB,8FAA8F;IAC9F,QAAQ,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAA;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACnC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QAC5B,oBAAoB,EAAE,KAAK,CAAA;KAC5B,CAAA;IACD;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;IACD,kDAAkD;IAClD,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACtF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAuHD,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,
|
|
1
|
+
{"version":3,"file":"tools.generated.d.ts","sourceRoot":"","sources":["../src/tools.generated.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAA;IACnB,8FAA8F;IAC9F,QAAQ,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAA;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACnC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QAC5B,oBAAoB,EAAE,KAAK,CAAA;KAC5B,CAAA;IACD;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;IACD,kDAAkD;IAClD,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACtF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAuHD,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EA2jCtD,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,8BAA8B,EAAE,SAAS,0BAA0B,EAmB/E,CAAA;AAED,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBpE,CAAA"}
|
package/dist/tools.generated.js
CHANGED
|
@@ -162,7 +162,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
162
162
|
operationId: 'createPublicService',
|
|
163
163
|
readOnly: false,
|
|
164
164
|
description: 'Create a service\n\nCreate a board service, optionally backed by a repository from `GET /api/v1/repos`. The repository link is what makes the service runnable: execution resolves a task’s repository by walking up to its enclosing service frame, so a service with none holds tasks and can start none of them. A whole-repo repository that already backs a service in this account is MOUNTED rather than duplicated; a monorepo service must name its subdirectory. The board lays the service out itself: this surface publishes no coordinates. Requires an `admin` key.\n\nCalls `POST /api/v1/services` (operation `createPublicService`).',
|
|
165
|
-
inputSchema: { "type": "object", "properties": { "body": { "type": "object", "properties": { "description": { "type": "string", "maxLength": 2000 }, "repo": { "type": "object", "properties": { "directory": { "type": "string", "maxLength": 400 }, "monorepo": { "type": "boolean" }, "repoId": { "type": "number" } }, "required": ["repoId"] }, "title": { "type": "string", "minLength": 1, "maxLength": 200 }, "type": { "type": "string", "enum": ["service", "frontend", "library", "document"] } }, "description": "The request body." } }, "additionalProperties": false
|
|
165
|
+
inputSchema: { "type": "object", "properties": { "body": { "type": "object", "properties": { "description": { "type": "string", "maxLength": 2000 }, "repo": { "type": "object", "properties": { "directory": { "type": "string", "maxLength": 400 }, "monorepo": { "type": "boolean" }, "repoId": { "type": "number" } }, "required": ["repoId"] }, "title": { "type": "string", "minLength": 1, "maxLength": 200 }, "type": { "type": "string", "enum": ["service", "frontend", "library", "document"] } }, "description": "The request body." } }, "additionalProperties": false },
|
|
166
166
|
outputSchema: { "type": "object", "properties": { "description": { "type": "string" }, "serviceId": { "type": "string" }, "status": { "type": "string", "description": "One of: planned, ready, in_progress, blocked, pr_ready, done. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "type": { "type": "string", "description": "One of: frontend, service, library, document, api, database, queue, integration, external, environment. A newer deployment may report a member not in this list." } } },
|
|
167
167
|
invoke: (client, args) => client.services.create(args.body),
|
|
168
168
|
},
|
|
@@ -177,6 +177,17 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
177
177
|
outputSchema: { "type": "object", "properties": { "services": { "type": "array", "items": { "type": "object", "properties": { "description": { "type": "string" }, "serviceId": { "type": "string" }, "status": { "type": "string", "description": "One of: planned, ready, in_progress, blocked, pr_ready, done. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "type": { "type": "string", "description": "One of: frontend, service, library, document, api, database, queue, integration, external, environment. A newer deployment may report a member not in this list." } } } } } },
|
|
178
178
|
invoke: (client, args) => client.services.list(),
|
|
179
179
|
},
|
|
180
|
+
{
|
|
181
|
+
name: 'spec_get',
|
|
182
|
+
title: 'Get a service\'s in-repo specification',
|
|
183
|
+
group: 'spec',
|
|
184
|
+
operationId: 'getPublicServiceSpec',
|
|
185
|
+
readOnly: true,
|
|
186
|
+
description: 'Get a service\'s in-repo specification\n\nThe prescriptive specification stored in the service’s own repository under `spec/`: modules → feature groups → requirement items, each with its MoSCoW priority, its `aspirational`/`established` implementation state and its Given/When/Then acceptance criteria, plus the domain rules scoped to each group and the Gherkin `.feature` files rendered from the same tree. `provenance` names the branch and commit the read describes, because the default branch is not what a run with an open pull request is working against. The requirement ids here are the join key onto `requirements` on a run’s report and outcome, so criterion → evidence is a map lookup. Four outcomes are kept apart rather than folded: `present: false` means the default branch holds no spec, a `503` with `reason: "spec_read_failed"` means the repository could not be read, a `503` with `reason: "vcs_not_configured"` means the deployment or workspace wired no version control, and a partially readable spec is SERVED with `issues` naming each file that did not survive. Read-only: the spec’s write path is a reviewed commit.\n\nCalls `GET /api/v1/services/{serviceId}/spec` (operation `getPublicServiceSpec`).',
|
|
187
|
+
inputSchema: { "type": "object", "properties": { "serviceId": { "type": "string", "description": "Path parameter `serviceId`." } }, "additionalProperties": false, "required": ["serviceId"] },
|
|
188
|
+
outputSchema: { "type": "object", "properties": { "anchor": { "type": "string", "description": "One of: present, absent, unparsed. A newer deployment may report a member not in this list." }, "features": { "type": "array", "items": { "type": "object", "properties": { "chars": { "type": "number" }, "content": { "type": "string" }, "group": { "type": "string" }, "module": { "type": "string" }, "path": { "type": "string" }, "totalChars": { "type": "number" }, "truncated": { "type": "boolean" } } } }, "issues": { "type": "array", "items": { "type": "object", "properties": { "dropped": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "kind": { "type": "string", "description": "One of: read_failed, unparsed, partial, unread. A newer deployment may report a member not in this list." }, "path": { "type": "string" } } } }, "provenance": { "type": "object", "properties": { "commit": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "owner": { "type": "string" }, "provider": { "type": "string", "description": "One of: github, gitlab. A newer deployment may report a member not in this list." }, "ref": { "type": "string" }, "repo": { "type": "string" } } }, "serviceId": { "type": "string" }, "spec": { "anyOf": [{ "type": "object", "properties": { "modules": { "type": "array", "items": { "type": "object", "properties": { "groups": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "requirements": { "type": "array", "items": { "type": "object", "properties": { "acceptance": { "type": "array", "items": { "type": "object", "properties": { "given": { "type": "string" }, "id": { "type": "string" }, "outcome": { "type": "string" }, "when": { "type": "string" } } } }, "id": { "type": "string" }, "kind": { "type": "string", "description": "One of: functional, nonfunctional, constraint. A newer deployment may report a member not in this list." }, "priority": { "type": "string", "description": "One of: must, should, could. A newer deployment may report a member not in this list." }, "sourceBlockIds": { "type": "array", "items": { "type": "string" } }, "state": { "type": "string", "description": "One of: aspirational, established. A newer deployment may report a member not in this list." }, "statement": { "type": "string" }, "title": { "type": "string" } } } }, "rules": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "rationale": { "type": "string" }, "rule": { "type": "string" }, "sourceBlockIds": { "type": "array", "items": { "type": "string" } } } } }, "summary": { "type": "string" } } } }, "name": { "type": "string" }, "summary": { "type": "string" } } } }, "service": { "type": "string" }, "summary": { "type": "string" } } }, { "type": "null" }] }, "truncations": { "type": "array", "items": { "type": "object", "properties": { "section": { "type": "string", "description": "One of: requirements, rules, acceptance, features, issues. A newer deployment may report a member not in this list." }, "shown": { "type": "number" }, "total": { "type": "number" } } } } } },
|
|
189
|
+
invoke: (client, args) => client.spec.get(str(args, 'serviceId')),
|
|
190
|
+
},
|
|
180
191
|
{
|
|
181
192
|
name: 'repos_list',
|
|
182
193
|
title: 'List the repositories a service can be created against',
|
|
@@ -317,7 +328,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
317
328
|
readOnly: false,
|
|
318
329
|
hints: { "destructive": true, "idempotent": false },
|
|
319
330
|
description: 'Start (run) a task\n\nStart a task’s pipeline. Uses the request’s pipelineId, else the task’s pinned pipeline. A pipeline that can park on a human decision requires a `decide`-scope key. A task on an individual-usage model cannot be started through the API (no headless personal-credential unlock).\n\nCalls `POST /api/v1/tasks/{taskId}/start` (operation `startPublicTask`).',
|
|
320
|
-
inputSchema: { "type": "object", "properties": { "taskId": { "type": "string", "description": "Path parameter `taskId`." }, "body": { "type": "object", "properties": { "pipelineId": { "type": "string", "minLength": 1, "maxLength": 120 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["taskId"
|
|
331
|
+
inputSchema: { "type": "object", "properties": { "taskId": { "type": "string", "description": "Path parameter `taskId`." }, "body": { "type": "object", "properties": { "pipelineId": { "type": "string", "minLength": 1, "maxLength": 120 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["taskId"] },
|
|
321
332
|
outputSchema: { "type": "object", "properties": { "autoStartDependents": { "type": "boolean" }, "dependsOn": { "type": "array", "items": { "type": "string" } }, "description": { "type": "string" }, "progress": { "type": "number" }, "pullRequestUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "runId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "serviceId": { "type": "string" }, "status": { "type": "string", "description": "One of: planned, ready, in_progress, blocked, pr_ready, done. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "taskType": { "type": "string", "description": "Usually one of: feature, bug, document, spike, review, ralph, recurring. Other values are accepted where the deployment defines them." }, "title": { "type": "string" } } },
|
|
322
333
|
invoke: (client, args) => client.tasks.start(str(args, 'taskId'), args.body),
|
|
323
334
|
},
|
|
@@ -339,7 +350,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
339
350
|
operationId: 'updatePublicTask',
|
|
340
351
|
readOnly: false,
|
|
341
352
|
description: 'Edit a task\'s inputs\n\nEdit a task’s human-authored inputs before it runs: its title, its description, and `fields`, the per-case values for its own task type (checked against the descriptors `GET /api/v1/task-types` serves). All are optional. `fields` is MERGED over what the task already carries — a key you send is written, a key you omit keeps its stored value — because this API does not serve the bag back. This is what makes an input the pre-dispatch gate refused repairable: supply the value it named, then recheck the parked run.\n\nCalls `PATCH /api/v1/tasks/{taskId}` (operation `updatePublicTask`).',
|
|
342
|
-
inputSchema: { "type": "object", "properties": { "taskId": { "type": "string", "description": "Path parameter `taskId`." }, "body": { "type": "object", "properties": { "autoStartDependents": { "type": "boolean" }, "description": { "type": "string", "maxLength": 2000 }, "fields": { "type": "object", "additionalProperties": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }, { "type": "boolean" }, { "type": "number" }] } }, "title": { "type": "string", "minLength": 1, "maxLength": 200 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["taskId"
|
|
353
|
+
inputSchema: { "type": "object", "properties": { "taskId": { "type": "string", "description": "Path parameter `taskId`." }, "body": { "type": "object", "properties": { "autoStartDependents": { "type": "boolean" }, "description": { "type": "string", "maxLength": 2000 }, "fields": { "type": "object", "additionalProperties": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }, { "type": "boolean" }, { "type": "number" }] } }, "title": { "type": "string", "minLength": 1, "maxLength": 200 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["taskId"] },
|
|
343
354
|
outputSchema: { "type": "object", "properties": { "autoStartDependents": { "type": "boolean" }, "dependsOn": { "type": "array", "items": { "type": "string" } }, "description": { "type": "string" }, "progress": { "type": "number" }, "pullRequestUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "runId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "serviceId": { "type": "string" }, "status": { "type": "string", "description": "One of: planned, ready, in_progress, blocked, pr_ready, done. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "taskType": { "type": "string", "description": "Usually one of: feature, bug, document, spike, review, ralph, recurring. Other values are accepted where the deployment defines them." }, "title": { "type": "string" } } },
|
|
344
355
|
invoke: (client, args) => client.tasks.update(str(args, 'taskId'), args.body),
|
|
345
356
|
},
|
|
@@ -372,10 +383,10 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
372
383
|
operationId: 'actPublicNotification',
|
|
373
384
|
readOnly: false,
|
|
374
385
|
hints: { "destructive": true, "idempotent": false },
|
|
375
|
-
description: 'Act on a notification\n\nRun a notification’s typed side-effect and resolve it: merge the PR (merge_review / pipeline_complete) or retry the run (ci_failed / test_failed). Performs a real GitHub merge, so it requires an admin-scoped key. Only these automated-action types are actionable through the API — a notification that parks a run on an interactive human decision cannot be acted on headlessly (dismiss it instead). A card that would retry a run on an individual-usage model likewise cannot be acted on through the API.\n\nCalls `POST /api/v1/notifications/{id}/act` (operation `actPublicNotification`).',
|
|
376
|
-
inputSchema: { "type": "object", "properties": { "id": { "type": "string", "description": "Path parameter `id`." } }, "additionalProperties": false, "required": ["id"] },
|
|
386
|
+
description: 'Act on a notification\n\nRun a notification’s typed side-effect and resolve it: merge the PR (merge_review / pipeline_complete) or retry the run (ci_failed / test_failed). Performs a real GitHub merge, so it requires an admin-scoped key. Only these automated-action types are actionable through the API — a notification that parks a run on an interactive human decision cannot be acted on headlessly (dismiss it instead). A card that would retry a run on an individual-usage model likewise cannot be acted on through the API. To record how much review a merged pull request needed, call `POST /api/v1/merge-records/{recordId}/effort` (a `write` key) before or after this; a `merge_tag_request` card carries its record id on the payload and is resolved by tagging that record and dismissing the card.\n\nCalls `POST /api/v1/notifications/{id}/act` (operation `actPublicNotification`).',
|
|
387
|
+
inputSchema: { "type": "object", "properties": { "id": { "type": "string", "description": "Path parameter `id`." }, "body": { "type": "object", "properties": { "reviewEffort": { "anyOf": [{ "type": "string", "enum": ["none", "minor", "major"] }, { "type": "null" }] } }, "description": "The request body." } }, "additionalProperties": false, "required": ["id"] },
|
|
377
388
|
outputSchema: { "type": "object", "properties": { "blockId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "body": { "type": "string" }, "createdAt": { "type": "number" }, "executionId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "id": { "type": "string" }, "payload": { "anyOf": [{ "type": "object", "properties": { "assessment": { "type": "object", "properties": { "complexity": { "type": "number" }, "impact": { "type": "number" }, "rationale": { "type": "string" }, "risk": { "type": "number" } } }, "budgetAlerts": { "type": "array", "items": { "type": "object", "properties": { "projectedOverrun": { "type": "boolean" }, "threshold": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "tier": { "type": "string", "description": "One of: workspace, account. A newer deployment may report a member not in this list." } } } }, "budgetPeriodStart": { "type": "number" }, "changeClass": { "type": "string", "description": "One of: docs, test, dependency, config, source, schema, unknown. A newer deployment may report a member not in this list." }, "driftAffected": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "label": { "type": "string" }, "reason": { "type": "string", "description": "One of: key-mismatch, corrupt. A newer deployment may report a member not in this list." }, "sealedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "source": { "type": "string" } } } }, "findingCount": { "type": "number" }, "forkCount": { "type": "number" }, "initiativeReason": { "type": "string", "description": "One of: item_blocked, complete, checkpoint. A newer deployment may report a member not in this list." }, "mergeTrackRecordId": { "type": "string" }, "mergedRepos": { "type": "array", "items": { "type": "string" } }, "onCallAssessment": { "type": "object", "properties": { "culpritConfidence": { "type": "number" }, "evidence": { "type": "array", "items": { "type": "string" } }, "rationale": { "type": "string" }, "recommendation": { "type": "string", "description": "One of: revert, hold, monitor. A newer deployment may report a member not in this list." } } }, "pipelineName": { "type": "string" }, "platformAlertFailureKinds": { "type": "array", "items": { "type": "string" } }, "platformAlertTransition": { "type": "number" }, "platformAlerts": { "type": "array", "items": { "type": "string", "description": "One of: failure_rate_high, duration_p99_high, backlog_high, throughput_stalled, failure_kind_dominant, failure_kind_rate_high, sweep_degraded. A newer deployment may report a member not in this list." } }, "platformFailedTotal": { "type": "number" }, "platformFailingRuns": { "type": "array", "items": { "type": "object", "properties": { "blockId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "createdAt": { "type": "number" }, "executionId": { "type": "string" }, "failureKind": { "type": "string" } } } }, "platformWindow": { "type": "string", "description": "One of: 1h, 24h, 7d. A newer deployment may report a member not in this list." }, "prUrl": { "type": "string" }, "releaseSignals": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "id": { "type": "string" }, "kind": { "type": "string", "description": "One of: monitor, slo. A newer deployment may report a member not in this list." }, "name": { "type": "string" }, "state": { "type": "string", "description": "One of: ok, warn, alert, no_data. A newer deployment may report a member not in this list." } } } }, "revertUrl": { "type": "string" }, "sliceCount": { "type": "number" }, "targetUserId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "unmergedRepos": { "type": "array", "items": { "type": "string" } }, "unreachableAreas": { "type": "array", "items": { "type": "string", "description": "One of: ephemeralEnvironments, agentExecutor, binaryStorage. A newer deployment may report a member not in this list." } } } }, { "type": "null" }] }, "resolvedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "severity": { "type": "string", "description": "One of: normal, urgent. A newer deployment may report a member not in this list." }, "status": { "type": "string", "description": "One of: open, acted, dismissed. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "type": { "type": "string", "description": "One of: merge_review, pipeline_complete, ci_failed, test_failed, requirement_review, clarity_review, release_regression, decision_required, human_test_ready, visual_confirmation_ready, human_review, followup_pending, fork_decision_pending, judge_review, pr_review_ready, initiative, platform_health, infra_unreachable, budget_paused, budget_threshold, key_drift, merge_tag_request. A newer deployment may report a member not in this list." } } },
|
|
378
|
-
invoke: (client, args) => client.notifications.act(str(args, 'id')),
|
|
389
|
+
invoke: (client, args) => client.notifications.act(str(args, 'id'), args.body),
|
|
379
390
|
},
|
|
380
391
|
{
|
|
381
392
|
name: 'notifications_dismiss',
|
|
@@ -462,7 +473,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
462
473
|
readOnly: false,
|
|
463
474
|
hints: { "destructive": true, "idempotent": true },
|
|
464
475
|
description: 'Register or update the outbound webhook\n\nRegister the HTTPS endpoint deliveries are POSTed to, or update the one already registered. Every omitted field keeps its stored value, so subscribing to run events is a one-field call that re-sends neither the URL nor the secret. `url` is required only on the first call, when there is nothing registered to keep; omitting it otherwise leaves the endpoint alone. Supplying `secret` rotates the signing secret; omitting it keeps the current one. The endpoint must be `https:` and publicly routable unless the deployment widened its allow-list.\n\nCalls `PUT /api/v1/notification-webhook` (operation `putPublicNotificationWebhook`).',
|
|
465
|
-
inputSchema: { "type": "object", "properties": { "body": { "type": "object", "properties": { "alertEvents": { "type": "array", "items": { "type": "string", "enum": ["platform_health.firing", "platform_health.resolved"] } }, "enabled": { "type": "boolean" }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "runEvents": { "type": "array", "items": { "type": "string", "enum": ["run.started", "run.completed", "run.failed"] } }, "secret": { "type": "string", "minLength": 16, "maxLength": 200 }, "types": { "type": "array", "items": { "type": "string", "enum": ["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"] } }, "url": { "type": "string", "maxLength": 2000 } }, "description": "The request body." } }, "additionalProperties": false
|
|
476
|
+
inputSchema: { "type": "object", "properties": { "body": { "type": "object", "properties": { "alertEvents": { "type": "array", "items": { "type": "string", "enum": ["platform_health.firing", "platform_health.resolved"] } }, "enabled": { "type": "boolean" }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "runEvents": { "type": "array", "items": { "type": "string", "enum": ["run.started", "run.completed", "run.failed"] } }, "secret": { "type": "string", "minLength": 16, "maxLength": 200 }, "types": { "type": "array", "items": { "type": "string", "enum": ["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"] } }, "url": { "type": "string", "maxLength": 2000 } }, "description": "The request body." } }, "additionalProperties": false },
|
|
466
477
|
outputSchema: { "type": "object", "properties": { "alertEvents": { "type": "array", "items": { "type": "string", "description": "One of: platform_health.firing, platform_health.resolved. A newer deployment may report a member not in this list." } }, "enabled": { "type": "boolean" }, "hasSecret": { "type": "boolean" }, "id": { "type": "string" }, "name": { "type": "string" }, "runEvents": { "type": "array", "items": { "type": "string", "description": "One of: run.started, run.completed, run.failed. A newer deployment may report a member not in this list." } }, "types": { "type": "array", "items": { "type": "string", "description": "One of: merge_review, pipeline_complete, ci_failed, test_failed, requirement_review, clarity_review, release_regression, decision_required, human_test_ready, visual_confirmation_ready, human_review, followup_pending, fork_decision_pending, judge_review, pr_review_ready, initiative, platform_health, infra_unreachable, budget_paused, budget_threshold, key_drift, merge_tag_request. A newer deployment may report a member not in this list." } }, "updatedAt": { "type": "number" }, "url": { "type": "string" } } },
|
|
467
478
|
invoke: (client, args) => client.webhook.set(args.body),
|
|
468
479
|
},
|
|
@@ -474,7 +485,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
474
485
|
readOnly: false,
|
|
475
486
|
hints: { "destructive": true, "idempotent": true },
|
|
476
487
|
description: 'Register or update one named outbound webhook\n\nRegister an endpoint under an id YOU choose (1-63 characters of lowercase letters, digits, `-` or `_`), or update the one already there. Idempotent by id, so an integration can enroll its own receiver on every cold start without tracking whether it has enrolled before, and without displacing anything else the workspace registered. Every field follows the same keep-on-omit rule as the unnamed route, `url` being required only when there is nothing under this id to keep, and a supplied `secret` rotating this endpoint\'s own signing secret. Refused with `reason: "invalid_webhook_id"` for an id that is not a slug, and `reason: "webhook_limit_reached"` (409) when registering a NEW id would exceed the per-workspace cap; editing an existing one is admitted either way.\n\nCalls `PUT /api/v1/notification-webhooks/{webhookId}` (operation `putPublicNamedNotificationWebhook`).',
|
|
477
|
-
inputSchema: { "type": "object", "properties": { "webhookId": { "type": "string", "description": "Path parameter `webhookId`." }, "body": { "type": "object", "properties": { "alertEvents": { "type": "array", "items": { "type": "string", "enum": ["platform_health.firing", "platform_health.resolved"] } }, "enabled": { "type": "boolean" }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "runEvents": { "type": "array", "items": { "type": "string", "enum": ["run.started", "run.completed", "run.failed"] } }, "secret": { "type": "string", "minLength": 16, "maxLength": 200 }, "types": { "type": "array", "items": { "type": "string", "enum": ["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"] } }, "url": { "type": "string", "maxLength": 2000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["webhookId"
|
|
488
|
+
inputSchema: { "type": "object", "properties": { "webhookId": { "type": "string", "description": "Path parameter `webhookId`." }, "body": { "type": "object", "properties": { "alertEvents": { "type": "array", "items": { "type": "string", "enum": ["platform_health.firing", "platform_health.resolved"] } }, "enabled": { "type": "boolean" }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "runEvents": { "type": "array", "items": { "type": "string", "enum": ["run.started", "run.completed", "run.failed"] } }, "secret": { "type": "string", "minLength": 16, "maxLength": 200 }, "types": { "type": "array", "items": { "type": "string", "enum": ["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"] } }, "url": { "type": "string", "maxLength": 2000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["webhookId"] },
|
|
478
489
|
outputSchema: { "type": "object", "properties": { "alertEvents": { "type": "array", "items": { "type": "string", "description": "One of: platform_health.firing, platform_health.resolved. A newer deployment may report a member not in this list." } }, "enabled": { "type": "boolean" }, "hasSecret": { "type": "boolean" }, "id": { "type": "string" }, "name": { "type": "string" }, "runEvents": { "type": "array", "items": { "type": "string", "description": "One of: run.started, run.completed, run.failed. A newer deployment may report a member not in this list." } }, "types": { "type": "array", "items": { "type": "string", "description": "One of: merge_review, pipeline_complete, ci_failed, test_failed, requirement_review, clarity_review, release_regression, decision_required, human_test_ready, visual_confirmation_ready, human_review, followup_pending, fork_decision_pending, judge_review, pr_review_ready, initiative, platform_health, infra_unreachable, budget_paused, budget_threshold, key_drift, merge_tag_request. A newer deployment may report a member not in this list." } }, "updatedAt": { "type": "number" }, "url": { "type": "string" } } },
|
|
479
490
|
invoke: (client, args) => client.webhook.setNamed(str(args, 'webhookId'), args.body),
|
|
480
491
|
},
|
|
@@ -551,7 +562,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
551
562
|
operationId: 'approvePublicRunStep',
|
|
552
563
|
readOnly: false,
|
|
553
564
|
description: 'Approve a parked step\n\nApprove the proposal a gated step is holding up, optionally replacing it with an edited one (the edit is what flows to every downstream step), and advance the run. The `approvalId` comes from the run\'s decision list; passing it back is what makes a racing app user and a racing integration resolve the same gate. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/approvals/{approvalId}/approve` (operation `approvePublicRunStep`).',
|
|
554
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "approvalId": { "type": "string", "description": "Path parameter `approvalId`." }, "body": { "type": "object", "properties": { "proposal": { "type": "string", "maxLength": 50000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "approvalId"
|
|
565
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "approvalId": { "type": "string", "description": "Path parameter `approvalId`." }, "body": { "type": "object", "properties": { "proposal": { "type": "string", "maxLength": 50000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "approvalId"] },
|
|
555
566
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
556
567
|
invoke: (client, args) => client.decisions.approveStep(str(args, 'runId'), str(args, 'approvalId'), args.body),
|
|
557
568
|
},
|
|
@@ -573,7 +584,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
573
584
|
operationId: 'challengePublicRunPrReviewFinding',
|
|
574
585
|
readOnly: false,
|
|
575
586
|
description: 'Challenge a PR review finding\n\nDispatch a read-only investigator to re-examine one finding against the full source, optionally with a specific concern. It upholds, strengthens or retracts the finding, and the review re-parks carrying the verdict. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/pr-review/findings/{findingId}/challenge` (operation `challengePublicRunPrReviewFinding`).',
|
|
576
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "findingId": { "type": "string", "description": "Path parameter `findingId`." }, "body": { "type": "object", "properties": { "question": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "findingId"
|
|
587
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "findingId": { "type": "string", "description": "Path parameter `findingId`." }, "body": { "type": "object", "properties": { "question": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "findingId"] },
|
|
577
588
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
578
589
|
invoke: (client, args) => client.decisions.challengePrReviewFinding(str(args, 'runId'), str(args, 'findingId'), args.body),
|
|
579
590
|
},
|
|
@@ -584,7 +595,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
584
595
|
operationId: 'choosePublicRunFork',
|
|
585
596
|
readOnly: false,
|
|
586
597
|
description: 'Choose an implementation approach\n\nPick one of the proposed implementation forks (by id) or submit your own approach. The Coder then runs with the choice folded in as a binding directive. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/fork/choose` (operation `choosePublicRunFork`).',
|
|
587
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "custom": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "forkId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"
|
|
598
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "custom": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "forkId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"] },
|
|
588
599
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
589
600
|
invoke: (client, args) => client.decisions.chooseFork(str(args, 'runId'), args.body),
|
|
590
601
|
},
|
|
@@ -650,7 +661,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
650
661
|
operationId: 'incorporatePublicRunRequirements',
|
|
651
662
|
readOnly: false,
|
|
652
663
|
description: 'Incorporate the answers\n\nFold the recorded answers into one standardized requirements document. Asynchronous — the run re-reviews in the background, so the response shows the review `incorporating`. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/requirements/incorporate` (operation `incorporatePublicRunRequirements`).',
|
|
653
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "feedback": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"
|
|
664
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "feedback": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"] },
|
|
654
665
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
655
666
|
invoke: (client, args) => client.decisions.incorporate(str(args, 'runId'), args.body),
|
|
656
667
|
},
|
|
@@ -661,7 +672,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
661
672
|
operationId: 'incorporatePublicRunBrainstorm',
|
|
662
673
|
readOnly: false,
|
|
663
674
|
description: 'Incorporate brainstorm picks\n\nFold the picks into one converged direction. ASYNCHRONOUS: the response shows the session `incorporating` while the durable driver folds and re-runs in the background. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/brainstorm/{stage}/incorporate` (operation `incorporatePublicRunBrainstorm`).',
|
|
664
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "stage": { "type": "string", "description": "Path parameter `stage`." }, "body": { "type": "object", "properties": { "feedback": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "stage"
|
|
675
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "stage": { "type": "string", "description": "Path parameter `stage`." }, "body": { "type": "object", "properties": { "feedback": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "stage"] },
|
|
665
676
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
666
677
|
invoke: (client, args) => client.decisions.incorporateBrainstorm(str(args, 'runId'), str(args, 'stage'), args.body),
|
|
667
678
|
},
|
|
@@ -672,7 +683,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
672
683
|
operationId: 'incorporatePublicRunClarity',
|
|
673
684
|
readOnly: false,
|
|
674
685
|
description: 'Incorporate clarity answers\n\nFold the recorded answers into one standardized bug report. ASYNCHRONOUS: the response shows the review `incorporating` while the durable driver folds and re-reviews in the background. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/clarity/incorporate` (operation `incorporatePublicRunClarity`).',
|
|
675
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "feedback": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"
|
|
686
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "feedback": { "type": "string", "maxLength": 4000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"] },
|
|
676
687
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
677
688
|
invoke: (client, args) => client.decisions.incorporateClarity(str(args, 'runId'), args.body),
|
|
678
689
|
},
|
|
@@ -738,7 +749,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
738
749
|
operationId: 'rejectPublicRunStep',
|
|
739
750
|
readOnly: false,
|
|
740
751
|
description: 'Reject a parked step\n\nReject the gated proposal: the run stops entirely, recording a terminal `rejected` failure the board can retry. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/approvals/{approvalId}/reject` (operation `rejectPublicRunStep`).',
|
|
741
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "approvalId": { "type": "string", "description": "Path parameter `approvalId`." }, "body": { "type": "object", "properties": { "reason": { "type": "string", "maxLength": 2000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "approvalId"
|
|
752
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "approvalId": { "type": "string", "description": "Path parameter `approvalId`." }, "body": { "type": "object", "properties": { "reason": { "type": "string", "maxLength": 2000 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "approvalId"] },
|
|
742
753
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
743
754
|
invoke: (client, args) => client.decisions.rejectStep(str(args, 'runId'), str(args, 'approvalId'), args.body),
|
|
744
755
|
},
|
|
@@ -903,7 +914,7 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
903
914
|
operationId: 'resolvePublicRunPrReview',
|
|
904
915
|
readOnly: false,
|
|
905
916
|
description: 'Resolve a parked PR deep review\n\nRecord the curated finding selection and say what to do with it: `finish` completes the read-only review, `fix` hands the selected findings to a fixer that commits onto the reviewed PR branch, `post` publishes them as inline PR review comments. `fix` and `post` need at least one selected finding and act on the real pull request. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/pr-review/resolve` (operation `resolvePublicRunPrReview`).',
|
|
906
|
-
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "action": { "type": "string", "enum": ["finish", "fix", "post"] }, "findingIds": { "type": "array", "items": { "type": "string" } } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"
|
|
917
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "body": { "type": "object", "properties": { "action": { "type": "string", "enum": ["finish", "fix", "post"] }, "findingIds": { "type": "array", "items": { "type": "string" } } }, "description": "The request body." } }, "additionalProperties": false, "required": ["runId"] },
|
|
907
918
|
outputSchema: { "type": "object", "properties": { "decisions": { "type": "array", "items": { "description": "Discriminated by `kind` (requirements-review | fork | judge | input-gate | approval-gate | agent-decision | clarity-review | brainstorm | pr-review | human-test | visual-confirmation | follow-ups | interview). A newer deployment may report a variant not in this list." } }, "parked": { "type": "boolean" }, "runId": { "type": "string" }, "status": { "type": "string", "description": "One of: running, blocked, paused, done, failed. A newer deployment may report a member not in this list." }, "taskId": { "type": "string" }, "unanswerable": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "reason": { "type": "string", "description": "One of: human_wait_gate, unclassified_gate, unwired_interview_gate. A newer deployment may report a member not in this list." }, "stepIndex": { "type": "number" }, "stepKind": { "type": "string" } } } } } },
|
|
908
919
|
invoke: (client, args) => client.decisions.resolvePrReview(str(args, 'runId'), args.body),
|
|
909
920
|
},
|
|
@@ -1105,6 +1116,50 @@ export const CAT_FACTORY_TOOLS = [
|
|
|
1105
1116
|
outputSchema: { "type": "object", "properties": { "artifacts": { "type": "array", "items": { "type": "object", "properties": { "artifactId": { "type": "string" }, "byteSize": { "type": "number" }, "contentType": { "type": "string" }, "createdAt": { "type": "number" }, "hash": { "type": "string" }, "kind": { "type": "string", "description": "One of: screenshot, reference. A newer deployment may report a member not in this list." }, "scope": { "type": "string", "description": "One of: run, task. A newer deployment may report a member not in this list." }, "view": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } } } } },
|
|
1106
1117
|
invoke: (client, args) => client.evidence.listArtifacts(str(args, 'runId')),
|
|
1107
1118
|
},
|
|
1119
|
+
{
|
|
1120
|
+
name: 'merge_records_get',
|
|
1121
|
+
title: 'Get one merge record',
|
|
1122
|
+
group: 'merge_records',
|
|
1123
|
+
operationId: 'getPublicMergeRecord',
|
|
1124
|
+
readOnly: true,
|
|
1125
|
+
description: 'Get one merge record\n\nThe same record addressed by its own id, for a caller that holds one without the run: the id a `merge_tag_request` notification carries on its payload, for instance. Scoped to the calling key’s workspace.\n\nCalls `GET /api/v1/merge-records/{recordId}` (operation `getPublicMergeRecord`).',
|
|
1126
|
+
inputSchema: { "type": "object", "properties": { "recordId": { "type": "string", "description": "Path parameter `recordId`." } }, "additionalProperties": false, "required": ["recordId"] },
|
|
1127
|
+
outputSchema: { "type": "object", "properties": { "changeClass": { "type": "string", "description": "One of: docs, test, dependency, config, source, schema, unknown. A newer deployment may report a member not in this list." }, "changedFileCount": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "complexity": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "createdAt": { "type": "number" }, "decision": { "type": "string", "description": "One of: pending_review, auto_merged, human_merged, external_merged, rejected. A newer deployment may report a member not in this list." }, "impact": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "mergePresetId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "mergePresetName": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "prNumber": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "prUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "provider": { "anyOf": [{ "type": "string", "description": "One of: github, gitlab. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "recordId": { "type": "string" }, "repoId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "resolvedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "reviewEffort": { "anyOf": [{ "type": "string", "description": "One of: none, minor, major. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "risk": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "runId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "taggedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "taskId": { "type": "string" } } },
|
|
1128
|
+
invoke: (client, args) => client.mergeRecords.get(str(args, 'recordId')),
|
|
1129
|
+
},
|
|
1130
|
+
{
|
|
1131
|
+
name: 'merge_records_get_for_run',
|
|
1132
|
+
title: 'Get the merge decision a run left behind',
|
|
1133
|
+
group: 'merge_records',
|
|
1134
|
+
operationId: 'getPublicRunMergeRecord',
|
|
1135
|
+
readOnly: true,
|
|
1136
|
+
description: 'Get the merge decision a run left behind\n\nWhat kind of change the run’s pull request made (a change class derived on the backend from the changed-file list, never from an agent’s opinion), what the merger scored it, which merge-threshold preset the decision was compared against, what ultimately happened to the pull request, and how much review a human spent if anybody has tagged it. The entry point of the merge-evidence loop for a caller holding a run id: it also hands back the `recordId` the effort-tag route takes. A run whose pipeline had no `merger` step made no merge decision and answers `404` with `details.reason: "no_merge_record"`, distinct from the `"run_not_found"` a run this key cannot read gets.\n\nCalls `GET /api/v1/runs/{runId}/merge-record` (operation `getPublicRunMergeRecord`).',
|
|
1137
|
+
inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." } }, "additionalProperties": false, "required": ["runId"] },
|
|
1138
|
+
outputSchema: { "type": "object", "properties": { "changeClass": { "type": "string", "description": "One of: docs, test, dependency, config, source, schema, unknown. A newer deployment may report a member not in this list." }, "changedFileCount": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "complexity": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "createdAt": { "type": "number" }, "decision": { "type": "string", "description": "One of: pending_review, auto_merged, human_merged, external_merged, rejected. A newer deployment may report a member not in this list." }, "impact": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "mergePresetId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "mergePresetName": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "prNumber": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "prUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "provider": { "anyOf": [{ "type": "string", "description": "One of: github, gitlab. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "recordId": { "type": "string" }, "repoId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "resolvedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "reviewEffort": { "anyOf": [{ "type": "string", "description": "One of: none, minor, major. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "risk": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "runId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "taggedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "taskId": { "type": "string" } } },
|
|
1139
|
+
invoke: (client, args) => client.mergeRecords.getForRun(str(args, 'runId')),
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
name: 'merge_records_list_rollups',
|
|
1143
|
+
title: 'List the per-change-class merge rollups',
|
|
1144
|
+
group: 'merge_records',
|
|
1145
|
+
operationId: 'listPublicMergeClassRollups',
|
|
1146
|
+
readOnly: true,
|
|
1147
|
+
description: 'List the per-change-class merge rollups\n\nEvery change class’s accumulated track record for the workspace, as one aggregate: how many records it holds, how many landed and by which route (auto-merged, merged through the app, merged directly on the provider), how many were rejected or are still awaiting review, and the distribution of reviewer-effort tags. This is the evidence that justifies widening a per-class auto-merge rule; nothing widens one automatically. A class with no records is present as zeros rather than absent, so "nothing has landed here yet" never reads as a class the response left out. `unknown` is a real class (no changed-file list was available) and never matches a per-class rule.\n\nCalls `GET /api/v1/merge-records/rollups` (operation `listPublicMergeClassRollups`).',
|
|
1148
|
+
inputSchema: { "type": "object", "properties": {}, "additionalProperties": false },
|
|
1149
|
+
outputSchema: { "type": "object", "properties": { "rollups": { "type": "array", "items": { "type": "object", "properties": { "autoMerged": { "type": "number" }, "changeClass": { "type": "string", "description": "One of: docs, test, dependency, config, source, schema, unknown. A newer deployment may report a member not in this list." }, "effort": { "type": "object", "properties": { "major": { "type": "number" }, "minor": { "type": "number" }, "none": { "type": "number" }, "untagged": { "type": "number" } } }, "externalMerged": { "type": "number" }, "humanMerged": { "type": "number" }, "merged": { "type": "number" }, "pendingReview": { "type": "number" }, "rejected": { "type": "number" }, "total": { "type": "number" } } } } } },
|
|
1150
|
+
invoke: (client, args) => client.mergeRecords.listRollups(),
|
|
1151
|
+
},
|
|
1152
|
+
{
|
|
1153
|
+
name: 'merge_records_tag_effort',
|
|
1154
|
+
title: 'Tag the reviewer effort a merge took',
|
|
1155
|
+
group: 'merge_records',
|
|
1156
|
+
operationId: 'tagPublicMergeReviewEffort',
|
|
1157
|
+
readOnly: false,
|
|
1158
|
+
description: 'Tag the reviewer effort a merge took\n\nRecord how much review a landed pull request actually needed (`none` for zero blocking comments, `minor` for a nit pass, `major` for real rework), or `null` to clear the tag. This is the ground truth the auto-merge score thresholds are trying to approximate, and it is never mandatory: an untagged merge records a null tag and nothing downstream breaks. A `write` key, not an `admin` one: the pull request already landed, so tagging it merges nothing. Idempotent, and orthogonal to the decision, so a record can be tagged whenever the effort becomes known, before or after the `act` that merged it.\n\nCalls `POST /api/v1/merge-records/{recordId}/effort` (operation `tagPublicMergeReviewEffort`).',
|
|
1159
|
+
inputSchema: { "type": "object", "properties": { "recordId": { "type": "string", "description": "Path parameter `recordId`." }, "body": { "type": "object", "properties": { "reviewEffort": { "anyOf": [{ "type": "string", "enum": ["none", "minor", "major"] }, { "type": "null" }], "description": "Always present in a response; `null` when the server has no value for it." } }, "required": ["reviewEffort"], "description": "The request body." } }, "additionalProperties": false, "required": ["recordId", "body"] },
|
|
1160
|
+
outputSchema: { "type": "object", "properties": { "changeClass": { "type": "string", "description": "One of: docs, test, dependency, config, source, schema, unknown. A newer deployment may report a member not in this list." }, "changedFileCount": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "complexity": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "createdAt": { "type": "number" }, "decision": { "type": "string", "description": "One of: pending_review, auto_merged, human_merged, external_merged, rejected. A newer deployment may report a member not in this list." }, "impact": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "mergePresetId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "mergePresetName": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "prNumber": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "prUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "provider": { "anyOf": [{ "type": "string", "description": "One of: github, gitlab. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "recordId": { "type": "string" }, "repoId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "resolvedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "reviewEffort": { "anyOf": [{ "type": "string", "description": "One of: none, minor, major. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "risk": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "runId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "taggedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "taskId": { "type": "string" } } },
|
|
1161
|
+
invoke: (client, args) => client.mergeRecords.tagEffort(str(args, 'recordId'), args.body),
|
|
1162
|
+
},
|
|
1108
1163
|
{
|
|
1109
1164
|
name: 'keys_create',
|
|
1110
1165
|
title: 'Provision an API key',
|
|
@@ -1163,6 +1218,7 @@ export const CAT_FACTORY_OMITTED_OPERATIONS = [
|
|
|
1163
1218
|
export const CAT_FACTORY_TOOL_GROUPS = {
|
|
1164
1219
|
'jobs': 'Headless jobs (a public, inline pipeline run against a brief): start, poll or stream one.',
|
|
1165
1220
|
'services': 'The workspace\'s board services, the frames tasks are created under: list them, or create one (optionally backed by a repository).',
|
|
1221
|
+
'spec': 'A service\'s in-repo specification: the structured requirement tree (modules → feature groups → requirements, with their acceptance criteria and domain rules), the Gherkin rendered from it, and the branch and commit the read describes. Read-only; the requirement ids are the join key onto a run\'s report and outcome.',
|
|
1166
1222
|
'repos': 'The repositories this workspace can back a service with, and which service each already backs: the discovery half of service creation.',
|
|
1167
1223
|
'tasks': 'A board task\'s whole lifecycle: create, edit, start, stop, retry, watch, delete, plus the two relationships that outlive a create: the tasks it waits for, and the requirements documents it is built against.',
|
|
1168
1224
|
'pipelines': 'The pipelines a task can be started with, and whether each is headless-startable.',
|
|
@@ -1174,6 +1230,7 @@ export const CAT_FACTORY_TOOL_GROUPS = {
|
|
|
1174
1230
|
'decisions': 'Every way a run stops for a person: approval gates, review and brainstorm loops, forks, judge verdicts, PR review findings, the human-verdict gates, follow-up triage and the interview gates.',
|
|
1175
1231
|
'debug': 'A run\'s recorded telemetry: LLM calls, the context each agent was given, the tool calls it made, infra logs, and the whole model-activity bundle as one document.',
|
|
1176
1232
|
'evidence': 'What a run proved: the engine\'s verification report, the outcome summary behind it, and the artifacts it captured, bytes included.',
|
|
1233
|
+
'merge_records': 'The evidence behind the auto-merge policy: what kind of change each merged run made, what the merger scored it, what happened to the pull request, and how much review a human actually spent, plus the per-class rollups that justify widening a rule. Reading takes a `read` key and recording an effort tag a `write` one: neither merges anything.',
|
|
1177
1234
|
'keys': 'The workspace\'s own API keys: provision one headlessly, list them, revoke one (and what it minted).',
|
|
1178
1235
|
};
|
|
1179
1236
|
//# sourceMappingURL=tools.generated.js.map
|