@cat-factory/mcp-server 0.43.1 → 0.45.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 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.43.1";
5
+ export declare const MCP_SERVER_VERSION = "0.45.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.43.1';
22
+ export const MCP_SERVER_VERSION = '0.45.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;AAuID,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAuxCtD,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,CAwBpE,CAAA"}
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;AAuID,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAm0CtD,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,CAyBpE,CAAA"}
@@ -179,7 +179,7 @@ export const CAT_FACTORY_TOOLS = [
179
179
  readOnly: false,
180
180
  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`).',
181
181
  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 },
182
- outputSchema: { "type": "object", "properties": { "description": { "type": "string" }, "provisioning": { "description": "Discriminated by `type` (kubernetes | custom). A newer deployment may report a variant not in this list." }, "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." } } },
182
+ outputSchema: { "type": "object", "properties": { "description": { "type": "string" }, "provisioning": { "description": "Discriminated by `type` (kubernetes | infraless | custom). A newer deployment may report a variant not in this list." }, "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." } } },
183
183
  invoke: (client, args) => client.services.create(args.body),
184
184
  },
185
185
  {
@@ -201,7 +201,7 @@ export const CAT_FACTORY_TOOLS = [
201
201
  readOnly: true,
202
202
  description: 'List the workspace\'s services\n\nList the board service frames in the key’s workspace, so a caller can discover the serviceId to create/list tasks under.\n\nCalls `GET /api/v1/services` (operation `listPublicServices`).',
203
203
  inputSchema: { "type": "object", "properties": {}, "additionalProperties": false },
204
- outputSchema: { "type": "object", "properties": { "services": { "type": "array", "items": { "type": "object", "properties": { "description": { "type": "string" }, "provisioning": { "description": "Discriminated by `type` (kubernetes | custom). A newer deployment may report a variant not in this list." }, "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." } } } } } },
204
+ outputSchema: { "type": "object", "properties": { "services": { "type": "array", "items": { "type": "object", "properties": { "description": { "type": "string" }, "provisioning": { "description": "Discriminated by `type` (kubernetes | infraless | custom). A newer deployment may report a variant not in this list." }, "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." } } } } } },
205
205
  invoke: (client, args) => client.services.list(),
206
206
  },
207
207
  {
@@ -210,9 +210,9 @@ export const CAT_FACTORY_TOOLS = [
210
210
  group: 'services',
211
211
  operationId: 'updatePublicService',
212
212
  readOnly: false,
213
- description: 'Patch a service, including where its per-run manifests live\n\nChange a service’s authored fields, and declare its `provisioning`: where the manifests for a per-run environment are read from. That second half is what a connected cluster alone cannot supply, because the platform keeps “which cluster” (one per workspace) apart from “which manifests” (one set per service). An omitted `provisioning` leaves the stored one alone rather than clearing it. Board coordinates are deliberately absent, as they are on service creation.\n\nCalls `PATCH /api/v1/services/{serviceId}` (operation `updatePublicService`).',
214
- inputSchema: { "type": "object", "properties": { "serviceId": { "type": "string", "description": "Path parameter `serviceId`." }, "body": { "type": "object", "properties": { "description": { "type": "string", "maxLength": 2000 }, "provisioning": { "anyOf": [{ "type": "object", "properties": { "manifestSource": { "anyOf": [{ "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 500 }, "renderer": { "type": "string", "enum": ["raw", "kustomize"] }, "type": { "const": "colocated" } }, "required": ["path", "type"] }, { "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 500 }, "ref": { "type": "string", "minLength": 1 }, "renderer": { "type": "string", "enum": ["raw", "kustomize"] }, "repo": { "type": "string" }, "type": { "const": "separate" } }, "required": ["path", "repo", "type"] }], "description": "Discriminated by `type` (colocated | separate)." }, "type": { "const": "kubernetes" } }, "required": ["manifestSource", "type"] }, { "type": "object", "properties": { "manifestId": { "type": "string", "minLength": 1, "maxLength": 64 }, "manifestPath": { "type": "string", "maxLength": 500 }, "type": { "const": "custom" } }, "required": ["manifestId", "type"] }], "description": "Discriminated by `type` (kubernetes | custom)." }, "title": { "type": "string", "minLength": 1, "maxLength": 200 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["serviceId"] },
215
- outputSchema: { "type": "object", "properties": { "description": { "type": "string" }, "provisioning": { "description": "Discriminated by `type` (kubernetes | custom). A newer deployment may report a variant not in this list." }, "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." } } },
213
+ description: 'Patch a service, including where its per-run manifests live\n\nChange a service’s authored fields, and declare its `provisioning`: where the manifests for a per-run environment are read from. That second half is what a connected cluster alone cannot supply, because the platform keeps “which cluster” (one per workspace) apart from “which manifests” (one set per service). An omitted `provisioning` leaves the stored one alone rather than clearing it, so correcting a title cannot un-deploy a service; send `provisioning: { "type": "infraless" }` to take the pin BACK, which leaves the service with no environment to provision and reads back with no `provisioning` at all. Board coordinates are deliberately absent, as they are on service creation.\n\nCalls `PATCH /api/v1/services/{serviceId}` (operation `updatePublicService`).',
214
+ inputSchema: { "type": "object", "properties": { "serviceId": { "type": "string", "description": "Path parameter `serviceId`." }, "body": { "type": "object", "properties": { "description": { "type": "string", "maxLength": 2000 }, "provisioning": { "anyOf": [{ "type": "object", "properties": { "manifestSource": { "anyOf": [{ "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 500 }, "renderer": { "type": "string", "enum": ["raw", "kustomize"] }, "type": { "const": "colocated" } }, "required": ["path", "type"] }, { "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 500 }, "ref": { "type": "string", "minLength": 1 }, "renderer": { "type": "string", "enum": ["raw", "kustomize"] }, "repo": { "type": "string" }, "type": { "const": "separate" } }, "required": ["path", "repo", "type"] }], "description": "Discriminated by `type` (colocated | separate)." }, "type": { "const": "kubernetes" } }, "required": ["manifestSource", "type"] }, { "type": "object", "properties": { "type": { "const": "infraless" } }, "required": ["type"] }, { "type": "object", "properties": { "manifestId": { "type": "string", "minLength": 1, "maxLength": 64 }, "manifestPath": { "type": "string", "maxLength": 500 }, "type": { "const": "custom" } }, "required": ["manifestId", "type"] }], "description": "Discriminated by `type` (kubernetes | infraless | custom)." }, "title": { "type": "string", "minLength": 1, "maxLength": 200 } }, "description": "The request body." } }, "additionalProperties": false, "required": ["serviceId"] },
215
+ outputSchema: { "type": "object", "properties": { "description": { "type": "string" }, "provisioning": { "description": "Discriminated by `type` (kubernetes | infraless | custom). A newer deployment may report a variant not in this list." }, "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." } } },
216
216
  invoke: (client, args) => client.services.update(str(args, 'serviceId'), args.body),
217
217
  },
218
218
  {
@@ -480,6 +480,39 @@ export const CAT_FACTORY_TOOLS = [
480
480
  outputSchema: { "type": "object", "properties": { "taskTypes": { "type": "array", "items": { "type": "object", "properties": { "builtin": { "type": "boolean" }, "category": { "type": "string" }, "defaultPipelineId": { "type": "string" }, "description": { "type": "string" }, "fields": { "type": "array", "items": { "type": "object", "properties": { "default": { "type": "string" }, "defaultValues": { "type": "array", "items": { "type": "string" } }, "help": { "type": "string" }, "key": { "type": "string" }, "label": { "type": "string" }, "max": { "type": "number" }, "maxLength": { "type": "integer" }, "min": { "type": "number" }, "options": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } } } }, "placeholder": { "type": "string" }, "required": { "type": "boolean" }, "section": { "type": "string" }, "showWhen": { "type": "object", "properties": { "equals": {}, "includes": { "type": "string" }, "key": { "type": "string" } } }, "type": { "type": "string", "description": "One of: text, password, select, number, checkbox, textarea, checkbox-group, path. A newer deployment may report a member not in this list." } } } }, "label": { "type": "string" }, "taskType": { "type": "string" } } } } } },
481
481
  invoke: (client, args) => client.taskTypes.list(),
482
482
  },
483
+ {
484
+ name: 'use_cases_get',
485
+ title: 'Get one use case',
486
+ group: 'use_cases',
487
+ operationId: 'getPublicUseCase',
488
+ readOnly: true,
489
+ description: 'Get one use case\n\nRead one registered use case by id: the same projection the catalog returns, for a caller that already holds the id and wants the current parameters and model availability without paging the catalog.\n\nCalls `GET /api/v1/use-cases/{useCaseId}` (operation `getPublicUseCase`).',
490
+ inputSchema: { "type": "object", "properties": { "useCaseId": { "type": "string", "description": "Path parameter `useCaseId`." } }, "additionalProperties": false, "required": ["useCaseId"] },
491
+ outputSchema: { "type": "object", "properties": { "category": { "type": "string" }, "description": { "type": "string" }, "generation": { "type": "object", "properties": { "maxOutputTokens": { "type": "object", "properties": { "default": { "type": "number" }, "max": { "type": "number" }, "min": { "type": "number" } } }, "temperature": { "type": "object", "properties": { "default": { "type": "number" }, "max": { "type": "number" }, "min": { "type": "number" } } } } }, "label": { "type": "string" }, "models": { "type": "array", "items": { "type": "object", "properties": { "available": { "type": "boolean" }, "default": { "type": "boolean" }, "description": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "unavailableReason": { "type": "string", "description": "One of: provider_unavailable, container_only. A newer deployment may report a member not in this list." } } } }, "parameters": { "type": "array", "items": { "type": "object", "properties": { "default": { "type": "string" }, "defaultValues": { "type": "array", "items": { "type": "string" } }, "help": { "type": "string" }, "key": { "type": "string" }, "label": { "type": "string" }, "max": { "type": "number" }, "maxLength": { "type": "integer" }, "min": { "type": "number" }, "options": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } } } }, "placeholder": { "type": "string" }, "required": { "type": "boolean" }, "section": { "type": "string" }, "showWhen": { "type": "object", "properties": { "equals": {}, "includes": { "type": "string" }, "key": { "type": "string" } } }, "type": { "type": "string", "description": "One of: text, textarea, number, select, checkbox, checkbox-group. A newer deployment may report a member not in this list." } } } }, "useCaseId": { "type": "string" } } },
492
+ invoke: (client, args) => client.useCases.get(str(args, 'useCaseId')),
493
+ },
494
+ {
495
+ name: 'use_cases_invoke',
496
+ title: 'Run a use case',
497
+ group: 'use_cases',
498
+ operationId: 'invokePublicUseCase',
499
+ readOnly: false,
500
+ description: 'Run a use case\n\nRun one use case and answer with the generated text. Synchronous: this is a single inline model call with no repository, no container and no run, so there is no job to poll. The parameters are validated against the use case’s own descriptors (`422 use_case_parameters_invalid`, naming every problem at once); a model outside the use case’s declared list is refused (`422 use_case_model_not_allowed`) rather than substituted, and so is one this deployment cannot serve inline (`503 use_case_model_unavailable`). An exhausted budget is `429 budget_exhausted`, and a model that answers with no usable text is `503 use_case_empty_reply` rather than a 200 carrying an empty string. A call the vendor did not complete is `503 use_case_generation_failed`, or `503 use_case_generation_timeout` when it did not answer inside the deployment’s per-invocation deadline: separate, because a failure is worth surfacing to whoever asked while a timeout is worth retrying with a smaller `maxOutputTokens`. `finishReason: "length"` (with `truncated: true`) means the reply hit the output budget, so the text is a prefix rather than an answer. Requires a `write` key.\n\nCalls `POST /api/v1/use-cases/{useCaseId}/invocations` (operation `invokePublicUseCase`).',
501
+ inputSchema: { "type": "object", "properties": { "useCaseId": { "type": "string", "description": "Path parameter `useCaseId`." }, "body": { "type": "object", "properties": { "maxOutputTokens": { "type": "number" }, "model": { "type": "string", "minLength": 1, "maxLength": 120 }, "parameters": { "type": "object", "additionalProperties": { "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }, { "type": "boolean" }, { "type": "number" }] } }, "temperature": { "type": "number" } }, "description": "The request body." } }, "additionalProperties": false, "required": ["useCaseId"] },
502
+ outputSchema: { "type": "object", "properties": { "finishReason": { "type": "string", "description": "One of: stop, length, content-filter, other. A newer deployment may report a member not in this list." }, "model": { "type": "object", "properties": { "id": { "type": "string" }, "label": { "type": "string" }, "model": { "type": "string" }, "provider": { "type": "string" } } }, "text": { "type": "string" }, "truncated": { "type": "boolean" }, "usage": { "type": "object", "properties": { "inputTokens": { "type": "number" }, "outputTokens": { "type": "number" }, "totalTokens": { "type": "number" } } }, "useCaseId": { "type": "string" } } },
503
+ invoke: (client, args) => client.useCases.invoke(str(args, 'useCaseId'), args.body),
504
+ },
505
+ {
506
+ name: 'use_cases_list',
507
+ title: 'List the deployment\'s inline use cases',
508
+ group: 'use_cases',
509
+ operationId: 'listPublicUseCases',
510
+ readOnly: true,
511
+ description: 'List the deployment\'s inline use cases\n\nList the non-container model operations this deployment has registered: what each generates, the models it may run on, the parameters it accepts, and the temperature / output bounds an invocation may steer within. Each model carries whether it can be served right now, and an unavailable one says which of the two causes it is: `provider_unavailable` (nothing here resolves it, so an operator configures the provider) or `container_only` (it runs only through a subscription harness inside a per-run container, which this surface has none of). An empty list means this deployment registered no use cases, not that the surface is missing.\n\nCalls `GET /api/v1/use-cases` (operation `listPublicUseCases`).',
512
+ inputSchema: { "type": "object", "properties": {}, "additionalProperties": false },
513
+ outputSchema: { "type": "object", "properties": { "useCases": { "type": "array", "items": { "type": "object", "properties": { "category": { "type": "string" }, "description": { "type": "string" }, "generation": { "type": "object", "properties": { "maxOutputTokens": { "type": "object", "properties": { "default": { "type": "number" }, "max": { "type": "number" }, "min": { "type": "number" } } }, "temperature": { "type": "object", "properties": { "default": { "type": "number" }, "max": { "type": "number" }, "min": { "type": "number" } } } } }, "label": { "type": "string" }, "models": { "type": "array", "items": { "type": "object", "properties": { "available": { "type": "boolean" }, "default": { "type": "boolean" }, "description": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "unavailableReason": { "type": "string", "description": "One of: provider_unavailable, container_only. A newer deployment may report a member not in this list." } } } }, "parameters": { "type": "array", "items": { "type": "object", "properties": { "default": { "type": "string" }, "defaultValues": { "type": "array", "items": { "type": "string" } }, "help": { "type": "string" }, "key": { "type": "string" }, "label": { "type": "string" }, "max": { "type": "number" }, "maxLength": { "type": "integer" }, "min": { "type": "number" }, "options": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } } } }, "placeholder": { "type": "string" }, "required": { "type": "boolean" }, "section": { "type": "string" }, "showWhen": { "type": "object", "properties": { "equals": {}, "includes": { "type": "string" }, "key": { "type": "string" } } }, "type": { "type": "string", "description": "One of: text, textarea, number, select, checkbox, checkbox-group. A newer deployment may report a member not in this list." } } } }, "useCaseId": { "type": "string" } } } } } },
514
+ invoke: (client, args) => client.useCases.list(),
515
+ },
483
516
  {
484
517
  name: 'notifications_act',
485
518
  title: 'Act on a notification',
@@ -536,6 +569,17 @@ export const CAT_FACTORY_TOOLS = [
536
569
  outputSchema: { "type": "object", "properties": { "connections": { "type": "array", "items": { "type": "object", "properties": { "acceptsManifestId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "backendKind": { "type": "string" }, "connectedAt": { "type": "number" }, "endpoint": { "type": "string" }, "engine": { "type": "string" }, "label": { "type": "string" }, "manifestId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "provisionType": { "type": "string" }, "secretKeys": { "type": "array", "items": { "type": "string" } } } } } } },
537
570
  invoke: (client, args) => client.environments.listConnections(),
538
571
  },
572
+ {
573
+ name: 'environments_list_manifest_types',
574
+ title: 'List the custom manifest types a service can pin',
575
+ group: 'environments',
576
+ operationId: 'listPublicEnvironmentManifestTypes',
577
+ readOnly: true,
578
+ description: 'List the custom manifest types a service can pin\n\nEvery custom-manifest-type id a service’s `custom` provisioning may name, with the label and default manifest path of each, and whether the deployment registered it in code (`registered`) or the workspace defined it (`workspace`). Those two are fixed by different people, which is why the source is reported. The read exists because a pin is checked against no registry on the way in: an id no handler serves is accepted and fails at the `deployer` step of a run already paid for, so a caller lists first and refuses before it spends.\n\nCalls `GET /api/v1/environments/manifest-types` (operation `listPublicEnvironmentManifestTypes`).',
579
+ inputSchema: { "type": "object", "properties": {}, "additionalProperties": false },
580
+ outputSchema: { "type": "object", "properties": { "manifestTypes": { "type": "array", "items": { "type": "object", "properties": { "defaultManifestPath": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "label": { "type": "string" }, "manifestId": { "type": "string" }, "source": { "type": "string", "description": "One of: registered, workspace. A newer deployment may report a member not in this list." } } } } } },
581
+ invoke: (client, args) => client.environments.listManifestTypes(),
582
+ },
539
583
  {
540
584
  name: 'environments_test_connection',
541
585
  title: 'Probe a candidate cluster connection without saving it',
@@ -743,7 +787,7 @@ export const CAT_FACTORY_TOOLS = [
743
787
  operationId: 'answerPublicRunFollowUp',
744
788
  readOnly: false,
745
789
  description: 'Answer a follow-up question\n\nAnswer one `question` item the Coder raised mid-run; the answer steers its next pass. Refused for a `follow_up` item, which is filed, sent back or dismissed instead. Requires a `decide`-scope key.\n\nCalls `POST /api/v1/runs/{runId}/decisions/follow-ups/items/{itemId}/answer` (operation `answerPublicRunFollowUp`).',
746
- inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "itemId": { "type": "string", "description": "Path parameter `itemId`." }, "body": { "type": "object", "properties": { "answer": { "type": "string", "minLength": 1, "maxLength": 4000 } }, "required": ["answer"], "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "itemId", "body"] },
790
+ inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." }, "itemId": { "type": "string", "description": "Path parameter `itemId`." }, "body": { "type": "object", "properties": { "answer": { "type": "string", "minLength": 1, "maxLength": 4000 }, "resolution": { "type": "string", "enum": ["answered", "closed"] } }, "required": ["answer"], "description": "The request body." } }, "additionalProperties": false, "required": ["runId", "itemId", "body"] },
747
791
  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" } } } } } },
748
792
  invoke: (client, args) => client.decisions.answerFollowUp(str(args, 'runId'), str(args, 'itemId'), args.body),
749
793
  },
@@ -1305,7 +1349,7 @@ export const CAT_FACTORY_TOOLS = [
1305
1349
  readOnly: true,
1306
1350
  description: 'Get a run\'s verification report\n\nThe engine’s bundle of CAPTURED FACTS about a run: the CI gate’s verdict and failing checks, the platform’s own run of the service’s lint/test/build commands (with the failing output), the red-then-green reproduction proof for a bugfix, the tester’s structured report, requirement coverage, the throwaway-environment lifecycle, judge verdicts and the merge decision. Byte-for-byte the JSON block the pull-request body carries, composed on read, so it also answers for a run that never opened a pull request. Each section states `reported` or `absent` with a note, so a step that did not run never looks like a step that found nothing.\n\nCalls `GET /api/v1/runs/{runId}/report` (operation `getPublicRunReport`).',
1307
1351
  inputSchema: { "type": "object", "properties": { "runId": { "type": "string", "description": "Path parameter `runId`." } }, "additionalProperties": false, "required": ["runId"] },
1308
- outputSchema: { "type": "object", "properties": { "ci": { "type": "object", "properties": { "failingChecks": { "type": "array", "items": { "type": "object", "properties": { "conclusion": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "name": { "type": "string" }, "repo": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } } }, "fixerAttempts": { "type": "number" }, "headSha": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "maxFixerAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "verdict": { "anyOf": [{ "type": "string", "description": "One of: pass, pending, fail. A newer deployment may report a member not in this list." }, { "type": "null" }] } } }, "context": { "type": "object", "properties": { "documents": { "type": "array", "items": { "type": "object", "properties": { "freshness": { "description": "Discriminated by `status` (confirmed | not-applicable | unconfirmed). A newer deployment may report a variant not in this list." }, "movedDuringRun": { "type": "boolean" }, "origin": { "type": "string", "description": "One of: confluence, notion, github, figma, zeplin, linear, upload. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } } }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." } } }, "environments": { "type": "object", "properties": { "entries": { "type": "array", "items": { "type": "object", "properties": { "error": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "frameId": { "type": "string" }, "status": { "type": "string", "description": "One of: ready, failed, skipped. A newer deployment may report a member not in this list." }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } } }, "evidence": { "type": "object", "properties": { "capturedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "outcomes": { "type": "number" }, "ranAgainst": { "anyOf": [{ "type": "string", "description": "One of: local, ephemeral. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "requirementVerdicts": { "type": "number" }, "screenshots": { "type": "array", "items": { "type": "object", "properties": { "artifactId": { "type": "string" }, "hasReference": { "type": "boolean" }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "view": { "type": "string" } } } }, "status": { "type": "string", "description": "One of: captured, local, undeclared, absent. A newer deployment may report a member not in this list." }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, "gaps": { "type": "array", "items": { "type": "string" } }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "proof": { "type": "string", "description": "One of: complete, incomplete, not_applicable. A newer deployment may report a member not in this list." }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "teardown": { "type": "string", "description": "One of: confirmed, unconfirmed, pending, retained, failed, not_applicable. A newer deployment may report a member not in this list." }, "timeline": { "type": "object", "properties": { "gap": { "anyOf": [{ "type": "string", "description": "One of: unwired, unreadable, truncated, not_provisioned. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "provisionFailures": { "type": "number" }, "provisionedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "teardownFailures": { "type": "number" }, "teardownsUnconfirmed": { "type": "number" }, "tornDownAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] } } } } }, "generatedAt": { "type": "number" }, "judges": { "type": "object", "properties": { "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "verdicts": { "type": "array", "items": { "type": "object", "properties": { "bounces": { "type": "number" }, "disposition": { "anyOf": [{ "type": "string", "description": "One of: pass, park, bounce, fail. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "findings": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "severity": { "type": "string", "description": "One of: low, medium, high, critical. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "where": { "type": "string" } } } }, "maxBounces": { "type": "number" }, "model": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "modelPin": { "anyOf": [{ "type": "object", "properties": { "requested": { "type": "string" }, "status": { "type": "string", "description": "One of: applied, overridden, unavailable. A newer deployment may report a member not in this list." } } }, { "type": "null" }] }, "rubricName": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "rubricOverridden": { "type": "boolean" }, "score": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "stepKind": { "type": "string" }, "summary": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "threshold": { "anyOf": [{ "type": "number" }, { "type": "null" }] } } } } } }, "merge": { "type": "object", "properties": { "assessment": { "anyOf": [{ "type": "object", "properties": { "complexity": { "type": "number" }, "impact": { "type": "number" }, "rationale": { "type": "string" }, "risk": { "type": "number" } } }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "outcome": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "presetName": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "reason": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." } } }, "observability": { "type": "object", "properties": { "reportUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "runUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "trajectoryUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, "reproduction": { "type": "object", "properties": { "alternativeVerification": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "at": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "attempts": { "type": "number" }, "base": { "anyOf": [{ "type": "object", "properties": { "durationMs": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "exitCode": { "type": "number" }, "outputTail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "type": "boolean" }, "setupFailed": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "timedOut": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] } } }, { "type": "null" }] }, "command": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "final": { "anyOf": [{ "type": "object", "properties": { "durationMs": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "exitCode": { "type": "number" }, "outputTail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "type": "boolean" }, "setupFailed": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "timedOut": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] } } }, { "type": "null" }] }, "maxAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "observation": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "omittedTestPaths": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "reason": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "testPaths": { "type": "array", "items": { "type": "string" } }, "verdict": { "anyOf": [{ "type": "string", "description": "One of: reproduced, inconclusive, declared_infeasible. A newer deployment may report a member not in this list." }, { "type": "null" }] } } }, "requirements": { "type": "object", "properties": { "entries": { "type": "array", "items": { "type": "object", "properties": { "criteriaCount": { "type": "number" }, "detail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "group": { "type": "string" }, "id": { "type": "string" }, "module": { "type": "string" }, "priority": { "type": "string", "description": "One of: must, should, could. A newer deployment may report a member not in this list." }, "state": { "type": "string", "description": "One of: aspirational, established. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "verdict": { "type": "string", "description": "One of: met, not_met, not_covered. A newer deployment may report a member not in this list." } } } }, "met": { "type": "number" }, "notCovered": { "type": "number" }, "notMet": { "type": "number" }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "regressions": { "type": "number" }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "total": { "type": "number" }, "unmatchedVerdicts": { "type": "number" } } }, "run": { "type": "object", "properties": { "blockId": { "type": "string" }, "blockTitle": { "type": "string" }, "executionId": { "type": "string" }, "issues": { "type": "array", "items": { "type": "object", "properties": { "externalId": { "type": "string" }, "source": { "type": "string" }, "title": { "type": "string" }, "url": { "type": "string" } } } }, "pipelineId": { "type": "string" }, "pipelineName": { "type": "string" }, "provider": { "anyOf": [{ "type": "string", "description": "One of: github, gitlab. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "repo": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "startedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "steps": { "type": "array", "items": { "type": "object", "properties": { "agentKind": { "type": "string" }, "index": { "type": "number" }, "model": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "state": { "type": "string" } } } } } }, "scope": { "type": "object", "properties": { "frameId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "frameIds": { "type": "array", "items": { "type": "string" } }, "ownPullRequest": { "anyOf": [{ "type": "object", "properties": { "number": { "type": "number" }, "repo": { "type": "string" }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, { "type": "null" }] }, "role": { "type": "string", "description": "One of: own, peer. A newer deployment may report a member not in this list." } } }, "tests": { "type": "object", "properties": { "concerns": { "type": "array", "items": { "type": "object", "properties": { "severity": { "type": "string" }, "title": { "type": "string" } } } }, "environment": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "fixerAttempts": { "type": "number" }, "greenlight": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "maxFixerAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "outcomes": { "type": "array", "items": { "type": "object", "properties": { "detail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "name": { "type": "string" }, "status": { "type": "string" } } } }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "summary": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "tested": { "type": "array", "items": { "type": "string" } } } }, "truncations": { "type": "array", "items": { "type": "string" } }, "validation": { "type": "object", "properties": { "at": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "attempts": { "type": "number" }, "commands": { "type": "array", "items": { "type": "object", "properties": { "command": { "type": "string" }, "durationMs": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "exitCode": { "type": "number" }, "label": { "type": "string" }, "outputTail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "type": "boolean" }, "timedOut": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] } } } }, "configUnreadable": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "maxAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "stepKind": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, "version": { "type": "number" } } },
1352
+ outputSchema: { "type": "object", "properties": { "ci": { "type": "object", "properties": { "failingChecks": { "type": "array", "items": { "type": "object", "properties": { "conclusion": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "name": { "type": "string" }, "repo": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } } }, "fixerAttempts": { "type": "number" }, "headSha": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "maxFixerAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "verdict": { "anyOf": [{ "type": "string", "description": "One of: pass, pending, fail. A newer deployment may report a member not in this list." }, { "type": "null" }] } } }, "context": { "type": "object", "properties": { "documents": { "type": "array", "items": { "type": "object", "properties": { "freshness": { "description": "Discriminated by `status` (confirmed | not-applicable | unconfirmed). A newer deployment may report a variant not in this list." }, "movedDuringRun": { "type": "boolean" }, "origin": { "type": "string", "description": "One of: confluence, notion, github, figma, zeplin, linear, upload. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } } }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." } } }, "environments": { "type": "object", "properties": { "entries": { "type": "array", "items": { "type": "object", "properties": { "error": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "frameId": { "type": "string" }, "status": { "type": "string", "description": "One of: ready, failed, skipped. A newer deployment may report a member not in this list." }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } } }, "evidence": { "type": "object", "properties": { "capturedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "outcomes": { "type": "number" }, "ranAgainst": { "anyOf": [{ "type": "string", "description": "One of: local, ephemeral. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "requirementVerdicts": { "type": "number" }, "screenshots": { "type": "array", "items": { "type": "object", "properties": { "artifactId": { "type": "string" }, "hasReference": { "type": "boolean" }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "view": { "type": "string" } } } }, "status": { "type": "string", "description": "One of: captured, local, undeclared, absent. A newer deployment may report a member not in this list." }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, "gaps": { "type": "array", "items": { "type": "string" } }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "proof": { "type": "string", "description": "One of: complete, incomplete, not_applicable. A newer deployment may report a member not in this list." }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "teardown": { "type": "string", "description": "One of: confirmed, unconfirmed, pending, retained, failed, not_applicable. A newer deployment may report a member not in this list." }, "timeline": { "type": "object", "properties": { "gap": { "anyOf": [{ "type": "string", "description": "One of: unwired, unreadable, truncated, not_provisioned. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "provisionFailures": { "type": "number" }, "provisionedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "teardownFailures": { "type": "number" }, "teardownsUnconfirmed": { "type": "number" }, "tornDownAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] } } } } }, "followUps": { "type": "object", "properties": { "dismissedByPolicy": { "type": "number" }, "dropped": { "type": "number" }, "droppedBudget": { "anyOf": [{ "type": "object", "properties": { "loops": { "type": "number" }, "maxLoops": { "type": "number" } } }, { "type": "null" }] }, "entries": { "type": "array", "items": { "type": "object", "properties": { "dismissedByPolicy": { "type": "boolean" }, "kind": { "type": "string", "description": "One of: follow_up, question. A newer deployment may report a member not in this list." }, "sendBackDropped": { "type": "boolean" }, "status": { "type": "string", "description": "One of: pending, filed, queued, answered, closed, dismissed. A newer deployment may report a member not in this list." }, "title": { "type": "string" } } } }, "loops": { "type": "number" }, "maxLoops": { "type": "number" }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "total": { "type": "number" } } }, "generatedAt": { "type": "number" }, "judges": { "type": "object", "properties": { "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "verdicts": { "type": "array", "items": { "type": "object", "properties": { "bounces": { "type": "number" }, "disposition": { "anyOf": [{ "type": "string", "description": "One of: pass, park, bounce, fail. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "findings": { "type": "array", "items": { "type": "object", "properties": { "detail": { "type": "string" }, "severity": { "type": "string", "description": "One of: low, medium, high, critical. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "where": { "type": "string" } } } }, "maxBounces": { "type": "number" }, "model": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "modelPin": { "anyOf": [{ "type": "object", "properties": { "requested": { "type": "string" }, "status": { "type": "string", "description": "One of: applied, overridden, unavailable. A newer deployment may report a member not in this list." } } }, { "type": "null" }] }, "rubricName": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "rubricOverridden": { "type": "boolean" }, "score": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "stepKind": { "type": "string" }, "summary": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "threshold": { "anyOf": [{ "type": "number" }, { "type": "null" }] } } } } } }, "merge": { "type": "object", "properties": { "assessment": { "anyOf": [{ "type": "object", "properties": { "complexity": { "type": "number" }, "impact": { "type": "number" }, "rationale": { "type": "string" }, "risk": { "type": "number" } } }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "outcome": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "presetName": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "reason": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." } } }, "observability": { "type": "object", "properties": { "reportUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "runUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "trajectoryUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, "reproduction": { "type": "object", "properties": { "alternativeVerification": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "at": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "attempts": { "type": "number" }, "base": { "anyOf": [{ "type": "object", "properties": { "durationMs": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "exitCode": { "type": "number" }, "outputTail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "type": "boolean" }, "setupFailed": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "timedOut": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] } } }, { "type": "null" }] }, "command": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "final": { "anyOf": [{ "type": "object", "properties": { "durationMs": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "exitCode": { "type": "number" }, "outputTail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "type": "boolean" }, "setupFailed": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "timedOut": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] } } }, { "type": "null" }] }, "maxAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "observation": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "omittedTestPaths": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "reason": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "testPaths": { "type": "array", "items": { "type": "string" } }, "verdict": { "anyOf": [{ "type": "string", "description": "One of: reproduced, inconclusive, declared_infeasible. A newer deployment may report a member not in this list." }, { "type": "null" }] } } }, "requirements": { "type": "object", "properties": { "entries": { "type": "array", "items": { "type": "object", "properties": { "criteriaCount": { "type": "number" }, "detail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "group": { "type": "string" }, "id": { "type": "string" }, "module": { "type": "string" }, "priority": { "type": "string", "description": "One of: must, should, could. A newer deployment may report a member not in this list." }, "state": { "type": "string", "description": "One of: aspirational, established. A newer deployment may report a member not in this list." }, "title": { "type": "string" }, "verdict": { "type": "string", "description": "One of: met, not_met, not_covered. A newer deployment may report a member not in this list." } } } }, "met": { "type": "number" }, "notCovered": { "type": "number" }, "notMet": { "type": "number" }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "regressions": { "type": "number" }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "total": { "type": "number" }, "unmatchedVerdicts": { "type": "number" } } }, "run": { "type": "object", "properties": { "blockId": { "type": "string" }, "blockTitle": { "type": "string" }, "executionId": { "type": "string" }, "issues": { "type": "array", "items": { "type": "object", "properties": { "externalId": { "type": "string" }, "source": { "type": "string" }, "title": { "type": "string" }, "url": { "type": "string" } } } }, "pipelineId": { "type": "string" }, "pipelineName": { "type": "string" }, "provider": { "anyOf": [{ "type": "string", "description": "One of: github, gitlab. A newer deployment may report a member not in this list." }, { "type": "null" }] }, "repo": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "startedAt": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "steps": { "type": "array", "items": { "type": "object", "properties": { "agentKind": { "type": "string" }, "index": { "type": "number" }, "model": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "state": { "type": "string" } } } } } }, "scope": { "type": "object", "properties": { "frameId": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "frameIds": { "type": "array", "items": { "type": "string" } }, "ownPullRequest": { "anyOf": [{ "type": "object", "properties": { "number": { "type": "number" }, "repo": { "type": "string" }, "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, { "type": "null" }] }, "role": { "type": "string", "description": "One of: own, peer. A newer deployment may report a member not in this list." } } }, "tests": { "type": "object", "properties": { "concerns": { "type": "array", "items": { "type": "object", "properties": { "severity": { "type": "string" }, "title": { "type": "string" } } } }, "environment": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "fixerAttempts": { "type": "number" }, "greenlight": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "maxFixerAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "outcomes": { "type": "array", "items": { "type": "object", "properties": { "detail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "name": { "type": "string" }, "status": { "type": "string" } } } }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "summary": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "tested": { "type": "array", "items": { "type": "string" } } } }, "truncations": { "type": "array", "items": { "type": "string" } }, "validation": { "type": "object", "properties": { "at": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "attempts": { "type": "number" }, "commands": { "type": "array", "items": { "type": "object", "properties": { "command": { "type": "string" }, "durationMs": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "exitCode": { "type": "number" }, "label": { "type": "string" }, "outputTail": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "type": "boolean" }, "timedOut": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] } } } }, "configUnreadable": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "maxAttempts": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "note": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "passed": { "anyOf": [{ "type": "boolean" }, { "type": "null" }] }, "status": { "type": "string", "description": "One of: reported, absent. A newer deployment may report a member not in this list." }, "stepKind": { "anyOf": [{ "type": "string" }, { "type": "null" }] } } }, "version": { "type": "number" } } },
1309
1353
  invoke: (client, args) => client.evidence.getReport(str(args, 'runId')),
1310
1354
  },
1311
1355
  {
@@ -1459,8 +1503,9 @@ export const CAT_FACTORY_TOOL_GROUPS = {
1459
1503
  '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.',
1460
1504
  'pipelines': 'The pipelines a task can be started with, and whether each is headless-startable.',
1461
1505
  'task_types': 'What a task can be created AS in this workspace (the built-in kinds plus the operations the deployment registered), and the fields each one accepts.',
1506
+ 'use_cases': 'The deployment\'s own non-container model operations: what it will generate for you, on which models, from which parameters, and running one. Each use case narrows the models it may run on and declares the form it accepts, so a wrapper renders a picker from the catalog rather than from a hard-coded copy; a model listed as unavailable says whether the deployment cannot serve it at all or has yet to configure the credential. Discovery takes a `read` key, invoking a `write` one: an invocation spends model tokens and returns text, and starts no run.',
1462
1507
  'notifications': 'The workspace\'s human-actionable inbox: list, act on, or dismiss a run tail.',
1463
- 'environments': 'The cluster this workspace provisions per-run environments onto: probe a candidate connection without saving it, or bind one. The credential is write-only, so a read reports which secret keys are stored and never their values.',
1508
+ 'environments': 'The cluster this workspace provisions per-run environments onto: probe a candidate connection without saving it, bind one, or list what is already bound. The credential is write-only, so a read reports which secret keys are stored and never their values. The manifest-type catalog is the read under a service\'s `custom` provisioning pin: the ids a pin may name, each saying whether the deployment registered it in code or the workspace defined it, so a caller checks an id before a run pays to discover it resolves to nothing.',
1464
1509
  'models': 'The models a run in this workspace could actually dispatch to, and why an unavailable one is unavailable: unconfigured, or refused by the account model-family policy. Those two need opposite fixes.',
1465
1510
  'vcs': 'The workspace\'s source-control connection: which account it talks to, how it authenticates, and whether it may create repositories and write workflow files. Both permissions are enforced by the provider at push time, so reading them beats discovering one missing halfway through an automated setup.',
1466
1511
  'tracker': 'What this workspace does to a task\'s LINKED tracker issue as its pull request progresses: comment when it opens, comment and close the issue when it merges, and post a headless run\'s parked review findings so the reporter can answer where they filed. The write MERGES, so turning one action on leaves the other two as they were. It is the writeback half of the workspace\'s tracker configuration; the filing selection (which tracker a tech-debt ticket is raised on) is not published yet.',