Skip to content

Commit 2e1dd42

Browse files
committed
Port Assistant to shared Mothership runtime and repair resource recovery
1 parent b788211 commit 2e1dd42

196 files changed

Lines changed: 33517 additions & 1880 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎apps/docs/openapi-v2-files-audit.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1317,7 +1317,7 @@
13171317
"post": {
13181318
"operationId": "restoreFile",
13191319
"summary": "Restore File",
1320-
"description": "Reverse a soft delete and return the file to the workspace. Not a pure undo: the file comes back in the folder it was deleted from, or at the workspace root when that folder has since been archived, and gains a `_restored` suffix when another file there already holds its name, so read `folderPath` and `name` off the response. Restoring an already-active file returns it unchanged, so a retry is safe. An archived workspace is a `400`, and a name the restore could not free is a `409`.\n\nOAuth scope: `api:write`.",
1320+
"description": "Restore a soft-deleted file to its original folder, or the workspace root if that folder was archived. Name collisions add a `_restored` suffix; read `folderPath` and `name` from the response. Already-active files return unchanged, making retries safe. An archived workspace returns `400`; an unresolved name collision returns `409`.\n\nOAuth scope: `api:write`.",
13211321
"x-sim-operation": "files.restore",
13221322
"x-oauth-scope": "api:write",
13231323
"tags": ["Files"],

‎apps/docs/openapi-v2-logs.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@
438438
"get": {
439439
"operationId": "getLogStats",
440440
"summary": "Get Log Statistics",
441-
"description": "Bucketed run counts, success rate, error count, and mean latency for a workspace and for each of its workflows — the aggregate a caller would otherwise have to page every run to compute. The window spans `startDate` through `endDate` when both are supplied; an omitted edge falls back to the oldest matching run on the left and to the later of the newest matching run and now on the right. With no matching runs the right edge falls back to now and the left to 24 hours before that right edge — the trailing 24 hours when neither edge was supplied, and the 24 hours preceding `endDate` when only `endDate` was supplied. A supplied `startDate` is still used verbatim, so a `startDate` without an `endDate` yields `[startDate, now]`, which can be any width. The window is divided into `segmentCount` equal buckets whose width is `max(60000, floor(windowMs / segmentCount))` milliseconds. Each series carries only the buckets that hold at least one run unless `includeEmpty` is set, in which case exactly `segmentCount` buckets are returned. The one-minute floor is a floor on bucket width, not on the window: when it applies, the series runs past `timeBounds.end` and the trailing buckets are empty rather than the window being compressed. A folder path covers its whole subtree. Per-workflow series are capped and `workflowsTruncated` reports whether the cap applied; the workspace totals are always computed from every workflow. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.",
441+
"description": "Get bucketed run counts, success rate, errors, and mean latency for the workspace and individual workflows. Query fields describe window selection and bucketing. Folder filters cover subtrees. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides. Workspace folder trees exceeding 10,000 folders return `413`.\n\nOAuth scope: `api:read`.",
442442
"x-sim-operation": "logs.read_stats",
443443
"x-oauth-scope": "api:read",
444444
"tags": ["Logs"],
@@ -1916,11 +1916,11 @@
19161916
},
19171917
"required": ["start", "end"],
19181918
"additionalProperties": false,
1919-
"description": "Actual bucket window. Supplied bounds are exact. Without `startDate`, the left edge is the oldest match, or 24 hours before the right edge when no run matches. Without `endDate`, the right edge is at least now. `startDate` alone spans through now."
1919+
"description": "Actual window; supplied bounds are exact. Without `endDate`, the right edge is the later of now and the newest matching run. Without `startDate`, the left edge is the oldest match, or 24 hours before the right edge when no runs match. With no matches or supplied bounds, this is the trailing 24 hours; `endDate` alone uses the preceding 24 hours, while `startDate` alone spans through now."
19201920
},
19211921
"segmentMs": {
19221922
"type": "number",
1923-
"description": "Width of one bucket in milliseconds."
1923+
"description": "Bucket width in milliseconds: `max(60000, floor(windowMs / segmentCount))`. The one-minute minimum applies to bucket width, not window width; when it applies, trailing empty buckets extend past `timeBounds.end` instead of compressing the window."
19241924
}
19251925
},
19261926
"required": [

‎apps/docs/openapi-v2-resources.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3874,7 +3874,7 @@
38743874
"get": {
38753875
"operationId": "listWorkflowMcpTools",
38763876
"summary": "List Workflow MCP Tools",
3877-
"description": "Every tool a server publishes, tool-name ordered. The server list reports tool *names* only, so this is where a caller reads the `workflowId` that `DELETE /api/v2/workflow-mcp-servers/{serverId}/tools/{workflowId}` addresses. Registrations that undeploying their workflow archived are included with `status: \"inactive\"` rather than omitted; deploying the workflow again makes them `active`. Returned in one page rather than paged — so `nextCursor` is always null — and capped at 2,000 tools, `truncated` indicates an incomplete inventory that cannot be paginated. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.",
3877+
"description": "List published tools ordered by name, including the `workflowId` used to delete each registration. Undeploying a workflow makes its registrations `inactive`; redeploying reactivates them. Results are capped at 2,000 tools: `nextCursor` is always null, and `truncated` marks an incomplete inventory that cannot be paginated. Workspace API keys return `403`; use a personal API key or scoped OAuth token.\n\nOAuth scope: `api:read`.",
38783878
"x-sim-operation": "mcp_servers.workflow_deployments.list_tools",
38793879
"x-oauth-scope": "api:read",
38803880
"tags": ["MCP Servers"],
@@ -4674,7 +4674,7 @@
46744674
"get": {
46754675
"operationId": "listConnectorTypes",
46764676
"summary": "List Connector Types",
4677-
"description": "List knowledge-base connector types with opaque cursor pagination, 25 to a page by default. Each item is a summary — identifier, name, description, and auth mode — unless `detail=full` is sent, which adds the source configuration each type accepts. Two properties of a config field decide how its value is sent and are not inferable from the rest: a field with `multi: true` stores a `string[]` rather than a `string`, and a `canonicalParamId` links a picker field to a manual-entry field that write the SAME configuration key — send exactly one of the pair, keyed by `canonicalParamId` rather than by the field's own `id`.\n\nOAuth scope: `api:read`.",
4677+
"description": "List knowledge-base connector types with opaque cursors, defaulting to 25 summaries per page: identifier, name, description, and auth mode. `detail=full` adds accepted source configuration fields. Fields with `multi: true` accept `string[]` instead of `string`. A `canonicalParamId` pairs a picker with manual entry for the same configuration key: send exactly one value, keyed by `canonicalParamId` rather than the field’s `id`.\n\nOAuth scope: `api:read`.",
46784678
"x-sim-operation": "catalog.connector_types.list",
46794679
"x-oauth-scope": "api:read",
46804680
"tags": ["Catalog"],

‎apps/docs/openapi-v2-tables.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@
592592
"patch": {
593593
"operationId": "updateTableColumn",
594594
"summary": "Update Column",
595-
"description": "Update a column by name and return the complete resulting table schema.\n\nA rename follows the column everywhere the table keys by column id — rows, views, workflow-group references. Workflow Table blocks are the exception: their `filter`, `order`, and `data` are authored JSON that names columns by name, and this endpoint never rewrites workflow state. Blocks bound to this table that still name the old column come back in `unmigrated`; edit them (`POST /api/v2/workflows/{workflowId}/operations`) or their next run fails on the old name.\n\nOAuth scope: `api:write`.",
595+
"description": "Update a column by name and return the complete schema. Renames update rows, views, and workflow-group references keyed by column ID. Workflow Table blocks keep their authored `filter`, `order`, and `data` JSON unchanged. Bound blocks still referencing the old name appear in `unmigrated`; edit them with Apply Workflow Operations to prevent failures on their next run.\n\nOAuth scope: `api:write`.",
596596
"x-sim-operation": "tables.columns.update",
597597
"x-oauth-scope": "api:write",
598598
"tags": ["Tables"],
@@ -2701,7 +2701,7 @@
27012701
"get": {
27022702
"operationId": "getRowEnrichment",
27032703
"summary": "Get Row Group Run",
2704-
"description": "Retrieve one workflow or enrichment group's outcome on one row: the run state `includeRunState` reports on the row endpoints (`status`, `error`, `workflowId`, `executionId`, …), the group's output cells keyed by column name, and — for an enrichment group — the provider cascade behind them: every configured provider in cascade order, each one's status, hosted-key cost, and duration, plus which provider produced the match. A row that exists always answers; `runState: null` means the group has never run for it, and `cascade: null` that no provider breakdown was recorded. A `404` means the table, row, or group does not exist.\n\nOAuth scope: `api:read`.",
2704+
"description": "Read a workflow or enrichment group’s outcome for one row: `runState` (as exposed by `includeRunState`), output cells keyed by column name, and enrichment providers in cascade order with status, hosted-key cost, duration, and the matching provider. Existing rows always answer: `runState: null` means never run; `cascade: null` means no breakdown recorded. Missing tables, rows, or groups return `404`.\n\nOAuth scope: `api:read`.",
27052705
"x-sim-operation": "tables.rows.read",
27062706
"x-oauth-scope": "api:read",
27072707
"tags": ["Tables"],
@@ -5885,7 +5885,7 @@
58855885
"items": {
58865886
"$ref": "#/components/schemas/V2UnmigratedTableBlockReference"
58875887
},
5888-
"description": "Workflow Table blocks bound to this table whose `filter`, `order`, or `data` still name the column by its previous name. Only populated by a rename; empty otherwise. Workflow state is never rewritten by this endpoint — edit those blocks (`POST /api/v2/workflows/{workflowId}/operations`) or their next run fails on the old name."
5888+
"description": "Workflow Table blocks bound to this table whose `filter`, `order`, or `data` still name the column by its previous name. Only populated by a rename; empty otherwise. Workflow state is never rewritten here — edit those blocks with Apply Workflow Operations or their next run fails on the old name."
58895889
}
58905890
},
58915891
"required": ["columns", "unmigrated"],

0 commit comments

Comments
 (0)