cursor-composer-in-claude 0.7.3

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 (104) hide show
  1. package/README.md +303 -0
  2. package/dist/cli/accounts.d.ts +18 -0
  3. package/dist/cli/accounts.js +149 -0
  4. package/dist/cli/accounts.js.map +1 -0
  5. package/dist/cli/args.d.ts +14 -0
  6. package/dist/cli/args.js +93 -0
  7. package/dist/cli/args.js.map +1 -0
  8. package/dist/cli/constants.d.ts +1 -0
  9. package/dist/cli/constants.js +4 -0
  10. package/dist/cli/constants.js.map +1 -0
  11. package/dist/cli/login.d.ts +1 -0
  12. package/dist/cli/login.js +143 -0
  13. package/dist/cli/login.js.map +1 -0
  14. package/dist/cli/reset-hwid.d.ts +24 -0
  15. package/dist/cli/reset-hwid.js +286 -0
  16. package/dist/cli/reset-hwid.js.map +1 -0
  17. package/dist/cli/usage.d.ts +27 -0
  18. package/dist/cli/usage.js +177 -0
  19. package/dist/cli/usage.js.map +1 -0
  20. package/dist/cli.d.ts +2 -0
  21. package/dist/cli.js +58 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/client.d.ts +95 -0
  24. package/dist/client.js +316 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/lib/account-pool.d.ts +35 -0
  27. package/dist/lib/account-pool.js +143 -0
  28. package/dist/lib/account-pool.js.map +1 -0
  29. package/dist/lib/acp-client.d.ts +53 -0
  30. package/dist/lib/acp-client.js +517 -0
  31. package/dist/lib/acp-client.js.map +1 -0
  32. package/dist/lib/agent-cmd-args.d.ts +9 -0
  33. package/dist/lib/agent-cmd-args.js +29 -0
  34. package/dist/lib/agent-cmd-args.js.map +1 -0
  35. package/dist/lib/agent-runner.d.ts +12 -0
  36. package/dist/lib/agent-runner.js +144 -0
  37. package/dist/lib/agent-runner.js.map +1 -0
  38. package/dist/lib/anthropic.d.ts +26 -0
  39. package/dist/lib/anthropic.js +70 -0
  40. package/dist/lib/anthropic.js.map +1 -0
  41. package/dist/lib/cli-stream-parser.d.ts +8 -0
  42. package/dist/lib/cli-stream-parser.js +46 -0
  43. package/dist/lib/cli-stream-parser.js.map +1 -0
  44. package/dist/lib/config.d.ts +52 -0
  45. package/dist/lib/config.js +47 -0
  46. package/dist/lib/config.js.map +1 -0
  47. package/dist/lib/cursor-cli.d.ts +9 -0
  48. package/dist/lib/cursor-cli.js +30 -0
  49. package/dist/lib/cursor-cli.js.map +1 -0
  50. package/dist/lib/env.d.ts +54 -0
  51. package/dist/lib/env.js +247 -0
  52. package/dist/lib/env.js.map +1 -0
  53. package/dist/lib/handlers/anthropic-messages.d.ts +9 -0
  54. package/dist/lib/handlers/anthropic-messages.js +281 -0
  55. package/dist/lib/handlers/anthropic-messages.js.map +1 -0
  56. package/dist/lib/handlers/chat-completions.d.ts +9 -0
  57. package/dist/lib/handlers/chat-completions.js +275 -0
  58. package/dist/lib/handlers/chat-completions.js.map +1 -0
  59. package/dist/lib/handlers/health.d.ts +7 -0
  60. package/dist/lib/handlers/health.js +15 -0
  61. package/dist/lib/handlers/health.js.map +1 -0
  62. package/dist/lib/handlers/models.d.ts +15 -0
  63. package/dist/lib/handlers/models.js +44 -0
  64. package/dist/lib/handlers/models.js.map +1 -0
  65. package/dist/lib/http.d.ts +5 -0
  66. package/dist/lib/http.js +36 -0
  67. package/dist/lib/http.js.map +1 -0
  68. package/dist/lib/max-mode-preflight.d.ts +5 -0
  69. package/dist/lib/max-mode-preflight.js +62 -0
  70. package/dist/lib/max-mode-preflight.js.map +1 -0
  71. package/dist/lib/model-map.d.ts +17 -0
  72. package/dist/lib/model-map.js +62 -0
  73. package/dist/lib/model-map.js.map +1 -0
  74. package/dist/lib/openai.d.ts +17 -0
  75. package/dist/lib/openai.js +111 -0
  76. package/dist/lib/openai.js.map +1 -0
  77. package/dist/lib/process.d.ts +32 -0
  78. package/dist/lib/process.js +174 -0
  79. package/dist/lib/process.js.map +1 -0
  80. package/dist/lib/request-listener.d.ts +7 -0
  81. package/dist/lib/request-listener.js +99 -0
  82. package/dist/lib/request-listener.js.map +1 -0
  83. package/dist/lib/request-log.d.ts +16 -0
  84. package/dist/lib/request-log.js +147 -0
  85. package/dist/lib/request-log.js.map +1 -0
  86. package/dist/lib/resolve-model.d.ts +8 -0
  87. package/dist/lib/resolve-model.js +18 -0
  88. package/dist/lib/resolve-model.js.map +1 -0
  89. package/dist/lib/sanitize.d.ts +21 -0
  90. package/dist/lib/sanitize.js +79 -0
  91. package/dist/lib/sanitize.js.map +1 -0
  92. package/dist/lib/server.d.ts +13 -0
  93. package/dist/lib/server.js +118 -0
  94. package/dist/lib/server.js.map +1 -0
  95. package/dist/lib/token-cache.d.ts +10 -0
  96. package/dist/lib/token-cache.js +35 -0
  97. package/dist/lib/token-cache.js.map +1 -0
  98. package/dist/lib/win-cmdline-limit.d.ts +32 -0
  99. package/dist/lib/win-cmdline-limit.js +92 -0
  100. package/dist/lib/win-cmdline-limit.js.map +1 -0
  101. package/dist/lib/workspace.d.ts +19 -0
  102. package/dist/lib/workspace.js +77 -0
  103. package/dist/lib/workspace.js.map +1 -0
  104. package/package.json +51 -0
