@wjarka/cezarion 0.13.6 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -3
- package/dist/agent-config/catalog.d.ts +2 -0
- package/dist/agent-config/catalog.js +40 -2
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/models.js +4 -0
- package/dist/agent-config/models.js.map +1 -1
- package/dist/automations/types.d.ts +4 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/contract/agent-config.d.ts +2 -0
- package/dist/contract/agent-profiles.d.ts +15 -0
- package/dist/contract/automations.d.ts +16 -0
- package/dist/contract/delegation.d.ts +6 -0
- package/dist/contract/health.d.ts +4 -0
- package/dist/contract/index.js +20 -11
- package/dist/contract/runs.d.ts +25 -3
- package/dist/contract/skills.d.ts +3 -0
- package/dist/contract/workflows.d.ts +6 -0
- package/dist/contract/workspace.d.ts +20 -2
- package/dist/core/agent-env.js +1 -0
- package/dist/core/agent-env.js.map +1 -1
- package/dist/core/agent-profiles.js +3 -0
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-runner.d.ts +1 -1
- package/dist/core/agent-runner.js +1 -1
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/backend-detect.d.ts +1 -1
- package/dist/core/backend-detect.js +14 -0
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/cursor-acp-runner.d.ts +15 -0
- package/dist/core/cursor-acp-runner.js +466 -0
- package/dist/core/cursor-acp-runner.js.map +1 -0
- package/dist/core/cursor-config-options.d.ts +18 -0
- package/dist/core/cursor-config-options.js +31 -0
- package/dist/core/cursor-config-options.js.map +1 -0
- package/dist/core/cursor-model-catalog.d.ts +23 -0
- package/dist/core/cursor-model-catalog.js +271 -0
- package/dist/core/cursor-model-catalog.js.map +1 -0
- package/dist/core/cursor-ui-mapper.d.ts +29 -0
- package/dist/core/cursor-ui-mapper.js +272 -0
- package/dist/core/cursor-ui-mapper.js.map +1 -0
- package/dist/core/host-model-catalog.js +2 -0
- package/dist/core/host-model-catalog.js.map +1 -1
- package/dist/core/model-identity.js +3 -0
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.js +4 -0
- package/dist/core/model-presets.js.map +1 -1
- package/dist/core/provider-auth.d.ts +1 -1
- package/dist/core/provider-auth.js +30 -1
- package/dist/core/provider-auth.js.map +1 -1
- package/dist/core/runner-factory.js +3 -0
- package/dist/core/runner-factory.js.map +1 -1
- package/dist/core/runner-model-catalog.js +1 -0
- package/dist/core/runner-model-catalog.js.map +1 -1
- package/dist/core/shell-env.d.ts +2 -0
- package/dist/core/shell-env.js +8 -0
- package/dist/core/shell-env.js.map +1 -1
- package/dist/core/ui-events.d.ts +1 -1
- package/dist/delegation/execution-identity.d.ts +3 -0
- package/dist/delegation/execution-identity.js +1 -1
- package/dist/delegation/execution-identity.js.map +1 -1
- package/dist/delegation/provision.js +1 -1
- package/dist/delegation/provision.js.map +1 -1
- package/dist/delegation/routes.d.ts +53 -53
- package/dist/delegation/transport.d.ts +7 -7
- package/dist/paths.js +3 -0
- package/dist/paths.js.map +1 -1
- package/dist/runs/store.d.ts +7 -3
- package/dist/server/open-in-app.js +1 -0
- package/dist/server/open-in-app.js.map +1 -1
- package/dist/server/provider-action-gate.js +1 -0
- package/dist/server/provider-action-gate.js.map +1 -1
- package/dist/server/server.d.ts +1441 -1401
- package/dist/server/server.js +23 -9
- package/dist/server/server.js.map +1 -1
- package/dist/workflows/types.d.ts +3 -0
- package/dist/workflows/types.js +1 -0
- package/dist/workflows/types.js.map +1 -1
- package/dist/workspace/agent-accounts.d.ts +5 -1
- package/dist/workspace/agent-accounts.js +1 -0
- package/dist/workspace/agent-accounts.js.map +1 -1
- package/dist/workspace/agent-profiles.js +1 -1
- package/dist/workspace/agent-profiles.js.map +1 -1
- package/dist/workspace/config.d.ts +3 -1
- package/dist/workspace/config.js +1 -0
- package/dist/workspace/config.js.map +1 -1
- package/package.json +3 -3
- package/scripts/mock-cursor-acp.mjs +77 -0
- package/web/dist/assets/{agent-accounts-CdHFiYTN.js → agent-accounts-MT-jtwOU.js} +1 -1
- package/web/dist/assets/alert-dialog-KUiPIBmb.js +43 -0
- package/web/dist/assets/{collapsible-CI78cX0k.js → collapsible-CkSaP6_n.js} +1 -1
- package/web/dist/assets/{commit-list-D3Cy_0hj.js → commit-list-B47VXJez.js} +1 -1
- package/web/dist/assets/{compare-variants-BkYiBaI1.js → compare-variants-DNqtPFUv.js} +1 -1
- package/web/dist/assets/{diff-DDUpEMjA2.js → diff-C4aSZfrQ2.js} +2 -2
- package/web/dist/assets/{diff-controls-C1THeHoP.js → diff-controls-D5b8ocJ0.js} +1 -1
- package/web/dist/assets/{diff-stat-Cq4juy0u.js → diff-stat-B7f-F8cC.js} +1 -1
- package/web/dist/assets/{diff-view-Coyp_Kst.js → diff-view-BPKHTL85.js} +1 -1
- package/web/dist/assets/{dropdown-menu-BP8LYsNU.js → dropdown-menu-xYcDecNM.js} +1 -1
- package/web/dist/assets/{git-toolbar-BP8_wDyk.js → git-toolbar-C4zVVSpl.js} +1 -1
- package/web/dist/assets/{github-CVranJaK.js → github-D97-DHsF.js} +1 -1
- package/web/dist/assets/{image-preview-DXIixdjJ.js → image-preview-BhuwWeyP.js} +1 -1
- package/web/dist/assets/index-ujHRHX5o.js +7 -0
- package/web/dist/assets/{markdown-uwx4ouIE.js → markdown-CIi0LXvU.js} +1 -1
- package/web/dist/assets/pill-DDhByAhe.js +1 -0
- package/web/dist/assets/{project-router-D9DfwL9L.js → project-router-BOglfKgF.js} +1 -1
- package/web/dist/assets/{prompt-templates-DgR9lv5k.js → prompt-templates-DTSPmJP-.js} +1 -1
- package/web/dist/assets/{repo-git-BLjI-1pn.js → repo-git-DvxUSPot.js} +1 -1
- package/web/dist/assets/{run-diff-DRPGyUPP.js → run-diff-DEVs-zV1.js} +1 -1
- package/web/dist/assets/run-header-Dvb1P3Ge.js +1 -0
- package/web/dist/assets/{skills-DRowiHKX.js → skills-DJ06RZbi.js} +1 -1
- package/web/dist/assets/{tab-link-C5tpLlqv.js → tab-link-ChqeHA8K.js} +1 -1
- package/web/dist/assets/{task-changes-LBnRxH_G.js → task-changes-CIN0MkJE.js} +1 -1
- package/web/dist/assets/{task-commits-lpE22fPa.js → task-commits-BRZshVHV.js} +1 -1
- package/web/dist/assets/{task-files-Dh6SjTQF.js → task-files-BZTNbpcP.js} +1 -1
- package/web/dist/assets/{task-thread-B_74GvMl.js → task-thread-D_N6ELtr.js} +6 -6
- package/web/dist/assets/{textarea-D_Ce7vp0.js → textarea-DdKiIORK.js} +1 -1
- package/web/dist/assets/{thread-loading-CwnPHwar.js → thread-loading-BRM8kyKz.js} +1 -1
- package/web/dist/assets/{token-metrics-BC00XXU8.js → token-metrics-DDvhrHmK.js} +1 -1
- package/web/dist/assets/{utils-B8qbBJrk.js → utils-CG8vWc5K.js} +1 -1
- package/web/dist/assets/{workflows-B2Iq2bcd.js → workflows-CplF7YNk.js} +1 -1
- package/web/dist/assets/{zoomable-image-Idq840Ej.js → zoomable-image-BXioMWqb.js} +1 -1
- package/web/dist/index.html +13 -13
- package/web/dist/assets/alert-dialog-7OZcjFyp.js +0 -43
- package/web/dist/assets/index-CokupxlP.js +0 -7
- package/web/dist/assets/pill-jITycc8f.js +0 -1
- package/web/dist/assets/run-header-DO-yE5Gj.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-detect.js","sourceRoot":"","sources":["../../src/core/backend-detect.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backend-detect.js","sourceRoot":"","sources":["../../src/core/backend-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AgentEvent, AgentRunResult, AgentRunner, AgentRunSpec, AgentRunSpecSupport, AgentSession, SessionOptions } from './agent-runner.ts';
|
|
2
|
+
export declare const CURSOR_SPEC_SUPPORT: AgentRunSpecSupport;
|
|
3
|
+
export declare class CursorAcpRunner implements AgentRunner {
|
|
4
|
+
private readonly options;
|
|
5
|
+
readonly backend: 'cursor';
|
|
6
|
+
readonly specSupport: Readonly<Record<keyof AgentRunSpec, import("./agent-runner.ts").SpecFieldSupport>>;
|
|
7
|
+
private lastSession?;
|
|
8
|
+
constructor(options?: {
|
|
9
|
+
bin?: string;
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
});
|
|
12
|
+
startSession(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void, opts?: SessionOptions): AgentSession;
|
|
13
|
+
run(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void): Promise<AgentRunResult>;
|
|
14
|
+
interrupt(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import { parseCursorConfigOptions, cursorEffortSelection } from './cursor-config-options.js';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { prependSystemPrompt, trackChildExit } from './agent-runner.js';
|
|
5
|
+
import { buildChildEnv } from './agent-env.js';
|
|
6
|
+
import { parseAskMarker, parseAskRequest } from './ask.js';
|
|
7
|
+
import { readNdjson } from './ndjson.js';
|
|
8
|
+
import { AUTO_END_DELAY_MS, DEFAULT_RUN_TIMEOUT_MS, EOF_TERM_GRACE_MS, EOF_KILL_GRACE_MS } from './runner-runtime.js';
|
|
9
|
+
import { createCursorUiState, mapCursorMessage, cursorTurnStarted, cursorTurnCompleted } from './cursor-ui-mapper.js';
|
|
10
|
+
export const CURSOR_SPEC_SUPPORT = {
|
|
11
|
+
systemPrompt: { honored: true, via: 'prependSystemPrompt in opening ACP prompt' },
|
|
12
|
+
userPrompt: { honored: true, via: 'session/prompt text content' },
|
|
13
|
+
images: { honored: true, via: 'ACP image content blocks' },
|
|
14
|
+
cwd: { honored: true, via: 'spawn cwd and session/new or session/load cwd' },
|
|
15
|
+
allowedTools: { honored: false, reason: 'Cursor ACP has no per-session tool allowlist; --force follows the existing auto permission preset' },
|
|
16
|
+
bashAllowlist: { honored: false, reason: 'Cursor ACP has no per-session command-prefix allowlist' },
|
|
17
|
+
restrictNativeDelegation: { honored: true, via: 'initialize clientCapabilities._meta.subagents=false; Cursor 2026.09.15 negotiates native delegation from this capability' },
|
|
18
|
+
additionalDirectories: { honored: true, via: '--add-dir per additional workspace root' },
|
|
19
|
+
env: { honored: true, via: 'buildChildEnv cursor backend with per-run env' },
|
|
20
|
+
model: { honored: true, via: '--model pins initial selection; ACP model config option for advertised IDs, legacy session/set_model fallback' },
|
|
21
|
+
effort: { honored: true, via: 'advertised effort/reasoning/reasoning_effort select value via session/set_config_option; unsupported values fail before inference' },
|
|
22
|
+
timeoutMs: { honored: true, via: 'wall-clock deadline with bounded TERM/KILL teardown' },
|
|
23
|
+
sessionId: { honored: true, via: 'session/load sessionId on resume; session/new mints fresh ID' },
|
|
24
|
+
resume: { honored: true, via: 'session/load instead of session/new' },
|
|
25
|
+
};
|
|
26
|
+
export class CursorAcpRunner {
|
|
27
|
+
options;
|
|
28
|
+
backend = 'cursor';
|
|
29
|
+
specSupport = CURSOR_SPEC_SUPPORT;
|
|
30
|
+
lastSession;
|
|
31
|
+
constructor(options = {}) {
|
|
32
|
+
this.options = options;
|
|
33
|
+
}
|
|
34
|
+
startSession(spec, onEvent, opts = {}) {
|
|
35
|
+
const bin = this.options.bin ?? process.env.CEZ_CURSOR_BIN ?? (process.env.CEZ_DRY_RUN === '1'
|
|
36
|
+
? fileURLToPath(new URL('../../scripts/mock-cursor-acp.mjs', import.meta.url)) : 'agent');
|
|
37
|
+
return this.lastSession = new CursorSession(bin, spec, this.options.timeoutMs ?? DEFAULT_RUN_TIMEOUT_MS, onEvent, opts);
|
|
38
|
+
}
|
|
39
|
+
run(spec, onEvent) {
|
|
40
|
+
return this.startSession(spec, onEvent, { autoEndAfterFirstTurn: true }).result;
|
|
41
|
+
}
|
|
42
|
+
async interrupt() { this.lastSession?.interrupt(); }
|
|
43
|
+
}
|
|
44
|
+
const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
45
|
+
/** One ACP process; prompt responses, never notifications, own turn completion. */
|
|
46
|
+
class CursorSession {
|
|
47
|
+
spec;
|
|
48
|
+
onEvent;
|
|
49
|
+
opts;
|
|
50
|
+
result;
|
|
51
|
+
child;
|
|
52
|
+
hasExited;
|
|
53
|
+
isOpen = true;
|
|
54
|
+
closing = false;
|
|
55
|
+
busy = true;
|
|
56
|
+
ready = false;
|
|
57
|
+
markerAsk = false;
|
|
58
|
+
sessionId;
|
|
59
|
+
configOptions = [];
|
|
60
|
+
pendingAsk;
|
|
61
|
+
queued = [];
|
|
62
|
+
requestId = 0;
|
|
63
|
+
pending = new Map();
|
|
64
|
+
state = createCursorUiState();
|
|
65
|
+
texts = [];
|
|
66
|
+
toolCalls = [];
|
|
67
|
+
turnText = '';
|
|
68
|
+
tokensUsed = 0;
|
|
69
|
+
failure;
|
|
70
|
+
autoEnd;
|
|
71
|
+
deadline;
|
|
72
|
+
termTimer;
|
|
73
|
+
killTimer;
|
|
74
|
+
resolveResult;
|
|
75
|
+
settled = false;
|
|
76
|
+
constructor(bin, spec, timeoutMs, onEvent, opts) {
|
|
77
|
+
this.spec = spec;
|
|
78
|
+
this.onEvent = onEvent;
|
|
79
|
+
this.opts = opts;
|
|
80
|
+
this.result = new Promise(resolve => { this.resolveResult = resolve; });
|
|
81
|
+
this.child = spawn(bin, ['--force', ...(spec.model ? ['--model', spec.model] : []), ...(spec.additionalDirectories ?? []).flatMap(path => ['--add-dir', path]), 'acp'], {
|
|
82
|
+
cwd: spec.cwd, env: buildChildEnv({ backend: 'cursor', extraEnv: spec.env }),
|
|
83
|
+
});
|
|
84
|
+
this.hasExited = trackChildExit(this.child);
|
|
85
|
+
// Always drain stderr, but never echo credentials or unbounded provider logs.
|
|
86
|
+
this.child.stderr.resume();
|
|
87
|
+
this.child.stdin.on('error', () => { if (!this.closing)
|
|
88
|
+
this.fail('Cursor ACP input stream closed'); });
|
|
89
|
+
this.child.once('error', () => { this.fail('Unable to start Cursor CLI; install it or check CEZ_CURSOR_BIN'); this.finish(); });
|
|
90
|
+
this.child.once('close', (code, signal) => {
|
|
91
|
+
if (!this.closing)
|
|
92
|
+
this.fail(`Cursor ACP exited unexpectedly (${signal ?? code ?? 'unknown'})`);
|
|
93
|
+
this.finish();
|
|
94
|
+
});
|
|
95
|
+
const limit = spec.timeoutMs ?? timeoutMs;
|
|
96
|
+
if (limit > 0) {
|
|
97
|
+
this.deadline = setTimeout(() => { this.fail('Cursor ACP timed out and was terminated'); this.interrupt(); }, limit);
|
|
98
|
+
this.deadline.unref();
|
|
99
|
+
}
|
|
100
|
+
void this.read().catch(() => { if (!this.closing)
|
|
101
|
+
this.fail('Cursor ACP output stream failed'); });
|
|
102
|
+
void this.bootstrap().catch(error => { if (!this.closing)
|
|
103
|
+
this.fail(error instanceof Error ? error.message : 'Cursor ACP initialization failed'); });
|
|
104
|
+
}
|
|
105
|
+
get pid() { return this.child.pid; }
|
|
106
|
+
get open() { return this.isOpen; }
|
|
107
|
+
emit(event) { if (!this.settled)
|
|
108
|
+
this.onEvent?.(event); }
|
|
109
|
+
ui(event) { if (!this.settled)
|
|
110
|
+
this.opts.onUiEvent?.(event); }
|
|
111
|
+
mapped(mapping) {
|
|
112
|
+
this.state = mapping.state;
|
|
113
|
+
for (const event of mapping.events) {
|
|
114
|
+
this.ui(event);
|
|
115
|
+
if (event.type === 'item.completed' && event.item.kind === 'message' && event.item.role === 'assistant' && !event.item.parentItemId) {
|
|
116
|
+
this.texts.push(event.item.text);
|
|
117
|
+
this.turnText += event.item.text;
|
|
118
|
+
this.emit({ type: 'text', text: event.item.text });
|
|
119
|
+
}
|
|
120
|
+
else if (event.type === 'item.started' && event.item.kind === 'tool') {
|
|
121
|
+
const { id, name, input } = event.item;
|
|
122
|
+
this.toolCalls.push({ id, name, input });
|
|
123
|
+
this.emit({ type: 'tool-call', id, tool: name, input });
|
|
124
|
+
}
|
|
125
|
+
else if (event.type === 'item.completed' && event.item.kind === 'tool') {
|
|
126
|
+
this.emit({ type: 'tool-result', toolCallId: event.item.id, result: event.item.output ?? event.item.error ?? '', isError: event.item.status === 'failed' });
|
|
127
|
+
}
|
|
128
|
+
else if (event.type === 'usage.updated') {
|
|
129
|
+
this.tokensUsed = event.usage.total;
|
|
130
|
+
this.emit({ type: 'token-usage', tokensUsed: this.tokensUsed });
|
|
131
|
+
}
|
|
132
|
+
else if (event.type === 'image')
|
|
133
|
+
this.emit(event);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
write(message, accepted) {
|
|
137
|
+
if (this.child.stdin.destroyed || this.child.stdin.writableEnded) {
|
|
138
|
+
accepted?.(new Error('Cursor ACP input closed'));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
this.child.stdin.write(`${JSON.stringify({ jsonrpc: '2.0', ...message })}\n`, accepted);
|
|
142
|
+
}
|
|
143
|
+
request(method, params, accepted) {
|
|
144
|
+
const id = ++this.requestId;
|
|
145
|
+
return new Promise((resolve, reject) => {
|
|
146
|
+
const timer = method === 'session/prompt' ? undefined : setTimeout(() => {
|
|
147
|
+
this.pending.delete(id);
|
|
148
|
+
reject(new Error(`Cursor ACP ${method} timed out`));
|
|
149
|
+
}, 15_000);
|
|
150
|
+
timer?.unref();
|
|
151
|
+
this.pending.set(id, { resolve, reject, timer });
|
|
152
|
+
this.write({ id, method, params }, error => {
|
|
153
|
+
accepted?.(error);
|
|
154
|
+
if (error) {
|
|
155
|
+
if (timer)
|
|
156
|
+
clearTimeout(timer);
|
|
157
|
+
this.pending.delete(id);
|
|
158
|
+
reject(error);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
async bootstrap() {
|
|
164
|
+
const init = await this.request('initialize', { protocolVersion: 1, clientInfo: { name: 'cezar', version: '1' },
|
|
165
|
+
clientCapabilities: { _meta: { subagents: !this.spec.restrictNativeDelegation, parameterizedModelPicker: true } } });
|
|
166
|
+
if (!this.open)
|
|
167
|
+
return;
|
|
168
|
+
if (init.protocolVersion !== 1)
|
|
169
|
+
throw new Error('Cursor ACP protocol version is unsupported');
|
|
170
|
+
if (this.spec.resume && this.spec.sessionId && object(init.agentCapabilities).loadSession !== true)
|
|
171
|
+
throw new Error('Cursor CLI does not support session resume');
|
|
172
|
+
const resume = this.spec.resume && this.spec.sessionId;
|
|
173
|
+
const response = await this.request(resume ? 'session/load' : 'session/new', {
|
|
174
|
+
cwd: this.spec.cwd, mcpServers: [], ...(resume ? { sessionId: this.spec.sessionId } : {}),
|
|
175
|
+
});
|
|
176
|
+
if (!this.open)
|
|
177
|
+
return;
|
|
178
|
+
this.sessionId = resume ? this.spec.sessionId : typeof response.sessionId === 'string' ? response.sessionId : undefined;
|
|
179
|
+
if (!this.sessionId)
|
|
180
|
+
throw new Error('Cursor ACP returned no session ID');
|
|
181
|
+
this.state = { ...this.state, sessionId: this.sessionId };
|
|
182
|
+
const config = parseCursorConfigOptions(response.configOptions);
|
|
183
|
+
if (config)
|
|
184
|
+
this.configOptions = config;
|
|
185
|
+
const modelOption = this.configOptions.find(option => option.id === 'model');
|
|
186
|
+
if (this.spec.model && modelOption?.options.some(option => option.value === this.spec.model)) {
|
|
187
|
+
if (modelOption.currentValue !== this.spec.model)
|
|
188
|
+
await this.setConfigOption('model', this.spec.model);
|
|
189
|
+
}
|
|
190
|
+
else if (this.spec.model && config === undefined) {
|
|
191
|
+
// Older Cursor builds expose only the legacy model control. Opaque IDs are
|
|
192
|
+
// also passed intact at process launch, before the provider session is built.
|
|
193
|
+
await this.request('session/set_model', { sessionId: this.sessionId, modelId: this.spec.model });
|
|
194
|
+
}
|
|
195
|
+
if (this.spec.effort) {
|
|
196
|
+
const selection = cursorEffortSelection(this.configOptions, this.spec.effort);
|
|
197
|
+
await this.setConfigOption(selection.configId, selection.value);
|
|
198
|
+
}
|
|
199
|
+
if (!this.open)
|
|
200
|
+
return;
|
|
201
|
+
this.emit({ type: 'session', sessionId: this.sessionId });
|
|
202
|
+
this.ui({ type: 'session.started', backend: 'cursor', sessionId: this.sessionId, cwd: this.spec.cwd, ...(this.spec.model ? { model: this.spec.model } : {}) });
|
|
203
|
+
this.ready = true;
|
|
204
|
+
this.startTurn([{ type: 'text', text: prependSystemPrompt(this.spec.systemPrompt, this.spec.userPrompt) }, ...(this.spec.images ?? [])]);
|
|
205
|
+
}
|
|
206
|
+
async setConfigOption(configId, value) {
|
|
207
|
+
const response = await this.request('session/set_config_option', { sessionId: this.sessionId, configId, value });
|
|
208
|
+
const options = parseCursorConfigOptions(response.configOptions);
|
|
209
|
+
if (options)
|
|
210
|
+
this.configOptions = options;
|
|
211
|
+
if (!options || !options.some(option => option.id === configId && option.currentValue === value)) {
|
|
212
|
+
throw new Error('Cursor ACP did not confirm the requested session configuration');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
startTurn(content, accepted) {
|
|
216
|
+
if (!this.open || !this.sessionId) {
|
|
217
|
+
accepted?.(new Error('Cursor session closed'));
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
this.busy = true;
|
|
221
|
+
this.markerAsk = false;
|
|
222
|
+
this.turnText = '';
|
|
223
|
+
this.clearAutoEnd();
|
|
224
|
+
this.mapped(cursorTurnStarted(this.state));
|
|
225
|
+
const prompt = content.map(block => block.type === 'text' ? block : { type: 'image', mimeType: block.source.media_type, data: block.source.data });
|
|
226
|
+
void this.request('session/prompt', { sessionId: this.sessionId, prompt }, accepted).then(result => {
|
|
227
|
+
if (!this.open)
|
|
228
|
+
return;
|
|
229
|
+
this.mapped(cursorTurnCompleted(typeof result.stopReason === 'string' ? result.stopReason : 'error', this.state));
|
|
230
|
+
if (this.failure)
|
|
231
|
+
return;
|
|
232
|
+
this.busy = false;
|
|
233
|
+
this.markerAsk = parseAskMarker(this.turnText) !== null;
|
|
234
|
+
if (this.markerAsk)
|
|
235
|
+
this.discardQueuedMessages();
|
|
236
|
+
this.emit({ type: 'turn-end' });
|
|
237
|
+
// onEvent can synchronously reserve a new turn; do not clobber its state.
|
|
238
|
+
if (!this.open || this.busy)
|
|
239
|
+
return;
|
|
240
|
+
const next = !this.markerAsk ? this.queued.shift() : undefined;
|
|
241
|
+
if (next)
|
|
242
|
+
this.startTurn(next);
|
|
243
|
+
else {
|
|
244
|
+
this.opts.onAgentInputReady?.();
|
|
245
|
+
this.scheduleAutoEnd();
|
|
246
|
+
}
|
|
247
|
+
}).catch(error => { if (!this.closing)
|
|
248
|
+
this.fail(`Cursor ACP request failed: ${error instanceof Error ? error.message : 'unknown error'}`); });
|
|
249
|
+
}
|
|
250
|
+
sendMessage(content) {
|
|
251
|
+
if (!this.open)
|
|
252
|
+
return false;
|
|
253
|
+
this.clearAutoEnd();
|
|
254
|
+
this.markerAsk = false;
|
|
255
|
+
if (this.pendingAsk) {
|
|
256
|
+
const pending = this.pendingAsk;
|
|
257
|
+
this.pendingAsk = undefined;
|
|
258
|
+
const text = content.filter(b => b.type === 'text').map(b => b.text).join('\n').trim();
|
|
259
|
+
if (pending.kind === 'plan') {
|
|
260
|
+
const answer = text.replace(/^Plan:\s*/i, '');
|
|
261
|
+
this.write({ id: pending.id, result: { outcome: /^(approve|accept|yes)$/i.test(answer) ? { outcome: 'accepted' } : { outcome: 'rejected', reason: text } } });
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
const answers = pending.questions.map((question, index) => {
|
|
265
|
+
const line = text.split('\n').find(line => line.startsWith(`${question.header}:`));
|
|
266
|
+
const answer = line ? line.slice(question.header.length + 1).trim() : pending.questions.length === 1 ? text : '';
|
|
267
|
+
const options = pending.wire[index]?.options ?? [];
|
|
268
|
+
const selectedOptionIds = options.filter(option => answer === option.label || answer.split(',').map(s => s.trim()).includes(String(option.label))).map(option => option.id);
|
|
269
|
+
return { questionId: question.id, selectedOptionIds };
|
|
270
|
+
});
|
|
271
|
+
if (answers.every(answer => answer.selectedOptionIds.length > 0))
|
|
272
|
+
this.write({ id: pending.id, result: { outcome: { outcome: 'answered', answers } } });
|
|
273
|
+
else {
|
|
274
|
+
// Cursor's question extension has only option IDs. Preserve free text
|
|
275
|
+
// as a following prompt after explicitly skipping that native request.
|
|
276
|
+
this.queued.unshift(content);
|
|
277
|
+
this.write({ id: pending.id, result: { outcome: { outcome: 'skipped', reason: 'User supplied a free-text answer; it follows in the next prompt.' } } });
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else if (!this.ready || this.busy)
|
|
282
|
+
this.queued.push(content);
|
|
283
|
+
else
|
|
284
|
+
this.startTurn(content);
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
sendAgentMessage(content) {
|
|
288
|
+
if (!this.open || !this.ready || this.busy || this.pendingAsk || this.markerAsk || this.queued.length > 0)
|
|
289
|
+
return false;
|
|
290
|
+
this.busy = true;
|
|
291
|
+
return new Promise((resolve, reject) => this.startTurn(content, error => error ? reject(error) : resolve()));
|
|
292
|
+
}
|
|
293
|
+
discardQueuedMessages() { this.queued = []; }
|
|
294
|
+
clearAutoEnd() { if (this.autoEnd)
|
|
295
|
+
clearTimeout(this.autoEnd); this.autoEnd = undefined; }
|
|
296
|
+
scheduleAutoEnd() {
|
|
297
|
+
if (!this.opts.autoEndAfterFirstTurn || !this.open || this.busy || this.pendingAsk)
|
|
298
|
+
return;
|
|
299
|
+
this.clearAutoEnd();
|
|
300
|
+
this.autoEnd = setTimeout(() => { this.autoEnd = undefined; if (!this.busy && this.opts.shouldAutoEnd?.() !== false)
|
|
301
|
+
this.end(); }, AUTO_END_DELAY_MS);
|
|
302
|
+
this.autoEnd.unref();
|
|
303
|
+
}
|
|
304
|
+
end() {
|
|
305
|
+
if (this.closing)
|
|
306
|
+
return;
|
|
307
|
+
this.closeInput();
|
|
308
|
+
this.child.stdin.end();
|
|
309
|
+
this.termTimer = setTimeout(() => this.terminate(), EOF_TERM_GRACE_MS);
|
|
310
|
+
this.termTimer.unref();
|
|
311
|
+
}
|
|
312
|
+
interrupt() { this.closeInput(); this.terminate(); }
|
|
313
|
+
closeInput() {
|
|
314
|
+
if (this.closing)
|
|
315
|
+
return;
|
|
316
|
+
this.closing = true;
|
|
317
|
+
this.isOpen = false;
|
|
318
|
+
this.clearAutoEnd();
|
|
319
|
+
this.discardQueuedMessages();
|
|
320
|
+
if (this.pendingAsk)
|
|
321
|
+
this.write({ id: this.pendingAsk.id, result: { outcome: { outcome: 'cancelled' } } });
|
|
322
|
+
this.pendingAsk = undefined;
|
|
323
|
+
if (this.sessionId && this.busy)
|
|
324
|
+
this.write({ method: 'session/cancel', params: { sessionId: this.sessionId } });
|
|
325
|
+
}
|
|
326
|
+
terminate() {
|
|
327
|
+
if (this.hasExited())
|
|
328
|
+
return;
|
|
329
|
+
this.child.kill('SIGTERM');
|
|
330
|
+
if (!this.killTimer) {
|
|
331
|
+
this.killTimer = setTimeout(() => { if (!this.hasExited())
|
|
332
|
+
this.child.kill('SIGKILL'); }, EOF_KILL_GRACE_MS);
|
|
333
|
+
this.killTimer.unref();
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
fail(message) {
|
|
337
|
+
if (this.failure || this.settled)
|
|
338
|
+
return;
|
|
339
|
+
this.failure = message;
|
|
340
|
+
this.emit({ type: 'error', message });
|
|
341
|
+
this.ui({ type: 'session.error', message, fatal: true });
|
|
342
|
+
this.mapped(cursorTurnCompleted('error', this.state));
|
|
343
|
+
this.interrupt();
|
|
344
|
+
}
|
|
345
|
+
finish() {
|
|
346
|
+
if (this.settled)
|
|
347
|
+
return;
|
|
348
|
+
this.isOpen = false;
|
|
349
|
+
for (const timer of [this.deadline, this.autoEnd, this.termTimer, this.killTimer])
|
|
350
|
+
if (timer)
|
|
351
|
+
clearTimeout(timer);
|
|
352
|
+
for (const request of this.pending.values()) {
|
|
353
|
+
if (request.timer)
|
|
354
|
+
clearTimeout(request.timer);
|
|
355
|
+
request.reject(new Error('Cursor session closed'));
|
|
356
|
+
}
|
|
357
|
+
this.pending.clear();
|
|
358
|
+
if (this.busy && !this.failure)
|
|
359
|
+
this.mapped(cursorTurnCompleted('cancelled', this.state));
|
|
360
|
+
this.ui({ type: 'session.ended', reason: this.failure ? 'error' : 'end_turn' });
|
|
361
|
+
this.emit({ type: 'done' });
|
|
362
|
+
this.settled = true;
|
|
363
|
+
this.resolveResult({ text: this.texts.join('\n').trim(), toolCalls: this.toolCalls, tokensUsed: this.tokensUsed, ...(this.sessionId ? { sessionId: this.sessionId } : {}) });
|
|
364
|
+
}
|
|
365
|
+
async read() {
|
|
366
|
+
for await (const line of readNdjson(this.child.stdout)) {
|
|
367
|
+
let raw;
|
|
368
|
+
try {
|
|
369
|
+
raw = JSON.parse(line);
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
continue;
|
|
373
|
+
}
|
|
374
|
+
const msg = object(raw);
|
|
375
|
+
const params = object(msg.params);
|
|
376
|
+
const update = object(params.update);
|
|
377
|
+
if (msg.method === 'session/update' && params.sessionId === this.sessionId && update.sessionUpdate === 'config_option_update') {
|
|
378
|
+
const options = parseCursorConfigOptions(update.configOptions);
|
|
379
|
+
if (options)
|
|
380
|
+
this.configOptions = options;
|
|
381
|
+
}
|
|
382
|
+
const id = typeof msg.id === 'number' || typeof msg.id === 'string' ? msg.id : undefined;
|
|
383
|
+
if (typeof msg.method !== 'string') {
|
|
384
|
+
if (id === undefined)
|
|
385
|
+
continue;
|
|
386
|
+
const pending = this.pending.get(id);
|
|
387
|
+
if (!pending)
|
|
388
|
+
continue;
|
|
389
|
+
this.pending.delete(id);
|
|
390
|
+
if (pending.timer)
|
|
391
|
+
clearTimeout(pending.timer);
|
|
392
|
+
if (msg.error)
|
|
393
|
+
pending.reject(new Error(object(msg.error).code === -32000 ? 'Cursor ACP authentication required; run agent login' : 'Cursor ACP rejected the request'));
|
|
394
|
+
else
|
|
395
|
+
pending.resolve(object(msg.result));
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
if (this.closing)
|
|
399
|
+
continue;
|
|
400
|
+
// session/load replays history before its response; it is already in the
|
|
401
|
+
// persisted transcript and must not be emitted as this turn's new output.
|
|
402
|
+
if (!this.ready) {
|
|
403
|
+
if (id !== undefined)
|
|
404
|
+
this.write({ id, error: { code: -32601, message: 'Session not ready' } });
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
if (msg.method === 'session/update') {
|
|
408
|
+
const update = object(params.update);
|
|
409
|
+
const content = object(update.content);
|
|
410
|
+
// Cursor 2026.09.15 catches provider errors and emits this exact prefix,
|
|
411
|
+
// then returns end_turn. Narrow to its error envelope, not arbitrary prose.
|
|
412
|
+
if (params.sessionId === this.sessionId && update.sessionUpdate === 'agent_message_chunk'
|
|
413
|
+
&& typeof content.text === 'string' && /^\n\nError: /u.test(content.text)) {
|
|
414
|
+
this.fail(/unauthenticated/i.test(content.text) ? 'Cursor provider authentication failed; run agent login' : 'Cursor provider request failed; check the Cursor CLI connection');
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
if (msg.method === 'cursor/ask_question' && id !== undefined) {
|
|
419
|
+
this.ask(id, params);
|
|
420
|
+
continue;
|
|
421
|
+
}
|
|
422
|
+
if (msg.method === 'cursor/create_plan' && id !== undefined) {
|
|
423
|
+
if (this.pendingAsk || typeof params.plan !== 'string' || !params.plan.trim()) {
|
|
424
|
+
this.write({ id, result: { outcome: { outcome: 'rejected', reason: 'Plan request is invalid or another question is pending' } } });
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
this.discardQueuedMessages();
|
|
428
|
+
this.texts.push(params.plan);
|
|
429
|
+
this.emit({ type: 'text', text: params.plan });
|
|
430
|
+
this.ui({ type: 'item.completed', item: { kind: 'message', id: `cursor-plan-${id}`, role: 'assistant', text: params.plan } });
|
|
431
|
+
const questions = [{ header: 'Plan', question: String(params.overview ?? params.name ?? 'Approve this plan?').slice(0, 400), options: [{ label: 'Approve' }, { label: 'Reject' }], multiSelect: false }];
|
|
432
|
+
this.pendingAsk = { id, questions, wire: [], kind: 'plan' };
|
|
433
|
+
this.ui({ type: 'ask.requested', requestId: String(id), questions });
|
|
434
|
+
continue;
|
|
435
|
+
}
|
|
436
|
+
if (msg.method === 'session/request_permission' && id !== undefined) {
|
|
437
|
+
const options = Array.isArray(params.options) ? params.options.map(object) : [];
|
|
438
|
+
const allow = options.find(o => o.kind === 'allow_once');
|
|
439
|
+
this.write({ id, result: { outcome: params.sessionId === this.sessionId && allow ? { outcome: 'selected', optionId: allow.optionId } : { outcome: 'cancelled' } } });
|
|
440
|
+
continue;
|
|
441
|
+
}
|
|
442
|
+
this.mapped(mapCursorMessage(msg, this.state));
|
|
443
|
+
if (id !== undefined) {
|
|
444
|
+
if (['cursor/update_todos', 'cursor/task', 'cursor/generate_image'].includes(msg.method))
|
|
445
|
+
this.write({ id, result: {} });
|
|
446
|
+
else
|
|
447
|
+
this.write({ id, error: { code: -32601, message: 'Method not supported' } });
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
ask(id, params) {
|
|
452
|
+
const wire = Array.isArray(params.questions) ? params.questions.map(object) : [];
|
|
453
|
+
const parsed = parseAskRequest({ questions: wire.map((q, index) => ({
|
|
454
|
+
id: q.id, header: wire.length > 1 ? `Question ${index + 1}` : String(params.title ?? 'Question').slice(0, 12), question: q.prompt,
|
|
455
|
+
options: Array.isArray(q.options) ? q.options.map(o => ({ label: object(o).label })) : [], multiSelect: q.allowMultiple === true,
|
|
456
|
+
})) });
|
|
457
|
+
if (!parsed || this.pendingAsk || wire.some(q => typeof q.id !== 'string' || !Array.isArray(q.options) || q.options.some(o => typeof object(o).id !== 'string'))) {
|
|
458
|
+
this.write({ id, result: { outcome: { outcome: 'skipped', reason: 'Question cannot be represented in the cockpit' } } });
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
this.discardQueuedMessages();
|
|
462
|
+
this.pendingAsk = { id, questions: parsed.questions, wire, kind: 'question' };
|
|
463
|
+
this.ui({ type: 'ask.requested', requestId: String(id), questions: parsed.questions });
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
//# sourceMappingURL=cursor-acp-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-acp-runner.js","sourceRoot":"","sources":["../../src/core/cursor-acp-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const selectSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
type: z.ZodLiteral<"select">;
|
|
5
|
+
currentValue: z.ZodString;
|
|
6
|
+
options: z.ZodArray<z.ZodObject<{
|
|
7
|
+
value: z.ZodString;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
}, z.core.$strip>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type CursorConfigOption = z.infer<typeof selectSchema>;
|
|
12
|
+
export declare function parseCursorConfigOptions(value: unknown): CursorConfigOption[] | undefined;
|
|
13
|
+
/** Match the model's advertised parameter and exact value; never translate a boolean toggle. */
|
|
14
|
+
export declare function cursorEffortSelection(options: readonly CursorConfigOption[], effort: string): {
|
|
15
|
+
configId: string;
|
|
16
|
+
value: string;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// Cursor 2026.09.15 represents model parameters (including booleans) as select options.
|
|
3
|
+
// Unknown option types are ignored; malformed select snapshots never replace known state.
|
|
4
|
+
const selectSchema = z.object({
|
|
5
|
+
id: z.string().min(1),
|
|
6
|
+
type: z.literal('select'),
|
|
7
|
+
currentValue: z.string(),
|
|
8
|
+
options: z.array(z.object({ value: z.string(), name: z.string() })),
|
|
9
|
+
});
|
|
10
|
+
export function parseCursorConfigOptions(value) {
|
|
11
|
+
if (!Array.isArray(value))
|
|
12
|
+
return undefined;
|
|
13
|
+
const result = [];
|
|
14
|
+
for (const row of value) {
|
|
15
|
+
if (row && typeof row === 'object' && 'type' in row && row.type !== 'select')
|
|
16
|
+
continue;
|
|
17
|
+
const parsed = selectSchema.safeParse(row);
|
|
18
|
+
if (!parsed.success)
|
|
19
|
+
return undefined;
|
|
20
|
+
result.push(parsed.data);
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
/** Match the model's advertised parameter and exact value; never translate a boolean toggle. */
|
|
25
|
+
export function cursorEffortSelection(options, effort) {
|
|
26
|
+
const option = options.find(option => ['effort', 'reasoning', 'reasoning_effort'].includes(option.id) && option.options.some(value => value.value === effort));
|
|
27
|
+
if (!option)
|
|
28
|
+
throw new Error(`Cursor's selected model does not advertise effort '${effort}'`);
|
|
29
|
+
return { configId: option.id, value: effort };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=cursor-config-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-config-options.js","sourceRoot":"","sources":["../../src/core/cursor-config-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wFAAwF;AACxF,0FAA0F;AAC1F,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACvF,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CAAC,OAAsC,EAAE,MAAc;IAC1F,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;IAC/J,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,MAAM,GAAG,CAAC,CAAC;IAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
import type { ModelOption } from './runner-model-catalog.ts';
|
|
3
|
+
export interface CursorModelDiscoveryOptions {
|
|
4
|
+
cwd: string;
|
|
5
|
+
bin?: string;
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
spawn?: (bin: string, args: readonly string[], cwd: string) => ChildProcessWithoutNullStreams;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveCursorExecutable(bin?: string): string;
|
|
10
|
+
/** Prefer the read-only ACP extension. Older agents still expose the opaque variant listing. */
|
|
11
|
+
export declare function discoverCursorModels(options: CursorModelDiscoveryOptions): Promise<ModelOption[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Ask the installed CLI for its account's models, without starting a model turn or session.
|
|
14
|
+
* https://cursor.com/docs/cli/reference/parameters documents this listing flag.
|
|
15
|
+
* The catalog handles failures as cached/unavailable results; no credential files are read.
|
|
16
|
+
*/
|
|
17
|
+
export declare function discoverCursorVariantModels(options: CursorModelDiscoveryOptions): Promise<ModelOption[]>;
|
|
18
|
+
/** Parse the CLI's `Available models` listing, retaining its order and opaque model IDs. */
|
|
19
|
+
export declare function parseCursorModels(stdout: string): ModelOption[];
|
|
20
|
+
export declare function spawnCursor(bin: string, args: readonly string[], cwd: string, spawnImpl?: (bin: string, args: string[], options: {
|
|
21
|
+
cwd: string;
|
|
22
|
+
env: NodeJS.ProcessEnv;
|
|
23
|
+
}) => ChildProcessWithoutNullStreams): ChildProcessWithoutNullStreams;
|