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