@wirecat/zoom-cli 0.40.0 → 0.42.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.
Files changed (98) hide show
  1. package/README.md +3 -3
  2. package/dist/agent-skill.d.ts.map +1 -1
  3. package/dist/agent-skill.js +3 -1
  4. package/dist/agent-skill.js.map +1 -1
  5. package/dist/answer-entities.d.ts +736 -0
  6. package/dist/answer-entities.d.ts.map +1 -0
  7. package/dist/answer-entities.js +201 -0
  8. package/dist/answer-entities.js.map +1 -0
  9. package/dist/answer-output.d.ts +0 -1
  10. package/dist/answer-output.d.ts.map +1 -1
  11. package/dist/answer-output.js +2 -2
  12. package/dist/answer-output.js.map +1 -1
  13. package/dist/answer-policy.d.ts +0 -4
  14. package/dist/answer-policy.d.ts.map +1 -1
  15. package/dist/answer-policy.js +0 -16
  16. package/dist/answer-policy.js.map +1 -1
  17. package/dist/archive-commands.d.ts.map +1 -1
  18. package/dist/archive-commands.js +72 -52
  19. package/dist/archive-commands.js.map +1 -1
  20. package/dist/commands.d.ts +0 -2
  21. package/dist/commands.d.ts.map +1 -1
  22. package/dist/commands.js +6 -52
  23. package/dist/commands.js.map +1 -1
  24. package/dist/execution.d.ts +5 -10
  25. package/dist/execution.d.ts.map +1 -1
  26. package/dist/execution.js +11 -27
  27. package/dist/execution.js.map +1 -1
  28. package/dist/first-screen.d.ts +8 -0
  29. package/dist/first-screen.d.ts.map +1 -1
  30. package/dist/first-screen.js +18 -18
  31. package/dist/first-screen.js.map +1 -1
  32. package/dist/json-fields.d.ts +1 -6
  33. package/dist/json-fields.d.ts.map +1 -1
  34. package/dist/json-fields.js +2 -22
  35. package/dist/json-fields.js.map +1 -1
  36. package/dist/local-transcription-commands.d.ts.map +1 -1
  37. package/dist/local-transcription-commands.js +1 -1
  38. package/dist/local-transcription-commands.js.map +1 -1
  39. package/dist/mcp-command.d.ts +2 -1
  40. package/dist/mcp-command.d.ts.map +1 -1
  41. package/dist/mcp-command.js +12 -2
  42. package/dist/mcp-command.js.map +1 -1
  43. package/dist/mcp.d.ts +4 -2
  44. package/dist/mcp.d.ts.map +1 -1
  45. package/dist/mcp.js +20 -13
  46. package/dist/mcp.js.map +1 -1
  47. package/dist/models-commands.d.ts.map +1 -1
  48. package/dist/models-commands.js +7 -36
  49. package/dist/models-commands.js.map +1 -1
  50. package/dist/permissions.d.ts +6 -0
  51. package/dist/permissions.d.ts.map +1 -1
  52. package/dist/permissions.js +34 -11
  53. package/dist/permissions.js.map +1 -1
  54. package/dist/profile-word.d.ts +0 -15
  55. package/dist/profile-word.d.ts.map +1 -1
  56. package/dist/profile-word.js +0 -48
  57. package/dist/profile-word.js.map +1 -1
  58. package/dist/program-bindings.d.ts +5 -0
  59. package/dist/program-bindings.d.ts.map +1 -0
  60. package/dist/program-bindings.js +424 -0
  61. package/dist/program-bindings.js.map +1 -0
  62. package/dist/program.d.ts +8 -5
  63. package/dist/program.d.ts.map +1 -1
  64. package/dist/program.js +17 -417
  65. package/dist/program.js.map +1 -1
  66. package/dist/progress-commands.d.ts +9 -0
  67. package/dist/progress-commands.d.ts.map +1 -0
  68. package/dist/progress-commands.js +49 -0
  69. package/dist/progress-commands.js.map +1 -0
  70. package/dist/read-only.d.ts.map +1 -1
  71. package/dist/read-only.js +6 -17
  72. package/dist/read-only.js.map +1 -1
  73. package/dist/recording-schedule-commands.d.ts.map +1 -1
  74. package/dist/recording-schedule-commands.js +8 -8
  75. package/dist/recording-schedule-commands.js.map +1 -1
  76. package/dist/recording-sync-store.d.ts +2 -1
  77. package/dist/recording-sync-store.d.ts.map +1 -1
  78. package/dist/recording-sync-store.js +10 -0
  79. package/dist/recording-sync-store.js.map +1 -1
  80. package/dist/run.d.ts +8 -0
  81. package/dist/run.d.ts.map +1 -0
  82. package/dist/run.js +50 -0
  83. package/dist/run.js.map +1 -0
  84. package/dist/setup-commands.d.ts +0 -3
  85. package/dist/setup-commands.d.ts.map +1 -1
  86. package/dist/setup-commands.js +5 -11
  87. package/dist/setup-commands.js.map +1 -1
  88. package/dist/sync-progress.d.ts +11 -0
  89. package/dist/sync-progress.d.ts.map +1 -0
  90. package/dist/sync-progress.js +31 -0
  91. package/dist/sync-progress.js.map +1 -0
  92. package/dist/version.d.ts +1 -1
  93. package/dist/version.js +1 -1
  94. package/dist/watch-commands.d.ts.map +1 -1
  95. package/dist/watch-commands.js +1 -1
  96. package/dist/watch-commands.js.map +1 -1
  97. package/package.json +2 -2
  98. package/skills/zoom-cli/SKILL.md +5 -5
