@wirecat/zoom-cli 0.1.0 → 0.2.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 +156 -11
- package/dist/agent-skill.d.ts +4 -0
- package/dist/agent-skill.d.ts.map +1 -0
- package/dist/agent-skill.js +16 -0
- package/dist/agent-skill.js.map +1 -0
- package/dist/api.d.ts +3 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +10 -41
- package/dist/api.js.map +1 -1
- package/dist/archive-commands.d.ts +25 -0
- package/dist/archive-commands.d.ts.map +1 -0
- package/dist/archive-commands.js +157 -0
- package/dist/archive-commands.js.map +1 -0
- package/dist/bin/zm.js +53 -3
- package/dist/bin/zm.js.map +1 -1
- package/dist/commands.d.ts +12 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +96 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -2
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +4 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +11 -4
- package/dist/errors.js.map +1 -1
- package/dist/execution.d.ts +16 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +49 -0
- package/dist/execution.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/login.d.ts +1 -0
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +13 -1
- package/dist/login.js.map +1 -1
- package/dist/mcp-server.d.ts +16 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +172 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/output-file.d.ts +4 -0
- package/dist/output-file.d.ts.map +1 -0
- package/dist/output-file.js +55 -0
- package/dist/output-file.js.map +1 -0
- package/dist/program.d.ts +32 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +403 -45
- package/dist/program.js.map +1 -1
- package/dist/recording-archive.d.ts +62 -0
- package/dist/recording-archive.d.ts.map +1 -0
- package/dist/recording-archive.js +519 -0
- package/dist/recording-archive.js.map +1 -0
- package/dist/recording-sync.d.ts +15 -0
- package/dist/recording-sync.d.ts.map +1 -0
- package/dist/recording-sync.js +49 -0
- package/dist/recording-sync.js.map +1 -0
- package/dist/recordings.d.ts +47 -0
- package/dist/recordings.d.ts.map +1 -0
- package/dist/recordings.js +124 -0
- package/dist/recordings.js.map +1 -0
- package/dist/remote-http.d.ts +23 -0
- package/dist/remote-http.d.ts.map +1 -0
- package/dist/remote-http.js +113 -0
- package/dist/remote-http.js.map +1 -0
- package/dist/remote-meetings.d.ts +58 -0
- package/dist/remote-meetings.d.ts.map +1 -0
- package/dist/remote-meetings.js +151 -0
- package/dist/remote-meetings.js.map +1 -0
- package/dist/store-connection.d.ts +9 -0
- package/dist/store-connection.d.ts.map +1 -0
- package/dist/store-connection.js +39 -0
- package/dist/store-connection.js.map +1 -0
- package/dist/streaming.d.ts +6 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +86 -0
- package/dist/streaming.js.map +1 -0
- package/dist/tokens.d.ts +6 -4
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +48 -18
- package/dist/tokens.js.map +1 -1
- package/dist/watch-commands.d.ts +11 -0
- package/dist/watch-commands.d.ts.map +1 -0
- package/dist/watch-commands.js +30 -0
- package/dist/watch-commands.js.map +1 -0
- package/package.json +21 -12
- package/skills/zoom-cli/SKILL.md +69 -0
|
@@ -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 @@
|
|
|
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,20 +1,52 @@
|
|
|
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 RecordingsService, type RemoteMeetingsService } from "./archive-commands.js";
|
|
3
5
|
import { readDownloadedFiles } from "./files.js";
|
|
4
6
|
import type { TokenManager } from "./tokens.js";
|
|
7
|
+
export interface StoreConnection {
|
|
8
|
+
store: MeetingStore;
|
|
9
|
+
accountId: number;
|
|
10
|
+
close: () => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface StoreConnectRequest {
|
|
13
|
+
profile: string;
|
|
14
|
+
externalId: string;
|
|
15
|
+
intent: "read" | "ingestion";
|
|
16
|
+
}
|
|
5
17
|
export interface ProgramDeps {
|
|
6
18
|
configPath: string;
|
|
7
19
|
tokens: TokenManager;
|
|
8
20
|
fetch: typeof fetch;
|
|
9
21
|
store?: MeetingStore;
|
|
10
22
|
accountId?: number;
|
|
23
|
+
connectStore?: (request: StoreConnectRequest) => Promise<StoreConnection>;
|
|
11
24
|
source?: MeetingSource;
|
|
25
|
+
recordings?: RecordingsService;
|
|
26
|
+
remoteMeetings?: RemoteMeetingsService;
|
|
27
|
+
archive?: ArchiveService;
|
|
12
28
|
readFiles?: typeof readDownloadedFiles;
|
|
29
|
+
writeFile?: (path: string, content: string, options?: {
|
|
30
|
+
signal?: AbortSignal;
|
|
31
|
+
}) => Promise<void>;
|
|
13
32
|
openBrowser: (url: string, browser?: string) => Promise<void>;
|
|
14
33
|
readPaste?: (signal: AbortSignal) => Promise<string>;
|
|
15
34
|
data: (text: string) => void;
|
|
16
35
|
diagnostic: (text: string) => void;
|
|
17
36
|
now?: () => number;
|
|
37
|
+
interactive?: boolean;
|
|
38
|
+
outputIsTTY?: boolean;
|
|
39
|
+
env?: NodeJS.ProcessEnv;
|
|
40
|
+
checkSession?: (options?: {
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
}) => Promise<unknown>;
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
sleep?: SleepLike;
|
|
45
|
+
serveMcp?: (options: {
|
|
46
|
+
signal: AbortSignal;
|
|
47
|
+
maxResultBytes?: number;
|
|
48
|
+
}) => Promise<void>;
|
|
49
|
+
streamData?: (text: string, signal: AbortSignal) => Promise<void>;
|
|
18
50
|
}
|
|
19
51
|
export declare const createProgram: (deps: ProgramDeps) => Command;
|
|
20
52
|
export declare const run: (args: string[], deps: ProgramDeps) => Promise<number>;
|
package/dist/program.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|