cursor-api-proxy 0.5.0 → 0.7.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 (47) hide show
  1. package/README.md +61 -29
  2. package/dist/cli/reset-hwid.js +10 -1
  3. package/dist/cli/reset-hwid.js.map +1 -1
  4. package/dist/cli/usage.d.ts +1 -5
  5. package/dist/cli/usage.js +1 -38
  6. package/dist/cli/usage.js.map +1 -1
  7. package/dist/lib/acp-client.d.ts +42 -0
  8. package/dist/lib/acp-client.js +472 -0
  9. package/dist/lib/acp-client.js.map +1 -0
  10. package/dist/lib/agent-cmd-args.d.ts +4 -0
  11. package/dist/lib/agent-cmd-args.js +8 -3
  12. package/dist/lib/agent-cmd-args.js.map +1 -1
  13. package/dist/lib/agent-runner.d.ts +2 -2
  14. package/dist/lib/agent-runner.js +97 -5
  15. package/dist/lib/agent-runner.js.map +1 -1
  16. package/dist/lib/config.d.ts +20 -0
  17. package/dist/lib/config.js +22 -1
  18. package/dist/lib/config.js.map +1 -1
  19. package/dist/lib/env.d.ts +9 -0
  20. package/dist/lib/env.js +51 -0
  21. package/dist/lib/env.js.map +1 -1
  22. package/dist/lib/handlers/anthropic-messages.js +128 -20
  23. package/dist/lib/handlers/anthropic-messages.js.map +1 -1
  24. package/dist/lib/handlers/chat-completions.js +150 -20
  25. package/dist/lib/handlers/chat-completions.js.map +1 -1
  26. package/dist/lib/http.d.ts +2 -2
  27. package/dist/lib/http.js +7 -3
  28. package/dist/lib/http.js.map +1 -1
  29. package/dist/lib/process.d.ts +7 -0
  30. package/dist/lib/process.js +22 -2
  31. package/dist/lib/process.js.map +1 -1
  32. package/dist/lib/request-listener.js +7 -2
  33. package/dist/lib/request-listener.js.map +1 -1
  34. package/dist/lib/request-log.js +1 -1
  35. package/dist/lib/request-log.js.map +1 -1
  36. package/dist/lib/server.js +8 -0
  37. package/dist/lib/server.js.map +1 -1
  38. package/dist/lib/token-cache.d.ts +6 -0
  39. package/dist/lib/token-cache.js +40 -0
  40. package/dist/lib/token-cache.js.map +1 -0
  41. package/dist/lib/win-cmdline-limit.d.ts +32 -0
  42. package/dist/lib/win-cmdline-limit.js +92 -0
  43. package/dist/lib/win-cmdline-limit.js.map +1 -0
  44. package/dist/lib/workspace.d.ts +5 -0
  45. package/dist/lib/workspace.js +53 -2
  46. package/dist/lib/workspace.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,472 @@
