ds-harness-remote 0.4.27 → 0.5.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.
- package/README.md +27 -8
- package/dist/acp/adapter.d.ts +19 -0
- package/dist/acp/adapter.d.ts.map +1 -0
- package/dist/acp/adapter.js +14 -0
- package/dist/acp/adapter.js.map +1 -0
- package/dist/acp/adapters/antigravity/executor.d.ts +20 -0
- package/dist/acp/adapters/antigravity/executor.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/executor.js +99 -0
- package/dist/acp/adapters/antigravity/executor.js.map +1 -0
- package/dist/acp/adapters/antigravity/image-store.d.ts +9 -0
- package/dist/acp/adapters/antigravity/image-store.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/image-store.js +116 -0
- package/dist/acp/adapters/antigravity/image-store.js.map +1 -0
- package/dist/acp/adapters/antigravity/index.d.ts +5 -0
- package/dist/acp/adapters/antigravity/index.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/index.js +5 -0
- package/dist/acp/adapters/antigravity/index.js.map +1 -0
- package/dist/acp/adapters/antigravity/models.d.ts +35 -0
- package/dist/acp/adapters/antigravity/models.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/models.js +59 -0
- package/dist/acp/adapters/antigravity/models.js.map +1 -0
- package/dist/acp/adapters/antigravity/service.d.ts +35 -0
- package/dist/acp/adapters/antigravity/service.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/service.js +67 -0
- package/dist/acp/adapters/antigravity/service.js.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-loader.d.ts +21 -0
- package/dist/acp/adapters/antigravity/transcript-loader.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-loader.js +356 -0
- package/dist/acp/adapters/antigravity/transcript-loader.js.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.d.ts +28 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.js +157 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.js.map +1 -0
- package/dist/acp/adapters/antigravity/types.d.ts +56 -0
- package/dist/acp/adapters/antigravity/types.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/types.js +2 -0
- package/dist/acp/adapters/antigravity/types.js.map +1 -0
- package/dist/acp/adapters/antigravity-process.d.ts +69 -0
- package/dist/acp/adapters/antigravity-process.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity-process.js +566 -0
- package/dist/acp/adapters/antigravity-process.js.map +1 -0
- package/dist/acp/adapters/antigravity.d.ts +8 -0
- package/dist/acp/adapters/antigravity.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity.js +9 -0
- package/dist/acp/adapters/antigravity.js.map +1 -0
- package/dist/acp/adapters/cursor-process.d.ts +75 -0
- package/dist/acp/adapters/cursor-process.d.ts.map +1 -0
- package/dist/acp/adapters/cursor-process.js +273 -0
- package/dist/acp/adapters/cursor-process.js.map +1 -0
- package/dist/acp/adapters/cursor.d.ts +8 -0
- package/dist/acp/adapters/cursor.d.ts.map +1 -0
- package/dist/acp/adapters/cursor.js +8 -0
- package/dist/acp/adapters/cursor.js.map +1 -0
- package/dist/acp/gateway.d.ts +108 -0
- package/dist/acp/gateway.d.ts.map +1 -0
- package/dist/acp/gateway.js +1040 -0
- package/dist/acp/gateway.js.map +1 -0
- package/dist/acp/image-content.d.ts +19 -0
- package/dist/acp/image-content.d.ts.map +1 -0
- package/dist/acp/image-content.js +76 -0
- package/dist/acp/image-content.js.map +1 -0
- package/dist/acp/method-policy.d.ts +239 -0
- package/dist/acp/method-policy.d.ts.map +1 -0
- package/dist/acp/method-policy.js +102 -0
- package/dist/acp/method-policy.js.map +1 -0
- package/dist/acp/peer-bridge.d.ts +59 -0
- package/dist/acp/peer-bridge.d.ts.map +1 -0
- package/dist/acp/peer-bridge.js +367 -0
- package/dist/acp/peer-bridge.js.map +1 -0
- package/dist/acp/virtual-harness.d.ts +181 -0
- package/dist/acp/virtual-harness.d.ts.map +1 -0
- package/dist/acp/virtual-harness.js +1556 -0
- package/dist/acp/virtual-harness.js.map +1 -0
- package/dist/acp/workspace-tools.d.ts +13 -0
- package/dist/acp/workspace-tools.d.ts.map +1 -0
- package/dist/acp/workspace-tools.js +46 -0
- package/dist/acp/workspace-tools.js.map +1 -0
- package/dist/acp.d.ts.map +1 -1
- package/dist/acp.js +1 -0
- package/dist/acp.js.map +1 -1
- package/dist/api-proxy-switch.d.ts +2 -0
- package/dist/api-proxy-switch.d.ts.map +1 -1
- package/dist/api-proxy-switch.js +9 -0
- package/dist/api-proxy-switch.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/client-runtime.d.ts +14 -1
- package/dist/client-runtime.d.ts.map +1 -1
- package/dist/client-runtime.js +160 -8
- package/dist/client-runtime.js.map +1 -1
- package/dist/client.github.js +313 -143
- package/dist/client.js +313 -143
- package/dist/client.js.map +1 -1
- package/dist/codex/domain.d.ts +4 -1
- package/dist/codex/domain.d.ts.map +1 -1
- package/dist/codex/domain.js +32 -4
- package/dist/codex/domain.js.map +1 -1
- package/dist/codex/virtual-harness.d.ts.map +1 -1
- package/dist/codex/virtual-harness.js +3 -0
- package/dist/codex/virtual-harness.js.map +1 -1
- package/dist/codex-workspace-bridge.d.ts +7 -105
- package/dist/codex-workspace-bridge.d.ts.map +1 -1
- package/dist/codex-workspace-bridge.js +10 -498
- package/dist/codex-workspace-bridge.js.map +1 -1
- package/dist/config.d.ts +22 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +45 -4
- package/dist/config.js.map +1 -1
- package/dist/connection-controller.d.ts.map +1 -1
- package/dist/connection-controller.js +7 -4
- package/dist/connection-controller.js.map +1 -1
- package/dist/control-runtime.d.ts +1 -0
- package/dist/control-runtime.d.ts.map +1 -1
- package/dist/control-runtime.js +49 -9
- package/dist/control-runtime.js.map +1 -1
- package/dist/harness-remote-bridge.d.ts +1 -1
- package/dist/harness-remote-bridge.d.ts.map +1 -1
- package/dist/harness-remote-bridge.js +4 -0
- package/dist/harness-remote-bridge.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13177 -8303
- package/dist/index.js.map +4 -4
- package/dist/remote-typert-gateway.d.ts.map +1 -1
- package/dist/remote-typert-gateway.js +7 -4
- package/dist/remote-typert-gateway.js.map +1 -1
- package/dist/rpc-router.d.ts +6 -5
- package/dist/rpc-router.d.ts.map +1 -1
- package/dist/rpc-router.js +49 -18
- package/dist/rpc-router.js.map +1 -1
- package/dist/server-connection.js +7 -0
- package/dist/server-connection.js.map +1 -1
- package/dist/service.d.ts +26 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +97 -9
- package/dist/service.js.map +1 -1
- package/dist/session-format-compat.d.ts +1 -0
- package/dist/session-format-compat.d.ts.map +1 -1
- package/dist/session-format-compat.js +14 -0
- package/dist/session-format-compat.js.map +1 -1
- package/dist/tui-command.js +2 -0
- package/dist/tui-command.js.map +1 -1
- package/dist/typert-gateway-switch.d.ts +2 -0
- package/dist/typert-gateway-switch.d.ts.map +1 -1
- package/dist/typert-gateway-switch.js +16 -0
- package/dist/typert-gateway-switch.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workspace-bridge.d.ts +117 -0
- package/dist/workspace-bridge.d.ts.map +1 -0
- package/dist/workspace-bridge.js +512 -0
- package/dist/workspace-bridge.js.map +1 -0
- package/dsh-plugin.json +1 -1
- package/package.json +31 -32
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
import type { SafeLogger } from '../../logging.js';
|
|
3
|
+
export interface CursorAcpNotification {
|
|
4
|
+
kind: 'notification';
|
|
5
|
+
method: string;
|
|
6
|
+
params: unknown;
|
|
7
|
+
}
|
|
8
|
+
export interface CursorAcpRequest {
|
|
9
|
+
kind: 'request';
|
|
10
|
+
id: string | number;
|
|
11
|
+
method: string;
|
|
12
|
+
params: unknown;
|
|
13
|
+
}
|
|
14
|
+
export type CursorAcpInbound = CursorAcpNotification | CursorAcpRequest;
|
|
15
|
+
export type CursorAcpInboundHandler = (message: CursorAcpInbound) => void;
|
|
16
|
+
export type CursorAcpUnavailableHandler = (code: string) => void;
|
|
17
|
+
export type SpawnCursorAcp = (binary: string) => ChildProcessWithoutNullStreams;
|
|
18
|
+
export interface CursorAcpLike {
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
isReady(): boolean;
|
|
21
|
+
/** Optional Host-local preparation; never a Cursor ACP wire method. */
|
|
22
|
+
prewarmSession?(cwd: string): void;
|
|
23
|
+
call(method: string, params: unknown, timeoutMs?: number): Promise<unknown>;
|
|
24
|
+
respond(id: string | number, result: unknown): Promise<void>;
|
|
25
|
+
respondError(id: string | number, code: number, message: string): Promise<void>;
|
|
26
|
+
onInbound(handler: CursorAcpInboundHandler): () => void;
|
|
27
|
+
onUnavailable(handler: CursorAcpUnavailableHandler): () => void;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare class CursorAcpError extends Error {
|
|
31
|
+
readonly code: string;
|
|
32
|
+
constructor(code: string, message: string, options?: ErrorOptions);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Host-local stdio client for one Cursor CLI ACP process (`agent acp`).
|
|
36
|
+
* Authorization and method policy live in the surrounding Cursor domain.
|
|
37
|
+
*/
|
|
38
|
+
export declare class CursorAcpClient implements CursorAcpLike {
|
|
39
|
+
private readonly binary;
|
|
40
|
+
private readonly logger?;
|
|
41
|
+
private readonly spawnAcp;
|
|
42
|
+
private process?;
|
|
43
|
+
private nextId;
|
|
44
|
+
private readonly pending;
|
|
45
|
+
private readonly inboundHandlers;
|
|
46
|
+
private readonly unavailableHandlers;
|
|
47
|
+
private stdoutBuffer;
|
|
48
|
+
private stderrBytes;
|
|
49
|
+
private ready;
|
|
50
|
+
private closed;
|
|
51
|
+
private failureNotified;
|
|
52
|
+
private startPromise?;
|
|
53
|
+
constructor(binary: string, logger?: SafeLogger | undefined, spawnAcp?: SpawnCursorAcp, options?: {
|
|
54
|
+
args?: string[];
|
|
55
|
+
cwd?: string;
|
|
56
|
+
});
|
|
57
|
+
start(): Promise<void>;
|
|
58
|
+
isReady(): boolean;
|
|
59
|
+
call(method: string, params: unknown, timeoutMs?: number): Promise<unknown>;
|
|
60
|
+
respond(id: string | number, result: unknown): Promise<void>;
|
|
61
|
+
respondError(id: string | number, code: number, message: string): Promise<void>;
|
|
62
|
+
onInbound(handler: CursorAcpInboundHandler): () => void;
|
|
63
|
+
onUnavailable(handler: CursorAcpUnavailableHandler): () => void;
|
|
64
|
+
close(): Promise<void>;
|
|
65
|
+
private startOnce;
|
|
66
|
+
private request;
|
|
67
|
+
private write;
|
|
68
|
+
private consumeStdout;
|
|
69
|
+
private handleLine;
|
|
70
|
+
private handleProcessFailure;
|
|
71
|
+
private notifyUnavailable;
|
|
72
|
+
private takePending;
|
|
73
|
+
private failPending;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=cursor-process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-process.d.ts","sourceRoot":"","sources":["../../../src/acp/adapters/cursor-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { PLUGIN_VERSION } from '../../version.js';
|
|
4
|
+
const ACP_REQUEST_TIMEOUT_MS = 60_000;
|
|
5
|
+
/** Full agent turns (tools + streaming) routinely exceed the short RPC budget. */
|
|
6
|
+
const ACP_PROMPT_TIMEOUT_MS = 10 * 60_000;
|
|
7
|
+
const ACP_START_TIMEOUT_MS = 20_000;
|
|
8
|
+
const MAX_ACP_LINE_BYTES = 288 * 1024 * 1024;
|
|
9
|
+
const MAX_STDERR_CAPTURE_BYTES = 4 * 1024;
|
|
10
|
+
export class CursorAcpError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(code, message, options) {
|
|
13
|
+
super(message, options);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.name = 'CursorAcpError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Host-local stdio client for one Cursor CLI ACP process (`agent acp`).
|
|
20
|
+
* Authorization and method policy live in the surrounding Cursor domain.
|
|
21
|
+
*/
|
|
22
|
+
export class CursorAcpClient {
|
|
23
|
+
binary;
|
|
24
|
+
logger;
|
|
25
|
+
spawnAcp;
|
|
26
|
+
process;
|
|
27
|
+
nextId = 1;
|
|
28
|
+
pending = new Map();
|
|
29
|
+
inboundHandlers = new Set();
|
|
30
|
+
unavailableHandlers = new Set();
|
|
31
|
+
stdoutBuffer = Buffer.alloc(0);
|
|
32
|
+
stderrBytes = 0;
|
|
33
|
+
ready = false;
|
|
34
|
+
closed = false;
|
|
35
|
+
failureNotified = false;
|
|
36
|
+
startPromise;
|
|
37
|
+
constructor(binary, logger, spawnAcp = binary => spawn(binary, options.args ?? ['acp'], {
|
|
38
|
+
cwd: options.cwd,
|
|
39
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
40
|
+
windowsHide: true,
|
|
41
|
+
env: process.env,
|
|
42
|
+
}), options = {}) {
|
|
43
|
+
this.binary = binary;
|
|
44
|
+
this.logger = logger;
|
|
45
|
+
this.spawnAcp = spawnAcp;
|
|
46
|
+
}
|
|
47
|
+
start() {
|
|
48
|
+
if (this.closed)
|
|
49
|
+
return Promise.reject(new CursorAcpError('CURSOR_CLOSED', 'The Cursor domain is closed.'));
|
|
50
|
+
if (this.ready)
|
|
51
|
+
return Promise.resolve();
|
|
52
|
+
this.startPromise ??= this.startOnce().finally(() => { this.startPromise = undefined; });
|
|
53
|
+
return this.startPromise;
|
|
54
|
+
}
|
|
55
|
+
isReady() { return this.ready; }
|
|
56
|
+
async call(method, params, timeoutMs) {
|
|
57
|
+
if (!this.ready)
|
|
58
|
+
throw new CursorAcpError('CURSOR_UNAVAILABLE', 'Cursor ACP is not ready.');
|
|
59
|
+
const budget = timeoutMs
|
|
60
|
+
?? (method === 'session/prompt' ? ACP_PROMPT_TIMEOUT_MS : ACP_REQUEST_TIMEOUT_MS);
|
|
61
|
+
return this.request(method, params, budget);
|
|
62
|
+
}
|
|
63
|
+
async respond(id, result) {
|
|
64
|
+
this.write({ jsonrpc: '2.0', id, result });
|
|
65
|
+
}
|
|
66
|
+
async respondError(id, code, message) {
|
|
67
|
+
this.write({ jsonrpc: '2.0', id, error: { code, message } });
|
|
68
|
+
}
|
|
69
|
+
onInbound(handler) {
|
|
70
|
+
this.inboundHandlers.add(handler);
|
|
71
|
+
return () => this.inboundHandlers.delete(handler);
|
|
72
|
+
}
|
|
73
|
+
onUnavailable(handler) {
|
|
74
|
+
this.unavailableHandlers.add(handler);
|
|
75
|
+
return () => this.unavailableHandlers.delete(handler);
|
|
76
|
+
}
|
|
77
|
+
async close() {
|
|
78
|
+
if (this.closed)
|
|
79
|
+
return;
|
|
80
|
+
this.closed = true;
|
|
81
|
+
this.ready = false;
|
|
82
|
+
this.failPending(new CursorAcpError('CURSOR_CLOSED', 'Cursor ACP was closed.'));
|
|
83
|
+
const child = this.process;
|
|
84
|
+
this.process = undefined;
|
|
85
|
+
if (child === undefined || child.exitCode !== null || child.killed)
|
|
86
|
+
return;
|
|
87
|
+
await new Promise(resolve => {
|
|
88
|
+
const timer = setTimeout(() => {
|
|
89
|
+
child.kill('SIGKILL');
|
|
90
|
+
resolve();
|
|
91
|
+
}, 2_000);
|
|
92
|
+
timer.unref?.();
|
|
93
|
+
child.once('exit', () => {
|
|
94
|
+
clearTimeout(timer);
|
|
95
|
+
resolve();
|
|
96
|
+
});
|
|
97
|
+
child.kill('SIGTERM');
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async startOnce() {
|
|
101
|
+
if (this.process !== undefined) {
|
|
102
|
+
throw new CursorAcpError('CURSOR_STARTING', 'Cursor ACP is already starting.');
|
|
103
|
+
}
|
|
104
|
+
const child = this.spawnAcp(this.binary);
|
|
105
|
+
this.process = child;
|
|
106
|
+
this.failureNotified = false;
|
|
107
|
+
this.stdoutBuffer = Buffer.alloc(0);
|
|
108
|
+
this.stderrBytes = 0;
|
|
109
|
+
child.stdout.on('data', chunk => this.consumeStdout(Buffer.from(chunk)));
|
|
110
|
+
child.stderr.on('data', chunk => {
|
|
111
|
+
this.stderrBytes = Math.min(MAX_STDERR_CAPTURE_BYTES, this.stderrBytes + Buffer.byteLength(chunk));
|
|
112
|
+
});
|
|
113
|
+
child.on('error', error => this.handleProcessFailure('CURSOR_BINARY_UNAVAILABLE', error));
|
|
114
|
+
child.on('exit', (code, signal) => {
|
|
115
|
+
if (this.process !== child)
|
|
116
|
+
return;
|
|
117
|
+
this.process = undefined;
|
|
118
|
+
this.ready = false;
|
|
119
|
+
this.failPending(new CursorAcpError('CURSOR_ACP_EXITED', 'Cursor ACP exited unexpectedly.'));
|
|
120
|
+
if (!this.closed) {
|
|
121
|
+
this.logger?.warn('Cursor ACP exited', {
|
|
122
|
+
code: code ?? 'none',
|
|
123
|
+
signal: signal ?? 'none',
|
|
124
|
+
stderrBytes: this.stderrBytes,
|
|
125
|
+
});
|
|
126
|
+
this.notifyUnavailable('CURSOR_ACP_EXITED');
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
try {
|
|
130
|
+
await this.request('initialize', {
|
|
131
|
+
protocolVersion: 1,
|
|
132
|
+
clientCapabilities: {
|
|
133
|
+
fs: { readTextFile: false, writeTextFile: false },
|
|
134
|
+
terminal: false,
|
|
135
|
+
},
|
|
136
|
+
clientInfo: {
|
|
137
|
+
name: 'deepseek_harness_remote',
|
|
138
|
+
version: PLUGIN_VERSION,
|
|
139
|
+
},
|
|
140
|
+
}, ACP_START_TIMEOUT_MS);
|
|
141
|
+
await this.request('authenticate', { methodId: 'cursor_login' }, ACP_START_TIMEOUT_MS);
|
|
142
|
+
this.ready = true;
|
|
143
|
+
this.logger?.info('Cursor ACP ready');
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
child.kill('SIGTERM');
|
|
147
|
+
if (error instanceof CursorAcpError)
|
|
148
|
+
throw error;
|
|
149
|
+
throw new CursorAcpError('CURSOR_INITIALIZE_FAILED', 'Cursor ACP initialization failed.', { cause: error });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
request(method, params, timeoutMs) {
|
|
153
|
+
const id = this.nextId++;
|
|
154
|
+
const result = new Promise((resolve, reject) => {
|
|
155
|
+
const timer = setTimeout(() => {
|
|
156
|
+
this.pending.delete(id);
|
|
157
|
+
reject(new CursorAcpError('CURSOR_REQUEST_TIMEOUT', 'Cursor ACP request timed out.'));
|
|
158
|
+
}, timeoutMs);
|
|
159
|
+
timer.unref?.();
|
|
160
|
+
this.pending.set(id, { resolve, reject, timer });
|
|
161
|
+
});
|
|
162
|
+
try {
|
|
163
|
+
this.write({ jsonrpc: '2.0', id, method, params });
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
const pending = this.takePending(id);
|
|
167
|
+
pending?.reject(error instanceof Error ? error : new Error('Cursor ACP write failed.'));
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
write(message) {
|
|
172
|
+
const child = this.process;
|
|
173
|
+
if (child === undefined || child.stdin.destroyed || !child.stdin.writable) {
|
|
174
|
+
throw new CursorAcpError('CURSOR_UNAVAILABLE', 'Cursor ACP is not available.');
|
|
175
|
+
}
|
|
176
|
+
child.stdin.write(`${JSON.stringify(message)}\n`);
|
|
177
|
+
}
|
|
178
|
+
consumeStdout(chunk) {
|
|
179
|
+
this.stdoutBuffer = this.stdoutBuffer.length === 0 ? chunk : Buffer.concat([this.stdoutBuffer, chunk]);
|
|
180
|
+
if (this.stdoutBuffer.length > MAX_ACP_LINE_BYTES) {
|
|
181
|
+
this.handleProcessFailure('CURSOR_RESPONSE_TOO_LARGE', new Error('Cursor ACP emitted an oversized JSONL message.'));
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
let newline = this.stdoutBuffer.indexOf(0x0a);
|
|
185
|
+
while (newline >= 0) {
|
|
186
|
+
const line = this.stdoutBuffer.subarray(0, newline);
|
|
187
|
+
this.stdoutBuffer = this.stdoutBuffer.subarray(newline + 1);
|
|
188
|
+
if (line.length > 0)
|
|
189
|
+
this.handleLine(line);
|
|
190
|
+
newline = this.stdoutBuffer.indexOf(0x0a);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
handleLine(line) {
|
|
194
|
+
let value;
|
|
195
|
+
try {
|
|
196
|
+
value = JSON.parse(line.toString('utf8'));
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
this.handleProcessFailure('CURSOR_INVALID_RESPONSE', new Error('Cursor ACP emitted invalid JSON.'));
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (!isRecord(value)) {
|
|
203
|
+
this.handleProcessFailure('CURSOR_INVALID_RESPONSE', new Error('Cursor ACP emitted an invalid message.'));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if ((typeof value.id === 'number' || typeof value.id === 'string') && ('result' in value || 'error' in value)) {
|
|
207
|
+
const pending = this.takePending(value.id);
|
|
208
|
+
if (pending === undefined)
|
|
209
|
+
return;
|
|
210
|
+
if ('error' in value && value.error !== undefined) {
|
|
211
|
+
pending.reject(new CursorAcpError('CURSOR_UPSTREAM_ERROR', safeUpstreamError(value.error)));
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
pending.resolve(value.result);
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (typeof value.method !== 'string' || value.method.length === 0 || value.method.length > 160)
|
|
219
|
+
return;
|
|
220
|
+
const params = value.params ?? {};
|
|
221
|
+
// session/update is always a live notification; never treat it as an approval request.
|
|
222
|
+
const inbound = value.method !== 'session/update'
|
|
223
|
+
&& (typeof value.id === 'string' || typeof value.id === 'number')
|
|
224
|
+
? { kind: 'request', id: value.id, method: value.method, params }
|
|
225
|
+
: { kind: 'notification', method: value.method, params };
|
|
226
|
+
for (const handler of this.inboundHandlers)
|
|
227
|
+
handler(inbound);
|
|
228
|
+
}
|
|
229
|
+
handleProcessFailure(code, cause) {
|
|
230
|
+
this.ready = false;
|
|
231
|
+
this.failPending(new CursorAcpError(code, 'Cursor ACP communication failed.', { cause }));
|
|
232
|
+
const child = this.process;
|
|
233
|
+
this.process = undefined;
|
|
234
|
+
child?.kill('SIGTERM');
|
|
235
|
+
this.logger?.warn('Cursor ACP communication failed', { code });
|
|
236
|
+
if (!this.closed)
|
|
237
|
+
this.notifyUnavailable(code);
|
|
238
|
+
}
|
|
239
|
+
notifyUnavailable(code) {
|
|
240
|
+
if (this.failureNotified)
|
|
241
|
+
return;
|
|
242
|
+
this.failureNotified = true;
|
|
243
|
+
for (const handler of this.unavailableHandlers)
|
|
244
|
+
handler(code);
|
|
245
|
+
}
|
|
246
|
+
takePending(id) {
|
|
247
|
+
const pending = this.pending.get(id);
|
|
248
|
+
if (pending === undefined)
|
|
249
|
+
return undefined;
|
|
250
|
+
this.pending.delete(id);
|
|
251
|
+
clearTimeout(pending.timer);
|
|
252
|
+
return pending;
|
|
253
|
+
}
|
|
254
|
+
failPending(error) {
|
|
255
|
+
for (const id of [...this.pending.keys()])
|
|
256
|
+
this.takePending(id)?.reject(error);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function safeUpstreamError(value) {
|
|
260
|
+
if (!isRecord(value) || typeof value.message !== 'string')
|
|
261
|
+
return 'Cursor ACP rejected the request.';
|
|
262
|
+
const message = value.message.toLowerCase();
|
|
263
|
+
if (message.includes('auth') || message.includes('login') || message.includes('api key')) {
|
|
264
|
+
return 'Cursor ACP authentication failed.';
|
|
265
|
+
}
|
|
266
|
+
if (message.includes('not initialized'))
|
|
267
|
+
return 'Cursor ACP is not initialized.';
|
|
268
|
+
return 'Cursor ACP rejected the request.';
|
|
269
|
+
}
|
|
270
|
+
function isRecord(value) {
|
|
271
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=cursor-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-process.js","sourceRoot":"","sources":["../../../src/acp/adapters/cursor-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,sBAAsB,GAAG,MAAM,CAAA;AACrC,kFAAkF;AAClF,MAAM,qBAAqB,GAAG,EAAE,GAAG,MAAM,CAAA;AACzC,MAAM,oBAAoB,GAAG,MAAM,CAAA;AACnC,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;AAC5C,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,CAAA;AAuCzC,MAAM,OAAO,cAAe,SAAQ,KAAK;IAClB;IAArB,YAAqB,IAAY,EAAE,OAAe,EAAE,OAAsB;QACxE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QADJ,SAAI,GAAJ,IAAI,CAAQ;QAE/B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;IAC9B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,eAAe;IAcP;IACA;IACA;IAfX,OAAO,CAAiC;IACxC,MAAM,GAAG,CAAC,CAAA;IACD,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;IACpD,eAAe,GAAG,IAAI,GAAG,EAA2B,CAAA;IACpD,mBAAmB,GAAG,IAAI,GAAG,EAA+B,CAAA;IACrE,YAAY,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvD,WAAW,GAAG,CAAC,CAAA;IACf,KAAK,GAAG,KAAK,CAAA;IACb,MAAM,GAAG,KAAK,CAAA;IACd,eAAe,GAAG,KAAK,CAAA;IACvB,YAAY,CAAgB;IAEpC,YACmB,MAAc,EACd,MAAmB,EACnB,WAA2B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;QAC3F,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/B,WAAW,EAAE,IAAI;QACjB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,EACF,UAA6C,EAAE;QAR9B,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAa;QACnB,aAAQ,GAAR,QAAQ,CAKvB;IAED,CAAC;IAEJ,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC,CAAA;QAC3G,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QACxC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA,CAAC,CAAC,CAAC,CAAA;QACvF,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,OAAO,KAAc,OAAO,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IAExC,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,MAAe,EAAE,SAAkB;QAC5D,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,CAAA;QAC3F,MAAM,MAAM,GAAG,SAAS;eACnB,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAA;QACnF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAmB,EAAE,MAAe;QAChD,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAmB,EAAE,IAAY,EAAE,OAAe;QACnE,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED,SAAS,CAAC,OAAgC;QACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACjC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAED,aAAa,CAAC,OAAoC;QAChD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC,CAAA;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM;YAAE,OAAM;QAC1E,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAChC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBACrB,OAAO,EAAE,CAAA;YACX,CAAC,EAAE,KAAK,CAAC,CAAA;YACT,KAAK,CAAC,KAAK,EAAE,EAAE,CAAA;YACf,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;YACF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAAA;QAChF,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;QACpB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC,CAAC,CAAA;QACtF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QACpG,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC,CAAA;QACzF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;gBAAE,OAAM;YAClC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC,mBAAmB,EAAE,iCAAiC,CAAC,CAAC,CAAA;YAC5F,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE;oBACrC,IAAI,EAAE,IAAI,IAAI,MAAM;oBACpB,MAAM,EAAE,MAAM,IAAI,MAAM;oBACxB,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAA;gBACF,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;YAC7C,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;gBAC/B,eAAe,EAAE,CAAC;gBAClB,kBAAkB,EAAE;oBAClB,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;oBACjD,QAAQ,EAAE,KAAK;iBAChB;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,cAAc;iBACxB;aACF,EAAE,oBAAoB,CAAC,CAAA;YACxB,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,oBAAoB,CAAC,CAAA;YACtF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACjB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrB,IAAI,KAAK,YAAY,cAAc;gBAAE,MAAM,KAAK,CAAA;YAChD,MAAM,IAAI,cAAc,CAAC,0BAA0B,EAAE,mCAAmC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7G,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,MAAc,EAAE,MAAe,EAAE,SAAiB;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QACxB,MAAM,MAAM,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACvB,MAAM,CAAC,IAAI,cAAc,CAAC,wBAAwB,EAAE,+BAA+B,CAAC,CAAC,CAAA;YACvF,CAAC,EAAE,SAAS,CAAC,CAAA;YACb,KAAK,CAAC,KAAK,EAAE,EAAE,CAAA;YACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QACF,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACpC,OAAO,EAAE,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAA;QACzF,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,KAAK,CAAC,OAAgB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1E,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAAA;QAChF,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAA;QACtG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YAClD,IAAI,CAAC,oBAAoB,CACvB,2BAA2B,EAC3B,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAC5D,CAAA;YACD,OAAM;QACR,CAAC;QACD,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7C,OAAO,OAAO,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;YAC3D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC1C,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,IAAI,KAAc,CAAA;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,EAAE,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAA;YACnG,OAAM;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,EAAE,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAA;YACzG,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9G,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAC1C,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAM;YACjC,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAClD,OAAO,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC7F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC/B,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG;YAAE,OAAM;QACtG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA;QACjC,uFAAuF;QACvF,MAAM,OAAO,GAAqB,KAAK,CAAC,MAAM,KAAK,gBAAgB;eAC9D,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC;YACjE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;YACjE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;QAC1D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9D,CAAC;IAEO,oBAAoB,CAAC,IAAY,EAAE,KAAY;QACrD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,kCAAkC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACzF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QACtB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,IAAI,IAAI,CAAC,eAAe;YAAE,OAAM;QAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,mBAAmB;YAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,CAAC;IAEO,WAAW,CAAC,EAAmB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACvB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,WAAW,CAAC,KAAY;QAC9B,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAChF,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,kCAAkC,CAAA;IACpG,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzF,OAAO,mCAAmC,CAAA;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,gCAAgC,CAAA;IAChF,OAAO,kCAAkC,CAAA;AAC3C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SafeLogger } from '../../logging.js';
|
|
2
|
+
import { type CursorAcpLike } from './cursor-process.js';
|
|
3
|
+
import { type AcpBackendAdapter } from '../adapter.js';
|
|
4
|
+
/** First external ACP backend (#65): Cursor CLI `agent acp` over Host stdio. */
|
|
5
|
+
export declare function createCursorAcpAdapter(binary: string, logger?: SafeLogger, createProcess?: (binary: string, logger?: SafeLogger) => CursorAcpLike): AcpBackendAdapter;
|
|
6
|
+
export { CursorAcpClient, CursorAcpError } from './cursor-process.js';
|
|
7
|
+
export type { CursorAcpInbound, CursorAcpLike, CursorAcpNotification, CursorAcpRequest, SpawnCursorAcp, } from './cursor-process.js';
|
|
8
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/acp/adapters/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAE1E,gFAAgF;AAChF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,UAAU,EACnB,aAAa,GAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,aAEvD,GACA,iBAAiB,CAEnB;AAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACrE,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CursorAcpClient } from './cursor-process.js';
|
|
2
|
+
import { adaptCursorProcess } from '../adapter.js';
|
|
3
|
+
/** First external ACP backend (#65): Cursor CLI `agent acp` over Host stdio. */
|
|
4
|
+
export function createCursorAcpAdapter(binary, logger, createProcess = (path, targetLogger) => (new CursorAcpClient(path, targetLogger))) {
|
|
5
|
+
return adaptCursorProcess(createProcess(binary, logger));
|
|
6
|
+
}
|
|
7
|
+
export { CursorAcpClient, CursorAcpError } from './cursor-process.js';
|
|
8
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/acp/adapters/cursor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAA0B,MAAM,eAAe,CAAA;AAE1E,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,MAAmB,EACnB,gBAAwE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,CAC9F,IAAI,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,CACxC;IAED,OAAO,kBAAkB,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { type RemoteTerminalSpawner } from '../workspace-bridge.js';
|
|
2
|
+
import type { ResolvedAcpConfig, ResolvedAcpBackendConfig } from '../config.js';
|
|
3
|
+
import type { PeerConnectionContext } from '../connection-controller.js';
|
|
4
|
+
import type { SafeLogger } from '../logging.js';
|
|
5
|
+
import { type CursorAcpLike } from './adapters/cursor-process.js';
|
|
6
|
+
import { AcpPeerBridge, type PublishAcpFrame } from './peer-bridge.js';
|
|
7
|
+
type AcpFactory = (binary: string, logger: SafeLogger, backend: ResolvedAcpBackendConfig) => CursorAcpLike;
|
|
8
|
+
/**
|
|
9
|
+
* Host-side Agent ACP gateway (#65). Reuses the authenticated Remote channel and
|
|
10
|
+
* delegates to independently configured Cursor/Antigravity adapters. Owns method policy,
|
|
11
|
+
* session ownership, subscriptions, and permission handles per connection.
|
|
12
|
+
*/
|
|
13
|
+
export declare class AcpRemoteGateway {
|
|
14
|
+
config: ResolvedAcpConfig;
|
|
15
|
+
private readonly logger;
|
|
16
|
+
private readonly createAcp;
|
|
17
|
+
private readonly restartDelaysMs;
|
|
18
|
+
private readonly terminalEnabled;
|
|
19
|
+
private readonly terminalSpawner?;
|
|
20
|
+
private readonly backendInstances;
|
|
21
|
+
private readonly sessionCwds;
|
|
22
|
+
private readonly workspaceState;
|
|
23
|
+
private readonly terminalOwners;
|
|
24
|
+
private readonly workspaceTools;
|
|
25
|
+
private readonly peers;
|
|
26
|
+
private readonly sessionOwners;
|
|
27
|
+
private readonly sessionBackends;
|
|
28
|
+
private readonly approvals;
|
|
29
|
+
private approvalExpiryTimer?;
|
|
30
|
+
private restartTimer?;
|
|
31
|
+
private restartAttempt;
|
|
32
|
+
private available;
|
|
33
|
+
private closed;
|
|
34
|
+
private state;
|
|
35
|
+
private unavailableCode?;
|
|
36
|
+
/** Keep ACP → Client fanout ordered; concurrent publish races Noise sends. */
|
|
37
|
+
private inboundChain;
|
|
38
|
+
/** Catch-up buffer for turns that finish while the Client is reconnecting. */
|
|
39
|
+
private readonly recentFrames;
|
|
40
|
+
/** Per-prompt live updates; attached to prompt_completed when streaming was lossy. */
|
|
41
|
+
private readonly turnCatchUp;
|
|
42
|
+
private startPromise?;
|
|
43
|
+
private readonly startingClients;
|
|
44
|
+
constructor(config: ResolvedAcpConfig, logger: SafeLogger, createAcp?: AcpFactory, restartDelaysMs?: readonly number[], terminalEnabled?: () => boolean, terminalSpawner?: RemoteTerminalSpawner | undefined);
|
|
45
|
+
/** Only implemented adapters are advertised; registry entries never select an adapter by executable name. */
|
|
46
|
+
enabledBackends(): string[];
|
|
47
|
+
start(): Promise<void>;
|
|
48
|
+
private startOnce;
|
|
49
|
+
isAvailable(): boolean;
|
|
50
|
+
availableBackends(): string[];
|
|
51
|
+
defaultBackend(): string;
|
|
52
|
+
status(): {
|
|
53
|
+
enabled: boolean;
|
|
54
|
+
available: boolean;
|
|
55
|
+
state: 'disabled' | 'starting' | 'ready' | 'restarting' | 'unavailable';
|
|
56
|
+
restartAttempt: number;
|
|
57
|
+
error?: string;
|
|
58
|
+
availableBackends?: string[];
|
|
59
|
+
};
|
|
60
|
+
createPeer(context: PeerConnectionContext, publish: PublishAcpFrame): AcpPeerBridge | undefined;
|
|
61
|
+
call(connectionId: string, input: unknown): Promise<unknown>;
|
|
62
|
+
private runPromptInBackground;
|
|
63
|
+
respond(connectionId: string, input: unknown): Promise<{
|
|
64
|
+
resolved: true;
|
|
65
|
+
}>;
|
|
66
|
+
dropPeer(connectionId: string): void;
|
|
67
|
+
private tools;
|
|
68
|
+
openToolStream(connectionId: string, sessionId: string, backend: string, endpoint: string, args: Record<string, unknown>, signal: AbortSignal): Promise<AsyncIterable<unknown>>;
|
|
69
|
+
/** Used by peer stream open to prove this connection may observe the session. */
|
|
70
|
+
assertStreamable(connectionId: string, sessionId: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* After a Client reconnect, session ownership may have been cleared with the
|
|
73
|
+
* old peer. Reclaim the in-memory ACP session for the new connection so
|
|
74
|
+
* stream open / prompt can resume and buffered frames can replay.
|
|
75
|
+
*/
|
|
76
|
+
private claimSession;
|
|
77
|
+
/** Replay frames buffered while no healthy peer could receive them. */
|
|
78
|
+
replayBufferedFrames(connectionId: string, sessionId: string): Promise<void>;
|
|
79
|
+
reconfigure(config: ResolvedAcpConfig): Promise<void>;
|
|
80
|
+
close(): Promise<void>;
|
|
81
|
+
private launchAcp;
|
|
82
|
+
private backendCurrent;
|
|
83
|
+
private launchBackendCandidate;
|
|
84
|
+
private handleInbound;
|
|
85
|
+
private publishToSession;
|
|
86
|
+
private recordTurnCatchUp;
|
|
87
|
+
private bufferFrame;
|
|
88
|
+
private pruneFrameBuffer;
|
|
89
|
+
private handleUnavailable;
|
|
90
|
+
private scheduleRestart;
|
|
91
|
+
private scheduleApprovalExpiry;
|
|
92
|
+
private requireAcp;
|
|
93
|
+
private initializeResult;
|
|
94
|
+
private callUpstream;
|
|
95
|
+
private requireSessionAccess;
|
|
96
|
+
private requireSessionOwner;
|
|
97
|
+
private requireExistingDirectory;
|
|
98
|
+
private listDirectory;
|
|
99
|
+
private disposeInstance;
|
|
100
|
+
private disposeAllInstances;
|
|
101
|
+
}
|
|
102
|
+
export type { PublishAcpFrame };
|
|
103
|
+
/**
|
|
104
|
+
* Prefer `~/.local/bin/agent` when the user kept the default command. Explicit
|
|
105
|
+
* binary configuration is never rewritten.
|
|
106
|
+
*/
|
|
107
|
+
export declare function cursorBinaryCandidates(configured: string): string[];
|
|
108
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/acp/gateway.ts"],"names":[],"mappings":"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"}
|