@wirecat/zoom-cli 0.13.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 +4 -4
- package/dist/answer-output.d.ts +21 -2
- package/dist/answer-output.d.ts.map +1 -1
- package/dist/answer-output.js +48 -37
- package/dist/answer-output.js.map +1 -1
- package/dist/answers.d.ts +2 -2
- package/dist/answers.d.ts.map +1 -1
- package/dist/answers.js +12 -43
- 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 +31 -30
- 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.js +1 -1
- package/dist/command-effects.js.map +1 -1
- package/dist/commands.d.ts +2 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +8 -8
- 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.map +1 -1
- package/dist/execution.js +3 -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 +5 -5
- 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 +6 -6
- 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 +2 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +33 -42
- 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 +10 -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 +6 -6
- 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.map +1 -1
- package/dist/meeting-project-evidence-mcp.js +2 -4
- 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 +46 -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 +12 -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 +14 -28
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +152 -317
- 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 +12 -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 -10
- package/dist/unified-search.d.ts.map +1 -1
- package/dist/unified-search.js +7 -6
- 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 +8 -8
- package/dist/watch-commands.js.map +1 -1
- package/package.json +5 -4
- package/skills/zoom-cli/SKILL.md +25 -8
- 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
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { createUpcomingMeetingReader } from "@wirecat/cli-core/meetings";
|
|
3
|
+
import { zoomOccurrenceSchedule } from "./occurrence-schedule.js";
|
|
4
|
+
import { ZoomRemote } from "./remote-http.js";
|
|
5
|
+
import { zoomMeetingPath } from "./remote-meeting-id.js";
|
|
6
|
+
export const createZoomUpcomingMeetingReader = (account, credentials, fetcher, options = {}) => {
|
|
7
|
+
if (typeof credentials?.withSignal !== "function")
|
|
8
|
+
throw new CliError("configuration_error", "Zoom credential scope is unavailable");
|
|
9
|
+
const scopedCredentials = credentials.withSignal.bind(credentials);
|
|
10
|
+
const remoteOptions = { ...options };
|
|
11
|
+
return createUpcomingMeetingReader({ provider: "zoom", account }, {
|
|
12
|
+
read: async (id, context) => {
|
|
13
|
+
const path = zoomMeetingPath(id);
|
|
14
|
+
const auth = scopedCredentials(context.signal);
|
|
15
|
+
const remote = new ZoomRemote({ tokens: auth.tokens.bind(auth) }, fetcher, remoteOptions);
|
|
16
|
+
const value = await remote.request(path, "meeting:read:meeting", {
|
|
17
|
+
signal: context.signal,
|
|
18
|
+
maxResponseBytes: context.maxReadBytes,
|
|
19
|
+
});
|
|
20
|
+
return zoomOccurrenceSchedule(value, id, context.limit);
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=upcoming-meetings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upcoming-meetings.js","sourceRoot":"","sources":["../src/upcoming-meetings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAsB,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAOxD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,OAAe,EACf,WAAoC,EACpC,OAAqB,EACrB,OAAO,GAAkB,EAAE,EAC3B,EAAE;IACF,IAAI,OAAO,WAAW,EAAE,UAAU,KAAK,UAAU;QAC/C,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAA;IACnF,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAClE,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA;IACpC,OAAO,2BAA2B,CAChC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAC7B;QACE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAA;YAChC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;YACzF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,sBAAsB,EAAE;gBAC/D,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,gBAAgB,EAAE,OAAO,CAAC,YAAY;aACvC,CAAC,CAAA;YACF,OAAO,sBAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACzD,CAAC;KACF,CACF,CAAA;AACH,CAAC,CAAA"}
|
package/dist/watch-commands.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Body } from "@wirecat/cli-core/cli";
|
|
1
2
|
import { type RunReport, type WatchSleep } from "@wirecat/cli-core/meetings";
|
|
2
3
|
import { type Command } from "commander";
|
|
3
4
|
export type WatchTarget = "api" | "files";
|
|
@@ -17,7 +18,7 @@ export interface WatchCommandDeps {
|
|
|
17
18
|
signal: () => AbortSignal;
|
|
18
19
|
prepare: (target: WatchTarget | undefined, folder: string | undefined, flags: WatchFlags) => WatchPlan;
|
|
19
20
|
ingest: (plan: WatchPlan, signal: AbortSignal) => Promise<RunReport>;
|
|
20
|
-
receipt: (
|
|
21
|
+
receipt: (body: Body) => Promise<void>;
|
|
21
22
|
sleep?: WatchSleep;
|
|
22
23
|
outputIsTTY?: boolean;
|
|
23
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-commands.d.ts","sourceRoot":"","sources":["../src/watch-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAyB,MAAM,4BAA4B,CAAA;AACnG,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"watch-commands.d.ts","sourceRoot":"","sources":["../src/watch-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAuB,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAyB,MAAM,4BAA4B,CAAA;AACnG,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,WAAW,CAAA;AAGlD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,CAAA;AACzC,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;CACjB;AACD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,KAAK,GAAG,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AACD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,WAAW,CAAA;IACzB,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,KAAK,SAAS,CAAA;IACtG,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IACpE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAkBD,eAAO,MAAM,eAAe,YAAa,OAAO,QAAQ,gBAAgB,KAAG,IA4B1E,CAAA"}
|
package/dist/watch-commands.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
1
2
|
import { annotate } from "@wirecat/cli-base/commands";
|
|
2
|
-
import { LOCAL_WRITE } from "@wirecat/cli-core/cli";
|
|
3
|
+
import { itemOf, LOCAL_WRITE } from "@wirecat/cli-core/cli";
|
|
3
4
|
import { watchMeetingIngestion } from "@wirecat/cli-core/meetings";
|
|
4
5
|
import { Argument } from "commander";
|
|
5
|
-
import { ZoomError } from "./errors.js";
|
|
6
6
|
import { duration } from "./execution.js";
|
|
7
7
|
const days = (value) => {
|
|
8
8
|
if (!/^\d+$/.test(value) || Number(value) > 31)
|
|
9
|
-
throw new
|
|
9
|
+
throw new CliError("validation_error", "lookback days must be an integer from 0 through 31");
|
|
10
10
|
return Number(value);
|
|
11
11
|
};
|
|
12
12
|
const since = (value) => {
|
|
@@ -16,7 +16,7 @@ const since = (value) => {
|
|
|
16
16
|
!Number.isFinite(Date.parse(value)) ||
|
|
17
17
|
!Number.isFinite(dayTime) ||
|
|
18
18
|
new Date(dayTime).toISOString().slice(0, 10) !== day)
|
|
19
|
-
throw new
|
|
19
|
+
throw new CliError("validation_error", "--since-time must be a real ISO 8601 time with a time zone");
|
|
20
20
|
return value;
|
|
21
21
|
};
|
|
22
22
|
export const addWatchCommand = (program, deps) => {
|
|
@@ -30,18 +30,18 @@ export const addWatchCommand = (program, deps) => {
|
|
|
30
30
|
.option("--interval <duration>", "delay after each completed receipt (1s through 24h)", duration, 10000)
|
|
31
31
|
.action(async (target, folder, options) => {
|
|
32
32
|
if (!program.opts().jsonl && !deps.outputIsTTY)
|
|
33
|
-
throw new
|
|
33
|
+
throw new CliError("validation_error", "headless watch requires --jsonl");
|
|
34
34
|
if (program.opts().json)
|
|
35
|
-
throw new
|
|
35
|
+
throw new CliError("validation_error", "watch streams receipts; use --jsonl");
|
|
36
36
|
if (options.interval < 1000 || options.interval > 86400000)
|
|
37
|
-
throw new
|
|
37
|
+
throw new CliError("validation_error", "watch interval must be from 1s through 24h");
|
|
38
38
|
const plan = deps.prepare(target, folder, options);
|
|
39
39
|
for await (const report of watchMeetingIngestion((signal) => deps.ingest(plan, signal), {
|
|
40
40
|
signal: deps.signal(),
|
|
41
41
|
intervalMs: plan.intervalMs,
|
|
42
42
|
sleep: deps.sleep,
|
|
43
43
|
}))
|
|
44
|
-
await deps.receipt(report);
|
|
44
|
+
await deps.receipt(itemOf(report));
|
|
45
45
|
});
|
|
46
46
|
annotate(command, {
|
|
47
47
|
origin: "handwritten",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-commands.js","sourceRoot":"","sources":["../src/watch-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"watch-commands.js","sourceRoot":"","sources":["../src/watch-commands.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecat/zoom-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Zoom cloud recording archives, persistent transcripts and meeting tools",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
"generate": "pnpm build && node scripts/commands.ts",
|
|
47
47
|
"generate:check": "pnpm build && node scripts/commands.ts --check",
|
|
48
48
|
"test:matrix": "pnpm test --maxWorkers 2 && pnpm build && pnpm test:matrix:check",
|
|
49
|
-
"lint:commands": "node node_modules/@wirecat/cli-base/dist/dev/bin.js lint --cli dist/bin/zm.js",
|
|
49
|
+
"lint:commands": "node node_modules/@wirecat/cli-base-dev/dist/dev/bin.js lint --cli dist/bin/zm.js",
|
|
50
50
|
"test:matrix:check": "node node_modules/@wirecat/cli-base/dist/dev/bin.js test-matrix --program scripts/command-program.ts --untested scripts/test-matrix-untested.ts --name zm --check",
|
|
51
51
|
"contracts:upgrade": "pnpm --dir contracts/previous install --frozen-lockfile --ignore-scripts && cli-contract contracts/upgrade.json",
|
|
52
52
|
"security:no-leak": "cli-testing security no-leak . contracts/no-leak.json"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@modelcontextprotocol/sdk": "1.32.1",
|
|
56
|
-
"@wirecat/cli-base": "0.28.
|
|
57
|
-
"@wirecat/cli-core": "0.
|
|
56
|
+
"@wirecat/cli-base": "0.28.2",
|
|
57
|
+
"@wirecat/cli-core": "0.280.0",
|
|
58
58
|
"commander": "15.0.0",
|
|
59
59
|
"valibot": "1.5.0"
|
|
60
60
|
},
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"@cspell/dict-ru_ru": "2.3.3",
|
|
66
66
|
"@types/node": "^22.20.5",
|
|
67
67
|
"@vitest/coverage-v8": "^5.0.3",
|
|
68
|
+
"@wirecat/cli-base-dev": "npm:@wirecat/cli-base@0.30.0",
|
|
68
69
|
"@wirecat/cli-testing": "0.4.0",
|
|
69
70
|
"cspell": "10.3.6",
|
|
70
71
|
"lefthook": "2.1.16",
|
package/skills/zoom-cli/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: zoom-cli
|
|
3
3
|
description: Archive Zoom cloud recordings, read stored meeting transcripts and summaries, or manage a Zoom meeting through zm. Use for Zoom CLI workflows, not joining calls or operating the desktop video client.
|
|
4
4
|
metadata:
|
|
5
|
-
version: "0.
|
|
5
|
+
version: "0.14.0"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Zoom CLI
|
|
@@ -15,7 +15,7 @@ Detailed reports (participants, evidence, semantic/unified search) live in `item
|
|
|
15
15
|
use `page.mode` and optional `page.next_cursor`. JSONL emits typed item records with `data`,
|
|
16
16
|
then an end record with page/completeness. For reports, read the report inside the item record’s
|
|
17
17
|
`data`. Discovery uses contract 3 with separate local/remote effects.
|
|
18
|
-
Use `--
|
|
18
|
+
Use `--json=id,title` to keep only those fields. `zm doctor --json` checks local setup without login.
|
|
19
19
|
|
|
20
20
|
## Recording archives
|
|
21
21
|
|
|
@@ -32,12 +32,12 @@ unavailable assets. A failed transfer can leave earlier completed files; retry s
|
|
|
32
32
|
file again. Existing files are never overwritten. Do not infer HTTP byte-range resume.
|
|
33
33
|
|
|
34
34
|
Read cues with `recordings archive transcript <directory>` or search their text with
|
|
35
|
-
`search
|
|
35
|
+
`search recordings <directory> <query> --limit 100`. Both work offline without configuration,
|
|
36
36
|
login or a database and verify each WebVTT file they read before returning results. Search can stop
|
|
37
|
-
before reading later files once it proves another match beyond the limit.
|
|
38
|
-
comma-separated `--file-ids`; `--max-bytes` defaults to 8 MiB per file. Search is
|
|
39
|
-
and case-insensitive, with a maximum of 1000 matches
|
|
40
|
-
|
|
37
|
+
before reading later files once it proves another match beyond the limit. `recordings archive transcript`
|
|
38
|
+
selects with `--uuid` or comma-separated `--file-ids`; `--max-bytes` defaults to 8 MiB per file. Search is
|
|
39
|
+
literal, normalized and case-insensitive, with a maximum of 1000 matches, and answers `search all`'s hits.
|
|
40
|
+
When `page.has_more` is true, increase the limit or narrow the query;
|
|
41
41
|
there is no continuation cursor. These reads do not import archive assets into the database.
|
|
42
42
|
|
|
43
43
|
Use `recordings archive import <directory> --offline --jsonl` to append verified VTT assets to the
|
|
@@ -80,7 +80,8 @@ The selected overlap also subtracts from the initial bound.
|
|
|
80
80
|
|
|
81
81
|
`zm serve --mcp` provides eight read-only stored meeting tools. Discovery opens no database; reads
|
|
82
82
|
use the selected account. MCP uses its own framing, so omit JSON/JSONL/field-selection flags. `--meeting-context` adds four
|
|
83
|
-
read-only context tools; `--
|
|
83
|
+
read-only context tools; `--meeting-preparation` adds the remote schedule plus cited-context
|
|
84
|
+
`meeting_prepare` tool; `--unified-search` adds one meetings-only shared search tool;
|
|
84
85
|
`--semantic --model <model>` lets `search_meetings` rank existing vectors with `by_meaning`. Remote model selection also requires
|
|
85
86
|
`--base-url` and `--dims`. The server fixes the model at startup and the profile on its first read.
|
|
86
87
|
Clients cannot select another model or account. Generation and task creation are not MCP tools.
|
|
@@ -175,3 +176,19 @@ List-only `--since-time` and `--until-time` have become query fields; transcript
|
|
|
175
176
|
## Bounded context-filtered search
|
|
176
177
|
|
|
177
178
|
Use `search meetings <query>` with `--since-time`/`--until-time` and optionally `--identity-id`, `--person-id`, `--event-id`, `--series-id`, `--project`, `--tag` or `--topic`. It indexes newly stored meetings before reading; there is no separate index step. Identity IDs come from observed participant results; person IDs follow explicit identity links. Filters select meetings, never attribute cue speech. Project names, keys and aliases resolve existing vocabulary and require confirmed membership; labels require explicit meeting taggings. Do not silently infer membership from matching words or merge similar participant names. Missing or ambiguous names fail. Inspect pending indexing and unknown archive coverage even for empty pages. `search_meetings` exposes the same selected-account MCP read.
|
|
179
|
+
|
|
180
|
+
## Prepare one upcoming series
|
|
181
|
+
|
|
182
|
+
Use `meetings prepare <series-id> --json` with the exact provider series ID from remote meeting
|
|
183
|
+
listing, rather than an internal stored meeting ID. This reads Zoom's schedule and stored history,
|
|
184
|
+
requiring `meeting:read:meeting`; it does not start login, change scopes or import missing text.
|
|
185
|
+
Default windows look seven days ahead and thirty days back. Use ISO `--since-time`, `--before-time` and
|
|
186
|
+
`--history-since-time` for a fixed window; keep the returned absolute windows when replaying.
|
|
187
|
+
|
|
188
|
+
Preserve candidate/verified-next distinction and all meeting/cue references, fingerprints, stored
|
|
189
|
+
person links, confirmed project links, accepted facts and directly sourced tasks. Past attendees do
|
|
190
|
+
not establish future attendance. Coverage states live reads and unknown archive completeness, plus
|
|
191
|
+
unqueried person-history, project-wide context and project-alias candidates. Stored fact evidence
|
|
192
|
+
is not revalidated. Inspect skipped-source metadata and truncation before relying on the brief.
|
|
193
|
+
This command does not summarize, accept findings or create tasks. Use existing Memo workflows for
|
|
194
|
+
reviewed writes, retaining meeting evidence and preconditions.
|
package/dist/ordinary-file.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ordinary-file.d.ts","sourceRoot":"","sources":["../src/ordinary-file.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,gBAAgB,SAAU,MAAM,8CAA2C,CAAA;AACxF,eAAO,MAAM,aAAa,SAAU,MAAM,kBAA2C,CAAA"}
|
package/dist/ordinary-file.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { isCliError } from "@wirecat/cli-base";
|
|
2
|
-
import { openOrdinaryFile as sharedOpen, syncDirectory as sharedSync } from "@wirecat/cli-core/files";
|
|
3
|
-
import { ZoomError } from "./errors.js";
|
|
4
|
-
const withZoomErrors = async (operation) => {
|
|
5
|
-
try {
|
|
6
|
-
return await operation();
|
|
7
|
-
}
|
|
8
|
-
catch (error) {
|
|
9
|
-
if (isCliError(error))
|
|
10
|
-
throw new ZoomError(error.code, error.message);
|
|
11
|
-
throw error;
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
export const openOrdinaryFile = (path) => withZoomErrors(() => sharedOpen(path));
|
|
15
|
-
export const syncDirectory = (path) => withZoomErrors(() => sharedSync(path));
|
|
16
|
-
//# sourceMappingURL=ordinary-file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ordinary-file.js","sourceRoot":"","sources":["../src/ordinary-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,IAAI,UAAU,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,cAAc,GAAG,KAAK,EAAK,SAA2B,EAAc,EAAE;IAC1E,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,EAAE,CAAA;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACrE,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AACxF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA"}
|
package/dist/wav-audio.d.ts
DELETED
package/dist/wav-audio.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wav-audio.d.ts","sourceRoot":"","sources":["../src/wav-audio.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,8BAA8B,CAAA"}
|
package/dist/wav-audio.js
DELETED
package/dist/wav-audio.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wav-audio.js","sourceRoot":"","sources":["../src/wav-audio.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iBAAiB,GAKlB,MAAM,8BAA8B,CAAA"}
|