@wirecat/zoom-cli 0.12.0 → 0.14.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/README.md +5 -5
- package/dist/agent-skill.d.ts.map +1 -1
- package/dist/agent-skill.js +2 -2
- package/dist/agent-skill.js.map +1 -1
- package/dist/answer-output.d.ts +23 -0
- package/dist/answer-output.d.ts.map +1 -0
- package/dist/answer-output.js +52 -0
- package/dist/answer-output.js.map +1 -0
- package/dist/answer-policy.d.ts +11 -0
- package/dist/answer-policy.d.ts.map +1 -0
- package/dist/answer-policy.js +8 -0
- package/dist/answer-policy.js.map +1 -0
- package/dist/answers.d.ts +105 -42
- package/dist/answers.d.ts.map +1 -1
- package/dist/answers.js +23 -34
- package/dist/answers.js.map +1 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +20 -19
- package/dist/api.js.map +1 -1
- package/dist/archive-commands.d.ts +5 -4
- package/dist/archive-commands.d.ts.map +1 -1
- package/dist/archive-commands.js +32 -31
- package/dist/archive-commands.js.map +1 -1
- package/dist/archive-import.d.ts +2 -2
- package/dist/archive-import.d.ts.map +1 -1
- package/dist/archive-import.js +20 -30
- package/dist/archive-import.js.map +1 -1
- package/dist/archive-transcripts.d.ts.map +1 -1
- package/dist/archive-transcripts.js +22 -21
- package/dist/archive-transcripts.js.map +1 -1
- package/dist/bin/zm.js +1 -2
- package/dist/bin/zm.js.map +1 -1
- package/dist/command-effects.d.ts +5 -0
- package/dist/command-effects.d.ts.map +1 -0
- package/dist/command-effects.js +38 -0
- package/dist/command-effects.js.map +1 -0
- package/dist/commands.d.ts +2 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +21 -18
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +54 -37
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +0 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -7
- package/dist/errors.js.map +1 -1
- package/dist/execution.d.ts +1 -0
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +4 -4
- package/dist/execution.js.map +1 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +9 -9
- package/dist/files.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ingestion-search-commands.d.ts +3 -2
- package/dist/ingestion-search-commands.d.ts.map +1 -1
- package/dist/ingestion-search-commands.js +9 -8
- package/dist/ingestion-search-commands.js.map +1 -1
- package/dist/json-fields.d.ts +7 -0
- package/dist/json-fields.d.ts.map +1 -0
- package/dist/json-fields.js +23 -0
- package/dist/json-fields.js.map +1 -0
- package/dist/keys.d.ts +1 -1
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +7 -5
- package/dist/keys.js.map +1 -1
- package/dist/local-transcription-commands.d.ts +3 -2
- package/dist/local-transcription-commands.d.ts.map +1 -1
- package/dist/local-transcription-commands.js +7 -7
- package/dist/local-transcription-commands.js.map +1 -1
- package/dist/local-transcription.d.ts.map +1 -1
- package/dist/local-transcription.js +13 -12
- package/dist/local-transcription.js.map +1 -1
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +8 -7
- package/dist/login.js.map +1 -1
- package/dist/mcp-server.d.ts +4 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +40 -48
- package/dist/mcp-server.js.map +1 -1
- package/dist/meeting-context-commands.d.ts +2 -1
- package/dist/meeting-context-commands.d.ts.map +1 -1
- package/dist/meeting-context-commands.js +11 -15
- package/dist/meeting-context-commands.js.map +1 -1
- package/dist/meeting-context.d.ts +6 -6
- package/dist/meeting-context.d.ts.map +1 -1
- package/dist/meeting-context.js +8 -21
- package/dist/meeting-context.js.map +1 -1
- package/dist/meeting-integration-commands.d.ts +3 -2
- package/dist/meeting-integration-commands.d.ts.map +1 -1
- package/dist/meeting-integration-commands.js +7 -7
- package/dist/meeting-integration-commands.js.map +1 -1
- package/dist/meeting-integration.d.ts.map +1 -1
- package/dist/meeting-integration.js +2 -2
- package/dist/meeting-integration.js.map +1 -1
- package/dist/meeting-mcp-command.d.ts +19 -0
- package/dist/meeting-mcp-command.d.ts.map +1 -0
- package/dist/meeting-mcp-command.js +41 -0
- package/dist/meeting-mcp-command.js.map +1 -0
- package/dist/meeting-preparation-mcp.d.ts +131 -0
- package/dist/meeting-preparation-mcp.d.ts.map +1 -0
- package/dist/meeting-preparation-mcp.js +20 -0
- package/dist/meeting-preparation-mcp.js.map +1 -0
- package/dist/meeting-preparation.d.ts +22 -0
- package/dist/meeting-preparation.d.ts.map +1 -0
- package/dist/meeting-preparation.js +29 -0
- package/dist/meeting-preparation.js.map +1 -0
- package/dist/meeting-project-evidence-commands.d.ts +1 -4
- package/dist/meeting-project-evidence-commands.d.ts.map +1 -1
- package/dist/meeting-project-evidence-commands.js +2 -6
- package/dist/meeting-project-evidence-commands.js.map +1 -1
- package/dist/meeting-project-evidence-mcp.d.ts +76 -83
- package/dist/meeting-project-evidence-mcp.d.ts.map +1 -1
- package/dist/meeting-project-evidence-mcp.js +7 -8
- package/dist/meeting-project-evidence-mcp.js.map +1 -1
- package/dist/meeting-read-command-bindings.d.ts +10 -0
- package/dist/meeting-read-command-bindings.d.ts.map +1 -0
- package/dist/meeting-read-command-bindings.js +13 -0
- package/dist/meeting-read-command-bindings.js.map +1 -0
- package/dist/meeting-search-commands.d.ts +3 -2
- package/dist/meeting-search-commands.d.ts.map +1 -1
- package/dist/meeting-search-commands.js +47 -38
- package/dist/meeting-search-commands.js.map +1 -1
- package/dist/meeting-semantic-commands.d.ts +3 -2
- package/dist/meeting-semantic-commands.d.ts.map +1 -1
- package/dist/meeting-semantic-commands.js +13 -12
- package/dist/meeting-semantic-commands.js.map +1 -1
- package/dist/meeting-semantic.d.ts.map +1 -1
- package/dist/meeting-semantic.js +3 -2
- package/dist/meeting-semantic.js.map +1 -1
- package/dist/occurrence-schedule.d.ts +3 -0
- package/dist/occurrence-schedule.d.ts.map +1 -0
- package/dist/occurrence-schedule.js +106 -0
- package/dist/occurrence-schedule.js.map +1 -0
- package/dist/output-file.js +3 -3
- package/dist/output-file.js.map +1 -1
- package/dist/program.d.ts +15 -28
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +163 -333
- package/dist/program.js.map +1 -1
- package/dist/recording-archive.d.ts +1 -1
- package/dist/recording-archive.d.ts.map +1 -1
- package/dist/recording-archive.js +99 -46
- package/dist/recording-archive.js.map +1 -1
- package/dist/recording-partial-store.d.ts.map +1 -1
- package/dist/recording-partial-store.js +11 -10
- package/dist/recording-partial-store.js.map +1 -1
- package/dist/recording-promotion-store.d.ts.map +1 -1
- package/dist/recording-promotion-store.js +4 -4
- package/dist/recording-promotion-store.js.map +1 -1
- package/dist/recording-schedule-commands.d.ts +3 -2
- package/dist/recording-schedule-commands.d.ts.map +1 -1
- package/dist/recording-schedule-commands.js +13 -12
- package/dist/recording-schedule-commands.js.map +1 -1
- package/dist/recording-schedule-store.d.ts.map +1 -1
- package/dist/recording-schedule-store.js +15 -14
- package/dist/recording-schedule-store.js.map +1 -1
- package/dist/recording-schedule-systemd.d.ts.map +1 -1
- package/dist/recording-schedule-systemd.js +16 -15
- package/dist/recording-schedule-systemd.js.map +1 -1
- package/dist/recording-schedule.d.ts +1 -1
- package/dist/recording-schedule.d.ts.map +1 -1
- package/dist/recording-schedule.js +15 -14
- package/dist/recording-schedule.js.map +1 -1
- package/dist/recording-sync-store.d.ts.map +1 -1
- package/dist/recording-sync-store.js +9 -9
- package/dist/recording-sync-store.js.map +1 -1
- package/dist/recording-sync.d.ts +1 -1
- package/dist/recording-sync.d.ts.map +1 -1
- package/dist/recording-sync.js +10 -19
- package/dist/recording-sync.js.map +1 -1
- package/dist/recordings.d.ts.map +1 -1
- package/dist/recordings.js +19 -18
- package/dist/recordings.js.map +1 -1
- package/dist/remote-http.d.ts +1 -0
- package/dist/remote-http.d.ts.map +1 -1
- package/dist/remote-http.js +26 -14
- package/dist/remote-http.js.map +1 -1
- package/dist/remote-meeting-id.d.ts +2 -0
- package/dist/remote-meeting-id.d.ts.map +1 -0
- package/dist/remote-meeting-id.js +7 -0
- package/dist/remote-meeting-id.js.map +1 -0
- package/dist/remote-meetings.d.ts.map +1 -1
- package/dist/remote-meetings.js +10 -13
- package/dist/remote-meetings.js.map +1 -1
- package/dist/store-connection.d.ts +1 -7
- package/dist/store-connection.d.ts.map +1 -1
- package/dist/store-connection.js +95 -176
- package/dist/store-connection.js.map +1 -1
- package/dist/streaming.js +3 -3
- package/dist/streaming.js.map +1 -1
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +10 -9
- package/dist/tokens.js.map +1 -1
- package/dist/unified-search.d.ts +1 -0
- package/dist/unified-search.d.ts.map +1 -1
- package/dist/unified-search.js +18 -3
- package/dist/unified-search.js.map +1 -1
- package/dist/upcoming-meetings.d.ts +10 -0
- package/dist/upcoming-meetings.d.ts.map +1 -0
- package/dist/upcoming-meetings.js +24 -0
- package/dist/upcoming-meetings.js.map +1 -0
- package/dist/watch-commands.d.ts +2 -1
- package/dist/watch-commands.d.ts.map +1 -1
- package/dist/watch-commands.js +9 -9
- package/dist/watch-commands.js.map +1 -1
- package/package.json +5 -4
- package/skills/zoom-cli/SKILL.md +32 -12
- package/dist/ordinary-file.d.ts +0 -3
- package/dist/ordinary-file.d.ts.map +0 -1
- package/dist/ordinary-file.js +0 -16
- package/dist/ordinary-file.js.map +0 -1
- package/dist/wav-audio.d.ts +0 -2
- package/dist/wav-audio.d.ts.map +0 -1
- package/dist/wav-audio.js +0 -2
- package/dist/wav-audio.js.map +0 -1
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ walks through app settings, browser approval and callback completion.
|
|
|
46
46
|
|
|
47
47
|
```sh
|
|
48
48
|
npm install -g @wirecat/zoom-cli
|
|
49
|
-
zm config set zoom.
|
|
49
|
+
zm config set zoom.client_id <public-client-id>
|
|
50
50
|
zm session start # approve in your browser; the token goes to the keyring
|
|
51
51
|
zm config set account.profile personal # a label for your stored meetings
|
|
52
52
|
zm meetings sync --lookback-days 7
|
|
@@ -207,7 +207,7 @@ More: [the local archive][docs/archive.md] · [Zoom on wirecat.dev][wirecat/en/d
|
|
|
207
207
|
```sh
|
|
208
208
|
zm recordings sync --since-time 2026-01-01 --until-time 2026-10-10 --destination ./zoom-archive --jsonl
|
|
209
209
|
zm recordings archive check ./zoom-archive --offline --json
|
|
210
|
-
zm search
|
|
210
|
+
zm search recordings ./zoom-archive "example plan" --offline --json
|
|
211
211
|
```
|
|
212
212
|
|
|
213
213
|
Sync covers up to ten years in monthly requests and downloads serially, streaming to disk. Each
|
|
@@ -284,8 +284,8 @@ More: [managing Zoom meetings][docs/remote-meetings.md] · [Zoom on wirecat.dev]
|
|
|
284
284
|
|
|
285
285
|
## Output, limits and deadlines
|
|
286
286
|
|
|
287
|
-
`--json` prints one
|
|
288
|
-
go to stderr. `--
|
|
287
|
+
`--json` prints one answer envelope; `--jsonl` prints typed item records and a final end record; piped output defaults to JSON and errors
|
|
288
|
+
go to stderr. `--json=id,title` keeps only those fields, `--offline` refuses the network, and output is
|
|
289
289
|
capped at 4 MiB unless `--max-output-bytes` says otherwise. Default deadlines are 30 seconds for
|
|
290
290
|
reads, five minutes for login and one hour for downloads, sync and verification; `--timeout 5m`
|
|
291
291
|
changes them. Watching and MCP serving run until stopped.
|
|
@@ -296,7 +296,7 @@ More: [usage][docs/usage.md] · [Zoom on wirecat.dev][wirecat/en/docs/zoom]
|
|
|
296
296
|
|
|
297
297
|
| Setting | Meaning |
|
|
298
298
|
|---|---|
|
|
299
|
-
| `zoom.
|
|
299
|
+
| `zoom.client_id` | your Zoom app's Public Client ID |
|
|
300
300
|
| `account.profile` | the local profile label |
|
|
301
301
|
| `source` | `api` or `files` for `meetings sync` and `watch` |
|
|
302
302
|
| `files.folder`, `files.timezone` | the transcript folder and the zone of its filenames |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-skill.d.ts","sourceRoot":"","sources":["../src/agent-skill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-skill.d.ts","sourceRoot":"","sources":["../src/agent-skill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,yBAAyB,CAAA;AAE7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,oBAAoB,YACtB,OAAO,eACH,gBAAgB,gCAE5B,IAUF,CAAA"}
|
package/dist/agent-skill.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { annotate } from "@wirecat/cli-base/commands";
|
|
2
2
|
import { skillCommand } from "@wirecat/cli-base/skill";
|
|
3
|
+
import { LOCAL_READ, LOCAL_WRITE } from "@wirecat/cli-core/cli";
|
|
3
4
|
import { VERSION } from "./version.js";
|
|
4
5
|
export const addZoomSkillCommands = (program, environment, skill = new URL("../skills/zoom-cli/SKILL.md", import.meta.url)) => {
|
|
5
6
|
const command = skillCommand({ command: "zm", appName: "zoom-cli", version: VERSION }, skill, environment);
|
|
6
7
|
for (const child of command.commands) {
|
|
7
8
|
const install = child.name() === "install";
|
|
8
9
|
annotate(child, {
|
|
9
|
-
|
|
10
|
-
...(install ? { local: true } : {}),
|
|
10
|
+
effects: install ? LOCAL_WRITE : LOCAL_READ,
|
|
11
11
|
examples: [install ? "zm skill install --for agents --json" : "zm skill show --json"],
|
|
12
12
|
});
|
|
13
13
|
}
|
package/dist/agent-skill.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-skill.js","sourceRoot":"","sources":["../src/agent-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAyB,YAAY,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-skill.js","sourceRoot":"","sources":["../src/agent-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAyB,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAgB,EAChB,WAA6B,EAC7B,KAAK,GAAG,IAAI,GAAG,CAAC,6BAA6B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EACzD,EAAE;IACR,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IAC1G,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,SAAS,CAAA;QAC1C,QAAQ,CAAC,KAAK,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;YAC3C,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,sBAAsB,CAAC;SACtF,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Meta } from "@wirecat/cli-base/standards";
|
|
2
|
+
import { type Body } from "@wirecat/cli-core/cli";
|
|
3
|
+
import type { Command } from "commander";
|
|
4
|
+
export type AnswerFormat = "json" | "jsonl" | "pretty";
|
|
5
|
+
/**
|
|
6
|
+
* cli-core's meeting commands and MCP tools return envelopes as plain objects, `listed()` lists or bare reports,
|
|
7
|
+
* not `itemOf`/`listOf` bodies; zoom's own commands build bodies and never come through here.
|
|
8
|
+
*/
|
|
9
|
+
export declare const bodyOf: (value: unknown) => Body;
|
|
10
|
+
/** The answer as text, and the exit code a partial answer earns. */
|
|
11
|
+
export declare const renderBody: (command: Command, body: Body, options: {
|
|
12
|
+
format: AnswerFormat;
|
|
13
|
+
meta: Meta;
|
|
14
|
+
fields?: readonly string[];
|
|
15
|
+
quiet?: boolean;
|
|
16
|
+
diagnostic: (text: string) => void;
|
|
17
|
+
}) => {
|
|
18
|
+
text: string;
|
|
19
|
+
exitCode: number;
|
|
20
|
+
};
|
|
21
|
+
/** Every row the command read, in one page. */
|
|
22
|
+
export declare const wholeList: <T>(command: string, items: T[]) => import("@wirecat/cli-core/cli").ListBody<T>;
|
|
23
|
+
//# sourceMappingURL=answer-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-output.d.ts","sourceRoot":"","sources":["../src/answer-output.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAE,KAAK,IAAI,EAAoD,MAAM,uBAAuB,CAAA;AACnG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAMtD;;;GAGG;AACH,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,IAYvC,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,UAAU,YACZ,OAAO,QACV,IAAI,WACD;IACP,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,KACA;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAuBlC,CAAA;AAED,+CAA+C;AAC/C,eAAO,MAAM,SAAS,GAAI,CAAC,WAAW,MAAM,SAAS,CAAC,EAAE,gDACuB,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createRenderer, exitCodeOfAnswer, projectFields } from "@wirecat/cli-base";
|
|
2
|
+
import { metaOf } from "@wirecat/cli-base/commands";
|
|
3
|
+
import { itemOf, listOf, metaNow, renderAnswer, snakeKeys } from "@wirecat/cli-core/cli";
|
|
4
|
+
const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5
|
+
const only = (value, keys) => Object.keys(value).every((key) => keys.includes(key));
|
|
6
|
+
/**
|
|
7
|
+
* cli-core's meeting commands and MCP tools return envelopes as plain objects, `listed()` lists or bare reports,
|
|
8
|
+
* not `itemOf`/`listOf` bodies; zoom's own commands build bodies and never come through here.
|
|
9
|
+
*/
|
|
10
|
+
export const bodyOf = (value) => {
|
|
11
|
+
const data = snakeKeys(value);
|
|
12
|
+
if (record(data) && only(data, ["item", "items", "page", "next", "missing", "meta"])) {
|
|
13
|
+
if ("item" in data || (Array.isArray(data.items) && record(data.page)))
|
|
14
|
+
return data;
|
|
15
|
+
}
|
|
16
|
+
if (record(data) && Array.isArray(data.items) && only(data, ["items", "page", "limit", "has_more"]))
|
|
17
|
+
return listOf("list", {
|
|
18
|
+
items: data.items,
|
|
19
|
+
limit: Math.max(1, data.items.length),
|
|
20
|
+
has_more: data.has_more === true,
|
|
21
|
+
});
|
|
22
|
+
return itemOf(data);
|
|
23
|
+
};
|
|
24
|
+
/** The answer as text, and the exit code a partial answer earns. */
|
|
25
|
+
export const renderBody = (command, body, options) => {
|
|
26
|
+
const data = snakeKeys(body);
|
|
27
|
+
const fields = options.fields;
|
|
28
|
+
const projected = !fields
|
|
29
|
+
? data
|
|
30
|
+
: "items" in data
|
|
31
|
+
? { ...data, items: projectFields(data.items, fields) }
|
|
32
|
+
: { ...data, item: projectFields(data.item, fields) };
|
|
33
|
+
const meta = metaNow({ ...projected.meta, run_id: options.meta.run_id, duration_ms: options.meta.duration_ms });
|
|
34
|
+
const chunks = [];
|
|
35
|
+
const streams = {
|
|
36
|
+
data: (text) => chunks.push(`${text}\n`),
|
|
37
|
+
diagnostic: (text) => options.diagnostic(`${text}\n`),
|
|
38
|
+
};
|
|
39
|
+
const renderer = createRenderer({ format: options.format, color: false, quiet: options.quiet, streams });
|
|
40
|
+
// renderAnswer reports a partial answer through process.exitCode; zoom returns that code from `run` instead.
|
|
41
|
+
const exitCode = process.exitCode;
|
|
42
|
+
try {
|
|
43
|
+
renderAnswer(command, { renderer, format: options.format, streams }, { ...projected, meta });
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
process.exitCode = exitCode;
|
|
47
|
+
}
|
|
48
|
+
return { text: chunks.join(""), exitCode: exitCodeOfAnswer(meta, metaOf(command).partial === true) };
|
|
49
|
+
};
|
|
50
|
+
/** Every row the command read, in one page. */
|
|
51
|
+
export const wholeList = (command, items) => listOf(command, { items, limit: Math.max(1, items.length), has_more: false });
|
|
52
|
+
//# sourceMappingURL=answer-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-output.js","sourceRoot":"","sources":["../src/answer-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Effects } from "@wirecat/cli-base/standards";
|
|
2
|
+
import type { Command } from "commander";
|
|
3
|
+
export declare const hostFailureContext: (registry?: Command, effects?: Effects) => {
|
|
4
|
+
reasons?: readonly import("@wirecat/cli-base/standards").ErrorReason[];
|
|
5
|
+
details?: readonly string[];
|
|
6
|
+
steps?: readonly import("@wirecat/cli-base/standards").StepDefinition[];
|
|
7
|
+
runId?: string;
|
|
8
|
+
effects?: Effects;
|
|
9
|
+
targets?: import("@wirecat/cli-base/standards").StepInput["targets"];
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=answer-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-policy.d.ts","sourceRoot":"","sources":["../src/answer-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAG1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,eAAO,MAAM,kBAAkB,cAAe,OAAO,YAAY,OAAO;;;;;;;CAItE,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { failureContext } from "@wirecat/cli-core";
|
|
2
|
+
import { judgedEffects, judgedTargets } from "@wirecat/cli-core/cli";
|
|
3
|
+
export const hostFailureContext = (registry, effects) => ({
|
|
4
|
+
...failureContext(),
|
|
5
|
+
...(effects ? { effects: judgedEffects(effects) } : {}),
|
|
6
|
+
...(registry ? { targets: judgedTargets(registry) } : {}),
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=answer-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-policy.js","sourceRoot":"","sources":["../src/answer-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAkB,EAAE,OAAiB,EAAE,EAAE,CAAC,CAAC;IAC5E,GAAG,cAAc,EAAE;IACnB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC1D,CAAC,CAAA"}
|
package/dist/answers.d.ts
CHANGED
|
@@ -1,127 +1,190 @@
|
|
|
1
1
|
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
2
|
import { type Meta } from "@wirecat/cli-base/standards";
|
|
3
|
+
import type { Command } from "commander";
|
|
3
4
|
import * as v from "valibot";
|
|
4
5
|
export declare const answerSchema: v.UnionSchema<[v.StrictObjectSchema<{
|
|
5
|
-
readonly
|
|
6
|
-
readonly
|
|
6
|
+
readonly items: v.ArraySchema<v.GenericSchema, undefined>;
|
|
7
|
+
readonly page: v.VariantSchema<"mode", [v.StrictObjectSchema<{
|
|
8
|
+
readonly mode: v.LiteralSchema<"page", undefined>;
|
|
9
|
+
readonly limit: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
10
|
+
readonly has_more: v.BooleanSchema<undefined>;
|
|
11
|
+
readonly next_page: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 2, undefined>]>, undefined>;
|
|
12
|
+
}, undefined>, v.StrictObjectSchema<{
|
|
13
|
+
readonly mode: v.LiteralSchema<"cursor", undefined>;
|
|
14
|
+
readonly limit: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>]>;
|
|
15
|
+
readonly has_more: v.BooleanSchema<undefined>;
|
|
16
|
+
readonly next_cursor: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>, undefined>;
|
|
17
|
+
}, undefined>], undefined>;
|
|
18
|
+
readonly next: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.VariantSchema<"kind", [v.StrictObjectSchema<{
|
|
19
|
+
readonly kind: v.LiteralSchema<"command", undefined>;
|
|
7
20
|
readonly step: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>;
|
|
8
21
|
readonly command: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
9
22
|
readonly args: v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>;
|
|
10
23
|
readonly why: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
11
|
-
|
|
24
|
+
readonly safe_to_auto_execute: v.BooleanSchema<undefined>;
|
|
25
|
+
}, undefined>, v.StrictObjectSchema<{
|
|
26
|
+
readonly kind: v.LiteralSchema<"user_action", undefined>;
|
|
27
|
+
readonly step: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>;
|
|
28
|
+
readonly why: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
29
|
+
readonly safe_to_auto_execute: v.LiteralSchema<false, undefined>;
|
|
30
|
+
}, undefined>], undefined>, undefined>, v.MaxLengthAction<({
|
|
31
|
+
kind: "command";
|
|
12
32
|
step: string;
|
|
13
33
|
command: string;
|
|
14
34
|
args: {
|
|
15
35
|
[x: string]: unknown;
|
|
16
36
|
};
|
|
17
37
|
why: string;
|
|
18
|
-
|
|
38
|
+
safe_to_auto_execute: boolean;
|
|
39
|
+
} | {
|
|
40
|
+
kind: "user_action";
|
|
41
|
+
step: string;
|
|
42
|
+
why: string;
|
|
43
|
+
safe_to_auto_execute: false;
|
|
44
|
+
})[], 2, undefined>]>, undefined>;
|
|
19
45
|
readonly missing: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
20
46
|
readonly field: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
21
47
|
readonly why: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
22
|
-
readonly step: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>;
|
|
48
|
+
readonly step: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>, undefined>;
|
|
23
49
|
}, undefined>, undefined>, undefined>;
|
|
24
50
|
readonly meta: v.StrictObjectSchema<{
|
|
25
51
|
readonly run_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
26
52
|
readonly duration_ms: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
27
53
|
readonly accounts: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>, undefined>, undefined>;
|
|
28
|
-
readonly
|
|
29
|
-
|
|
30
|
-
readonly
|
|
54
|
+
readonly complete: v.BooleanSchema<undefined>;
|
|
55
|
+
readonly issues: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
56
|
+
readonly code: v.PicklistSchema<readonly ["validation_error", "configuration_error", "authentication_error", "permission_error", "not_found", "confirmation_required", "rate_limited", "timeout", "network_error", "provider_error", "provider_unavailable", "invalid_response", "outcome_unknown", "cancelled"], undefined>;
|
|
57
|
+
readonly reason: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>, undefined>;
|
|
58
|
+
readonly source: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
31
59
|
}, undefined>, undefined>, undefined>;
|
|
32
60
|
readonly truncated: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
33
61
|
}, undefined>;
|
|
34
62
|
}, undefined>, v.StrictObjectSchema<{
|
|
35
|
-
readonly
|
|
36
|
-
readonly
|
|
37
|
-
readonly
|
|
38
|
-
readonly has_more: v.BooleanSchema<undefined>;
|
|
39
|
-
readonly cursor: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>, undefined>;
|
|
40
|
-
}, undefined>;
|
|
41
|
-
readonly next: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.StrictObjectSchema<{
|
|
63
|
+
readonly item: v.GenericSchema;
|
|
64
|
+
readonly next: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.VariantSchema<"kind", [v.StrictObjectSchema<{
|
|
65
|
+
readonly kind: v.LiteralSchema<"command", undefined>;
|
|
42
66
|
readonly step: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>;
|
|
43
67
|
readonly command: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
44
68
|
readonly args: v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>;
|
|
45
69
|
readonly why: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
46
|
-
|
|
70
|
+
readonly safe_to_auto_execute: v.BooleanSchema<undefined>;
|
|
71
|
+
}, undefined>, v.StrictObjectSchema<{
|
|
72
|
+
readonly kind: v.LiteralSchema<"user_action", undefined>;
|
|
73
|
+
readonly step: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>;
|
|
74
|
+
readonly why: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
75
|
+
readonly safe_to_auto_execute: v.LiteralSchema<false, undefined>;
|
|
76
|
+
}, undefined>], undefined>, undefined>, v.MaxLengthAction<({
|
|
77
|
+
kind: "command";
|
|
47
78
|
step: string;
|
|
48
79
|
command: string;
|
|
49
80
|
args: {
|
|
50
81
|
[x: string]: unknown;
|
|
51
82
|
};
|
|
52
83
|
why: string;
|
|
53
|
-
|
|
84
|
+
safe_to_auto_execute: boolean;
|
|
85
|
+
} | {
|
|
86
|
+
kind: "user_action";
|
|
87
|
+
step: string;
|
|
88
|
+
why: string;
|
|
89
|
+
safe_to_auto_execute: false;
|
|
90
|
+
})[], 2, undefined>]>, undefined>;
|
|
54
91
|
readonly missing: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
55
92
|
readonly field: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
56
93
|
readonly why: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
57
|
-
readonly step: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>;
|
|
94
|
+
readonly step: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>, undefined>;
|
|
58
95
|
}, undefined>, undefined>, undefined>;
|
|
59
96
|
readonly meta: v.StrictObjectSchema<{
|
|
60
97
|
readonly run_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
61
98
|
readonly duration_ms: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
62
99
|
readonly accounts: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>, undefined>, undefined>;
|
|
63
|
-
readonly
|
|
64
|
-
|
|
65
|
-
readonly
|
|
100
|
+
readonly complete: v.BooleanSchema<undefined>;
|
|
101
|
+
readonly issues: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
102
|
+
readonly code: v.PicklistSchema<readonly ["validation_error", "configuration_error", "authentication_error", "permission_error", "not_found", "confirmation_required", "rate_limited", "timeout", "network_error", "provider_error", "provider_unavailable", "invalid_response", "outcome_unknown", "cancelled"], undefined>;
|
|
103
|
+
readonly reason: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "dotted lower-case words, such as `page.next`">]>, undefined>;
|
|
104
|
+
readonly source: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "must not be empty">]>;
|
|
66
105
|
}, undefined>, undefined>, undefined>;
|
|
67
106
|
readonly truncated: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
68
107
|
}, undefined>;
|
|
69
108
|
}, undefined>], undefined>;
|
|
70
109
|
export declare const toolAnswerSchema: NonNullable<Tool["outputSchema"]>;
|
|
71
110
|
export declare const readMetadata: (now?: () => number) => (() => Meta);
|
|
72
|
-
/**
|
|
73
|
-
export declare const
|
|
74
|
-
|
|
75
|
-
|
|
111
|
+
/** An MCP tool's result as a validated envelope with the host's run metadata and only runnable next steps. */
|
|
112
|
+
export declare const toolAnswer: (value: unknown, meta: Meta, registry?: Command) => {
|
|
113
|
+
items: unknown[];
|
|
114
|
+
page: {
|
|
115
|
+
mode: "page";
|
|
116
|
+
limit: number;
|
|
117
|
+
has_more: boolean;
|
|
118
|
+
next_page?: number | undefined;
|
|
119
|
+
} | {
|
|
120
|
+
mode: "cursor";
|
|
121
|
+
limit: number;
|
|
122
|
+
has_more: boolean;
|
|
123
|
+
next_cursor?: string | undefined;
|
|
124
|
+
};
|
|
125
|
+
next?: ({
|
|
126
|
+
kind: "command";
|
|
76
127
|
step: string;
|
|
77
128
|
command: string;
|
|
78
129
|
args: {
|
|
79
130
|
[x: string]: unknown;
|
|
80
131
|
};
|
|
81
132
|
why: string;
|
|
82
|
-
|
|
133
|
+
safe_to_auto_execute: boolean;
|
|
134
|
+
} | {
|
|
135
|
+
kind: "user_action";
|
|
136
|
+
step: string;
|
|
137
|
+
why: string;
|
|
138
|
+
safe_to_auto_execute: false;
|
|
139
|
+
})[] | undefined;
|
|
83
140
|
missing?: {
|
|
84
141
|
field: string;
|
|
85
142
|
why: string;
|
|
86
|
-
step
|
|
143
|
+
step?: string | undefined;
|
|
87
144
|
}[] | undefined;
|
|
88
145
|
meta: {
|
|
89
146
|
run_id: string;
|
|
90
147
|
duration_ms: number;
|
|
91
148
|
accounts?: string[] | undefined;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
149
|
+
complete: boolean;
|
|
150
|
+
issues?: {
|
|
151
|
+
code: "authentication_error" | "cancelled" | "configuration_error" | "confirmation_required" | "invalid_response" | "network_error" | "not_found" | "outcome_unknown" | "permission_error" | "provider_error" | "provider_unavailable" | "rate_limited" | "timeout" | "validation_error";
|
|
152
|
+
reason?: string | undefined;
|
|
153
|
+
source: string;
|
|
95
154
|
}[] | undefined;
|
|
96
155
|
truncated?: boolean | undefined;
|
|
97
156
|
};
|
|
98
157
|
} | {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
has_more: boolean;
|
|
103
|
-
cursor?: string | undefined;
|
|
104
|
-
};
|
|
105
|
-
next?: {
|
|
158
|
+
item: unknown;
|
|
159
|
+
next?: ({
|
|
160
|
+
kind: "command";
|
|
106
161
|
step: string;
|
|
107
162
|
command: string;
|
|
108
163
|
args: {
|
|
109
164
|
[x: string]: unknown;
|
|
110
165
|
};
|
|
111
166
|
why: string;
|
|
112
|
-
|
|
167
|
+
safe_to_auto_execute: boolean;
|
|
168
|
+
} | {
|
|
169
|
+
kind: "user_action";
|
|
170
|
+
step: string;
|
|
171
|
+
why: string;
|
|
172
|
+
safe_to_auto_execute: false;
|
|
173
|
+
})[] | undefined;
|
|
113
174
|
missing?: {
|
|
114
175
|
field: string;
|
|
115
176
|
why: string;
|
|
116
|
-
step
|
|
177
|
+
step?: string | undefined;
|
|
117
178
|
}[] | undefined;
|
|
118
179
|
meta: {
|
|
119
180
|
run_id: string;
|
|
120
181
|
duration_ms: number;
|
|
121
182
|
accounts?: string[] | undefined;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
183
|
+
complete: boolean;
|
|
184
|
+
issues?: {
|
|
185
|
+
code: "authentication_error" | "cancelled" | "configuration_error" | "confirmation_required" | "invalid_response" | "network_error" | "not_found" | "outcome_unknown" | "permission_error" | "provider_error" | "provider_unavailable" | "rate_limited" | "timeout" | "validation_error";
|
|
186
|
+
reason?: string | undefined;
|
|
187
|
+
source: string;
|
|
125
188
|
}[] | undefined;
|
|
126
189
|
truncated?: boolean | undefined;
|
|
127
190
|
};
|
package/dist/answers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../src/answers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../src/answers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAA;AAE9D,OAAO,EAAmC,KAAK,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAExF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAG5B,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAAuB,CAAA;AAEhD,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAuC,CAAA;AAEtG,eAAO,MAAM,YAAY,SAAS,MAAM,MAAM,KAAc,CAAC,MAAM,IAAI,CAItE,CAAA;AAED,8GAA8G;AAC9G,eAAO,MAAM,UAAU,UAAW,OAAO,QAAQ,IAAI,aAAa,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAexE,CAAA"}
|
package/dist/answers.js
CHANGED
|
@@ -1,47 +1,36 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { CliError } from "@wirecat/cli-base";
|
|
3
|
+
import { errorObjectSchema, jsonSchemaOf } from "@wirecat/cli-base/standards";
|
|
4
|
+
import { metaNow, runnable, answerSchema as sharedAnswerSchema } from "@wirecat/cli-core/cli";
|
|
3
5
|
import * as v from "valibot";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
export const answerSchema = v.union([itemEnvelopeSchema(v.unknown()), listEnvelopeSchema(v.unknown())]);
|
|
6
|
+
import { bodyOf } from "./answer-output.js";
|
|
7
|
+
export const answerSchema = sharedAnswerSchema();
|
|
7
8
|
const outputSchema = { ...jsonSchemaOf(v.union([answerSchema, errorObjectSchema])) };
|
|
8
9
|
export const toolAnswerSchema = { ...outputSchema, type: "object" };
|
|
9
10
|
export const readMetadata = (now = Date.now) => {
|
|
10
11
|
const started = now();
|
|
11
12
|
const runId = randomUUID();
|
|
12
|
-
return () => ({ run_id: runId, duration_ms: Math.max(0, Math.round(now() - started)) });
|
|
13
|
+
return () => metaNow({ run_id: runId, duration_ms: Math.max(0, Math.round(now() - started)) });
|
|
13
14
|
};
|
|
14
|
-
/**
|
|
15
|
-
export const
|
|
15
|
+
/** An MCP tool's result as a validated envelope with the host's run metadata and only runnable next steps. */
|
|
16
|
+
export const toolAnswer = (value, meta, registry) => {
|
|
16
17
|
if (value === undefined)
|
|
17
|
-
throw new
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
items: record.items,
|
|
31
|
-
page: {
|
|
32
|
-
limit: Math.max(1, typeof record.limit === "number" ? record.limit : record.items.length),
|
|
33
|
-
has_more: record.has_more === true,
|
|
34
|
-
},
|
|
35
|
-
meta,
|
|
36
|
-
};
|
|
18
|
+
throw new CliError("invalid_response", "command returned no answer");
|
|
19
|
+
const body = bodyOf(value);
|
|
20
|
+
const answer = v.safeParse(answerSchema, {
|
|
21
|
+
...body,
|
|
22
|
+
meta: metaNow({ ...body.meta, run_id: meta.run_id, duration_ms: meta.duration_ms }),
|
|
23
|
+
});
|
|
24
|
+
if (!answer.success)
|
|
25
|
+
throw new CliError("invalid_response", "command returned an invalid answer envelope");
|
|
26
|
+
const packet = answer.output;
|
|
27
|
+
if (registry && packet.next) {
|
|
28
|
+
const next = runnable(registry, packet.next);
|
|
29
|
+
if (next.length)
|
|
30
|
+
packet.next = next;
|
|
37
31
|
else
|
|
38
|
-
|
|
32
|
+
delete packet.next;
|
|
39
33
|
}
|
|
40
|
-
|
|
41
|
-
body = { item: data, meta };
|
|
42
|
-
const answer = v.safeParse(answerSchema, body);
|
|
43
|
-
if (!answer.success)
|
|
44
|
-
throw new ZoomError("invalid_response", "command returned an invalid answer envelope");
|
|
45
|
-
return answer.output;
|
|
34
|
+
return packet;
|
|
46
35
|
};
|
|
47
36
|
//# sourceMappingURL=answers.js.map
|
package/dist/answers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answers.js","sourceRoot":"","sources":["../src/answers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,
|
|
1
|
+
{"version":3,"file":"answers.js","sourceRoot":"","sources":["../src/answers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAa,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE7F,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAA;AAChD,MAAM,YAAY,GAA4B,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAA;AAC7G,MAAM,CAAC,MAAM,gBAAgB,GAAsC,EAAE,GAAG,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAEtG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAG,GAAiB,IAAI,CAAC,GAAG,EAAgB,EAAE;IACzE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAA;IACrB,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;IAC1B,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;AAChG,CAAC,CAAA;AAED,8GAA8G;AAC9G,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,IAAU,EAAE,QAAkB,EAAE,EAAE;IAC3E,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,CAAA;IAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE;QACvC,GAAG,IAAI;QACP,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;KACpF,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,6CAA6C,CAAC,CAAA;IAC1G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;;YAC9B,OAAO,MAAM,CAAC,IAAI,CAAA;IACzB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,kBAAkB,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,QAAmB,CAAA;AAgBpD,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAC6E,CAAA;AAavH,qBAAa,aAAc,YAAW,aAAa;IAM/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,QAAQ,CAAC,QAAQ,UAAS;IAC1B,QAAQ,CAAC,gBAAgB,SAAQ;IACjC,QAAQ,CAAC,IAAI,SAAQ;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,YACmB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,KAAK,EACtC,OAAO,GAAE,aAAkB,EAG5B;IACD,OAAO,CAAC,OAAO;YAKD,KAAK;IAeb,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAqEtD;IACK,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoE3D;IACK,UAAU,CAAC,EAAE,EAAE,MAAM,yEAkF1B;IAEK,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmCxD;IACK,IAAI,kBAET;IACK,KAAK,kBAEV;CACF"}
|