@wirecat/zoom-cli 0.1.1 → 0.2.1

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.
Files changed (89) hide show
  1. package/README.md +165 -9
  2. package/dist/agent-skill.d.ts +4 -0
  3. package/dist/agent-skill.d.ts.map +1 -0
  4. package/dist/agent-skill.js +16 -0
  5. package/dist/agent-skill.js.map +1 -0
  6. package/dist/api.d.ts +3 -2
  7. package/dist/api.d.ts.map +1 -1
  8. package/dist/api.js +10 -41
  9. package/dist/api.js.map +1 -1
  10. package/dist/archive-commands.d.ts +32 -0
  11. package/dist/archive-commands.d.ts.map +1 -0
  12. package/dist/archive-commands.js +182 -0
  13. package/dist/archive-commands.js.map +1 -0
  14. package/dist/archive-transcripts.d.ts +33 -0
  15. package/dist/archive-transcripts.d.ts.map +1 -0
  16. package/dist/archive-transcripts.js +131 -0
  17. package/dist/archive-transcripts.js.map +1 -0
  18. package/dist/bin/zm.js +53 -3
  19. package/dist/bin/zm.js.map +1 -1
  20. package/dist/commands.d.ts +12 -0
  21. package/dist/commands.d.ts.map +1 -0
  22. package/dist/commands.js +96 -0
  23. package/dist/commands.js.map +1 -0
  24. package/dist/errors.d.ts +4 -3
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +11 -4
  27. package/dist/errors.js.map +1 -1
  28. package/dist/execution.d.ts +16 -0
  29. package/dist/execution.d.ts.map +1 -0
  30. package/dist/execution.js +49 -0
  31. package/dist/execution.js.map +1 -0
  32. package/dist/index.d.ts +6 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +6 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/login.d.ts +1 -0
  37. package/dist/login.d.ts.map +1 -1
  38. package/dist/login.js +13 -1
  39. package/dist/login.js.map +1 -1
  40. package/dist/mcp-server.d.ts +16 -0
  41. package/dist/mcp-server.d.ts.map +1 -0
  42. package/dist/mcp-server.js +172 -0
  43. package/dist/mcp-server.js.map +1 -0
  44. package/dist/output-file.d.ts +4 -0
  45. package/dist/output-file.d.ts.map +1 -0
  46. package/dist/output-file.js +55 -0
  47. package/dist/output-file.js.map +1 -0
  48. package/dist/program.d.ts +22 -0
  49. package/dist/program.d.ts.map +1 -1
  50. package/dist/program.js +443 -44
  51. package/dist/program.js.map +1 -1
  52. package/dist/recording-archive.d.ts +62 -0
  53. package/dist/recording-archive.d.ts.map +1 -0
  54. package/dist/recording-archive.js +519 -0
  55. package/dist/recording-archive.js.map +1 -0
  56. package/dist/recording-sync.d.ts +15 -0
  57. package/dist/recording-sync.d.ts.map +1 -0
  58. package/dist/recording-sync.js +49 -0
  59. package/dist/recording-sync.js.map +1 -0
  60. package/dist/recordings.d.ts +47 -0
  61. package/dist/recordings.d.ts.map +1 -0
  62. package/dist/recordings.js +124 -0
  63. package/dist/recordings.js.map +1 -0
  64. package/dist/remote-http.d.ts +23 -0
  65. package/dist/remote-http.d.ts.map +1 -0
  66. package/dist/remote-http.js +113 -0
  67. package/dist/remote-http.js.map +1 -0
  68. package/dist/remote-meetings.d.ts +58 -0
  69. package/dist/remote-meetings.d.ts.map +1 -0
  70. package/dist/remote-meetings.js +151 -0
  71. package/dist/remote-meetings.js.map +1 -0
  72. package/dist/store-connection.d.ts +9 -0
  73. package/dist/store-connection.d.ts.map +1 -0
  74. package/dist/store-connection.js +39 -0
  75. package/dist/store-connection.js.map +1 -0
  76. package/dist/streaming.d.ts +6 -0
  77. package/dist/streaming.d.ts.map +1 -0
  78. package/dist/streaming.js +86 -0
  79. package/dist/streaming.js.map +1 -0
  80. package/dist/tokens.d.ts +6 -4
  81. package/dist/tokens.d.ts.map +1 -1
  82. package/dist/tokens.js +48 -18
  83. package/dist/tokens.js.map +1 -1
  84. package/dist/watch-commands.d.ts +25 -0
  85. package/dist/watch-commands.d.ts.map +1 -0
  86. package/dist/watch-commands.js +52 -0
  87. package/dist/watch-commands.js.map +1 -0
  88. package/package.json +22 -12
  89. package/skills/zoom-cli/SKILL.md +85 -0
