@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
package/dist/errors.js CHANGED
@@ -1,10 +1,17 @@
1
- export class ZoomError extends Error {
2
- code;
1
+ import { CliError } from "@wirecat/cli-core";
2
+ export class ZoomError extends CliError {
3
3
  constructor(code, message) {
4
- super(message);
5
- this.code = code;
4
+ super(code, message);
6
5
  }
7
6
  }
7
+ export const checkCancelled = (signal) => {
8
+ if (!signal?.aborted)
9
+ return;
10
+ if (signal.reason instanceof CliError)
11
+ throw signal.reason;
12
+ const timedOut = signal.reason instanceof Error && signal.reason.name === "TimeoutError";
13
+ throw new ZoomError(timedOut ? "timeout" : "cancelled", timedOut ? "command timed out" : "command cancelled");
14
+ };
8
15
  export const object = (value) => {
9
16
  if (typeof value !== "object" || value === null || Array.isArray(value))
10
17
  throw new ZoomError("invalid_response", "Zoom returned an invalid response");
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAEvB,IAAI;IADf,YACW,IAKa,EACtB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;oBARL,IAAI;IASf,CAAC;CACF;AACD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAA2B,EAAE;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,mCAAmC,CAAC,CAAA;IAC9E,OAAO,KAAgC,CAAA;AACzC,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAiB,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACnH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAiB,EAAE,CACtD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,mBAAmB,CAAA;AAE5D,MAAM,OAAO,SAAU,SAAQ,QAAQ;IACrC,YAAY,IAAe,EAAE,OAAe;QAC1C,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtB,CAAC;CACF;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAoB,EAAQ,EAAE;IAC3D,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAM;IAC5B,IAAI,MAAM,CAAC,MAAM,YAAY,QAAQ;QAAE,MAAM,MAAM,CAAC,MAAM,CAAA;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,YAAY,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAA;IACxF,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAA;AAC/G,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAA2B,EAAE;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,mCAAmC,CAAC,CAAA;IAC9E,OAAO,KAAgC,CAAA;AACzC,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAiB,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACnH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAiB,EAAE,CACtD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { type Deadline, type OutputBuffer, type SleepLike } from "@wirecat/cli-core";
2
+ import type { Command } from "commander";
3
+ export declare const duration: (text: string) => number;
4
+ export declare const bytes: (text: string) => number;
5
+ export declare const commandDeadline: (action: Command) => number | undefined;
6
+ export interface ExecutionOptions {
7
+ signal?: AbortSignal;
8
+ sleep?: SleepLike;
9
+ }
10
+ export interface ExecutionState {
11
+ deadline: Deadline;
12
+ output: OutputBuffer;
13
+ }
14
+ export declare const startExecution: (action: Command, options: ExecutionOptions) => ExecutionState;
15
+ export declare const resetCliOptions: (root: Command) => void;
16
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAOvC,CAAA;AACD,eAAO,MAAM,KAAK,SAAU,MAAM,KAAG,MAIpC,CAAA;AACD,eAAO,MAAM,eAAe,WAAY,OAAO,KAAG,MAAM,GAAG,SAU1D,CAAA;AACD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;CACrB;AACD,eAAO,MAAM,cAAc,WAAY,OAAO,WAAW,gBAAgB,KAAG,cAU3E,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,OAAO,KAAG,IAS/C,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { createDeadline, createOutputBuffer } from "@wirecat/cli-core";
2
+ import { ZoomError } from "./errors.js";
3
+ export const duration = (text) => {
4
+ const match = /^(\d+(?:\.\d+)?)(ms|s|m|h)?$/.exec(text);
5
+ const unit = { ms: 1, s: 1000, m: 60000, h: 3600000 }[match?.[2] ?? "ms"];
6
+ const value = Number(match?.[1]) * (unit ?? 1);
7
+ if (!match || !Number.isSafeInteger(value) || value <= 0 || value > 2147483647)
8
+ throw new ZoomError("validation_error", "timeout must be a positive duration such as 30s, 5m or 1h");
9
+ return value;
10
+ };
11
+ export const bytes = (text) => {
12
+ if (!/^\d+$/.test(text) || !Number.isSafeInteger(Number(text)))
13
+ throw new ZoomError("validation_error", "expected a nonnegative whole byte count");
14
+ return Number(text);
15
+ };
16
+ export const commandDeadline = (action) => {
17
+ if (action.name() === "watch" || action.name() === "serve")
18
+ return undefined;
19
+ if (action.name() === "login")
20
+ return 300000;
21
+ if (action.name() === "download" ||
22
+ action.name() === "sync" ||
23
+ (action.name() === "verify" && action.parent?.name() === "archive"))
24
+ return 3600000;
25
+ return 30000;
26
+ };
27
+ export const startExecution = (action, options) => {
28
+ const flags = action.optsWithGlobals();
29
+ return {
30
+ deadline: createDeadline({
31
+ timeoutMs: flags.timeout ?? commandDeadline(action),
32
+ signal: options.signal,
33
+ sleep: options.sleep,
34
+ }),
35
+ output: createOutputBuffer({ maxOutputBytes: flags.maxOutputBytes }),
36
+ };
37
+ };
38
+ export const resetCliOptions = (root) => {
39
+ for (const command of [root, ...root.commands]) {
40
+ for (const option of command.options) {
41
+ const name = option.attributeName();
42
+ if (command.getOptionValueSource(name) === "cli")
43
+ command.setOptionValueWithSource(name, option.defaultValue ?? (option.negate ? true : undefined), "default");
44
+ }
45
+ if (command !== root && command.commands.length)
46
+ resetCliOptions(command);
47
+ }
48
+ };
49
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,14 @@
1
1
  export { encodeUuid, ZoomApiSource } from "./api.js";
2
+ export { type ArchiveTranscript, type ArchiveTranscriptMatch, type ArchiveTranscriptOptions, type ArchiveTranscriptSearchOptions, type ArchiveTranscriptSearchReport, readArchiveTranscripts, searchArchiveTranscripts, } from "./archive-transcripts.js";
2
3
  export { profileAccountKey, readConfig, setConfig, type ZoomConfig } from "./config.js";
3
4
  export { ZoomError } from "./errors.js";
4
5
  export { type DownloadedFile, FilesSource, fileMeeting, importFile, readDownloadedFiles, validateDownloadedFiles, } from "./files.js";
5
6
  export { type LoginOptions, login, REDIRECT } from "./login.js";
7
+ export { createMeetingMcpServer, type MeetingMcpOptions, serveMeetingMcp } from "./mcp-server.js";
6
8
  export { createProgram, type ProgramDeps, run, type StoreConnection, type StoreConnectRequest } from "./program.js";
9
+ export { type ArchiveSyncOptions, type ArchiveSyncReceipt, syncRecordingArchive } from "./recording-sync.js";
10
+ export { type ArchivedFile, type ArchiveLockInfo, type ArchiveManifest, type ArchiveReport, type ArchiveVerification, type DownloadOptions, getZoomProfile, inspectArchive, inspectArchiveLocks, type RecordingAsset, type RecordingMeeting, type RecordingRange, recoverArchiveLocks, verifyArchive, type ZoomProfile, ZoomRecordings, } from "./recordings.js";
11
+ export { type MeetingChange, type MeetingMutation, type MutationOptions, type RemoteMeeting, ZoomRemoteMeetings, } from "./remote-meetings.js";
12
+ export { createStoreConnector, type StoreConnectionOptions } from "./store-connection.js";
7
13
  export { TokenManager, type TokenOptions, type Tokens } from "./tokens.js";
8
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACnH,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACnH,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,mBAAmB,EACnB,aAAa,EACb,KAAK,WAAW,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -1,8 +1,14 @@
1
1
  export { encodeUuid, ZoomApiSource } from "./api.js";
2
+ export { readArchiveTranscripts, searchArchiveTranscripts, } from "./archive-transcripts.js";
2
3
  export { profileAccountKey, readConfig, setConfig } from "./config.js";
3
4
  export { ZoomError } from "./errors.js";
4
5
  export { FilesSource, fileMeeting, importFile, readDownloadedFiles, validateDownloadedFiles, } from "./files.js";
5
6
  export { login, REDIRECT } from "./login.js";
7
+ export { createMeetingMcpServer, serveMeetingMcp } from "./mcp-server.js";
6
8
  export { createProgram, run } from "./program.js";
9
+ export { syncRecordingArchive } from "./recording-sync.js";
10
+ export { getZoomProfile, inspectArchive, inspectArchiveLocks, recoverArchiveLocks, verifyArchive, ZoomRecordings, } from "./recordings.js";
11
+ export { ZoomRemoteMeetings, } from "./remote-meetings.js";
12
+ export { createStoreConnector } from "./store-connection.js";
7
13
  export { TokenManager } from "./tokens.js";
8
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAEL,WAAW,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAqB,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAoB,GAAG,EAAkD,MAAM,cAAc,CAAA;AACnH,OAAO,EAAE,YAAY,EAAkC,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAML,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAEL,WAAW,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAqB,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAA0B,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EAAE,aAAa,EAAoB,GAAG,EAAkD,MAAM,cAAc,CAAA;AACnH,OAAO,EAAoD,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EAOL,cAAc,EACd,cAAc,EACd,mBAAmB,EAInB,mBAAmB,EACnB,aAAa,EAEb,cAAc,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAKL,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAA+B,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,YAAY,EAAkC,MAAM,aAAa,CAAA"}
package/dist/login.d.ts CHANGED
@@ -6,6 +6,7 @@ export interface LoginOptions {
6
6
  readPaste?: (signal: AbortSignal) => Promise<string>;
7
7
  showUrl?: (url: string) => void;
8
8
  timeoutMs?: number;
9
+ signal?: AbortSignal;
9
10
  }
10
11
  export declare const login: (options: LoginOptions) => Promise<{
11
12
  loggedIn: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AACD,eAAO,MAAM,KAAK,YAAmB,YAAY;;;EA+EhD,CAAA"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AACD,eAAO,MAAM,KAAK,YAAmB,YAAY;;;EA0FhD,CAAA"}
package/dist/login.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { createHash, randomBytes } from "node:crypto";
2
2
  import { createServer } from "node:http";
3
- import { ZoomError } from "./errors.js";
3
+ import { checkCancelled, ZoomError } from "./errors.js";
4
4
  export const REDIRECT = "https://wirecat.dev/zoom-callback";
5
5
  export const login = async (options) => {
6
+ checkCancelled(options.signal);
6
7
  const verifier = randomBytes(48).toString("base64url");
7
8
  const challenge = createHash("sha256").update(verifier).digest("base64url");
8
9
  const controller = new AbortController();
@@ -13,6 +14,15 @@ export const login = async (options) => {
13
14
  accept = resolve;
14
15
  fail = reject;
15
16
  });
17
+ const onAbort = () => {
18
+ try {
19
+ checkCancelled(options.signal);
20
+ }
21
+ catch (error) {
22
+ fail(error instanceof Error ? error : new ZoomError("cancelled", "command cancelled"));
23
+ }
24
+ };
25
+ options.signal?.addEventListener("abort", onAbort, { once: true });
16
26
  // Startup and paste can fail before the callback is awaited.
17
27
  void codePromise.catch(() => { });
18
28
  const server = createServer((request, response) => {
@@ -51,6 +61,7 @@ export const login = async (options) => {
51
61
  code_challenge_method: "S256",
52
62
  state,
53
63
  }).toString();
64
+ checkCancelled(options.signal);
54
65
  options.showUrl?.(authorize.toString());
55
66
  const pastePromise = options.readPaste?.(controller.signal).then((text) => {
56
67
  const query = new URLSearchParams(text.includes("?") ? text.slice(text.indexOf("?") + 1) : text);
@@ -76,6 +87,7 @@ export const login = async (options) => {
76
87
  return { loggedIn: true, scopes: tokens.scopes };
77
88
  }
78
89
  finally {
90
+ options.signal?.removeEventListener("abort", onAbort);
79
91
  clearTimeout(timer);
80
92
  controller.abort();
81
93
  server.close();
package/dist/login.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
3
+ import type { StoreConnection } from "./program.js";
4
+ export interface MeetingMcpOptions {
5
+ /** Resolve the selected profile with read intent; each call owns a fresh connection. */
6
+ connectStore: () => Promise<StoreConnection>;
7
+ version?: string;
8
+ signal?: AbortSignal;
9
+ /** Maximum UTF-8 bytes in a serialized tool result, including both content forms; zero is unlimited. */
10
+ maxResultBytes?: number;
11
+ }
12
+ /** Embedding seam. Caller owns transport shutdown; each tool call closes its read connection. */
13
+ export declare const createMeetingMcpServer: (options: MeetingMcpOptions) => Server;
14
+ /** Serve until EOF, transport close or abort; in-flight reads close before this resolves. */
15
+ export declare const serveMeetingMcp: (options: MeetingMcpOptions, transport?: Transport) => Promise<void>;
16
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAA;AAM9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGnD,MAAM,WAAW,iBAAiB;IAChC,wFAAwF;IACxF,YAAY,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,wGAAwG;IACxG,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AA8GD,iGAAiG;AACjG,eAAO,MAAM,sBAAsB,YAAa,iBAAiB,KAAG,MAAqC,CAAA;AAEzG,6FAA6F;AAC7F,eAAO,MAAM,eAAe,YAAmB,iBAAiB,cAAc,SAAS,KAAG,OAAO,CAAC,IAAI,CAkDrG,CAAA"}
@@ -0,0 +1,172 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
4
+ import { AjvJsonSchemaValidator } from "@modelcontextprotocol/sdk/validation/ajv";
5
+ import { callMeetingTool, meetingTools } from "@wirecat/cli-meetings/mcp";
6
+ import { ZoomError } from "./errors.js";
7
+ import { VERSION } from "./version.js";
8
+ const failure = (code, message) => {
9
+ const result = { error: { code, message } };
10
+ return {
11
+ content: [{ type: "text", text: JSON.stringify(result) }],
12
+ structuredContent: result,
13
+ isError: true,
14
+ };
15
+ };
16
+ /** SDK protocol handling; shared meeting tools own all read behavior and validation. */
17
+ const buildServer = (options) => {
18
+ const maxResultBytes = options.maxResultBytes ?? 4 * 1024 * 1024;
19
+ if (!Number.isSafeInteger(maxResultBytes) || maxResultBytes < 0)
20
+ throw new ZoomError("validation_error", "maxResultBytes must be a nonnegative safe integer");
21
+ const running = new Set();
22
+ let stopping = false;
23
+ const validator = new AjvJsonSchemaValidator();
24
+ const tools = meetingTools.map((tool) => {
25
+ const properties = Object.fromEntries(Object.entries(tool.inputSchema.properties).filter(([key]) => key !== "account_id"));
26
+ return { ...tool, inputSchema: { ...tool.inputSchema, type: "object", properties } };
27
+ });
28
+ const validated = new Map(tools.map((tool) => [tool.name, validator.getValidator(tool.inputSchema)]));
29
+ const server = new Server({ name: "zoom-meetings", version: options.version ?? VERSION }, { capabilities: { tools: {} } });
30
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
31
+ const call = async (request, requestSignal) => {
32
+ const signal = options.signal ? AbortSignal.any([options.signal, requestSignal]) : requestSignal;
33
+ const cancelled = () => stopping || signal.aborted;
34
+ if (cancelled())
35
+ return failure("cancelled", "meeting read was cancelled");
36
+ const validate = validated.get(request.params.name);
37
+ if (!validate)
38
+ return failure("validation_error", "unknown meeting tool");
39
+ const args = request.params.arguments ?? {};
40
+ const prototype = Object.getPrototypeOf(args);
41
+ if ((prototype !== null && prototype !== Object.prototype) || "account_id" in args || !validate(args).valid)
42
+ return failure("validation_error", "invalid meeting tool arguments; account is selected by the server");
43
+ let connection;
44
+ try {
45
+ connection = await options.connectStore();
46
+ }
47
+ catch {
48
+ return failure("configuration_error", "could not open the selected meeting account");
49
+ }
50
+ let result = failure("generic_failure", "Meeting read failed");
51
+ try {
52
+ if (cancelled())
53
+ result = failure("cancelled", "meeting read was cancelled");
54
+ else if (!Number.isSafeInteger(connection.accountId) || connection.accountId < 1)
55
+ result = failure("configuration_error", "the selected meeting account is unavailable");
56
+ else {
57
+ // Ports have no AbortSignal argument. Guard each new read, let an active read settle,
58
+ // and retain its connection until the operation and close finish.
59
+ const store = new Proxy(connection.store, {
60
+ get(target, key) {
61
+ const value = Reflect.get(target, key);
62
+ return typeof value === "function"
63
+ ? (...args) => {
64
+ if (cancelled())
65
+ throw new ZoomError("cancelled", "meeting read was cancelled");
66
+ return Reflect.apply(value, target, args);
67
+ }
68
+ : value;
69
+ },
70
+ });
71
+ result = await callMeetingTool(store, request.params.name, {
72
+ ...args,
73
+ account_id: connection.accountId,
74
+ });
75
+ }
76
+ }
77
+ catch {
78
+ result = failure("generic_failure", "Meeting read failed");
79
+ }
80
+ finally {
81
+ try {
82
+ await connection.close();
83
+ }
84
+ catch {
85
+ result = failure("generic_failure", "could not close the meeting read connection");
86
+ }
87
+ }
88
+ if (cancelled())
89
+ return failure("cancelled", "meeting read was cancelled");
90
+ return maxResultBytes !== 0 && Buffer.byteLength(JSON.stringify(result), "utf8") > maxResultBytes
91
+ ? failure("validation_error", "meeting tool result exceeds maxResultBytes")
92
+ : result;
93
+ };
94
+ server.setRequestHandler(CallToolRequestSchema, (request, extra) => {
95
+ const result = call(request, extra.signal);
96
+ running.add(result);
97
+ void result.then(() => running.delete(result), () => running.delete(result));
98
+ return result;
99
+ });
100
+ return {
101
+ server,
102
+ stop: () => {
103
+ stopping = true;
104
+ },
105
+ settled: async () => {
106
+ await Promise.all(running);
107
+ },
108
+ };
109
+ };
110
+ /** Embedding seam. Caller owns transport shutdown; each tool call closes its read connection. */
111
+ export const createMeetingMcpServer = (options) => buildServer(options).server;
112
+ /** Serve until EOF, transport close or abort; in-flight reads close before this resolves. */
113
+ export const serveMeetingMcp = async (options, transport) => {
114
+ if (options.signal?.aborted)
115
+ return;
116
+ const { server, stop, settled } = buildServer(options);
117
+ let resolveClosed;
118
+ let rejectClosed;
119
+ const closed = new Promise((resolve, reject) => {
120
+ resolveClosed = resolve;
121
+ rejectClosed = reject;
122
+ });
123
+ // Shutdown can reject while connect is still pending; keep that rejection observed
124
+ // until the connection attempt settles and the original failure can be reported.
125
+ void closed.catch(() => { });
126
+ let closing;
127
+ let connecting;
128
+ const close = () => (closing ??= server.close());
129
+ server.onclose = () => {
130
+ stop();
131
+ void settled().then(resolveClosed, rejectClosed);
132
+ };
133
+ const shutdown = () => {
134
+ stop();
135
+ void Promise.resolve(connecting).then(settled).then(close).then(resolveClosed, rejectClosed);
136
+ };
137
+ options.signal?.addEventListener("abort", shutdown, { once: true });
138
+ if (!transport)
139
+ process.stdin.once("end", shutdown);
140
+ let failed = false;
141
+ let earlierError;
142
+ try {
143
+ connecting = server.connect(transport ?? new StdioServerTransport());
144
+ await connecting;
145
+ if (options.signal?.aborted)
146
+ shutdown();
147
+ await closed;
148
+ }
149
+ catch (error) {
150
+ failed = true;
151
+ earlierError = error;
152
+ }
153
+ finally {
154
+ options.signal?.removeEventListener("abort", shutdown);
155
+ if (!transport)
156
+ process.stdin.removeListener("end", shutdown);
157
+ stop();
158
+ try {
159
+ await settled();
160
+ await close();
161
+ }
162
+ catch (error) {
163
+ if (!failed) {
164
+ failed = true;
165
+ earlierError = error;
166
+ }
167
+ }
168
+ }
169
+ if (failed)
170
+ throw earlierError;
171
+ };
172
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const writeExportFile: (path: string, content: string, options?: {
2
+ signal?: AbortSignal;
3
+ }) => Promise<void>;
4
+ //# sourceMappingURL=output-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-file.d.ts","sourceRoot":"","sources":["../src/output-file.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,SACpB,MAAM,WACH,MAAM,YACN;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAChC,OAAO,CAAC,IAAI,CA8Cd,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { link, open, unlink } from "node:fs/promises";
3
+ import { CliError } from "@wirecat/cli-core";
4
+ import { checkCancelled, ZoomError } from "./errors.js";
5
+ export const writeExportFile = async (path, content, options = {}) => {
6
+ checkCancelled(options.signal);
7
+ const temporary = `${path}.zm-${randomUUID()}.part`;
8
+ let handle;
9
+ let failure;
10
+ let failed = false;
11
+ try {
12
+ handle = await open(temporary, "wx", 0o600);
13
+ await handle.writeFile(content, "utf8");
14
+ await handle.sync();
15
+ checkCancelled(options.signal);
16
+ await link(temporary, path);
17
+ }
18
+ catch (error) {
19
+ failed = true;
20
+ failure = error;
21
+ }
22
+ finally {
23
+ if (handle) {
24
+ try {
25
+ await handle.close();
26
+ }
27
+ catch (error) {
28
+ if (!failed) {
29
+ failed = true;
30
+ failure = error;
31
+ }
32
+ }
33
+ try {
34
+ await unlink(temporary);
35
+ }
36
+ catch (error) {
37
+ if (!failed) {
38
+ failed = true;
39
+ failure = error;
40
+ }
41
+ }
42
+ }
43
+ }
44
+ if (!failed)
45
+ return;
46
+ if (failure instanceof CliError)
47
+ throw failure;
48
+ const code = typeof failure === "object" && failure !== null && "code" in failure ? failure.code : undefined;
49
+ throw new ZoomError(code === "EEXIST"
50
+ ? "validation_error"
51
+ : code === "EACCES" || code === "EPERM"
52
+ ? "permission_error"
53
+ : "configuration_error", code === "EEXIST" ? "output file already exists; choose another path" : "could not write the output file");
54
+ };
55
+ //# sourceMappingURL=output-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-file.js","sourceRoot":"","sources":["../src/output-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAmB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,IAAY,EACZ,OAAe,EACf,OAAO,GAA6B,EAAE,EACvB,EAAE;IACjB,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,GAAG,IAAI,OAAO,UAAU,EAAE,OAAO,CAAA;IACnD,IAAI,MAA8B,CAAA;IAClC,IAAI,OAAgB,CAAA;IACpB,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;QAC3C,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACvC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACnB,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,IAAI,CAAA;QACb,OAAO,GAAG,KAAK,CAAA;IACjB,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,IAAI,CAAA;oBACb,OAAO,GAAG,KAAK,CAAA;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,IAAI,CAAA;oBACb,OAAO,GAAG,KAAK,CAAA;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,IAAI,OAAO,YAAY,QAAQ;QAAE,MAAM,OAAO,CAAA;IAC9C,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAC5G,MAAM,IAAI,SAAS,CACjB,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO;YACrC,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,qBAAqB,EAC3B,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,iCAAiC,CAC1G,CAAA;AACH,CAAC,CAAA"}
package/dist/program.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ import { type SleepLike } from "@wirecat/cli-core";
1
2
  import { type MeetingSource, type MeetingStore } from "@wirecat/cli-meetings";
2
3
  import { Command } from "commander";
4
+ import { type ArchiveService, type ArchiveTranscriptService, type RecordingsService, type RemoteMeetingsService } from "./archive-commands.js";
3
5
  import { readDownloadedFiles } from "./files.js";
4
6
  import type { TokenManager } from "./tokens.js";
5
7
  export interface StoreConnection {
@@ -20,12 +22,32 @@ export interface ProgramDeps {
20
22
  accountId?: number;
21
23
  connectStore?: (request: StoreConnectRequest) => Promise<StoreConnection>;
22
24
  source?: MeetingSource;
25
+ recordings?: RecordingsService;
26
+ remoteMeetings?: RemoteMeetingsService;
27
+ archive?: ArchiveService;
28
+ archiveTranscripts?: ArchiveTranscriptService;
23
29
  readFiles?: typeof readDownloadedFiles;
30
+ writeFile?: (path: string, content: string, options?: {
31
+ signal?: AbortSignal;
32
+ }) => Promise<void>;
24
33
  openBrowser: (url: string, browser?: string) => Promise<void>;
25
34
  readPaste?: (signal: AbortSignal) => Promise<string>;
26
35
  data: (text: string) => void;
27
36
  diagnostic: (text: string) => void;
28
37
  now?: () => number;
38
+ interactive?: boolean;
39
+ outputIsTTY?: boolean;
40
+ env?: NodeJS.ProcessEnv;
41
+ checkSession?: (options?: {
42
+ signal?: AbortSignal;
43
+ }) => Promise<unknown>;
44
+ signal?: AbortSignal;
45
+ sleep?: SleepLike;
46
+ serveMcp?: (options: {
47
+ signal: AbortSignal;
48
+ maxResultBytes?: number;
49
+ }) => Promise<void>;
50
+ streamData?: (text: string, signal: AbortSignal) => Promise<void>;
29
51
  }
30
52
  export declare const createProgram: (deps: ProgramDeps) => Command;
31
53
  export declare const run: (args: string[], deps: ProgramDeps) => Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAE3F,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AAInD,OAAO,EAA2B,mBAAmB,EAA2B,MAAM,YAAY,CAAA;AAElG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AACD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,GAAG,WAAW,CAAA;CAC7B;AACD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;IACzE,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,mBAAmB,CAAA;IACtC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAwBD,eAAO,MAAM,aAAa,SAAU,WAAW,KAAG,OAuLjD,CAAA;AACD,eAAO,MAAM,GAAG,SAAgB,MAAM,EAAE,QAAQ,WAAW,KAAG,OAAO,CAAC,MAAM,CAqC3E,CAAA"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}