package/dist/program.js CHANGED
@@ -1,431 +1,31 @@
1
- import { CliError, createDeadline, createOutputBuffer, createRenderer, isCliError, projectFields, } from "@wirecat/cli-base";
2
- import { metaOf } from "@wirecat/cli-base/commands";
3
- import { checkJson, snakeKeys } from "@wirecat/cli-core/cli";
4
- import { Command, CommanderError } from "commander";
5
- import { addZoomSkillCommands } from "./agent-skill.js";
6
- import { bodyOf, renderBody, usageMessage, wholeList } from "./answer-output.js";
7
- import { commandSelection, hostFailureContext, reportFailure } from "./answer-policy.js";
8
- import { addArchiveCommands, } from "./archive-commands.js";
9
- import { readArchiveTranscripts, searchArchiveTranscripts } from "./archive-transcripts.js";
10
- import { annotateMeetingCommands } from "./commands.js";
11
- import { filesZone, profileAccountKey, readConfig } from "./config.js";
12
- import { cancellableStore, checkCancelled, ZoneAssumptions } from "./errors.js";
13
- import { bytes, duration, resetCliOptions, startExecution } from "./execution.js";
14
- import { fileNamesHelp, importFile, readDownloadedFiles, validateDownloadedFiles } from "./files.js";
15
- import { installFirstScreen } from "./first-screen.js";
16
- import { liftJsonFields } from "./json-fields.js";
17
- import { addMcpCommands, runForAgent } from "./mcp-command.js";
18
- import { addZoomMeetingCommands } from "./meeting-commands.js";
19
- import { captureContextSources } from "./meeting-communications-binding.js";
20
- import { addZoomInventoryCommand } from "./meeting-inventory.js";
21
- import { configuredMeetingSource } from "./meeting-source.js";
22
- import { guardCommand } from "./permissions.js";
23
- import { PROFILE_HELP, profileSelection, recordProfile, showProfileInUsage } from "./profile-word.js";
24
- import { addRecordingScheduleCommands } from "./recording-schedule-commands.js";
25
- import { zoomRecordingSchedule } from "./recording-schedule-setup.js";
26
- import { inspectArchive, inspectArchiveLocks, recoverArchiveLocks, verifyArchive, ZoomRecordings, } from "./recordings.js";
27
- import { ZoomRemoteMeetings } from "./remote-meetings.js";
28
- import { addConfigCommands, addSessionCommands } from "./setup-commands.js";
29
- import { addStoreCommands } from "./store-commands.js";
30
- import { connectSelectedProfile, storeUnavailable, unavailableStore, } from "./store-connection.js";
31
- import { emitReceipt } from "./streaming.js";
32
- import { VERSION } from "./version.js";
33
- import { addWatchCommand } from "./watch-commands.js";
34
- import { createWatchService } from "./watch-service.js";
35
- const answerExitCodes = new WeakMap();
36
- const HELP_EXITS = new Set(["commander.helpDisplayed", "commander.help", "commander.version"]);
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { createProgram as sharedProgram } from "@wirecat/cli-core/cli";
3
+ import { runCommand, zoomDefinition } from "./run.js";
4
+ export const run = runCommand;
37
5
  export const createProgram = (deps) => {
38
- let config;
39
- const getConfig = () => (config ??= readConfig(deps.configPath));
40
- let connecting;
41
- let parsing = false;
42
- let execution;
43
- let fields;
44
- let activeTokens;
45
- const selection = profileSelection(deps.env ?? process.env, () => getConfig().profiles);
46
- const profile = selection.profile;
47
- const currentExecution = () => execution;
48
- const signal = () => currentExecution()?.deadline.signal ?? deps.signal;
49
- const fetchWithSignal = (fetcher) => (input, init) => {
50
- checkCancelled(signal());
51
- if (program.opts().offline)
52
- throw new CliError("configuration_error", "the command requires network access; remove --offline");
53
- const operation = signal();
54
- return fetcher(input, {
55
- ...init,
56
- signal: operation && init?.signal ? AbortSignal.any([operation, init.signal]) : (operation ?? init?.signal),
57
- });
58
- };
59
- const tokens = () => (activeTokens ??= deps.tokens
60
- .forProfile(profile(), getConfig().legacyProfile)
61
- .withSignal(signal(), fetchWithSignal(deps.tokens.options.fetch)));
62
- const buffer = (text) => {
63
- if (!execution)
64
- throw new CliError("configuration_error", "command execution is not initialized");
65
- execution.output.data(text);
66
- };
67
- const guardedStore = (store) => cancellableStore(store, signal);
68
- let selectedStore = deps.store;
69
- let selectedAccountId = deps.accountId;
70
- const requireAccount = () => {
71
- if (!Number.isSafeInteger(selectedAccountId) || !selectedAccountId || selectedAccountId < 1)
72
- throw new CliError("configuration_error", "the selected meeting account is unavailable");
73
- return selectedAccountId;
74
- };
75
- const openStore = async (intent, context) => {
76
- if (!deps.connectStore)
77
- return storeUnavailable();
78
- const selected = profile();
79
- if (intent === "ingestion")
80
- recordProfile(deps.configPath, selected);
81
- try {
82
- return await connectSelectedProfile(deps.connectStore, selected, intent, context);
83
- }
84
- catch (error) {
85
- if (isCliError(error))
86
- throw error;
87
- throw new CliError("configuration_error", "could not open the shared meeting store");
88
- }
89
- };
90
- const connected = (intent = "read") => (connecting ??= openStore(intent));
91
- const zones = new ZoneAssumptions();
92
- const ask = () => (program.opts().input === false ? undefined : deps.confirm);
93
- const program = new Command()
94
- .name("zm")
95
- .version(VERSION)
96
- .usage("[profile] [options] <command>")
97
- .description(`Zoom meeting transcripts and summaries\n\n${PROFILE_HELP}`)
98
- .option("--json", "one JSON value; --json=id,title keeps only those fields")
99
- .option("--jsonl", "one JSON object per item")
100
- .option("--no-input", "disable interactive login")
101
- .option("--quiet", "suppress non-error diagnostics")
102
- .option("--timeout <duration>", "command deadline: reads 30s, login 5m, downloads/transcription 1h; watch/MCP have no default", duration)
103
- .option("--max-output-bytes <bytes>", "bound rendered result bytes (default 4194304; zero is unlimited)", bytes)
104
- .option("--offline", "refuse network requests")
105
- .option("--debug", "on a failure, its whole record — cause and stack — in place of the short line")
106
- .exitOverride()
107
- .configureOutput({ writeOut: deps.data, writeErr: deps.diagnostic, outputError: () => { } });
108
- const formatOf = () => program.opts().jsonl ? "jsonl" : program.opts().json || !deps.outputIsTTY ? "json" : "pretty";
109
- const rendered = (body, format = formatOf(), selectFields = true) => {
110
- if (!execution)
111
- throw new CliError("configuration_error", "command execution is not initialized");
112
- const answer = renderBody(execution.action, body, {
113
- format,
114
- warnings: zones.take(),
115
- meta: execution.meta(),
116
- fields: selectFields ? fields : undefined,
117
- quiet: Boolean(program.opts().quiet),
118
- diagnostic: deps.diagnostic,
119
- });
120
- answerExitCodes.set(program, Math.max(answerExitCodes.get(program) ?? 0, answer.exitCode));
121
- return answer.text;
6
+ const program = sharedProgram(zoomDefinition(deps));
7
+ program.parse = () => {
8
+ throw new CliError("validation_error", "use parseAsync so command guards and cleanup run before returning");
122
9
  };
123
- const api = () => {
124
- if (program.opts().offline)
125
- throw new CliError("configuration_error", "the command requires network access; remove --offline");
126
- if (!getConfig().clientId)
127
- throw new CliError("configuration_error", "run zm config set zoom.client_id <Public Client ID> first");
128
- };
129
- program.hook("preAction", async (_root, action) => {
130
- if (deps.atStart)
131
- await deps.atStart(action);
132
- const asking = guardCommand(action, deps.env ?? process.env, { profile: selection.named, config: getConfig }, ask());
133
- if (asking)
134
- await asking;
135
- const opts = action.optsWithGlobals();
136
- if (opts.json && opts.jsonl)
137
- throw new CliError("validation_error", "choose --json or --jsonl");
138
- checkJson(action, { json: opts.json === true, ...(fields ? { fields: fields.join(",") } : {}) }, false);
139
- execution = startExecution(action, { signal: deps.signal, sleep: deps.sleep, now: deps.now });
140
- checkCancelled(signal());
141
- if (!storeCommands.has(action))
142
- return;
143
- const config = getConfig();
144
- const ingestion = action.parent?.name() === "meetings" && ["sync", "import"].includes(action.name());
145
- if (opts.offline && ingestion && action.name() !== "import" && config.source === "api" && !deps.source)
146
- throw new CliError("configuration_error", "API sync requires network access; remove --offline");
147
- if (!selectedStore) {
148
- const connection = await connected(ingestion ? "ingestion" : "read");
149
- selectedStore = connection.store;
150
- selectedAccountId = connection.accountId;
151
- }
152
- requireAccount();
153
- });
154
- const output = (body) => buffer(rendered(body));
155
- const outputItems = async (values) => {
156
- const items = [];
157
- // Fails on the row that crosses --max-output-bytes, so a long iterator stops reading there.
158
- const measured = createOutputBuffer({ maxOutputBytes: program.opts().maxOutputBytes });
159
- for await (const value of values) {
160
- checkCancelled(signal());
161
- const item = snakeKeys(value);
162
- measured.data(JSON.stringify(fields ? projectFields(item, fields) : item));
163
- items.push(item);
164
- }
165
- output(wholeList("list", items));
166
- };
167
- addConfigCommands(program, { configPath: deps.configPath, getConfig, output, profile });
168
- const fetchApi = () => fetchWithSignal(deps.fetch);
169
- const configured = configuredMeetingSource({ deps, getConfig, tokens, fetch: fetchApi, zones });
170
- const source = configured.source;
171
- const meetingCommands = {
172
- get store() {
173
- return guardedStore(selectedStore ?? unavailableStore);
174
- },
175
- get accountId() {
176
- return requireAccount();
177
- },
178
- source,
179
- importHelp: fileNamesHelp(() => getConfig()),
180
- readFiles: async (folder) => {
181
- const config = getConfig();
182
- return validateDownloadedFiles(await (deps.readFiles ?? readDownloadedFiles)(folder), filesZone(config)).map((file) => importFile(file, requireAccount(), filesZone(config)));
183
- },
184
- now: deps.now,
185
- write: (value) => output(bodyOf(value)),
186
- writeFile: deps.writeFile
187
- ? async (path, content) => {
188
- checkCancelled(signal());
189
- await deps.writeFile?.(path, content, { signal: signal() });
190
- checkCancelled(signal());
191
- }
192
- : undefined,
193
- };
194
- const before = new Set(program.commands);
195
- addZoomMeetingCommands(program, meetingCommands);
196
- const leaves = (command) => command.commands.length ? command.commands.flatMap(leaves) : [command];
197
- // The meeting reads cli-core mounts read the store opened before their action; zoom's own commands open it lazily.
198
- const storeCommands = new Set(program.commands.filter((group) => !before.has(group)).flatMap(leaves));
199
- addSessionCommands(program, {
200
- deps,
201
- getConfig,
202
- output,
203
- buffer,
204
- formatOf,
205
- fields: () => fields,
206
- api,
207
- profile,
208
- tokens,
209
- fetch: () => fetchWithSignal(deps.fetch),
210
- signal,
211
- });
212
- const watch = createWatchService({
213
- deps,
214
- getConfig,
215
- profile,
216
- tokens,
217
- fetch: () => fetchWithSignal(deps.fetch),
218
- offline: () => Boolean(program.opts().offline),
219
- openStore,
220
- guardedStore,
221
- zones,
222
- });
223
- const receipt = async (body) => {
224
- const text = rendered(body);
225
- const operation = signal();
226
- const grace = operation.aborted ? createDeadline({ timeoutMs: 1000 }) : undefined;
227
- try {
228
- await emitReceipt(text, program.opts().maxOutputBytes, async (serialized) => {
229
- if (deps.streamData)
230
- await deps.streamData(serialized, grace?.signal ?? operation);
231
- else
232
- deps.data(serialized);
233
- });
234
- }
235
- finally {
236
- grace?.dispose();
237
- }
238
- };
239
- const retrySleep = deps.sleep;
240
- const remoteOptions = {
241
- now: deps.now,
242
- sleep: retrySleep ? (ms, abort) => retrySleep(ms, abort, "retry") : undefined,
243
- };
244
- addWatchCommand(program, {
245
- signal: () => signal(),
246
- receipt,
247
- outputIsTTY: deps.outputIsTTY,
248
- sleep: remoteOptions.sleep,
249
- prepare: watch.prepare,
250
- ingest: watch.ingest,
251
- });
252
- addArchiveCommands(program, {
253
- output,
254
- outputItems,
255
- transcripts: deps.archiveTranscripts ?? { read: readArchiveTranscripts, search: searchArchiveTranscripts },
256
- receipt,
257
- outputIsTTY: deps.outputIsTTY,
258
- api,
259
- account: () => profileAccountKey(profile()),
260
- signal,
261
- now: deps.now ?? Date.now,
262
- recordings: () => deps.recordings ?? new ZoomRecordings(tokens(), fetchWithSignal(deps.fetch), remoteOptions, zones),
263
- remoteMeetings: () => deps.remoteMeetings ?? new ZoomRemoteMeetings(tokens(), fetchWithSignal(deps.fetch), remoteOptions),
264
- archive: deps.archive ?? {
265
- inspect: inspectArchive,
266
- verify: verifyArchive,
267
- locks: inspectArchiveLocks,
268
- recover: recoverArchiveLocks,
269
- },
270
- });
271
- addRecordingScheduleCommands(program, {
272
- ...zoomRecordingSchedule({ deps, getConfig, profile, withSignal: fetchWithSignal, signal, remoteOptions, zones }),
273
- offline: () => Boolean(program.opts().offline),
274
- signal,
275
- output,
276
- receipt,
277
- outputIsTTY: deps.outputIsTTY,
278
- });
279
- addZoomSkillCommands(program, () => {
280
- const renderer = createRenderer({
281
- format: formatOf(),
282
- color: false,
283
- quiet: Boolean(program.opts().quiet),
284
- streams: { data: buffer, diagnostic: deps.diagnostic },
285
- });
286
- return {
287
- renderer: {
288
- ...renderer,
289
- result: (value) => output(bodyOf(value)),
290
- stream: (items) => output(wholeList("skill", [...items])),
291
- },
292
- streams: { data: (text) => buffer(`${text}\n`), diagnostic: deps.diagnostic },
293
- env: deps.env,
294
- };
295
- });
296
- let capturedContext;
297
- const preparationOptions = {
298
- context: () => {
299
- capturedContext ??= captureContextSources(getConfig().contextSources, profile());
300
- return capturedContext;
301
- },
302
- credentials: () => {
303
- api();
304
- return tokens();
305
- },
306
- fetch: fetchWithSignal(deps.fetch),
307
- remoteOptions,
308
- };
309
- addZoomInventoryCommand(program, {
310
- profile,
311
- ...preparationOptions,
312
- signal,
313
- now: deps.now,
314
- output: (value) => output(bodyOf(value)),
315
- });
316
- addMcpCommands(program, {
317
- profile,
318
- permissions: (name) => readConfig(deps.configPath).permissions[name] ?? {},
319
- run: (argv) => runForAgent(run, argv, deps),
320
- signal,
321
- serve: deps.serveMcp,
322
- });
323
- addStoreCommands(program, {
324
- deps,
325
- connected,
326
- openStore,
327
- preparation: preparationOptions,
328
- signal,
329
- output,
330
- outputItems,
331
- receipt,
332
- buffer,
333
- rendered,
334
- fields: () => fields,
335
- meta: () => {
336
- if (!execution)
337
- throw new CliError("configuration_error", "command execution is not initialized");
338
- return execution.meta();
339
- },
340
- });
341
- annotateMeetingCommands(program);
342
- installFirstScreen(program);
343
- showProfileInUsage(program);
344
- const parseAsync = program.parseAsync.bind(program);
345
- program.parseAsync = async (...args) => {
10
+ let parsing = false;
11
+ program.parseAsync = async (argv = process.argv, options) => {
346
12
  if (parsing)
347
13
  throw new CliError("validation_error", "concurrent command parsing is unavailable");
348
- resetCliOptions(program);
349
14
  parsing = true;
350
- answerExitCodes.set(program, 0);
351
- config = undefined;
352
- configured.reset();
353
- execution = undefined;
354
- activeTokens = undefined;
355
- watch.reset();
356
- const lifted = liftJsonFields(program, selection.lift(program, args));
357
- fields = lifted.fields;
358
- let result = program;
359
- let failed = false;
360
15
  let failure;
361
- const running = parseAsync(...lifted.args);
362
- void running.catch(() => { });
363
16
  try {
364
- const active = currentExecution();
365
- result = active ? await active.deadline.race(() => running) : await running;
366
- }
367
- catch (error) {
368
- await running.catch(() => { });
369
- failed = true;
370
- failure = error;
371
- }
372
- finally {
373
- if (connecting) {
374
- const closing = connecting;
375
- connecting = undefined;
376
- selectedStore = deps.store;
377
- selectedAccountId = deps.accountId;
378
- try {
379
- await (await closing.catch(() => undefined))?.close();
380
- }
381
- catch {
382
- if (!failed) {
383
- failed = true;
384
- failure = new CliError("configuration_error", "could not close the shared meeting store");
385
- }
386
- }
387
- }
388
- }
389
- if (!failed) {
390
- try {
391
- checkCancelled(signal());
392
- }
393
- catch (error) {
394
- failed = true;
17
+ const args = options?.from === "user" ? argv : argv.slice(2);
18
+ await runCommand([...args], deps, (error) => {
395
19
  failure = error;
396
- }
20
+ });
21
+ if (failure)
22
+ throw failure;
23
+ return program;
397
24
  }
398
- currentExecution()?.deadline.dispose();
399
- parsing = false;
400
- if (failed) {
401
- currentExecution()?.output.discard();
402
- throw failure;
25
+ finally {
26
+ parsing = false;
403
27
  }
404
- currentExecution()?.output.flush(deps.data);
405
- execution = undefined;
406
- return result;
407
28
  };
408
29
  return program;
409
30
  };
410
- export const run = async (args, deps) => {
411
- const program = createProgram(deps);
412
- try {
413
- await program.parseAsync(args, { from: "user" });
414
- return answerExitCodes.get(program) ?? 0;
415
- }
416
- catch (error) {
417
- if (error instanceof CommanderError && HELP_EXITS.has(error.code))
418
- return 0;
419
- const unknownOutcome = error instanceof Error && "code" in error && error.code === "outcome_unknown";
420
- const failure = isCliError(error)
421
- ? error
422
- : unknownOutcome
423
- ? new CliError("outcome_unknown", "operation outcome is unknown; verify stored state before retrying")
424
- : error instanceof CommanderError
425
- ? new CliError("validation_error", usageMessage(error))
426
- : error;
427
- const selected = commandSelection(program, args);
428
- return reportFailure(failure, args, deps, selected.path, hostFailureContext(program, metaOf(selected.action).effects));
429
- }
430
- };
431
31
  //# sourceMappingURL=program.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,aAAa,GAEd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAa,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEvE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAqB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxF,OAAO,EAGL,kBAAkB,GAGnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAuB,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAuB,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAErG,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EACL,sBAAsB,EAGtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAoCvD,MAAM,eAAe,GAAG,IAAI,OAAO,EAAmB,CAAA;AACtD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,yBAAyB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAA;AAE9F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAW,EAAE;IAC1D,IAAI,MAAiD,CAAA;IACrD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IAChE,IAAI,UAAgD,CAAA;IACpD,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,SAAqC,CAAA;IACzC,IAAI,MAA4B,CAAA;IAChC,IAAI,YAAsC,CAAA;IAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;IACvF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAA;IACjC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,SAAS,CAAA;IACxC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,gBAAgB,EAAE,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;IACvE,MAAM,eAAe,GACnB,CAAC,OAAqB,EAAgB,EAAE,CACxC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO;YACxB,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,uDAAuD,CAAC,CAAA;QACpG,MAAM,SAAS,GAAG,MAAM,EAAE,CAAA;QAC1B,OAAO,OAAO,CAAC,KAAK,EAAE;YACpB,GAAG,IAAI;YACP,MAAM,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,MAAM,CAAC;SAC5G,CAAC,CAAA;IACJ,CAAC,CAAA;IACH,MAAM,MAAM,GAAG,GAAG,EAAE,CAClB,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM;SAC1B,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC;SAChD,UAAU,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACtE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;QAC9B,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAA;QACjG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,CAAA;IACD,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAgB,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC3F,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAA;IAC9B,IAAI,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAA;IACtC,MAAM,cAAc,GAAG,GAAW,EAAE;QAClC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,GAAG,CAAC;YACzF,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,6CAA6C,CAAC,CAAA;QAC1F,OAAO,iBAAiB,CAAA;IAC1B,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,KAAK,EACrB,MAAqC,EACrC,OAAwB,EACE,EAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,gBAAgB,EAAE,CAAA;QACjD,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAA;QAC1B,IAAI,MAAM,KAAK,WAAW;YAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACpE,IAAI,CAAC;YACH,OAAO,MAAM,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAA;YAClC,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,yCAAyC,CAAC,CAAA;QACtF,CAAC;IACH,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,CAAC,MAAM,GAAkC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IACxG,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;IACnC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,KAAK,CAAC,+BAA+B,CAAC;SACtC,WAAW,CAAC,6CAA6C,YAAY,EAAE,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,yDAAyD,CAAC;SAC3E,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC;SAC7C,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC;SACjD,MAAM,CAAC,SAAS,EAAE,gCAAgC,CAAC;SACnD,MAAM,CACL,sBAAsB,EACtB,8FAA8F,EAC9F,QAAQ,CACT;SACA,MAAM,CAAC,4BAA4B,EAAE,kEAAkE,EAAE,KAAK,CAAC;SAC/G,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;SAC9C,MAAM,CAAC,SAAS,EAAE,+EAA+E,CAAC;SAClG,YAAY,EAAE;SACd,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAA;IAC7F,MAAM,QAAQ,GAAG,GAAiB,EAAE,CAClC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC/F,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,YAAY,GAAG,IAAI,EAAE,EAAE;QACxE,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAA;QACjG,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;YAChD,MAAM;YACN,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE;YACtB,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;YACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACzC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACpC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAA;QACF,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC1F,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO;YACxB,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,uDAAuD,CAAC,CAAA;QACpG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ;YACvB,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,2DAA2D,CAAC,CAAA;IAC1G,CAAC,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAChD,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;QACpH,IAAI,MAAM;YAAE,MAAM,MAAM,CAAA;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACrC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAA;QAC/F,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACvG,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAC7F,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;QACxB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAM;QACtC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,UAAU,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACpG,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YACpG,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,oDAAoD,CAAC,CAAA;QACjG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACpE,aAAa,GAAG,UAAU,CAAC,KAAK,CAAA;YAChC,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAA;QAC1C,CAAC;QACD,cAAc,EAAE,CAAA;IAClB,CAAC,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACrD,MAAM,WAAW,GAAG,KAAK,EAAE,MAA8B,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAc,EAAE,CAAA;QAC3B,4FAA4F;QAC5F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC,CAAA;QACtF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;YACxB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;YAC7B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YAC1E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAClC,CAAC,CAAA;IACD,iBAAiB,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACvF,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,uBAAuB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/F,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;IAChC,MAAM,eAAe,GAAiD;QACpE,IAAI,KAAK;YACP,OAAO,YAAY,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAA;QACxD,CAAC;QACD,IAAI,SAAS;YACX,OAAO,cAAc,EAAE,CAAA;QACzB,CAAC;QACD,MAAM;QACN,UAAU,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC5C,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAC1G,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAChE,CAAA;QACH,CAAC;QACD,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS;YACvB,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;gBACtB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;gBACxB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;gBAC3D,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;YAC1B,CAAC;YACH,CAAC,CAAC,SAAS;KACd,CAAA;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxC,sBAAsB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAa,EAAE,CAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACxE,mHAAmH;IACnH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACrG,kBAAkB,CAAC,OAAO,EAAE;QAC1B,IAAI;QACJ,SAAS;QACT,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;QACpB,GAAG;QACH,OAAO;QACP,MAAM;QACN,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QACxC,MAAM;KACP,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAC/B,IAAI;QACJ,SAAS;QACT,OAAO;QACP,MAAM;QACN,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QACxC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC;QAC9C,SAAS;QACT,YAAY;QACZ,KAAK;KACN,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC3B,MAAM,SAAS,GAAG,MAAM,EAAiB,CAAA;QACzC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACjF,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBAC1E,IAAI,IAAI,CAAC,UAAU;oBAAE,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC,CAAA;;oBAC7E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,KAAK,EAAE,OAAO,EAAE,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAA;IAC7B,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9E,CAAA;IACD,eAAe,CAAC,OAAO,EAAE;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAiB;QACrC,OAAO;QACP,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAA;IACF,kBAAkB,CAAC,OAAO,EAAE;QAC1B,MAAM;QACN,WAAW;QACX,WAAW,EAAE,IAAI,CAAC,kBAAkB,IAAI,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,wBAAwB,EAAE;QAC1G,OAAO;QACP,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG;QACH,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM;QACN,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG;QACzB,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,CAAC,UAAU,IAAI,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC;QACpG,cAAc,EAAE,GAAG,EAAE,CACnB,IAAI,CAAC,cAAc,IAAI,IAAI,kBAAkB,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;QACrG,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI;YACvB,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,mBAAmB;SAC7B;KACF,CAAC,CAAA;IACF,4BAA4B,CAAC,OAAO,EAAE;QACpC,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QACjH,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC;QAC9C,MAAM;QACN,MAAM;QACN,OAAO;QACP,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAA;IACF,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE;QACjC,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,MAAM,EAAE,QAAQ,EAAE;YAClB,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACpC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;SACvD,CAAC,CAAA;QACF,OAAO;YACL,QAAQ,EAAE;gBACR,GAAG,QAAQ;gBACX,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;aAC1D;YACD,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;YAC7E,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAA;IACH,CAAC,CAAC,CAAA;IACF,IAAI,eAA2C,CAAA;IAC/C,MAAM,kBAAkB,GAA2B;QACjD,OAAO,EAAE,GAAG,EAAE;YACZ,eAAe,KAAK,qBAAqB,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,CAAA;YAChF,OAAO,eAAe,CAAA;QACxB,CAAC;QACD,WAAW,EAAE,GAAG,EAAE;YAChB,GAAG,EAAE,CAAA;YACL,OAAO,MAAM,EAAE,CAAA;QACjB,CAAC;QACD,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,aAAa;KACd,CAAA;IACD,uBAAuB,CAAC,OAAO,EAAE;QAC/B,OAAO;QACP,GAAG,kBAAkB;QACrB,MAAM;QACN,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACzC,CAAC,CAAA;IACF,cAAc,CAAC,OAAO,EAAE;QACtB,OAAO;QACP,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;QAC1E,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3C,MAAM;QACN,KAAK,EAAE,IAAI,CAAC,QAAQ;KACrB,CAAC,CAAA;IACF,gBAAgB,CAAC,OAAO,EAAE;QACxB,IAAI;QACJ,SAAS;QACT,SAAS;QACT,WAAW,EAAE,kBAAkB;QAC/B,MAAM;QACN,MAAM;QACN,WAAW;QACX,OAAO;QACP,MAAM;QACN,QAAQ;QACR,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;QACpB,IAAI,EAAE,GAAG,EAAE;YACT,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAA;YACjG,OAAO,SAAS,CAAC,IAAI,EAAE,CAAA;QACzB,CAAC;KACF,CAAC,CAAA;IACF,uBAAuB,CAAC,OAAO,CAAC,CAAA;IAChC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,OAAO,CAAC,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;QACrC,IAAI,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,2CAA2C,CAAC,CAAA;QAChG,eAAe,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,GAAG,IAAI,CAAA;QACd,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC/B,MAAM,GAAG,SAAS,CAAA;QAClB,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,SAAS,GAAG,SAAS,CAAA;QACrB,YAAY,GAAG,SAAS,CAAA;QACxB,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QACrE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QACtB,IAAI,MAAM,GAAG,OAAO,CAAA;QACpB,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,OAAgB,CAAA;QACpB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAC1C,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;YACjC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAA;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAC7B,MAAM,GAAG,IAAI,CAAA;YACb,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC;gBAAS,CAAC;YACT,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,UAAU,CAAA;gBAC1B,UAAU,GAAG,SAAS,CAAA;gBACtB,aAAa,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC1B,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAA;gBAClC,IAAI,CAAC;oBACH,MAAM,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAA;gBACvD,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,MAAM,GAAG,IAAI,CAAA;wBACb,OAAO,GAAG,IAAI,QAAQ,CAAC,qBAAqB,EAAE,0CAA0C,CAAC,CAAA;oBAC3F,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,IAAI,CAAA;gBACb,OAAO,GAAG,KAAK,CAAA;YACjB,CAAC;QACH,CAAC;QACD,gBAAgB,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAA;QACtC,OAAO,GAAG,KAAK,CAAA;QACf,IAAI,MAAM,EAAE,CAAC;YACX,gBAAgB,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;YACpC,MAAM,OAAO,CAAA;QACf,CAAC;QACD,gBAAgB,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,SAAS,GAAG,SAAS,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,IAAc,EAAE,IAAiB,EAAmB,EAAE;IAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAChD,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;QAC3E,MAAM,cAAc,GAAG,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAA;QACpG,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,cAAc;gBACd,CAAC,CAAC,IAAI,QAAQ,CAAC,iBAAiB,EAAE,mEAAmE,CAAC;gBACtG,CAAC,CAAC,KAAK,YAAY,cAAc;oBAC/B,CAAC,CAAC,IAAI,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBACvD,CAAC,CAAC,KAAK,CAAA;QACb,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAChD,OAAO,aAAa,CAClB,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,QAAQ,CAAC,IAAI,EACb,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAC7D,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAwB,aAAa,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAY5F,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAuCrD,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,CAAA;AAE7B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAW,EAAE;IAC1D,MAAM,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE;QACnB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,mEAAmE,CAAC,CAAA;IAC7G,CAAC,CAAA;IACD,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,OAAO,CAAC,UAAU,GAAG,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QAC1D,IAAI,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,2CAA2C,CAAC,CAAA;QAChG,OAAO,GAAG,IAAI,CAAA;QACd,IAAI,OAAgB,CAAA;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC5D,MAAM,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1C,OAAO,GAAG,KAAK,CAAA;YACjB,CAAC,CAAC,CAAA;YACF,IAAI,OAAO;gBAAE,MAAM,OAAO,CAAA;YAC1B,OAAO,OAAO,CAAA;QAChB,CAAC;gBAAS,CAAC;YACT,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC;IACH,CAAC,CAAA;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { type Body } from "@wirecat/cli-core/cli";
2
+ import type { Command } from "commander";
3
+ export declare const addProgressCommands: (program: Command, deps: {
4
+ profile: () => string;
5
+ env: NodeJS.ProcessEnv;
6
+ now?: () => number;
7
+ output: (body: Body) => void;
8
+ }) => void;
9
+ //# sourceMappingURL=progress-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-commands.d.ts","sourceRoot":"","sources":["../src/progress-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,IAAI,EAAsB,MAAM,uBAAuB,CAAA;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,eAAO,MAAM,mBAAmB,YACrB,OAAO,QACV;IACJ,OAAO,EAAE,MAAM,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CAC7B,SA8CF,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { join } from "node:path";
2
+ import { CliError } from "@wirecat/cli-base";
3
+ import { annotate } from "@wirecat/cli-base/commands";
4
+ import { progressOf } from "@wirecat/cli-core/background";
5
+ import { itemOf, LOCAL_READ } from "@wirecat/cli-core/cli";
6
+ import { profileAccountKey } from "./config.js";
7
+ import { inspectRecordingSyncCheckpoint } from "./recording-sync-store.js";
8
+ import { meetingProgress } from "./sync-progress.js";
9
+ export const addProgressCommands = (program, deps) => {
10
+ const meetings = program.commands.find((command) => command.name() === "meetings");
11
+ const recordings = program.commands.find((command) => command.name() === "recordings");
12
+ if (!meetings || !recordings)
13
+ throw new CliError("configuration_error", "the meeting command groups are missing");
14
+ annotate(meetings.command("status"), {
15
+ effects: LOCAL_READ,
16
+ output: { entity: "sync_progress" },
17
+ examples: ["zm personal meetings status --json"],
18
+ })
19
+ .description("the last meeting ingestion pass: confirmed count, completion and checkpoint age")
20
+ .action(() => deps.output(itemOf(meetingProgress(deps.profile(), deps.env, deps.now).read())));
21
+ annotate(recordings.command("status"), {
22
+ effects: LOCAL_READ,
23
+ output: { entity: "sync_progress" },
24
+ examples: ["zm personal recordings status ./zoom-archive --json"],
25
+ })
26
+ .description("confirmed archived assets and pending discovery in one archive checkpoint")
27
+ .argument("<directory>", "archive folder")
28
+ .option("--checkpoint <file>", "an explicit archive checkpoint path")
29
+ .action(async (directory, options) => {
30
+ const profile = deps.profile();
31
+ const saved = await inspectRecordingSyncCheckpoint(options.checkpoint ?? join(directory, ".zoom-archive-sync.json"));
32
+ if (saved && (saved.scope.provider !== "zoom" || saved.scope.account !== profileAccountKey(profile)))
33
+ throw new CliError("permission_error", "the archive checkpoint belongs to another profile");
34
+ const done = saved?.entries.reduce((sum, entry) => sum + entry.acknowledged.length, 0) ?? 0;
35
+ const total = saved?.pendingWindows.length === 0
36
+ ? saved.entries.reduce((sum, entry) => sum + entry.assets.length, 0)
37
+ : undefined;
38
+ deps.output(itemOf(progressOf({
39
+ job: "recordings",
40
+ profile,
41
+ done,
42
+ total,
43
+ complete: total !== undefined && done === total,
44
+ updatedAt: saved ? new Date(saved.updatedAt).toISOString() : undefined,
45
+ now: new Date(deps.now?.() ?? Date.now()),
46
+ })));
47
+ });
48
+ };
49
+ //# sourceMappingURL=progress-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-commands.js","sourceRoot":"","sources":["../src/progress-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"read-only.d.ts","sourceRoot":"","sources":["../src/read-only.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAmC,MAAM,uBAAuB,CAAA;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,EAAE,EAAE,WAMhB,CAAA;AA8BD,eAAO,MAAM,SAAS,YAAa,OAAO,KAAG,MAAM,GAAG,SASrD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,YAAa,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAInF,CAAA"}
1
+ {"version":3,"file":"read-only.d.ts","sourceRoot":"","sources":["../src/read-only.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAMjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,EAAE,EAAE,WAMhB,CAAA;AAgBD,eAAO,MAAM,SAAS,YAAa,OAAO,KAAG,MAAM,GAAG,SASrD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,YAAa,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAInF,CAAA"}
package/dist/read-only.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { metaOf } from "@wirecat/cli-base/commands";
2
- import { readOnlyLockOf, readOnlyRefusal } from "@wirecat/cli-core/cli";
2
+ import { changesAuthorityNow, isLogin, isStoreChange, readOnlyLockOf, readOnlyRefusal, } from "@wirecat/cli-core/cli";
3
3
  import { VERSION } from "./version.js";
4
4
  export const ZM = {
5
5
  command: "zm",
@@ -8,19 +8,6 @@ export const ZM = {
8
8
  description: "Zoom meeting transcripts and summaries",
9
9
  version: VERSION,
10
10
  };
11
- // Mirrors copy the configured source (Zoom or its downloads folder) into the store or an archive, as tg's sync keeps
12
- // receiving under its lock. The rest write only the word index or open the store read-only. Any other write, one
13
- // added later too, is refused.
14
- const RUNS_UNDER_LOCK = new Set([
15
- "meetings sync",
16
- "watch",
17
- "recordings sync",
18
- "recordings download",
19
- "recordings schedule run",
20
- "search meetings",
21
- "batch",
22
- "mcp",
23
- ]);
24
11
  const pathOf = (command) => {
25
12
  const words = [];
26
13
  for (let at = command; at?.parent; at = at.parent)
@@ -38,14 +25,16 @@ const usesEmbeddings = (command, path) => {
38
25
  export const refusalOf = (command) => {
39
26
  const effects = metaOf(command).effects;
40
27
  const path = pathOf(command);
41
- if (path === "session start")
28
+ if (isLogin(command))
42
29
  return "log in or out";
43
30
  if (effects?.remote === "write")
44
31
  return "change Zoom";
45
32
  if (usesEmbeddings(command, path))
46
33
  return "build meeting vectors or send text to an embedding service";
47
- if (!effects || (effects.local === "write" && !RUNS_UNDER_LOCK.has(path)))
48
- return "change settings, local files or the stored meetings outside a sync";
34
+ if (changesAuthorityNow(command))
35
+ return "change what a later run may do";
36
+ if (!effects || isStoreChange(command))
37
+ return "change the message store or local files";
49
38
  return undefined;
50
39
  };
51
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"read-only.js","sourceRoot":"","sources":["../src/read-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAoB,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEzF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,EAAE,GAAgB;IAC7B,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,wCAAwC;IACrD,OAAO,EAAE,OAAO;CACjB,CAAA;AAED,qHAAqH;AACrH,iHAAiH;AACjH,+BAA+B;AAC/B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,eAAe;IACf,OAAO;IACP,iBAAiB;IACjB,qBAAqB;IACrB,yBAAyB;IACzB,iBAAiB;IACjB,OAAO;IACP,KAAK;CACN,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAU,EAAE;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,IAAI,EAAE,GAAmB,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM;QAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3F,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC,CAAA;AAED,qHAAqH;AACrH,iEAAiE;AACjE,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAW,EAAE;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC9B,IAAI,IAAI,KAAK,qBAAqB;QAAE,OAAO,IAAI,CAAA;IAC/C,OAAO,IAAI,KAAK,iBAAiB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAA;AAClE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAsB,EAAE;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,eAAe,CAAA;IACpD,IAAI,OAAO,EAAE,MAAM,KAAK,OAAO;QAAE,OAAO,aAAa,CAAA;IACrD,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC;QAAE,OAAO,4DAA4D,CAAA;IACtG,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,oEAAoE,CAAA;IAC7E,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAE,GAAsB,EAAQ,EAAE;IACzF,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1C,IAAI,IAAI,IAAI,OAAO;QAAE,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC3D,CAAC,CAAA"}
1
+ {"version":3,"file":"read-only.js","sourceRoot":"","sources":["../src/read-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAEL,mBAAmB,EACnB,OAAO,EACP,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,EAAE,GAAgB;IAC7B,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,wCAAwC;IACrD,OAAO,EAAE,OAAO;CACjB,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAU,EAAE;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,IAAI,EAAE,GAAmB,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM;QAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3F,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC,CAAA;AAED,qHAAqH;AACrH,iEAAiE;AACjE,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAW,EAAE;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC9B,IAAI,IAAI,KAAK,qBAAqB;QAAE,OAAO,IAAI,CAAA;IAC/C,OAAO,IAAI,KAAK,iBAAiB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAA;AAClE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAsB,EAAE;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAA;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,IAAI,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,eAAe,CAAA;IAC5C,IAAI,OAAO,EAAE,MAAM,KAAK,OAAO;QAAE,OAAO,aAAa,CAAA;IACrD,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC;QAAE,OAAO,4DAA4D,CAAA;IACtG,IAAI,mBAAmB,CAAC,OAAO,CAAC;QAAE,OAAO,gCAAgC,CAAA;IACzE,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;QAAE,OAAO,yCAAyC,CAAA;IACxF,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAE,GAAsB,EAAQ,EAAE;IACzF,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1C,IAAI,IAAI,IAAI,OAAO;QAAE,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC3D,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"recording-schedule-commands.d.ts","sourceRoot":"","sources":["../src/recording-schedule-commands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAAsD,MAAM,uBAAuB,CAAA;AACrG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,KAAK,EACV,wBAAwB,EAExB,wBAAwB,EACzB,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,4BAA4B,YAC9B,OAAO,QACV;IACJ,OAAO,EAAE,MAAM,wBAAwB,CAAA;IACvC,OAAO,EAAE,MAAM,wBAAwB,CAAA;IACvC,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,MAAM,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IACrC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,KACA,IAgHF,CAAA"}
1
+ {"version":3,"file":"recording-schedule-commands.d.ts","sourceRoot":"","sources":["../src/recording-schedule-commands.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,IAAI,EAWV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,OAAO,KAAK,EACV,wBAAwB,EAExB,wBAAwB,EACzB,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,4BAA4B,YAC9B,OAAO,QACV;IACJ,OAAO,EAAE,MAAM,wBAAwB,CAAA;IACvC,OAAO,EAAE,MAAM,wBAAwB,CAAA;IACvC,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,MAAM,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IACrC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,KACA,IA+GF,CAAA"}