@@ -0,0 +1,182 @@
1
+ import { annotate } from "@wirecat/cli-core/commands";
2
+ import { listed } from "@wirecat/cli-meetings";
3
+ import { ZoomError } from "./errors.js";
4
+ import { bytes } from "./execution.js";
5
+ import { syncRecordingArchive } from "./recording-sync.js";
6
+ const label = (command, example, mutation = "none") => annotate(command, {
7
+ origin: "handwritten",
8
+ mutates: mutation !== "none",
9
+ ...(mutation === "none" ? {} : { local: mutation === "local" }),
10
+ examples: [example],
11
+ });
12
+ const positive = (text) => {
13
+ const value = bytes(text);
14
+ if (value === 0)
15
+ throw new ZoomError("validation_error", "expected a positive number");
16
+ return value;
17
+ };
18
+ const change = (options) => Object.fromEntries(["topic", "startTime", "durationMinutes", "timezone", "agenda", "type"]
19
+ .filter((key) => options[key] !== undefined)
20
+ .map((key) => [key, options[key]]));
21
+ const changes = (command) => command
22
+ .option("--topic <text>", "meeting topic")
23
+ .option("--start-time <timestamp>", "ISO start time with timezone")
24
+ .option("--duration-minutes <minutes>", "positive meeting duration in minutes", positive)
25
+ .option("--timezone <zone>", "IANA timezone")
26
+ .option("--agenda <text>", "meeting agenda")
27
+ .option("--type <type>", "instant (1) or scheduled (2)", positive)
28
+ .option("--yes", "apply the remote mutation once instead of previewing")
29
+ .option("--dry-run", "preview only, including when --yes is present");
30
+ const mutation = (options, deps) => {
31
+ if (options.yes && !options.dryRun)
32
+ deps.api();
33
+ return { apply: options.yes, dryRun: options.dryRun, signal: deps.signal(), occurrenceId: options.occurrenceId };
34
+ };
35
+ export const addArchiveCommands = (program, deps) => {
36
+ const recordings = program.command("recordings").description("cloud recording assets and verified local archives");
37
+ label(recordings
38
+ .command("list")
39
+ .description("list cloud recording occurrences (last 30 days by default)")
40
+ .option("--from <date>", "first YYYY-MM-DD date")
41
+ .option("--to <date>", "last YYYY-MM-DD date")
42
+ .action(async (options) => {
43
+ deps.api();
44
+ const to = options.to ?? new Date(deps.now()).toISOString().slice(0, 10);
45
+ const end = Date.parse(`${to}T00:00:00Z`);
46
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(to) || !Number.isFinite(end) || new Date(end).toISOString().slice(0, 10) !== to)
47
+ throw new ZoomError("validation_error", "to must be a real YYYY-MM-DD date");
48
+ const from = options.from ?? new Date(end - 30 * 86400000).toISOString().slice(0, 10);
49
+ deps.output(listed(await deps.recordings().list({ from, to, signal: deps.signal() })));
50
+ }), "zm recordings list --from 2026-10-01 --to 2026-10-10 --json");
51
+ label(recordings
52
+ .command("sync")
53
+ .description("serial monthly recording archive synchronization with completed JSONL receipts")
54
+ .requiredOption("--from <date>", "first YYYY-MM-DD date")
55
+ .requiredOption("--to <date>", "last YYYY-MM-DD date (at most ten years)")
56
+ .requiredOption("--destination <directory>", "explicit archive directory")
57
+ .option("--max-bytes <bytes>", "maximum bytes per recording file", positive)
58
+ .action(async (options) => {
59
+ if (!program.opts().jsonl && !deps.outputIsTTY)
60
+ throw new ZoomError("validation_error", "headless recording sync requires --jsonl");
61
+ if (program.opts().json)
62
+ throw new ZoomError("validation_error", "recording sync streams receipts; use --jsonl");
63
+ deps.api();
64
+ for await (const receipt of syncRecordingArchive(deps.recordings(), { ...options, signal: deps.signal() }))
65
+ await deps.receipt(receipt);
66
+ }), "zm recordings sync --from 2026-01-01 --to 2026-10-10 --destination ./archive --jsonl", "local");
67
+ label(recordings
68
+ .command("show")
69
+ .description("show downloadable asset metadata without signed URLs")
70
+ .argument("<meeting>", "meeting id or occurrence UUID")
71
+ .action(async (id) => {
72
+ deps.api();
73
+ deps.output(await deps.recordings().show(id, { signal: deps.signal() }));
74
+ }), "zm recordings show example-occurrence --json");
75
+ label(recordings
76
+ .command("download")
77
+ .description("stream recording assets into a verified local archive")
78
+ .argument("<meeting>", "meeting id or occurrence UUID")
79
+ .requiredOption("--destination <directory>", "explicit archive directory")
80
+ .option("--file-ids <ids>", "comma-separated recording file ids")
81
+ .option("--max-bytes <bytes>", "per-file download byte limit (default 20 GiB)", positive)
82
+ .action(async (id, options) => {
83
+ deps.api();
84
+ deps.output(await deps.recordings().download(id, {
85
+ destination: options.destination,
86
+ fileIds: options.fileIds?.split(",").map((one) => one.trim()),
87
+ maxBytes: options.maxBytes,
88
+ signal: deps.signal(),
89
+ }));
90
+ }), "zm recordings download example-occurrence --destination ./zoom-archive --json", "local");
91
+ const archive = recordings.command("archive").description("inspect archives without Zoom or a database");
92
+ const transcriptOptions = (command) => command
93
+ .option("--uuid <uuid>", "select an occurrence UUID")
94
+ .option("--file-ids <ids>", "select comma-separated transcript asset ids")
95
+ .option("--max-bytes <bytes>", "maximum VTT bytes per file (default 8 MiB)", positive);
96
+ const selected = (options) => ({
97
+ uuid: options.uuid,
98
+ fileIds: options.fileIds?.split(",").map((id) => id.trim()),
99
+ maxBytes: options.maxBytes,
100
+ signal: deps.signal(),
101
+ });
102
+ label(transcriptOptions(archive
103
+ .command("transcript")
104
+ .description("read checksum-verified local VTT cues without Zoom or a database")
105
+ .argument("<directory>")).action(async (directory, options) => {
106
+ await deps.outputItems(deps.transcripts.read(directory, selected(options)));
107
+ }), "zm recordings archive transcript ./zoom-archive --uuid example-occurrence --json");
108
+ label(transcriptOptions(archive
109
+ .command("search")
110
+ .description("literal normalized text search across verified local VTT cues")
111
+ .argument("<directory>")
112
+ .argument("<query>"))
113
+ .option("--limit <matches>", "maximum matches from 1 through 1000 (default 100)", positive)
114
+ .action(async (directory, query, options) => {
115
+ deps.output(await deps.transcripts.search(directory, query, { ...selected(options), limit: options.limit }));
116
+ }), 'zm recordings archive search ./zoom-archive "example plan" --limit 10 --json');
117
+ label(archive
118
+ .command("inspect")
119
+ .description("read local transfer manifests")
120
+ .argument("<directory>")
121
+ .action(async (directory) => deps.output(listed(await deps.archive.inspect(directory, { signal: deps.signal() })))), "zm recordings archive inspect ./zoom-archive --json");
122
+ label(archive
123
+ .command("verify")
124
+ .description("verify local file sizes and checksums")
125
+ .argument("<directory>")
126
+ .action(async (directory) => deps.output(listed(await deps.archive.verify(directory, { signal: deps.signal() })))), "zm recordings archive verify ./zoom-archive --json");
127
+ label(archive
128
+ .command("locks")
129
+ .description("inspect active, stale or foreign archive locks")
130
+ .argument("<directory>")
131
+ .action(async (directory) => deps.output(listed(await deps.archive.locks(directory, { signal: deps.signal() })))), "zm recordings archive locks ./zoom-archive --json");
132
+ label(archive
133
+ .command("recover")
134
+ .description("preview recovery of recognized stale local locks")
135
+ .argument("<directory>")
136
+ .option("--yes", "remove recognized locks left by a dead local process")
137
+ .option("--dry-run", "preview only, including when --yes is present")
138
+ .action(async (directory, options) => deps.output(await deps.archive.recover(directory, {
139
+ apply: options.yes === true && !options.dryRun,
140
+ signal: deps.signal(),
141
+ }))), "zm recordings archive recover ./zoom-archive --dry-run --json", "local");
142
+ const remote = program
143
+ .command("remote-meetings")
144
+ .description("upcoming Zoom meetings; stored meeting reads remain under meetings");
145
+ label(remote
146
+ .command("list")
147
+ .description("list upcoming meetings")
148
+ .action(async () => {
149
+ deps.api();
150
+ deps.output(listed(await deps.remoteMeetings().list({ signal: deps.signal() })));
151
+ }), "zm remote-meetings list --json");
152
+ label(remote
153
+ .command("show")
154
+ .description("show an upcoming meeting")
155
+ .argument("<meeting>", "positive numeric Zoom meeting id")
156
+ .action(async (id) => {
157
+ deps.api();
158
+ deps.output(await deps.remoteMeetings().show(id, { signal: deps.signal() }));
159
+ }), "zm remote-meetings show 123456789 --json");
160
+ label(remote
161
+ .command("invitation")
162
+ .description("read invitation text")
163
+ .argument("<meeting>", "positive numeric Zoom meeting id")
164
+ .action(async (id) => {
165
+ deps.api();
166
+ deps.output(await deps.remoteMeetings().invitation(id, { signal: deps.signal() }));
167
+ }), "zm remote-meetings invitation 123456789 --json");
168
+ label(changes(remote.command("create").description("preview a meeting creation; --yes performs it once")).action(async (options) => deps.output(await deps.remoteMeetings().create(change(options), mutation(options, deps)))), 'zm remote-meetings create --topic "Example planning" --start-time 2026-10-10T15:30:00Z --dry-run --json', "remote");
169
+ label(changes(remote
170
+ .command("update")
171
+ .description("preview a meeting update; --yes performs it once")
172
+ .argument("<meeting>", "positive numeric Zoom meeting id")).action(async (id, options) => deps.output(await deps.remoteMeetings().update(id, change(options), mutation(options, deps)))), 'zm remote-meetings update 123456789 --topic "Example planning" --dry-run --json', "remote");
173
+ label(remote
174
+ .command("cancel")
175
+ .description("preview a cancellation; --yes performs it once")
176
+ .argument("<meeting>", "positive numeric Zoom meeting id")
177
+ .option("--occurrence-id <id>", "cancel one recurring occurrence")
178
+ .option("--yes", "apply cancellation once instead of previewing")
179
+ .option("--dry-run", "preview only, including when --yes is present")
180
+ .action(async (id, options) => deps.output(await deps.remoteMeetings().cancel(id, mutation(options, deps)))), "zm remote-meetings cancel 123456789 --dry-run --json", "remote");
181
+ };
182
+ //# sourceMappingURL=archive-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-commands.js","sourceRoot":"","sources":["../src/archive-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type TranscriptLine } from "@wirecat/cli-meetings";
2
+ import { type ArchivedFile, type ArchiveManifest } from "./recording-archive.js";
3
+ export interface ArchiveTranscriptOptions {
4
+ uuid?: string;
5
+ fileIds?: string[];
6
+ maxBytes?: number;
7
+ signal?: AbortSignal;
8
+ }
9
+ export interface ArchiveTranscript {
10
+ meeting: ArchiveManifest["meeting"];
11
+ asset: ArchivedFile;
12
+ cues: TranscriptLine[];
13
+ }
14
+ export interface ArchiveTranscriptSearchOptions extends ArchiveTranscriptOptions {
15
+ limit?: number;
16
+ }
17
+ export interface ArchiveTranscriptMatch extends TranscriptLine {
18
+ meeting: ArchiveManifest["meeting"];
19
+ asset: ArchivedFile;
20
+ /** Zero-based cue position in this asset, retaining the shared parser's file order. */
21
+ position: number;
22
+ }
23
+ export interface ArchiveTranscriptSearchReport {
24
+ items: ArchiveTranscriptMatch[];
25
+ page: 1;
26
+ limit: number;
27
+ hasMore: boolean;
28
+ }
29
+ /** Verified, bounded VTT assets in manifest/file order; each handle closes before its result is yielded. */
30
+ export declare function readArchiveTranscripts(destination: string, options?: ArchiveTranscriptOptions): AsyncGenerator<ArchiveTranscript, void, void>;
31
+ /** Literal text-only matching using NFC normalization and Unicode default lowercase on both sides. */
32
+ export declare const searchArchiveTranscripts: (destination: string, query: string, options?: ArchiveTranscriptSearchOptions) => Promise<ArchiveTranscriptSearchReport>;
33
+ //# sourceMappingURL=archive-transcripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-transcripts.d.ts","sourceRoot":"","sources":["../src/archive-transcripts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAErE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAkB,MAAM,wBAAwB,CAAA;AAEhG,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AACD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,KAAK,EAAE,YAAY,CAAA;IACnB,IAAI,EAAE,cAAc,EAAE,CAAA;CACvB;AACD,MAAM,WAAW,8BAA+B,SAAQ,wBAAwB;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AACD,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,KAAK,EAAE,YAAY,CAAA;IACnB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAA;CACjB;AACD,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,sBAAsB,EAAE,CAAA;IAC/B,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;CACjB;AA6ED,4GAA4G;AAC5G,wBAAuB,sBAAsB,CAC3C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,wBAA6B,GACrC,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,CA2B/C;AAED,sGAAsG;AACtG,eAAO,MAAM,wBAAwB,gBACtB,MAAM,SACZ,MAAM,YACJ,8BAA8B,KACtC,OAAO,CAAC,6BAA6B,CAiBvC,CAAA"}
@@ -0,0 +1,131 @@
1
+ import { createHash } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { open, realpath } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { parseVtt } from "@wirecat/cli-meetings";
6
+ import { checkCancelled, ZoomError } from "./errors.js";
7
+ import { inspectArchive } from "./recording-archive.js";
8
+ const validate = (destination, options) => {
9
+ const maxBytes = options.maxBytes === undefined ? 8 * 1024 ** 2 : options.maxBytes;
10
+ if (typeof destination !== "string" || !destination.trim() || !Number.isSafeInteger(maxBytes) || maxBytes <= 0)
11
+ throw new ZoomError("validation_error", "archive destination and positive transcript byte limit are required");
12
+ if (options.uuid !== undefined && (typeof options.uuid !== "string" || !options.uuid.trim()))
13
+ throw new ZoomError("validation_error", "archive occurrence UUID must be nonempty");
14
+ if (options.fileIds !== undefined &&
15
+ (!Array.isArray(options.fileIds) ||
16
+ options.fileIds.length === 0 ||
17
+ options.fileIds.some((id) => typeof id !== "string" || !id.trim())))
18
+ throw new ZoomError("validation_error", "archive transcript selection must contain nonempty file ids");
19
+ return maxBytes;
20
+ };
21
+ const readTranscript = async (destination, asset, maxBytes, signal) => {
22
+ checkCancelled(signal);
23
+ if (asset.size > maxBytes)
24
+ throw new ZoomError("validation_error", "archive transcript exceeds the byte limit");
25
+ try {
26
+ const file = await open(join(destination, asset.path), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
27
+ try {
28
+ checkCancelled(signal);
29
+ const stat = await file.stat();
30
+ if (!stat.isFile())
31
+ throw new ZoomError("validation_error", "archive transcript must be an ordinary file");
32
+ if (stat.size > maxBytes)
33
+ throw new ZoomError("validation_error", "archive transcript exceeds the byte limit");
34
+ if (stat.size !== asset.size)
35
+ throw new ZoomError("validation_error", "archive transcript failed size verification");
36
+ const hash = createHash("sha256");
37
+ const chunks = [];
38
+ let size = 0;
39
+ for (;;) {
40
+ checkCancelled(signal);
41
+ const buffer = Buffer.alloc(Math.min(65536, maxBytes - size + 1));
42
+ const { bytesRead } = await file.read(buffer, 0, buffer.length, null);
43
+ checkCancelled(signal);
44
+ if (bytesRead === 0)
45
+ break;
46
+ size += bytesRead;
47
+ if (size > maxBytes)
48
+ throw new ZoomError("validation_error", "archive transcript exceeds the byte limit");
49
+ const chunk = buffer.subarray(0, bytesRead);
50
+ hash.update(chunk);
51
+ chunks.push(chunk);
52
+ }
53
+ if (size !== asset.size || hash.digest("hex") !== asset.sha256)
54
+ throw new ZoomError("validation_error", "archive transcript failed checksum verification");
55
+ let text;
56
+ try {
57
+ text = new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks, size));
58
+ }
59
+ catch {
60
+ throw new ZoomError("validation_error", "archive transcript is not valid UTF-8");
61
+ }
62
+ try {
63
+ return parseVtt(text);
64
+ }
65
+ catch {
66
+ throw new ZoomError("validation_error", "archive transcript is not valid WebVTT");
67
+ }
68
+ }
69
+ finally {
70
+ await file.close();
71
+ }
72
+ }
73
+ catch (error) {
74
+ checkCancelled(signal);
75
+ if (error instanceof ZoomError)
76
+ throw error;
77
+ const code = typeof error === "object" && error !== null && "code" in error ? error.code : null;
78
+ if (code === "ENOENT")
79
+ throw new ZoomError("not_found", "archive transcript file was not found");
80
+ if (code === "ELOOP")
81
+ throw new ZoomError("validation_error", "archive transcript must not be a symlink");
82
+ throw new ZoomError("configuration_error", "archive transcript could not be read");
83
+ }
84
+ };
85
+ /** Verified, bounded VTT assets in manifest/file order; each handle closes before its result is yielded. */
86
+ export async function* readArchiveTranscripts(destination, options = {}) {
87
+ const maxBytes = validate(destination, options);
88
+ checkCancelled(options.signal);
89
+ let root;
90
+ try {
91
+ root = await realpath(destination);
92
+ }
93
+ catch {
94
+ checkCancelled(options.signal);
95
+ throw new ZoomError("configuration_error", "archive destination could not be read");
96
+ }
97
+ const manifests = await inspectArchive(root, { signal: options.signal });
98
+ const selected = options.uuid === undefined ? manifests : manifests.filter((item) => item.meeting.uuid === options.uuid);
99
+ if (options.uuid !== undefined && selected.length === 0)
100
+ throw new ZoomError("not_found", "archive occurrence UUID was not found");
101
+ const transcripts = selected.flatMap((manifest) => manifest.files.filter((asset) => asset.format?.toLowerCase() === "vtt").map((asset) => ({ manifest, asset })));
102
+ if (options.fileIds?.some((id) => !transcripts.some((item) => item.asset.id === id)))
103
+ throw new ZoomError("not_found", "selected archive VTT file id was not found");
104
+ for (const { manifest, asset } of transcripts) {
105
+ checkCancelled(options.signal);
106
+ if (options.fileIds && !options.fileIds.includes(asset.id))
107
+ continue;
108
+ const cues = await readTranscript(root, asset, maxBytes, options.signal);
109
+ checkCancelled(options.signal);
110
+ yield { meeting: manifest.meeting, asset, cues };
111
+ }
112
+ }
113
+ /** Literal text-only matching using NFC normalization and Unicode default lowercase on both sides. */
114
+ export const searchArchiveTranscripts = async (destination, query, options = {}) => {
115
+ const limit = options.limit === undefined ? 100 : options.limit;
116
+ if (typeof query !== "string" || !query.trim() || !Number.isSafeInteger(limit) || limit < 1 || limit > 1000)
117
+ throw new ZoomError("validation_error", "archive search requires nonempty text and an integer limit from 1 through 1000");
118
+ const needle = query.normalize("NFC").toLowerCase();
119
+ const matches = [];
120
+ for await (const transcript of readArchiveTranscripts(destination, options))
121
+ for (const [position, cue] of transcript.cues.entries()) {
122
+ checkCancelled(options.signal);
123
+ if (!cue.text.normalize("NFC").toLowerCase().includes(needle))
124
+ continue;
125
+ if (matches.length === limit)
126
+ return { items: matches, page: 1, limit, hasMore: true };
127
+ matches.push({ meeting: transcript.meeting, asset: transcript.asset, position, ...cue });
128
+ }
129
+ return { items: matches, page: 1, limit, hasMore: false };
130
+ };
131
+ //# sourceMappingURL=archive-transcripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-transcripts.js","sourceRoot":"","sources":["../src/archive-transcripts.ts"],"names":[],"mappings":"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"}
package/dist/bin/zm.js CHANGED
@@ -2,13 +2,35 @@
2
2
  import { spawn } from "node:child_process";
