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.
- package/README.md +303 -0
- package/dist/cli/accounts.d.ts +18 -0
- package/dist/cli/accounts.js +149 -0
- package/dist/cli/accounts.js.map +1 -0
- package/dist/cli/args.d.ts +14 -0
- package/dist/cli/args.js +93 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/constants.d.ts +1 -0
- package/dist/cli/constants.js +4 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/login.d.ts +1 -0
- package/dist/cli/login.js +143 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/reset-hwid.d.ts +24 -0
- package/dist/cli/reset-hwid.js +286 -0
- package/dist/cli/reset-hwid.js.map +1 -0
- package/dist/cli/usage.d.ts +27 -0
- package/dist/cli/usage.js +177 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +58 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +95 -0
- package/dist/client.js +316 -0
- package/dist/client.js.map +1 -0
- package/dist/lib/account-pool.d.ts +35 -0
- package/dist/lib/account-pool.js +143 -0
- package/dist/lib/account-pool.js.map +1 -0
- package/dist/lib/acp-client.d.ts +53 -0
- package/dist/lib/acp-client.js +517 -0
- package/dist/lib/acp-client.js.map +1 -0
- package/dist/lib/agent-cmd-args.d.ts +9 -0
- package/dist/lib/agent-cmd-args.js +29 -0
- package/dist/lib/agent-cmd-args.js.map +1 -0
- package/dist/lib/agent-runner.d.ts +12 -0
- package/dist/lib/agent-runner.js +144 -0
- package/dist/lib/agent-runner.js.map +1 -0
- package/dist/lib/anthropic.d.ts +26 -0
- package/dist/lib/anthropic.js +70 -0
- package/dist/lib/anthropic.js.map +1 -0
- package/dist/lib/cli-stream-parser.d.ts +8 -0
- package/dist/lib/cli-stream-parser.js +46 -0
- package/dist/lib/cli-stream-parser.js.map +1 -0
- package/dist/lib/config.d.ts +52 -0
- package/dist/lib/config.js +47 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/cursor-cli.d.ts +9 -0
- package/dist/lib/cursor-cli.js +30 -0
- package/dist/lib/cursor-cli.js.map +1 -0
- package/dist/lib/env.d.ts +54 -0
- package/dist/lib/env.js +247 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/handlers/anthropic-messages.d.ts +9 -0
- package/dist/lib/handlers/anthropic-messages.js +281 -0
- package/dist/lib/handlers/anthropic-messages.js.map +1 -0
- package/dist/lib/handlers/chat-completions.d.ts +9 -0
- package/dist/lib/handlers/chat-completions.js +275 -0
- package/dist/lib/handlers/chat-completions.js.map +1 -0
- package/dist/lib/handlers/health.d.ts +7 -0
- package/dist/lib/handlers/health.js +15 -0
- package/dist/lib/handlers/health.js.map +1 -0
- package/dist/lib/handlers/models.d.ts +15 -0
- package/dist/lib/handlers/models.js +44 -0
- package/dist/lib/handlers/models.js.map +1 -0
- package/dist/lib/http.d.ts +5 -0
- package/dist/lib/http.js +36 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/max-mode-preflight.d.ts +5 -0
- package/dist/lib/max-mode-preflight.js +62 -0
- package/dist/lib/max-mode-preflight.js.map +1 -0
- package/dist/lib/model-map.d.ts +17 -0
- package/dist/lib/model-map.js +62 -0
- package/dist/lib/model-map.js.map +1 -0
- package/dist/lib/openai.d.ts +17 -0
- package/dist/lib/openai.js +111 -0
- package/dist/lib/openai.js.map +1 -0
- package/dist/lib/process.d.ts +32 -0
- package/dist/lib/process.js +174 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/request-listener.d.ts +7 -0
- package/dist/lib/request-listener.js +99 -0
- package/dist/lib/request-listener.js.map +1 -0
- package/dist/lib/request-log.d.ts +16 -0
- package/dist/lib/request-log.js +147 -0
- package/dist/lib/request-log.js.map +1 -0
- package/dist/lib/resolve-model.d.ts +8 -0
- package/dist/lib/resolve-model.js +18 -0
- package/dist/lib/resolve-model.js.map +1 -0
- package/dist/lib/sanitize.d.ts +21 -0
- package/dist/lib/sanitize.js +79 -0
- package/dist/lib/sanitize.js.map +1 -0
- package/dist/lib/server.d.ts +13 -0
- package/dist/lib/server.js +118 -0
- package/dist/lib/server.js.map +1 -0
- package/dist/lib/token-cache.d.ts +10 -0
- package/dist/lib/token-cache.js +35 -0
- package/dist/lib/token-cache.js.map +1 -0
- package/dist/lib/win-cmdline-limit.d.ts +32 -0
- package/dist/lib/win-cmdline-limit.js +92 -0
- package/dist/lib/win-cmdline-limit.js.map +1 -0
- package/dist/lib/workspace.d.ts +19 -0
- package/dist/lib/workspace.js +77 -0
- package/dist/lib/workspace.js.map +1 -0
- package/package.json +51 -0
package/dist/lib/env.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
function getEnvSource(env) {
|
|
4
|
+
return env ?? process.env;
|
|
5
|
+
}
|
|
6
|
+
function getCwd(cwd) {
|
|
7
|
+
return cwd ?? process.cwd();
|
|
8
|
+
}
|
|
9
|
+
function firstDefined(env, names) {
|
|
10
|
+
for (const name of names) {
|
|
11
|
+
const value = env[name];
|
|
12
|
+
if (value != null)
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
function envString(env, names) {
|
|
18
|
+
const value = firstDefined(env, names);
|
|
19
|
+
if (value == null)
|
|
20
|
+
return undefined;
|
|
21
|
+
const trimmed = value.trim();
|
|
22
|
+
return trimmed ? trimmed : undefined;
|
|
23
|
+
}
|
|
24
|
+
function envBool(env, names, defaultValue) {
|
|
25
|
+
const raw = envString(env, names);
|
|
26
|
+
if (raw == null)
|
|
27
|
+
return defaultValue;
|
|
28
|
+
const value = raw.toLowerCase();
|
|
29
|
+
if (value === "1" || value === "true" || value === "yes" || value === "on")
|
|
30
|
+
return true;
|
|
31
|
+
if (value === "0" || value === "false" || value === "no" || value === "off")
|
|
32
|
+
return false;
|
|
33
|
+
return defaultValue;
|
|
34
|
+
}
|
|
35
|
+
function envNumber(env, names, defaultValue) {
|
|
36
|
+
const raw = envString(env, names);
|
|
37
|
+
if (raw == null)
|
|
38
|
+
return defaultValue;
|
|
39
|
+
const value = Number(raw);
|
|
40
|
+
return Number.isFinite(value) ? value : defaultValue;
|
|
41
|
+
}
|
|
42
|
+
function normalizeModelId(raw) {
|
|
43
|
+
if (!raw)
|
|
44
|
+
return "default";
|
|
45
|
+
const parts = raw.split("/");
|
|
46
|
+
return parts[parts.length - 1] || "default";
|
|
47
|
+
}
|
|
48
|
+
function resolveAbsolutePath(raw, cwd) {
|
|
49
|
+
if (!raw)
|
|
50
|
+
return undefined;
|
|
51
|
+
return path.resolve(cwd, raw);
|
|
52
|
+
}
|
|
53
|
+
/** Version dir name format: YYYY.MM.DD-commit (matches cursor-agent.ps1). */
|
|
54
|
+
const VERSION_DIR_REGEX = /^(\d{4})\.(\d{1,2})\.(\d{1,2})-[a-f0-9]+$/;
|
|
55
|
+
function parseVersionToInt(name) {
|
|
56
|
+
const m = name.match(VERSION_DIR_REGEX);
|
|
57
|
+
if (!m)
|
|
58
|
+
return 0;
|
|
59
|
+
const [, year, month, day] = m;
|
|
60
|
+
const y = year.padStart(4, "0");
|
|
61
|
+
const mo = month.padStart(2, "0");
|
|
62
|
+
const d = day.padStart(2, "0");
|
|
63
|
+
return parseInt(y + mo + d, 10);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Find the latest version directory under dir/versions/ (e.g. cursor-agent/versions/2026.03.11-6dfa30c).
|
|
67
|
+
* Returns the full path to the version dir, or undefined if none found.
|
|
68
|
+
*/
|
|
69
|
+
function findLatestVersionDir(dir) {
|
|
70
|
+
const versionsDir = path.join(dir, "versions");
|
|
71
|
+
if (!fs.existsSync(versionsDir) || !fs.statSync(versionsDir).isDirectory()) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const entries = fs.readdirSync(versionsDir, { withFileTypes: true });
|
|
75
|
+
const versionDirs = entries
|
|
76
|
+
.filter((e) => e.isDirectory() && VERSION_DIR_REGEX.test(e.name))
|
|
77
|
+
.sort((a, b) => parseVersionToInt(b.name) - parseVersionToInt(a.name));
|
|
78
|
+
if (versionDirs.length === 0)
|
|
79
|
+
return undefined;
|
|
80
|
+
return path.join(versionsDir, versionDirs[0].name);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Auto-discovers configuration directories located inside ~/.cursor-api-proxy/accounts/
|
|
84
|
+
*/
|
|
85
|
+
function isAuthenticatedAccountDir(dir) {
|
|
86
|
+
const configFile = path.join(dir, "cli-config.json");
|
|
87
|
+
if (!fs.existsSync(configFile))
|
|
88
|
+
return false;
|
|
89
|
+
try {
|
|
90
|
+
const config = JSON.parse(fs.readFileSync(configFile, "utf-8"));
|
|
91
|
+
return Boolean(config?.authInfo?.email);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function discoverAccountDirs(homeDir) {
|
|
98
|
+
if (!homeDir)
|
|
99
|
+
return [];
|
|
100
|
+
const accountsDir = path.join(homeDir, ".cursor-api-proxy", "accounts");
|
|
101
|
+
if (!fs.existsSync(accountsDir))
|
|
102
|
+
return [];
|
|
103
|
+
try {
|
|
104
|
+
const entries = fs.readdirSync(accountsDir, { withFileTypes: true });
|
|
105
|
+
return entries
|
|
106
|
+
.filter((e) => e.isDirectory())
|
|
107
|
+
.map((e) => path.join(accountsDir, e.name))
|
|
108
|
+
.filter(isAuthenticatedAccountDir);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export function loadEnvConfig(opts = {}) {
|
|
115
|
+
const env = getEnvSource(opts.env);
|
|
116
|
+
const cwd = getCwd(opts.cwd);
|
|
117
|
+
const host = envString(env, ["CURSOR_BRIDGE_HOST"]) ??
|
|
118
|
+
(opts.tailscale ? "0.0.0.0" : "127.0.0.1");
|
|
119
|
+
const portValue = envNumber(env, ["CURSOR_BRIDGE_PORT"], 8765);
|
|
120
|
+
const port = Number.isFinite(portValue) && portValue > 0 ? portValue : 8765;
|
|
121
|
+
const home = envString(env, ["HOME", "USERPROFILE"]);
|
|
122
|
+
const sessionsLogPath = (() => {
|
|
123
|
+
const explicit = resolveAbsolutePath(envString(env, ["CURSOR_BRIDGE_SESSIONS_LOG"]), cwd);
|
|
124
|
+
if (explicit)
|
|
125
|
+
return explicit;
|
|
126
|
+
if (home)
|
|
127
|
+
return path.join(home, ".cursor-api-proxy", "sessions.log");
|
|
128
|
+
return path.join(cwd, "sessions.log");
|
|
129
|
+
})();
|
|
130
|
+
const force = envBool(env, ["CURSOR_BRIDGE_FORCE"], false);
|
|
131
|
+
const rawConfigDirs = envString(env, [
|
|
132
|
+
"CURSOR_CONFIG_DIRS",
|
|
133
|
+
"CURSOR_ACCOUNT_DIRS",
|
|
134
|
+
]);
|
|
135
|
+
let configDirs = rawConfigDirs
|
|
136
|
+
? rawConfigDirs
|
|
137
|
+
.split(",")
|
|
138
|
+
.map((d) => resolveAbsolutePath(d.trim(), cwd))
|
|
139
|
+
.filter((d) => d !== undefined)
|
|
140
|
+
: [];
|
|
141
|
+
if (configDirs.length === 0) {
|
|
142
|
+
configDirs = discoverAccountDirs(home);
|
|
143
|
+
}
|
|
144
|
+
const winCmdlineRaw = envNumber(env, ["CURSOR_BRIDGE_WIN_CMDLINE_MAX"], 30_000);
|
|
145
|
+
const winCmdlineMax = Math.min(32_700, Math.max(4096, Number.isFinite(winCmdlineRaw) ? winCmdlineRaw : 30_000));
|
|
146
|
+
return {
|
|
147
|
+
agentBin: envString(env, [
|
|
148
|
+
"CURSOR_AGENT_BIN",
|
|
149
|
+
"CURSOR_CLI_BIN",
|
|
150
|
+
"CURSOR_CLI_PATH",
|
|
151
|
+
]) ?? "agent",
|
|
152
|
+
agentNode: envString(env, ["CURSOR_AGENT_NODE"]),
|
|
153
|
+
agentScript: envString(env, ["CURSOR_AGENT_SCRIPT"]),
|
|
154
|
+
commandShell: envString(env, ["COMSPEC"]) ?? "cmd.exe",
|
|
155
|
+
host,
|
|
156
|
+
port,
|
|
157
|
+
requiredKey: envString(env, ["CURSOR_BRIDGE_API_KEY"]),
|
|
158
|
+
defaultModel: normalizeModelId(envString(env, ["CURSOR_BRIDGE_DEFAULT_MODEL"])),
|
|
159
|
+
force,
|
|
160
|
+
approveMcps: envBool(env, ["CURSOR_BRIDGE_APPROVE_MCPS"], false),
|
|
161
|
+
strictModel: envBool(env, ["CURSOR_BRIDGE_STRICT_MODEL"], true),
|
|
162
|
+
workspace: resolveAbsolutePath(envString(env, ["CURSOR_BRIDGE_WORKSPACE"]), cwd) ??
|
|
163
|
+
cwd,
|
|
164
|
+
timeoutMs: envNumber(env, ["CURSOR_BRIDGE_TIMEOUT_MS"], 300_000),
|
|
165
|
+
tlsCertPath: resolveAbsolutePath(envString(env, ["CURSOR_BRIDGE_TLS_CERT"]), cwd),
|
|
166
|
+
tlsKeyPath: resolveAbsolutePath(envString(env, ["CURSOR_BRIDGE_TLS_KEY"]), cwd),
|
|
167
|
+
sessionsLogPath,
|
|
168
|
+
chatOnlyWorkspace: envBool(env, ["CURSOR_BRIDGE_CHAT_ONLY_WORKSPACE"], true),
|
|
169
|
+
verbose: envBool(env, ["CURSOR_BRIDGE_VERBOSE"], false),
|
|
170
|
+
maxMode: envBool(env, ["CURSOR_BRIDGE_MAX_MODE"], false),
|
|
171
|
+
promptViaStdin: envBool(env, ["CURSOR_BRIDGE_PROMPT_VIA_STDIN"], false),
|
|
172
|
+
useAcp: envBool(env, ["CURSOR_BRIDGE_USE_ACP"], false),
|
|
173
|
+
configDirs,
|
|
174
|
+
multiPort: envBool(env, ["CURSOR_BRIDGE_MULTI_PORT"], false),
|
|
175
|
+
winCmdlineMax,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
export function resolveAgentCommand(cmd, args, opts = {}) {
|
|
179
|
+
const env = getEnvSource(opts.env);
|
|
180
|
+
const loaded = loadEnvConfig(opts);
|
|
181
|
+
const platform = opts.platform ?? process.platform;
|
|
182
|
+
const cwd = getCwd(opts.cwd);
|
|
183
|
+
// Windows: CURSOR_AGENT_NODE+SCRIPT bypasses cmd.exe's ~8191 char limit.
|
|
184
|
+
// Unix: same vars let the host override the agent's bundled node (avoids
|
|
185
|
+
// segfaults with --list-models on some macOS installs).
|
|
186
|
+
if (loaded.agentNode && loaded.agentScript) {
|
|
187
|
+
const agentScriptPath = path.isAbsolute(loaded.agentScript)
|
|
188
|
+
? loaded.agentScript
|
|
189
|
+
: path.resolve(cwd, loaded.agentScript);
|
|
190
|
+
const invoker = platform === "win32" ? "agent.cmd" : "agent";
|
|
191
|
+
return {
|
|
192
|
+
command: loaded.agentNode,
|
|
193
|
+
args: [loaded.agentScript, ...args],
|
|
194
|
+
env: { ...env, CURSOR_INVOKED_AS: invoker },
|
|
195
|
+
agentScriptPath,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
if (platform === "win32") {
|
|
199
|
+
if (/\.cmd$/i.test(cmd)) {
|
|
200
|
+
const cmdResolved = path.resolve(cwd, cmd);
|
|
201
|
+
const dir = path.dirname(cmdResolved);
|
|
202
|
+
const nodeBin = path.join(dir, "node.exe");
|
|
203
|
+
const script = path.join(dir, "index.js");
|
|
204
|
+
if (fs.existsSync(nodeBin) && fs.existsSync(script)) {
|
|
205
|
+
const configDir = path.join(dir, "..", "data", "config");
|
|
206
|
+
return {
|
|
207
|
+
command: nodeBin,
|
|
208
|
+
args: [script, ...args],
|
|
209
|
+
env: { ...env, CURSOR_INVOKED_AS: "agent.cmd" },
|
|
210
|
+
agentScriptPath: script,
|
|
211
|
+
configDir: fs.existsSync(path.join(configDir, "cli-config.json"))
|
|
212
|
+
? configDir
|
|
213
|
+
: undefined,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
const versionDir = findLatestVersionDir(dir);
|
|
217
|
+
if (versionDir) {
|
|
218
|
+
const versionNode = path.join(versionDir, "node.exe");
|
|
219
|
+
const versionScript = path.join(versionDir, "index.js");
|
|
220
|
+
if (fs.existsSync(versionNode) && fs.existsSync(versionScript)) {
|
|
221
|
+
const configDir = path.join(dir, "..", "data", "config");
|
|
222
|
+
return {
|
|
223
|
+
command: versionNode,
|
|
224
|
+
args: [versionScript, ...args],
|
|
225
|
+
env: { ...env, CURSOR_INVOKED_AS: "agent.cmd" },
|
|
226
|
+
agentScriptPath: versionScript,
|
|
227
|
+
configDir: fs.existsSync(path.join(configDir, "cli-config.json"))
|
|
228
|
+
? configDir
|
|
229
|
+
: undefined,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const quotedArgs = args
|
|
234
|
+
.map((arg) => (arg.includes(" ") ? `"${arg}"` : arg))
|
|
235
|
+
.join(" ");
|
|
236
|
+
const cmdLine = `""${cmd}" ${quotedArgs}"`;
|
|
237
|
+
return {
|
|
238
|
+
command: loaded.commandShell,
|
|
239
|
+
args: ["/d", "/s", "/c", cmdLine],
|
|
240
|
+
env,
|
|
241
|
+
windowsVerbatimArguments: true,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return { command: cmd, args, env };
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as http from "node:http";
|
|
2
|
+
import type { BridgeConfig } from "../config.js";
|
|
3
|
+
export type AnthropicMessagesCtx = {
|
|
4
|
+
config: BridgeConfig;
|
|
5
|
+
lastRequestedModelRef: {
|
|
6
|
+
current?: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export declare function handleAnthropicMessages(req: http.IncomingMessage, res: http.ServerResponse, ctx: AnthropicMessagesCtx, rawBody: string, method: string, pathname: string, remoteAddress: string): Promise<void>;
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { buildPromptFromAnthropicMessages } from "../anthropic.js";
|
|
3
|
+
import { buildAgentFixedArgs } from "../agent-cmd-args.js";
|
|
4
|
+
import { runAgentStream, runAgentSync } from "../agent-runner.js";
|
|
5
|
+
import { createStreamParser } from "../cli-stream-parser.js";
|
|
6
|
+
import { json, writeSseHeaders } from "../http.js";
|
|
7
|
+
import { resolveToCursorModel } from "../model-map.js";
|
|
8
|
+
import { normalizeModelId, toolsToSystemText } from "../openai.js";
|
|
9
|
+
import { logAgentError, logAccountAssigned, logAccountStats, logTrafficRequest, logTrafficResponse, } from "../request-log.js";
|
|
10
|
+
import { resolveModel } from "../resolve-model.js";
|
|
11
|
+
import { resolveWorkspace } from "../workspace.js";
|
|
12
|
+
import { sanitizeMessages, sanitizeSystem } from "../sanitize.js";
|
|
13
|
+
import { getNextAccountConfigDir, reportRequestStart, reportRequestEnd, reportRateLimit, reportRequestSuccess, reportRequestError, getAccountStats, } from "../account-pool.js";
|
|
14
|
+
import { fitPromptToWinCmdline, warnPromptTruncated, } from "../win-cmdline-limit.js";
|
|
15
|
+
function isRateLimited(stderr) {
|
|
16
|
+
return /\b429\b|rate.?limit|too many requests/i.test(stderr);
|
|
17
|
+
}
|
|
18
|
+
export async function handleAnthropicMessages(req, res, ctx, rawBody, method, pathname, remoteAddress) {
|
|
19
|
+
const { config, lastRequestedModelRef } = ctx;
|
|
20
|
+
const body = JSON.parse(rawBody || "{}");
|
|
21
|
+
const requested = normalizeModelId(body.model);
|
|
22
|
+
const model = resolveModel(requested, lastRequestedModelRef, config);
|
|
23
|
+
const displayModel = requested === "default" && config.defaultModel !== "default"
|
|
24
|
+
? config.defaultModel
|
|
25
|
+
: model;
|
|
26
|
+
const cleanSystem = sanitizeSystem(body.system);
|
|
27
|
+
const cleanMessages = sanitizeMessages(body.messages ?? []);
|
|
28
|
+
const toolsText = toolsToSystemText(body.tools);
|
|
29
|
+
const systemWithTools = toolsText
|
|
30
|
+
? [cleanSystem, toolsText].filter(Boolean).join("\n\n")
|
|
31
|
+
: cleanSystem;
|
|
32
|
+
const prompt = buildPromptFromAnthropicMessages(cleanMessages, systemWithTools);
|
|
33
|
+
if (body.max_tokens == null || typeof body.max_tokens !== "number") {
|
|
34
|
+
json(res, 400, {
|
|
35
|
+
error: {
|
|
36
|
+
type: "invalid_request_error",
|
|
37
|
+
message: "max_tokens is required",
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const cursorModel = resolveToCursorModel(model) ?? model;
|
|
43
|
+
const trafficMessages = [];
|
|
44
|
+
if (cleanSystem) {
|
|
45
|
+
const sys = typeof cleanSystem === "string"
|
|
46
|
+
? cleanSystem
|
|
47
|
+
: cleanSystem
|
|
48
|
+
.filter((p) => p.type === "text")
|
|
49
|
+
.map((p) => p.text ?? "")
|
|
50
|
+
.join("\n");
|
|
51
|
+
if (sys.trim())
|
|
52
|
+
trafficMessages.push({ role: "system", content: sys.trim() });
|
|
53
|
+
}
|
|
54
|
+
for (const m of cleanMessages) {
|
|
55
|
+
const text = typeof m.content === "string"
|
|
56
|
+
? m.content
|
|
57
|
+
: m.content
|
|
58
|
+
.filter((p) => p.type === "text")
|
|
59
|
+
.map((p) => p.text ?? "")
|
|
60
|
+
.join("");
|
|
61
|
+
if (text)
|
|
62
|
+
trafficMessages.push({ role: m.role, content: text });
|
|
63
|
+
}
|
|
64
|
+
logTrafficRequest(config.verbose, model ?? cursorModel, trafficMessages, !!body.stream);
|
|
65
|
+
const headerWs = req.headers["x-cursor-workspace"];
|
|
66
|
+
let workspaceDir;
|
|
67
|
+
let tempDir;
|
|
68
|
+
try {
|
|
69
|
+
const ws = resolveWorkspace(config, headerWs);
|
|
70
|
+
workspaceDir = ws.workspaceDir;
|
|
71
|
+
tempDir = ws.tempDir;
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
const msg = e instanceof Error ? e.message : "Invalid workspace";
|
|
75
|
+
json(res, 400, {
|
|
76
|
+
error: { type: "invalid_request_error", message: msg },
|
|
77
|
+
});
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const fixedArgs = buildAgentFixedArgs(config, workspaceDir, cursorModel, !!body.stream);
|
|
81
|
+
const fit = fitPromptToWinCmdline(config.agentBin, fixedArgs, prompt, {
|
|
82
|
+
maxCmdline: config.winCmdlineMax,
|
|
83
|
+
platform: process.platform,
|
|
84
|
+
cwd: workspaceDir,
|
|
85
|
+
});
|
|
86
|
+
if (!fit.ok) {
|
|
87
|
+
json(res, 500, {
|
|
88
|
+
error: {
|
|
89
|
+
type: "api_error",
|
|
90
|
+
message: fit.error,
|
|
91
|
+
code: "windows_cmdline_limit",
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (fit.truncated) {
|
|
97
|
+
warnPromptTruncated(fit.originalLength, fit.finalPromptLength);
|
|
98
|
+
}
|
|
99
|
+
const cmdArgs = fit.args;
|
|
100
|
+
const msgId = `msg_${randomUUID().replace(/-/g, "")}`;
|
|
101
|
+
const truncatedHeaders = fit.truncated
|
|
102
|
+
? { "X-Cursor-Proxy-Prompt-Truncated": "true" }
|
|
103
|
+
: undefined;
|
|
104
|
+
const promptForAgent = config.promptViaStdin || config.useAcp ? prompt : undefined;
|
|
105
|
+
if (body.stream) {
|
|
106
|
+
writeSseHeaders(res, truncatedHeaders);
|
|
107
|
+
res.on("error", () => {
|
|
108
|
+
/* client disconnected mid-stream */
|
|
109
|
+
});
|
|
110
|
+
const writeEvent = (evt) => {
|
|
111
|
+
res.write(`data: ${JSON.stringify(evt)}\n\n`);
|
|
112
|
+
};
|
|
113
|
+
writeEvent({
|
|
114
|
+
type: "message_start",
|
|
115
|
+
message: {
|
|
116
|
+
id: msgId,
|
|
117
|
+
type: "message",
|
|
118
|
+
role: "assistant",
|
|
119
|
+
model: displayModel ?? cursorModel,
|
|
120
|
+
content: [],
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
writeEvent({
|
|
124
|
+
type: "content_block_start",
|
|
125
|
+
index: 0,
|
|
126
|
+
content_block: { type: "text", text: "" },
|
|
127
|
+
});
|
|
128
|
+
const configDir = getNextAccountConfigDir();
|
|
129
|
+
logAccountAssigned(configDir);
|
|
130
|
+
reportRequestStart(configDir);
|
|
131
|
+
const streamStart = Date.now();
|
|
132
|
+
const abortController = new AbortController();
|
|
133
|
+
req.once("close", () => abortController.abort());
|
|
134
|
+
if (config.useAcp && typeof promptForAgent === "string") {
|
|
135
|
+
let accumulated = "";
|
|
136
|
+
runAgentStream(config, workspaceDir, cmdArgs, (chunk) => {
|
|
137
|
+
accumulated += chunk;
|
|
138
|
+
writeEvent({
|
|
139
|
+
type: "content_block_delta",
|
|
140
|
+
index: 0,
|
|
141
|
+
delta: { type: "text_delta", text: chunk },
|
|
142
|
+
});
|
|
143
|
+
}, tempDir, promptForAgent, configDir, abortController.signal)
|
|
144
|
+
.then(({ code, stderr: stderrOut }) => {
|
|
145
|
+
const latencyMs = Date.now() - streamStart;
|
|
146
|
+
reportRequestEnd(configDir);
|
|
147
|
+
if (stderrOut && isRateLimited(stderrOut)) {
|
|
148
|
+
reportRateLimit(configDir, 60000);
|
|
149
|
+
}
|
|
150
|
+
if (!abortController.signal.aborted) {
|
|
151
|
+
if (code !== 0) {
|
|
152
|
+
reportRequestError(configDir, latencyMs);
|
|
153
|
+
const publicMsg = logAgentError(config.sessionsLogPath, method, pathname, remoteAddress, code, stderrOut);
|
|
154
|
+
writeEvent({
|
|
155
|
+
type: "error",
|
|
156
|
+
error: { type: "api_error", message: publicMsg },
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
reportRequestSuccess(configDir, latencyMs);
|
|
161
|
+
logTrafficResponse(config.verbose, model ?? cursorModel, accumulated, true);
|
|
162
|
+
writeEvent({ type: "content_block_stop", index: 0 });
|
|
163
|
+
writeEvent({
|
|
164
|
+
type: "message_delta",
|
|
165
|
+
delta: { stop_reason: "end_turn", stop_sequence: null },
|
|
166
|
+
usage: { output_tokens: 0 },
|
|
167
|
+
});
|
|
168
|
+
writeEvent({ type: "message_stop" });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
logAccountStats(config.verbose, getAccountStats());
|
|
172
|
+
res.end();
|
|
173
|
+
})
|
|
174
|
+
.catch((err) => {
|
|
175
|
+
reportRequestEnd(configDir);
|
|
176
|
+
if (!abortController.signal.aborted) {
|
|
177
|
+
reportRequestError(configDir, Date.now() - streamStart);
|
|
178
|
+
}
|
|
179
|
+
console.error(`[${new Date().toISOString()}] Agent stream error:`, err);
|
|
180
|
+
if (!abortController.signal.aborted) {
|
|
181
|
+
writeEvent({
|
|
182
|
+
type: "error",
|
|
183
|
+
error: {
|
|
184
|
+
type: "api_error",
|
|
185
|
+
message: "The Cursor agent stream failed. See server logs for details.",
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
res.end();
|
|
190
|
+
});
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
let accumulated = "";
|
|
194
|
+
const parseLine = createStreamParser((text) => {
|
|
195
|
+
accumulated += text;
|
|
196
|
+
writeEvent({
|
|
197
|
+
type: "content_block_delta",
|
|
198
|
+
index: 0,
|
|
199
|
+
delta: { type: "text_delta", text },
|
|
200
|
+
});
|
|
201
|
+
}, () => {
|
|
202
|
+
logTrafficResponse(config.verbose, model ?? cursorModel, accumulated, true);
|
|
203
|
+
writeEvent({ type: "content_block_stop", index: 0 });
|
|
204
|
+
writeEvent({
|
|
205
|
+
type: "message_delta",
|
|
206
|
+
delta: { stop_reason: "end_turn", stop_sequence: null },
|
|
207
|
+
usage: { output_tokens: 0 },
|
|
208
|
+
});
|
|
209
|
+
writeEvent({ type: "message_stop" });
|
|
210
|
+
});
|
|
211
|
+
runAgentStream(config, workspaceDir, cmdArgs, parseLine, tempDir, promptForAgent, configDir, abortController.signal)
|
|
212
|
+
.then(({ code, stderr: stderrOut }) => {
|
|
213
|
+
const latencyMs = Date.now() - streamStart;
|
|
214
|
+
reportRequestEnd(configDir);
|
|
215
|
+
if (stderrOut && isRateLimited(stderrOut)) {
|
|
216
|
+
reportRateLimit(configDir, 60000);
|
|
217
|
+
}
|
|
218
|
+
if (abortController.signal.aborted) {
|
|
219
|
+
/* client disconnected — do not count as success or failure */
|
|
220
|
+
}
|
|
221
|
+
else if (code !== 0) {
|
|
222
|
+
reportRequestError(configDir, latencyMs);
|
|
223
|
+
logAgentError(config.sessionsLogPath, method, pathname, remoteAddress, code, stderrOut);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
reportRequestSuccess(configDir, latencyMs);
|
|
227
|
+
}
|
|
228
|
+
logAccountStats(config.verbose, getAccountStats());
|
|
229
|
+
res.end();
|
|
230
|
+
})
|
|
231
|
+
.catch((err) => {
|
|
232
|
+
reportRequestEnd(configDir);
|
|
233
|
+
if (!abortController.signal.aborted) {
|
|
234
|
+
reportRequestError(configDir, Date.now() - streamStart);
|
|
235
|
+
}
|
|
236
|
+
console.error(`[${new Date().toISOString()}] Agent stream error:`, err);
|
|
237
|
+
res.end();
|
|
238
|
+
});
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const configDir = getNextAccountConfigDir();
|
|
242
|
+
logAccountAssigned(configDir);
|
|
243
|
+
reportRequestStart(configDir);
|
|
244
|
+
const syncStart = Date.now();
|
|
245
|
+
const abortController = new AbortController();
|
|
246
|
+
req.once("close", () => abortController.abort());
|
|
247
|
+
const out = await runAgentSync(config, workspaceDir, cmdArgs, tempDir, promptForAgent, configDir, abortController.signal);
|
|
248
|
+
const syncLatency = Date.now() - syncStart;
|
|
249
|
+
reportRequestEnd(configDir);
|
|
250
|
+
if (out.stderr && isRateLimited(out.stderr)) {
|
|
251
|
+
reportRateLimit(configDir, 60000);
|
|
252
|
+
}
|
|
253
|
+
if (out.code !== 0) {
|
|
254
|
+
reportRequestError(configDir, syncLatency);
|
|
255
|
+
logAccountStats(config.verbose, getAccountStats());
|
|
256
|
+
const errMsg = logAgentError(config.sessionsLogPath, method, pathname, remoteAddress, out.code, out.stderr);
|
|
257
|
+
json(res, 500, {
|
|
258
|
+
error: { type: "api_error", message: errMsg, code: "cursor_cli_error" },
|
|
259
|
+
});
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
reportRequestSuccess(configDir, syncLatency);
|
|
263
|
+
const content = out.stdout.trim();
|
|
264
|
+
logTrafficResponse(config.verbose, model ?? cursorModel, content, false);
|
|
265
|
+
logAccountStats(config.verbose, getAccountStats());
|
|
266
|
+
const inTok = Math.max(1, Math.round(prompt.length / 4));
|
|
267
|
+
const outTok = Math.max(1, Math.round(content.length / 4));
|
|
268
|
+
json(res, 200, {
|
|
269
|
+
id: msgId,
|
|
270
|
+
type: "message",
|
|
271
|
+
role: "assistant",
|
|
272
|
+
content: [{ type: "text", text: content }],
|
|
273
|
+
model: displayModel ?? cursorModel,
|
|
274
|
+
stop_reason: "end_turn",
|
|
275
|
+
usage: {
|
|
276
|
+
input_tokens: inTok,
|
|
277
|
+
output_tokens: outTok,
|
|
278
|
+
},
|
|
279
|
+
}, truncatedHeaders);
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=anthropic-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-messages.js","sourceRoot":"","sources":["../../../src/lib/handlers/anthropic-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as http from "node:http";
|
|
2
|
+
import type { BridgeConfig } from "../config.js";
|
|
3
|
+
export type ChatCompletionsCtx = {
|
|
4
|
+
config: BridgeConfig;
|
|
5
|
+
lastRequestedModelRef: {
|
|
6
|
+
current?: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export declare function handleChatCompletions(req: http.IncomingMessage, res: http.ServerResponse, ctx: ChatCompletionsCtx, rawBody: string, method: string, pathname: string, remoteAddress: string): Promise<void>;
|