1
+ /**
2
+ * ACP (Agent Client Protocol) client for Cursor CLI.
3
+ * Spawns `agent acp` and communicates via JSON-RPC over stdio.
4
+ * See https://cursor.com/docs/cli/acp and https://agentclientprotocol.com/
5
+ */
6
+ import * as readline from "node:readline";
7
+ import { spawn } from "node:child_process";
8
+ import { debuglog } from "node:util";
9
+ import { trackChildProcess } from "./process.js";
10
+ const debugAcp = debuglog("cursor-api-proxy:acp");
11
+ const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
12
+ /** Avoid passing the entire parent environment into ACP children (may contain unrelated secrets). */
13
+ function buildAcpSpawnEnv(extra) {
14
+ const inheritKeys = [
15
+ "PATH",
16
+ "PATHEXT",
17
+ "SystemRoot",
18
+ "WINDIR",
19
+ "COMSPEC",
20
+ "TEMP",
21
+ "TMP",
22
+ "USERPROFILE",
23
+ "USERNAME",
24
+ "HOME",
25
+ "HOMEDRIVE",
26
+ "HOMEPATH",
27
+ "APPDATA",
28
+ "LOCALAPPDATA",
29
+ "PROGRAMFILES",
30
+ "PROGRAMFILES(X86)",
31
+ "PROGRAMDATA",
32
+ "PUBLIC",
33
+ "NODE_OPTIONS",
34
+ ];
35
+ const out = {};
36
+ for (const k of inheritKeys) {
37
+ const v = process.env[k];
38
+ if (v !== undefined)
39
+ out[k] = v;
40
+ }
41
+ if (extra) {
42
+ for (const [k, v] of Object.entries(extra)) {
43
+ if (v !== undefined)
44
+ out[k] = v;
45
+ }
46
+ }
47
+ return out;
48
+ }
49
+ /**
50
+ * Handle ACP server→client notifications (session/update chunks, permissions, cursor/*).
51
+ * Returns true if the message was consumed as a notification.
52
+ */
53
+ function handleAcpNotification(msg, opts) {
54
+ if (msg.method === "session/update") {
55
+ const update = (msg.params?.update ?? msg.params);
56
+ const content = update?.content;
57
+ const text = typeof content === "object" && content !== null && !Array.isArray(content) && typeof content.text === "string"
58
+ ? content.text
59
+ : Array.isArray(content)
60
+ ? content
61
+ .map((c) => typeof c?.content?.text === "string"
62
+ ? c.content.text
63
+ : typeof c?.text === "string"
64
+ ? c.text
65
+ : "")
66
+ .join("")
67
+ : "";
68
+ const sessionUpdate = update?.sessionUpdate;
69
+ if ((sessionUpdate === "agent_message_chunk" || sessionUpdate === "agent_thought_chunk") &&
70
+ text) {
71
+ opts.onAgentTextChunk?.(text);
72
+ }
73
+ else if (sessionUpdate &&
74
+ sessionUpdate !== "agent_thought_chunk" &&
75
+ sessionUpdate !== "available_commands_update" &&
76
+ sessionUpdate !== "tool_call" &&
77
+ sessionUpdate !== "tool_call_update") {
78
+ debugAcp("session/update (unhandled): %s", JSON.stringify({
79
+ sessionUpdate,
80
+ hasContent: !!content,
81
+ contentKeys: content && typeof content === "object" && !Array.isArray(content) ? Object.keys(content) : [],
82
+ }));
83
+ }
84
+ return true;
85
+ }
86
+ if (msg.method === "session/request_permission") {
87
+ if (msg.id != null && opts.stdin) {
88
+ respond(opts.stdin, msg.id, {
89
+ outcome: { outcome: "selected", optionId: "reject-once" },
90
+ });
91
+ }
92
+ return true;
93
+ }
94
+ if (msg.id != null && msg.method && opts.stdin) {
95
+ const method = String(msg.method);
96
+ if (method.startsWith("cursor/")) {
97
+ const params = msg.params;
98
+ if (method === "cursor/ask_question" && params?.options && Array.isArray(params.options)) {
99
+ const options = params.options;
100
+ const first = options[0];
101
+ console.warn("[cursor-api-proxy:acp] cursor/ask_question auto-selecting first option: id=%s (total=%d)", first?.id ?? "(none)", options.length);
102
+ respond(opts.stdin, msg.id, { selectedId: first?.id ?? "" });
103
+ }
104
+ else if (method === "cursor/create_plan") {
105
+ respond(opts.stdin, msg.id, { approved: true });
106
+ }
107
+ else {
108
+ console.warn("[cursor-api-proxy:acp] auto-responding to unknown %s with empty result", method);
109
+ respond(opts.stdin, msg.id, {});
110
+ }
111
+ return true;
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+ function sendRequest(stdin, nextId, method, params, pending, requestTimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
117
+ const id = nextId.current++;
118
+ const line = JSON.stringify({ jsonrpc: "2.0", id, method, params }) + "\n";
119
+ stdin.write(line, "utf8");
120
+ return new Promise((resolve, reject) => {
121
+ let timerId;
122
+ if (requestTimeoutMs > 0) {
123
+ timerId = setTimeout(() => {
124
+ if (pending.has(id)) {
125
+ pending.delete(id);
126
+ reject(new Error(`ACP ${method} timed out after ${requestTimeoutMs}ms`));
127
+ }
128
+ }, requestTimeoutMs);
129
+ }
130
+ pending.set(id, {
131
+ resolve: (v) => {
132
+ if (timerId)
133
+ clearTimeout(timerId);
134
+ resolve(v);
135
+ },
136
+ reject: (e) => {
137
+ if (timerId)
138
+ clearTimeout(timerId);
139
+ reject(e);
140
+ },
141
+ timerId,
142
+ });
143
+ });
144
+ }
145
+ function respond(stdin, id, result) {
146
+ const line = JSON.stringify({ jsonrpc: "2.0", id, result }) + "\n";
147
+ stdin.write(line, "utf8");
148
+ }
149
+ /**
150
+ * Run a single prompt via ACP and return the full response (sync).
151
+ * Uses pre-resolved command + args (e.g. node + script on Windows) to avoid spawn EINVAL and DEP0190.
152
+ */
153
+ export function runAcpSync(command, args, prompt, opts) {
154
+ const requestTimeoutMs = opts.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
155
+ return new Promise((resolve, reject) => {
156
+ const child = spawn(command, args, {
157
+ cwd: opts.cwd,
158
+ env: buildAcpSpawnEnv(opts.env),
159
+ stdio: ["pipe", "pipe", "pipe"],
160
+ windowsVerbatimArguments: opts.spawnOptions?.windowsVerbatimArguments,
161
+ });
162
+ trackChildProcess(child);
163
+ let stderr = "";
164
+ let accumulated = "";
165
+ let resolved = false;
166
+ const onAbort = () => {
167
+ try {
168
+ child.kill("SIGTERM");
169
+ }
170
+ catch {
171
+ /* ignore */
172
+ }
173
+ };
174
+ if (opts.signal) {
175
+ if (opts.signal.aborted)
176
+ onAbort();
177
+ else
178
+ opts.signal.addEventListener("abort", onAbort, { once: true });
179
+ }
180
+ const finish = (code) => {
181
+ if (resolved)
182
+ return;
183
+ resolved = true;
184
+ opts.signal?.removeEventListener("abort", onAbort);
185
+ const exitErr = new Error(`ACP child exited with code ${code}`);
186
+ for (const [id, waiter] of Array.from(pending.entries())) {
187
+ pending.delete(id);
188
+ if (waiter.timerId)
189
+ clearTimeout(waiter.timerId);
190
+ waiter.reject(exitErr);
191
+ }
192
+ try {
193
+ child.stdin?.end();
194
+ child.kill("SIGKILL");
195
+ }
196
+ catch {
197
+ /* ignore */
198
+ }
199
+ resolve({
200
+ code,
201
+ stdout: accumulated.trim(),
202
+ stderr: stderr.trim(),
203
+ });
204
+ };
205
+ const timeout = opts.timeoutMs > 0
206
+ ? setTimeout(() => {
207
+ finish(124); // timeout exit code
208
+ }, opts.timeoutMs)
209
+ : undefined;
210
+ child.stderr?.setEncoding("utf8");
211
+ child.stderr?.on("data", (chunk) => (stderr += chunk));
212
+ const nextId = { current: 1 };
213
+ const pending = new Map();
214
+ const rl = readline.createInterface({ input: child.stdout });
215
+ rl.on("line", (line) => {
216
+ try {
217
+ if (opts.rawDebug) {
218
+ debugAcp("ACP raw: %s", line);
219
+ }
220
+ const msg = JSON.parse(line);
221
+ if (msg.id != null && (msg.result !== undefined || msg.error !== undefined)) {
222
+ const waiter = pending.get(msg.id);
223
+ if (waiter) {
224
+ pending.delete(msg.id);
225
+ if (msg.error) {
226
+ waiter.reject(new Error(msg.error.message ?? "ACP error"));
227
+ }
228
+ else {
229
+ waiter.resolve(msg.result);
230
+ }
231
+ }
232
+ return;
233
+ }
234
+ handleAcpNotification(msg, {
235
+ rawDebug: opts.rawDebug,
236
+ stdin: child.stdin,
237
+ onAgentTextChunk: (text) => {
238
+ accumulated += text;
239
+ },
240
+ });
241
+ }
242
+ catch {
243
+ /* ignore parse errors */
244
+ }
245
+ });
246
+ child.on("error", (err) => {
247
+ if (timeout)
248
+ clearTimeout(timeout);
249
+ opts.signal?.removeEventListener("abort", onAbort);
250
+ if (!resolved) {
251
+ resolved = true;
252
+ reject(err);
253
+ }
254
+ });
255
+ child.on("close", (code) => {
256
+ if (timeout)
257
+ clearTimeout(timeout);
258
+ finish(code ?? 1);
259
+ });
260
+ const run = async () => {
261
+ if (!child.stdin) {
262
+ finish(1);
263
+ return;
264
+ }
265
+ try {
266
+ debugAcp("ACP step: initialize");
267
+ await sendRequest(child.stdin, nextId, "initialize", {
268
+ protocolVersion: 1,
269
+ clientCapabilities: {
270
+ fs: { readTextFile: false, writeTextFile: false },
271
+ terminal: false,
272
+ },
273
+ clientInfo: { name: "cursor-api-proxy", version: "0.1.0" },
274
+ }, pending, requestTimeoutMs);
275
+ if (!opts.skipAuthenticate) {
276
+ debugAcp("ACP step: authenticate");
277
+ await sendRequest(child.stdin, nextId, "authenticate", {
278
+ methodId: "cursor_login",
279
+ }, pending, requestTimeoutMs);
280
+ }
281
+ else {
282
+ debugAcp("ACP step: authenticate (skipped, pre-authenticated)");
283
+ }
284
+ debugAcp("ACP step: session/new");
285
+ const sessionResult = (await sendRequest(child.stdin, nextId, "session/new", { cwd: opts.cwd, mcpServers: [] }, pending, requestTimeoutMs));
286
+ const sessionId = sessionResult?.sessionId;
287
+ if (!sessionId) {
288
+ finish(1);
289
+ return;
290
+ }
291
+ if (opts.model) {
292
+ debugAcp("ACP step: session/set_config_option (model)");
293
+ await sendRequest(child.stdin, nextId, "session/set_config_option", { sessionId, option: "model", value: opts.model }, pending, requestTimeoutMs);
294
+ }
295
+ debugAcp("ACP step: session/prompt");
296
+ await sendRequest(child.stdin, nextId, "session/prompt", {
297
+ sessionId,
298
+ prompt: [{ type: "text", text: prompt }],
299
+ }, pending, requestTimeoutMs);
300
+ if (accumulated.length === 0) {
301
+ debugAcp("ACP sync: no content accumulated; stderr tail: %s", stderr.slice(-500));
302
+ }
303
+ finish(0);
304
+ }
305
+ catch {
306
+ if (timeout)
307
+ clearTimeout(timeout);
308
+ if (!resolved) {
309
+ resolved = true;
310
+ finish(1);
311
+ }
312
+ }
313
+ };
314
+ run();
315
+ });
316
+ }
317
+ /**
318
+ * Run a single prompt via ACP and stream response chunks via onChunk.
319
+ */
320
+ export function runAcpStream(command, args, prompt, opts, onChunk) {
321
+ const requestTimeoutMs = opts.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
322
+ return new Promise((resolve, reject) => {
323
+ const child = spawn(command, args, {
324
+ cwd: opts.cwd,
325
+ env: buildAcpSpawnEnv(opts.env),
326
+ stdio: ["pipe", "pipe", "pipe"],
327
+ windowsVerbatimArguments: opts.spawnOptions?.windowsVerbatimArguments,
328
+ });
329
+ trackChildProcess(child);
330
+ let stderr = "";
331
+ let resolved = false;
332
+ const onAbort = () => {
333
+ try {
334
+ child.kill("SIGTERM");
335
+ }
336
+ catch {
337
+ /* ignore */
338
+ }
339
+ };
340
+ if (opts.signal) {
341
+ if (opts.signal.aborted)
342
+ onAbort();
343
+ else
344
+ opts.signal.addEventListener("abort", onAbort, { once: true });
345
+ }
346
+ const finish = (code) => {
347
+ if (resolved)
348
+ return;
349
+ resolved = true;
350
+ opts.signal?.removeEventListener("abort", onAbort);
351
+ const exitErr = new Error(`ACP child exited with code ${code}`);
352
+ for (const [id, waiter] of Array.from(pending.entries())) {
353
+ pending.delete(id);
354
+ if (waiter.timerId)
355
+ clearTimeout(waiter.timerId);
356
+ waiter.reject(exitErr);
357
+ }
358
+ try {
359
+ child.stdin?.end();
360
+ child.kill("SIGKILL");
361
+ }
362
+ catch {
363
+ /* ignore */
364
+ }
365
+ resolve({ code, stderr: stderr.trim() });
366
+ };
367
+ const timeout = opts.timeoutMs > 0
368
+ ? setTimeout(() => finish(124), opts.timeoutMs)
369
+ : undefined;
370
+ child.stderr?.setEncoding("utf8");
371
+ child.stderr?.on("data", (chunk) => (stderr += chunk));
372
+ const nextId = { current: 1 };
373
+ const pending = new Map();
374
+ const rl = readline.createInterface({ input: child.stdout });
375
+ rl.on("line", (line) => {
376
+ try {
377
+ if (opts.rawDebug) {
378
+ debugAcp("ACP raw: %s", line);
379
+ }
380
+ const msg = JSON.parse(line);
381
+ if (msg.id != null && (msg.result !== undefined || msg.error !== undefined)) {
382
+ const waiter = pending.get(msg.id);
383
+ if (waiter) {
384
+ pending.delete(msg.id);
385
+ if (msg.error) {
386
+ waiter.reject(new Error(msg.error.message ?? "ACP error"));
387
+ }
388
+ else {
389
+ waiter.resolve(msg.result);
390
+ }
391
+ }
392
+ return;
393
+ }
394
+ handleAcpNotification(msg, {
395
+ rawDebug: opts.rawDebug,
396
+ stdin: child.stdin,
397
+ onAgentTextChunk: onChunk,
398
+ });
399
+ }
400
+ catch {
401
+ /* ignore */
402
+ }
403
+ });
404
+ child.on("error", (err) => {
405
+ if (timeout)
406
+ clearTimeout(timeout);
407
+ opts.signal?.removeEventListener("abort", onAbort);
408
+ if (!resolved) {
409
+ resolved = true;
410
+ reject(err);
411
+ }
412
+ });
413
+ child.on("close", (code) => {
414
+ if (timeout)
415
+ clearTimeout(timeout);
416
+ finish(code ?? 1);
417
+ });
418
+ const run = async () => {
419
+ if (!child.stdin) {
420
+ finish(1);
421
+ return;
422
+ }
423
+ try {
424
+ debugAcp("ACP step: initialize");
425
+ await sendRequest(child.stdin, nextId, "initialize", {
426
+ protocolVersion: 1,
427
+ clientCapabilities: {
428
+ fs: { readTextFile: false, writeTextFile: false },
429
+ terminal: false,
430
+ },
431
+ clientInfo: { name: "cursor-api-proxy", version: "0.1.0" },
432
+ }, pending, requestTimeoutMs);
433
+ if (!opts.skipAuthenticate) {
434
+ debugAcp("ACP step: authenticate");
435
+ await sendRequest(child.stdin, nextId, "authenticate", {
436
+ methodId: "cursor_login",
437
+ }, pending, requestTimeoutMs);
438
+ }
439
+ else {
440
+ debugAcp("ACP step: authenticate (skipped, pre-authenticated)");
441
+ }
442
+ debugAcp("ACP step: session/new");
443
+ const sessionResult = (await sendRequest(child.stdin, nextId, "session/new", { cwd: opts.cwd, mcpServers: [] }, pending, requestTimeoutMs));
444
+ const sessionId = sessionResult?.sessionId;
445
+ if (!sessionId) {
446
+ finish(1);
447
+ return;
448
+ }
449
+ if (opts.model) {
450
+ debugAcp("ACP step: session/set_config_option (model)");
451
+ await sendRequest(child.stdin, nextId, "session/set_config_option", { sessionId, option: "model", value: opts.model }, pending, requestTimeoutMs);
452
+ }
453
+ debugAcp("ACP step: session/prompt");
454
+ await sendRequest(child.stdin, nextId, "session/prompt", {
455
+ sessionId,
456
+ prompt: [{ type: "text", text: prompt }],
457
+ }, pending, requestTimeoutMs);
458
+ finish(0);
459
+ }
460
+ catch {
461
+ if (timeout)
462
+ clearTimeout(timeout);
463
+ if (!resolved) {
464
+ resolved = true;
465
+ finish(1);
466
+ }
467
+ }
468
+ };
469
+ run();
470
+ });
471
+ }
472
+ //# sourceMappingURL=acp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-client.js","sourceRoot":"","sources":["../../src/lib/acp-client.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  import type { BridgeConfig } from "./config.js";
2
+ /**
3
+ * CLI flags and options for the Cursor agent, excluding the final prompt argument.
4
+ */
5
+ export declare function buildAgentFixedArgs(config: BridgeConfig, workspaceDir: string, model: string, stream: boolean): string[];
2
6
  /**
3
7
  * Build CLI arguments for running the Cursor agent.
4
8
  */
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Build CLI arguments for running the Cursor agent.
2
+ * CLI flags and options for the Cursor agent, excluding the final prompt argument.
3
3
  */
4
- export function buildAgentCmdArgs(config, workspaceDir, model, prompt, stream) {
4
+ export function buildAgentFixedArgs(config, workspaceDir, model, stream) {
5
5
  const args = ["--print"];
6
6
  if (config.approveMcps)
7
7
  args.push("--approve-mcps");
@@ -18,7 +18,12 @@ export function buildAgentCmdArgs(config, workspaceDir, model, prompt, stream) {
18
18
  else {
19
19
  args.push("--output-format", "text");
20
20
  }
21
- args.push(prompt);
22
21
  return args;
23
22
  }
23
+ /**
24
+ * Build CLI arguments for running the Cursor agent.
25
+ */
26
+ export function buildAgentCmdArgs(config, workspaceDir, model, prompt, stream) {
27
+ return [...buildAgentFixedArgs(config, workspaceDir, model, stream), prompt];
28
+ }
24
29
  //# sourceMappingURL=agent-cmd-args.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-cmd-args.js","sourceRoot":"","sources":["../../src/lib/agent-cmd-args.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,MAAc,EACd,MAAe;IAEf,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,IAAI,MAAM,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,iBAAiB;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"agent-cmd-args.js","sourceRoot":"","sources":["../../src/lib/agent-cmd-args.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,MAAe;IAEf,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,IAAI,MAAM,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,iBAAiB;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAoB,EACpB,YAAoB,EACpB,KAAa,EACb,MAAc,EACd,MAAe;IAEf,OAAO,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/E,CAAC"}
@@ -4,9 +4,9 @@ export type AgentRunResult = {
4
4
  stdout: string;
5
5
  stderr: string;
6
6
  };
7
- export declare function runAgentSync(config: BridgeConfig, workspaceDir: string, cmdArgs: string[], tempDir?: string, configDir?: string, signal?: AbortSignal): Promise<AgentRunResult>;
7
+ export declare function runAgentSync(config: BridgeConfig, workspaceDir: string, cmdArgs: string[], tempDir?: string, stdinPrompt?: string, configDir?: string, signal?: AbortSignal): Promise<AgentRunResult>;
8
8
  export type StreamLineHandler = (line: string) => void;
9
- export declare function runAgentStream(config: BridgeConfig, workspaceDir: string, cmdArgs: string[], onLine: StreamLineHandler, tempDir?: string, configDir?: string, signal?: AbortSignal): Promise<{
9
+ export declare function runAgentStream(config: BridgeConfig, workspaceDir: string, cmdArgs: string[], onLine: StreamLineHandler, tempDir?: string, stdinPrompt?: string, configDir?: string, signal?: AbortSignal): Promise<{
10
10
  code: number;
11
11
  stderr: string;
12
12
  }>;