3
3
  import { join } from "node:path";
4
4
  import { createInterface } from "node:readline/promises";
5
- import { resolvePaths, systemKeyring } from "@wirecat/cli-core";
6
- import { readConfig } from "../config.js";
5
+ import { CliError, resolvePaths, systemKeyring } from "@wirecat/cli-core";
6
+ import { profileAccountKey, readConfig } from "../config.js";
7
+ import { ZoomError } from "../errors.js";
8
+ import { writeExportFile } from "../output-file.js";
7
9
  import { run } from "../program.js";
10
+ import { createStoreConnector } from "../store-connection.js";
11
+ import { writeStream } from "../streaming.js";
8
12
  import { TokenManager } from "../tokens.js";
9
13
  const paths = resolvePaths({ appName: "zm", env: process.env });
10
14
  const configPath = join(paths.config, "config.json");
15
+ const cancellation = new AbortController();
16
+ let brokenPipe = false;
17
+ const cancel = () => cancellation.abort(new CliError("cancelled", "command cancelled"));
18
+ const onPipeError = (error) => {
19
+ if (error.code === "EPIPE") {
20
+ brokenPipe = true;
21
+ cancellation.abort(new CliError("cancelled", "output pipe closed"));
22
+ process.exitCode = 0;
23
+ }
24
+ else {
25
+ cancellation.abort(new CliError("configuration_error", "could not write command output"));
26
+ process.exitCode = 3;
27
+ }
28
+ };
29
+ process.once("SIGINT", cancel);
30
+ process.once("SIGTERM", cancel);
31
+ process.stdout.on("error", onPipeError);
11
32
  try {
33
+ const connectStore = createStoreConnector({ env: process.env });
12
34
  const tokens = new TokenManager({
13
35
  get clientId() {
14
36
  return readConfig(configPath).clientId ?? "";
@@ -20,9 +42,31 @@ try {
20
42
  process.exitCode = await run(process.argv.slice(2), {
21
43
  configPath,
22
44
  tokens,
45
+ connectStore,
46
+ serveMcp: async (options) => {
47
+ const { serveMeetingMcp } = await import("../mcp-server.js");
48
+ await serveMeetingMcp({
49
+ ...options,
50
+ connectStore: async () => {
51
+ const profile = readConfig(configPath).accountProfile;
52
+ if (!profile)
53
+ throw new ZoomError("configuration_error", "select a local profile with zm config set account.profile <label>");
54
+ return connectStore({ profile, externalId: profileAccountKey(profile), intent: "read" });
55
+ },
56
+ });
57
+ },
23
58
  fetch,
59
+ interactive: Boolean(process.stdin.isTTY),
60
+ outputIsTTY: Boolean(process.stdout.isTTY),
61
+ env: process.env,
62
+ signal: cancellation.signal,
63
+ writeFile: writeExportFile,
64
+ streamData: (text, signal) => writeStream(process.stdout, text, signal),
24
65
  data: (text) => process.stdout.write(text),
25
- diagnostic: (text) => process.stderr.write(text),
66
+ diagnostic: (text) => {
67
+ if (!brokenPipe)
68
+ process.stderr.write(text);
69
+ },
26
70
  openBrowser: (url, browser = "xdg-open") => new Promise((resolve, reject) => {
27
71
  const child = spawn(browser, [url], { detached: true, stdio: "ignore" });
28
72
  child.once("error", reject);
@@ -48,4 +92,10 @@ catch {
48
92
  process.stderr.write(`${JSON.stringify({ error: { code: "configuration_error", message: "could not load zm configuration" } })}\n`);
49
93
  process.exitCode = 3;
50
94
  }
95
+ finally {
96
+ process.removeListener("SIGINT", cancel);
97
+ process.removeListener("SIGTERM", cancel);
98
+ if (brokenPipe)
99
+ process.exitCode = 0;
100
+ }
51
101
  //# sourceMappingURL=zm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zm.js","sourceRoot":"","sources":["../../src/bin/zm.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;AAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AACpD,IAAI,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,IAAI,QAAQ;YACV,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAA;QAC9C,CAAC;QACD,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,YAAY,KAAK,CAAC,MAAM,EAAE;QACnC,KAAK;KACN,CAAC,CAAA;IACF,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAClD,UAAU;QACV,MAAM;QACN,KAAK;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAChD,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE,CACzC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YACxE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,KAAK,CAAC,KAAK,EAAE,CAAA;gBACb,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC;QACJ,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;YAC5B,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACf,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC/E,IAAI,CAAC;oBACH,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,gEAAgE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC3G,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,KAAK,EAAE,CAAA;gBACf,CAAC;YACH,CAAC;YACH,CAAC,CAAC,SAAS;KACd,CAAC,CAAA;AACJ,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,CAAC,IAAI,CAC9G,CAAA;IACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"zm.js","sourceRoot":"","sources":["../../src/bin/zm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Command } from "commander";
2
+ export interface StandardCommandsDeps {
3
+ output: (value: unknown) => void;
4
+ discovery: (value: unknown) => void;
5
+ fields: () => readonly string[] | undefined;
6
+ raw: (text: string) => void;
7
+ doctor: () => unknown;
8
+ sessionStatus: (check: boolean) => Promise<unknown>;
9
+ }
10
+ export declare const addStandardCommands: (program: Command, deps: StandardCommandsDeps) => void;
11
+ export declare const annotateMeetingCommands: (program: Command) => void;
12
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAChC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACnC,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAC3C,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAA;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACpD;AACD,eAAO,MAAM,mBAAmB,YAAa,OAAO,QAAQ,oBAAoB,KAAG,IAqDlF,CAAA;AAED,eAAO,MAAM,uBAAuB,YAAa,OAAO,KAAG,IAkB1D,CAAA"}
@@ -0,0 +1,96 @@
1
+ import { projectFields } from "@wirecat/cli-core";
2
+ import { annotate, describeOptions, describeProgram, flatten, metaOf, } from "@wirecat/cli-core/commands";
3
+ import { formatSuggestions, suggest } from "@wirecat/cli-core/completion";
4
+ import { ZoomError } from "./errors.js";
5
+ export const addStandardCommands = (program, deps) => {
6
+ annotate(program
7
+ .command("commands")
8
+ .description("discover commands, flags and examples, optionally scoped to a command path")
9
+ .argument("[path...]", "resource or command path")
10
+ .action((path) => {
11
+ const all = describeProgram(program);
12
+ const scoped = path.length ? flatten(all).filter((item) => item.path.join(" ") === path.join(" ")) : all;
13
+ if (path.length && !scoped.length)
14
+ throw new ZoomError("validation_error", "unknown command path; use zm commands --json");
15
+ const fields = deps.fields();
16
+ deps.discovery({
17
+ commands: fields ? projectDiscovery(scoped, fields) : scoped,
18
+ options: describeOptions(program),
19
+ });
20
+ }), { mutates: false, examples: ["zm commands --json"] });
21
+ annotate(program
22
+ .command("complete")
23
+ .description("answer shell completion requests")
24
+ .argument("[words...]", "shell words ending in the partial word")
25
+ .action((words) => {
26
+ const suggestions = suggest({
27
+ commands: describeProgram(program),
28
+ globalOptions: describeOptions(program),
29
+ words,
30
+ });
31
+ if (program.opts().json || program.opts().jsonl)
32
+ deps.output({ items: suggestions });
33
+ else
34
+ deps.raw(`${formatSuggestions(suggestions)}\n`);
35
+ }), { mutates: false, examples: ["zm complete -- meetings s"] });
36
+ annotate(program
37
+ .command("doctor")
38
+ .description("check local runtime and public config without a login or database")
39
+ .action(() => deps.output(deps.doctor())), { mutates: false, examples: ["zm doctor --json"] });
40
+ const session = program
41
+ .command("session")
42
+ .description("inspect the saved OAuth session separately from local data profiles");
43
+ annotate(session
44
+ .command("status")
45
+ .description("show cached login state; remote verification is explicit")
46
+ .option("--check", "verify the session with Zoom")
47
+ .action(async (options) => deps.output(await deps.sessionStatus(options.check === true))), { mutates: false, examples: ["zm session status --json", "zm session status --check --json"] });
48
+ };
49
+ export const annotateMeetingCommands = (program) => {
50
+ for (const item of flatten(describeProgram(program))) {
51
+ let command = program;
52
+ for (const part of item.path) {
53
+ const found = command.commands.find((child) => child.name() === part);
54
+ if (found)
55
+ command = found;
56
+ }
57
+ if (command.commands.length)
58
+ continue;
59
+ const path = item.path.join(" ");
60
+ const knownLocal = ["config set", "login", "pull", "import", "meetings export"].includes(path);
61
+ const mutates = knownLocal || metaOf(command).mutates === true;
62
+ annotate(command, {
63
+ origin: "handwritten",
64
+ mutates,
65
+ ...(knownLocal ? { local: true } : {}),
66
+ ...(item.examples ? {} : { examples: [exampleFor(path)] }),
67
+ });
68
+ }
69
+ };
70
+ const exampleFor = (path) => {
71
+ if (path === "serve")
72
+ return "zm serve --mcp";
73
+ if (path === "login")
74
+ return "zm login --interactive";
75
+ const argumentsByPath = {
76
+ "config set": "account.profile personal",
77
+ "meetings show": "1",
78
+ "meetings transcript": "1",
79
+ "meetings summary": "1",
80
+ "meetings export": "1 --format markdown",
81
+ "meetings search": '"example plan"',
82
+ "meetings people": '"Alice Example"',
83
+ import: "./downloaded-transcripts",
84
+ };
85
+ return `zm ${path}${argumentsByPath[path] ? ` ${argumentsByPath[path]}` : ""} --json`;
86
+ };
87
+ const projectDiscovery = (commands, fields) => commands.map((command) => ({
88
+ ...projectFields(command, fields),
89
+ path: command.path,
90
+ name: command.name,
91
+ origin: command.origin,
92
+ mutates: command.mutates,
93
+ local: command.local,
94
+ commands: projectDiscovery(command.commands, fields),
95
+ }));
96
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- export declare class ZoomError extends Error {
2
- readonly code: "configuration_error" | "authentication_error" | "validation_error" | "provider_error" | "invalid_response";
3
- constructor(code: "configuration_error" | "authentication_error" | "validation_error" | "provider_error" | "invalid_response", message: string);
1
+ import { CliError, type ErrorCode } from "@wirecat/cli-core";
2
+ export declare class ZoomError extends CliError {
3
+ constructor(code: ErrorCode, message: string);
4
4
  }
5
+ export declare const checkCancelled: (signal?: AbortSignal) => void;
5
6
  export declare const object: (value: unknown) => Record<string, unknown>;
6
7
  export declare const string: (value: unknown) => string | null;
7
8
  export declare const number: (value: unknown) => number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IAEhC,QAAQ,CAAC,IAAI,EACT,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB;IANxB,YACW,IAAI,EACT,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,EACtB,OAAO,EAAE,MAAM,EAGhB;CACF;AACD,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAI7D,CAAA;AACD,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,MAAM,GAAG,IAAkE,CAAA;AACnH,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,MAAM,GAAG,IACmB,CAAA"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5D,qBAAa,SAAU,SAAQ,QAAQ;IACrC,YAAY,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAE3C;CACF;AACD,eAAO,MAAM,cAAc,YAAa,WAAW,KAAG,IAKrD,CAAA;AACD,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAI7D,CAAA;AACD,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,MAAM,GAAG,IAAkE,CAAA;AACnH,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,MAAM,GAAG,IACmB,CAAA"}