@@ -0,0 +1,517 @@
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
+ "CURSOR_SKIP_KEYCHAIN",
35
+ ];
36
+ const out = { CURSOR_SKIP_KEYCHAIN: "1" };
37
+ for (const k of inheritKeys) {
38
+ const v = process.env[k];
39
+ if (v !== undefined)
40
+ out[k] = v;
41
+ }
42
+ if (extra) {
43
+ for (const [k, v] of Object.entries(extra)) {
44
+ if (v !== undefined)
45
+ out[k] = v;
46
+ }
47
+ }
48
+ return out;
49
+ }
50
+ /** Normalise CRLF / stray CR so JSON-RPC lines parse on Windows (avoids silent hangs). */
51
+ function parseAcpStdoutLine(line) {
52
+ const t = line.replace(/\r$/, "").trim();
53
+ if (!t)
54
+ return null;
55
+ try {
56
+ return JSON.parse(t);
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ /**
63
+ * Handle ACP server→client notifications (session/update chunks, permissions, cursor/*).
64
+ * Returns true if the message was consumed as a notification.
65
+ */
66
+ function handleAcpNotification(msg, opts) {
67
+ if (msg.method === "session/update") {
68
+ const update = (msg.params?.update ?? msg.params);
69
+ const content = update?.content;
70
+ const text = typeof content === "object" && content !== null && !Array.isArray(content) && typeof content.text === "string"
71
+ ? content.text
72
+ : Array.isArray(content)
73
+ ? content
74
+ .map((c) => typeof c?.content?.text === "string"
75
+ ? c.content.text
76
+ : typeof c?.text === "string"
77
+ ? c.text
78
+ : "")
79
+ .join("")
80
+ : "";
81
+ const sessionUpdate = update?.sessionUpdate;
82
+ if ((sessionUpdate === "agent_message_chunk" || sessionUpdate === "agent_thought_chunk") &&
83
+ text) {
84
+ opts.onAgentTextChunk?.(text);
85
+ }
86
+ else if (sessionUpdate &&
87
+ sessionUpdate !== "agent_thought_chunk" &&
88
+ sessionUpdate !== "available_commands_update" &&
89
+ sessionUpdate !== "tool_call" &&
90
+ sessionUpdate !== "tool_call_update") {
91
+ debugAcp("session/update (unhandled): %s", JSON.stringify({
92
+ sessionUpdate,
93
+ hasContent: !!content,
94
+ contentKeys: content && typeof content === "object" && !Array.isArray(content) ? Object.keys(content) : [],
95
+ }));
96
+ }
97
+ return true;
98
+ }
99
+ if (msg.method === "session/request_permission") {
100
+ if (msg.id != null && opts.stdin) {
101
+ respond(opts.stdin, msg.id, {
102
+ outcome: { outcome: "selected", optionId: "reject-once" },
103
+ });
104
+ }
105
+ return true;
106
+ }
107
+ if (msg.id != null && msg.method && opts.stdin) {
108
+ const method = String(msg.method);
109
+ if (method.startsWith("cursor/")) {
110
+ const params = msg.params;
111
+ if (method === "cursor/ask_question" && params?.options && Array.isArray(params.options)) {
112
+ const options = params.options;
113
+ const first = options[0];
114
+ console.warn("[cursor-api-proxy:acp] cursor/ask_question auto-selecting first option: id=%s (total=%d)", first?.id ?? "(none)", options.length);
115
+ respond(opts.stdin, msg.id, { selectedId: first?.id ?? "" });
116
+ }
117
+ else if (method === "cursor/create_plan") {
118
+ respond(opts.stdin, msg.id, { approved: true });
119
+ }
120
+ else {
121
+ console.warn("[cursor-api-proxy:acp] auto-responding to unknown %s with empty result", method);
122
+ respond(opts.stdin, msg.id, {});
123
+ }
124
+ return true;
125
+ }
126
+ }
127
+ return false;
128
+ }
129
+ /**
130
+ * Map OpenAI-style display name to Cursor ACP `modelId` (e.g. `composer-2` → `composer-2[fast=true]`).
131
+ * If `availableModels` is missing or empty, returns `displayName` unchanged.
132
+ * If the list is non-empty but no row matches `name`, logs via debug and returns `displayName` (pass-through).
133
+ * Duplicate `name` entries: first match wins.
134
+ */
135
+ export function resolveAcpModelConfigValue(displayName, availableModels) {
136
+ if (!availableModels?.length)
137
+ return displayName;
138
+ const hit = availableModels.find((m) => m.name === displayName);
139
+ if (!hit) {
140
+ debugAcp("ACP model: no catalog match for display name %j; using value as-is", displayName);
141
+ return displayName;
142
+ }
143
+ return hit.modelId;
144
+ }
145
+ function sendRequest(stdin, nextId, method, params, pending, requestTimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
146
+ const id = nextId.current++;
147
+ const line = JSON.stringify({ jsonrpc: "2.0", id, method, params }) + "\n";
148
+ stdin.write(line, "utf8");
149
+ return new Promise((resolve, reject) => {
150
+ let timerId;
151
+ if (requestTimeoutMs > 0) {
152
+ timerId = setTimeout(() => {
153
+ if (pending.has(id)) {
154
+ pending.delete(id);
155
+ reject(new Error(`ACP ${method} timed out after ${requestTimeoutMs}ms`));
156
+ }
157
+ }, requestTimeoutMs);
158
+ }
159
+ pending.set(id, {
160
+ resolve: (v) => {
161
+ if (timerId)
162
+ clearTimeout(timerId);
163
+ resolve(v);
164
+ },
165
+ reject: (e) => {
166
+ if (timerId)
167
+ clearTimeout(timerId);
168
+ reject(e);
169
+ },
170
+ timerId,
171
+ });
172
+ });
173
+ }
174
+ function respond(stdin, id, result) {
175
+ const line = JSON.stringify({ jsonrpc: "2.0", id, result }) + "\n";
176
+ stdin.write(line, "utf8");
177
+ }
178
+ /**
179
+ * Run a single prompt via ACP and return the full response (sync).
180
+ * Uses pre-resolved command + args (e.g. node + script on Windows) to avoid spawn EINVAL and DEP0190.
181
+ */
182
+ export function runAcpSync(command, args, prompt, opts) {
183
+ const requestTimeoutMs = opts.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
184
+ return new Promise((resolve, reject) => {
185
+ const child = spawn(command, args, {
186
+ cwd: opts.cwd,
187
+ env: buildAcpSpawnEnv(opts.env),
188
+ stdio: ["pipe", "pipe", "pipe"],
189
+ windowsVerbatimArguments: opts.spawnOptions?.windowsVerbatimArguments,
190
+ });
191
+ trackChildProcess(child);
192
+ let stderr = "";
193
+ let accumulated = "";
194
+ let resolved = false;
195
+ const onAbort = () => {
196
+ try {
197
+ child.kill("SIGTERM");
198
+ }
199
+ catch {
200
+ /* ignore */
201
+ }
202
+ };
203
+ if (opts.signal) {
204
+ if (opts.signal.aborted)
205
+ onAbort();
206
+ else
207
+ opts.signal.addEventListener("abort", onAbort, { once: true });
208
+ }
209
+ const finish = (code) => {
210
+ if (resolved)
211
+ return;
212
+ resolved = true;
213
+ opts.signal?.removeEventListener("abort", onAbort);
214
+ const exitErr = new Error(`ACP child exited with code ${code}`);
215
+ for (const [id, waiter] of Array.from(pending.entries())) {
216
+ pending.delete(id);
217
+ if (waiter.timerId)
218
+ clearTimeout(waiter.timerId);
219
+ waiter.reject(exitErr);
220
+ }
221
+ try {
222
+ child.stdin?.end();
223
+ child.kill("SIGKILL");
224
+ }
225
+ catch {
226
+ /* ignore */
227
+ }
228
+ resolve({
229
+ code,
230
+ stdout: accumulated.trim(),
231
+ stderr: stderr.trim(),
232
+ });
233
+ };
234
+ const timeout = opts.timeoutMs > 0
235
+ ? setTimeout(() => {
236
+ finish(124); // timeout exit code
237
+ }, opts.timeoutMs)
238
+ : undefined;
239
+ child.stderr?.setEncoding("utf8");
240
+ child.stderr?.on("data", (chunk) => (stderr += chunk));
241
+ const nextId = { current: 1 };
242
+ const pending = new Map();
243
+ const rl = readline.createInterface({ input: child.stdout });
244
+ rl.on("line", (line) => {
245
+ try {
246
+ if (opts.rawDebug) {
247
+ debugAcp("ACP raw: %s", line);
248
+ }
249
+ const msg = parseAcpStdoutLine(line);
250
+ if (!msg)
251
+ return;
252
+ if (msg.id != null && (msg.result !== undefined || msg.error !== undefined)) {
253
+ const reqId = typeof msg.id === "number" ? msg.id : Number(msg.id);
254
+ const waiter = Number.isFinite(reqId) ? pending.get(reqId) : undefined;
255
+ if (waiter) {
256
+ pending.delete(reqId);
257
+ if (msg.error) {
258
+ waiter.reject(new Error(msg.error.message ?? "ACP error"));
259
+ }
260
+ else {
261
+ waiter.resolve(msg.result);
262
+ }
263
+ }
264
+ return;
265
+ }
266
+ handleAcpNotification(msg, {
267
+ rawDebug: opts.rawDebug,
268
+ stdin: child.stdin,
269
+ onAgentTextChunk: (text) => {
270
+ accumulated += text;
271
+ },
272
+ });
273
+ }
274
+ catch {
275
+ /* ignore notification handler errors */
276
+ }
277
+ });
278
+ child.on("error", (err) => {
279
+ if (timeout)
280
+ clearTimeout(timeout);
281
+ opts.signal?.removeEventListener("abort", onAbort);
282
+ if (!resolved) {
283
+ resolved = true;
284
+ reject(err);
285
+ }
286
+ });
287
+ child.on("close", (code) => {
288
+ if (timeout)
289
+ clearTimeout(timeout);
290
+ finish(code ?? 1);
291
+ });
292
+ const run = async () => {
293
+ if (!child.stdin) {
294
+ finish(1);
295
+ return;
296
+ }
297
+ try {
298
+ debugAcp("ACP step: initialize");
299
+ await sendRequest(child.stdin, nextId, "initialize", {
300
+ protocolVersion: 1,
301
+ clientCapabilities: {
302
+ fs: { readTextFile: false, writeTextFile: false },
303
+ terminal: false,
304
+ },
305
+ clientInfo: { name: "cursor-api-proxy", version: "0.1.0" },
306
+ }, pending, requestTimeoutMs);
307
+ if (!opts.skipAuthenticate) {
308
+ debugAcp("ACP step: authenticate");
309
+ await sendRequest(child.stdin, nextId, "authenticate", {
310
+ methodId: "cursor_login",
311
+ }, pending, requestTimeoutMs);
312
+ }
313
+ else {
314
+ debugAcp("ACP step: authenticate (skipped, pre-authenticated)");
315
+ }
316
+ debugAcp("ACP step: session/new");
317
+ const sessionResult = (await sendRequest(child.stdin, nextId, "session/new", { cwd: opts.cwd, mcpServers: [] }, pending, requestTimeoutMs));
318
+ const sessionId = sessionResult?.sessionId;
319
+ if (!sessionId) {
320
+ finish(1);
321
+ return;
322
+ }
323
+ if (opts.model) {
324
+ const resolvedModelId = resolveAcpModelConfigValue(opts.model, sessionResult.models?.availableModels);
325
+ if (resolvedModelId !== "default" && resolvedModelId !== "default[]") {
326
+ debugAcp("ACP step: session/set_config_option (model)");
327
+ await sendRequest(child.stdin, nextId, "session/set_config_option", { sessionId, configId: "model", value: resolvedModelId }, pending, requestTimeoutMs);
328
+ }
329
+ else {
330
+ debugAcp("ACP step: session/set_config_option (model) — skipped, using session default");
331
+ }
332
+ }
333
+ debugAcp("ACP step: session/prompt");
334
+ await sendRequest(child.stdin, nextId, "session/prompt", {
335
+ sessionId,
336
+ prompt: [{ type: "text", text: prompt }],
337
+ }, pending, requestTimeoutMs);
338
+ if (accumulated.length === 0) {
339
+ debugAcp("ACP sync: no content accumulated; stderr tail: %s", stderr.slice(-500));
340
+ }
341
+ finish(0);
342
+ }
343
+ catch {
344
+ if (timeout)
345
+ clearTimeout(timeout);
346
+ if (!resolved) {
347
+ finish(1);
348
+ }
349
+ }
350
+ };
351
+ run();
352
+ });
353
+ }
354
+ /**
355
+ * Run a single prompt via ACP and stream response chunks via onChunk.
356
+ */
357
+ export function runAcpStream(command, args, prompt, opts, onChunk) {
358
+ const requestTimeoutMs = opts.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
359
+ return new Promise((resolve, reject) => {
360
+ const child = spawn(command, args, {
361
+ cwd: opts.cwd,
362
+ env: buildAcpSpawnEnv(opts.env),
363
+ stdio: ["pipe", "pipe", "pipe"],
364
+ windowsVerbatimArguments: opts.spawnOptions?.windowsVerbatimArguments,
365
+ });
366
+ trackChildProcess(child);
367
+ let stderr = "";
368
+ let resolved = false;
369
+ const onAbort = () => {
370
+ try {
371
+ child.kill("SIGTERM");
372
+ }
373
+ catch {
374
+ /* ignore */
375
+ }
376
+ };
377
+ if (opts.signal) {
378
+ if (opts.signal.aborted)
379
+ onAbort();
380
+ else
381
+ opts.signal.addEventListener("abort", onAbort, { once: true });
382
+ }
383
+ const finish = (code) => {
384
+ if (resolved)
385
+ return;
386
+ resolved = true;
387
+ opts.signal?.removeEventListener("abort", onAbort);
388
+ const exitErr = new Error(`ACP child exited with code ${code}`);
389
+ for (const [id, waiter] of Array.from(pending.entries())) {
390
+ pending.delete(id);
391
+ if (waiter.timerId)
392
+ clearTimeout(waiter.timerId);
393
+ waiter.reject(exitErr);
394
+ }
395
+ try {
396
+ child.stdin?.end();
397
+ child.kill("SIGKILL");
398
+ }
399
+ catch {
400
+ /* ignore */
401
+ }
402
+ resolve({ code, stderr: stderr.trim() });
403
+ };
404
+ const timeout = opts.timeoutMs > 0
405
+ ? setTimeout(() => finish(124), opts.timeoutMs)
406
+ : undefined;
407
+ child.stderr?.setEncoding("utf8");
408
+ child.stderr?.on("data", (chunk) => (stderr += chunk));
409
+ const nextId = { current: 1 };
410
+ const pending = new Map();
411
+ const rl = readline.createInterface({ input: child.stdout });
412
+ rl.on("line", (line) => {
413
+ try {
414
+ if (opts.rawDebug) {
415
+ debugAcp("ACP raw: %s", line);
416
+ }
417
+ const msg = parseAcpStdoutLine(line);
418
+ if (!msg)
419
+ return;
420
+ if (msg.id != null && (msg.result !== undefined || msg.error !== undefined)) {
421
+ const reqId = typeof msg.id === "number" ? msg.id : Number(msg.id);
422
+ const waiter = Number.isFinite(reqId) ? pending.get(reqId) : undefined;
423
+ if (waiter) {
424
+ pending.delete(reqId);
425
+ if (msg.error) {
426
+ waiter.reject(new Error(msg.error.message ?? "ACP error"));
427
+ }
428
+ else {
429
+ waiter.resolve(msg.result);
430
+ }
431
+ }
432
+ return;
433
+ }
434
+ handleAcpNotification(msg, {
435
+ rawDebug: opts.rawDebug,
436
+ stdin: child.stdin,
437
+ onAgentTextChunk: onChunk,
438
+ });
439
+ }
440
+ catch {
441
+ /* ignore notification handler errors */
442
+ }
443
+ });
444
+ child.on("error", (err) => {
445
+ if (timeout)
446
+ clearTimeout(timeout);
447
+ opts.signal?.removeEventListener("abort", onAbort);
448
+ if (!resolved) {
449
+ resolved = true;
450
+ reject(err);
451
+ }
452
+ });
453
+ child.on("close", (code) => {
454
+ if (timeout)
455
+ clearTimeout(timeout);
456
+ finish(code ?? 1);
457
+ });
458
+ const run = async () => {
459
+ if (!child.stdin) {
460
+ finish(1);
461
+ return;
462
+ }
463
+ try {
464
+ debugAcp("ACP step: initialize");
465
+ await sendRequest(child.stdin, nextId, "initialize", {
466
+ protocolVersion: 1,
467
+ clientCapabilities: {
468
+ fs: { readTextFile: false, writeTextFile: false },
469
+ terminal: false,
470
+ },
471
+ clientInfo: { name: "cursor-api-proxy", version: "0.1.0" },
472
+ }, pending, requestTimeoutMs);
473
+ if (!opts.skipAuthenticate) {
474
+ debugAcp("ACP step: authenticate");
475
+ await sendRequest(child.stdin, nextId, "authenticate", {
476
+ methodId: "cursor_login",
477
+ }, pending, requestTimeoutMs);
478
+ }
479
+ else {
480
+ debugAcp("ACP step: authenticate (skipped, pre-authenticated)");
481
+ }
482
+ debugAcp("ACP step: session/new");
483
+ const sessionResult = (await sendRequest(child.stdin, nextId, "session/new", { cwd: opts.cwd, mcpServers: [] }, pending, requestTimeoutMs));
484
+ const sessionId = sessionResult?.sessionId;
485
+ if (!sessionId) {
486
+ finish(1);
487
+ return;
488
+ }
489
+ if (opts.model) {
490
+ const resolvedModelId = resolveAcpModelConfigValue(opts.model, sessionResult.models?.availableModels);
491
+ if (resolvedModelId !== "default" && resolvedModelId !== "default[]") {
492
+ debugAcp("ACP step: session/set_config_option (model)");
493
+ await sendRequest(child.stdin, nextId, "session/set_config_option", { sessionId, configId: "model", value: resolvedModelId }, pending, requestTimeoutMs);
494
+ }
495
+ else {
496
+ debugAcp("ACP step: session/set_config_option (model) — skipped, using session default");
497
+ }
498
+ }
499
+ debugAcp("ACP step: session/prompt");
500
+ await sendRequest(child.stdin, nextId, "session/prompt", {
501
+ sessionId,
502
+ prompt: [{ type: "text", text: prompt }],
503
+ }, pending, requestTimeoutMs);
504
+ finish(0);
505
+ }
506
+ catch {
507
+ if (timeout)
508
+ clearTimeout(timeout);
509
+ if (!resolved) {
510
+ finish(1);
511
+ }
512
+ }
513
+ };
514
+ run();
515
+ });
516
+ }
517
+ //# 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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"}
@@ -0,0 +1,9 @@
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[];
6
+ /**
7
+ * Build CLI arguments for running the Cursor agent.
8
+ */
9
+ export declare function buildAgentCmdArgs(config: BridgeConfig, workspaceDir: string, model: string, prompt: string, stream: boolean): string[];
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CLI flags and options for the Cursor agent, excluding the final prompt argument.
3
+ */
4
+ export function buildAgentFixedArgs(config, workspaceDir, model, stream) {
5
+ const args = ["--print"];
6
+ if (config.approveMcps)
7
+ args.push("--approve-mcps");
8
+ if (config.force)
9
+ args.push("--force");
10
+ if (config.chatOnlyWorkspace)
11
+ args.push("--trust");
12
+ args.push("--mode", "ask");
13
+ args.push("--workspace", workspaceDir);
14
+ args.push("--model", model);
15
+ if (stream) {
16
+ args.push("--stream-partial-output", "--output-format", "stream-json");
17
+ }
18
+ else {
19
+ args.push("--output-format", "text");
20
+ }
21
+ return args;
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
+ }
29
+ //# sourceMappingURL=agent-cmd-args.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,12 @@
1
+ import type { BridgeConfig } from "./config.js";
2
+ export type AgentRunResult = {
3
+ code: number;
4
+ stdout: string;
5
+ stderr: string;
6
+ };
7
+ export declare function runAgentSync(config: BridgeConfig, workspaceDir: string, cmdArgs: string[], tempDir?: string, stdinPrompt?: string, configDir?: string, signal?: AbortSignal): Promise<AgentRunResult>;
8
+ export type StreamLineHandler = (line: string) => void;
9
+ export declare function runAgentStream(config: BridgeConfig, workspaceDir: string, cmdArgs: string[], onLine: StreamLineHandler, tempDir?: string, stdinPrompt?: string, configDir?: string, signal?: AbortSignal): Promise<{
10
+ code: number;
11
+ stderr: string;
12
+ }>;