@cmdctrl/cursor-cli 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/adapter/cursor-cli.d.ts +36 -0
  2. package/dist/adapter/cursor-cli.d.ts.map +1 -0
  3. package/dist/adapter/cursor-cli.js +332 -0
  4. package/dist/adapter/cursor-cli.js.map +1 -0
  5. package/dist/adapter/events.d.ts +33 -0
  6. package/dist/adapter/events.d.ts.map +1 -0
  7. package/dist/adapter/events.js +53 -0
  8. package/dist/adapter/events.js.map +1 -0
  9. package/dist/client/messages.d.ts +50 -0
  10. package/dist/client/messages.d.ts.map +1 -0
  11. package/dist/client/messages.js +6 -0
  12. package/dist/client/messages.js.map +1 -0
  13. package/dist/client/websocket.d.ts +69 -0
  14. package/dist/client/websocket.d.ts.map +1 -0
  15. package/dist/client/websocket.js +272 -0
  16. package/dist/client/websocket.js.map +1 -0
  17. package/dist/commands/register.d.ts +10 -0
  18. package/dist/commands/register.d.ts.map +1 -0
  19. package/dist/commands/register.js +173 -0
  20. package/dist/commands/register.js.map +1 -0
  21. package/dist/commands/start.d.ts +9 -0
  22. package/dist/commands/start.d.ts.map +1 -0
  23. package/dist/commands/start.js +49 -0
  24. package/dist/commands/start.js.map +1 -0
  25. package/dist/commands/status.d.ts +5 -0
  26. package/dist/commands/status.d.ts.map +1 -0
  27. package/dist/commands/status.js +39 -0
  28. package/dist/commands/status.js.map +1 -0
  29. package/dist/commands/stop.d.ts +5 -0
  30. package/dist/commands/stop.d.ts.map +1 -0
  31. package/dist/commands/stop.js +42 -0
  32. package/dist/commands/stop.js.map +1 -0
  33. package/dist/commands/update.d.ts +2 -0
  34. package/dist/commands/update.d.ts.map +1 -0
  35. package/dist/commands/update.js +72 -0
  36. package/dist/commands/update.js.map +1 -0
  37. package/dist/config/config.d.ts +60 -0
  38. package/dist/config/config.d.ts.map +1 -0
  39. package/dist/config/config.js +176 -0
  40. package/dist/config/config.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +50 -0
  44. package/dist/index.js.map +1 -0
  45. package/package.json +38 -0
  46. package/src/adapter/cursor-cli.ts +370 -0
  47. package/src/adapter/events.ts +77 -0
  48. package/src/client/messages.ts +75 -0
  49. package/src/client/websocket.ts +308 -0
  50. package/src/commands/register.ts +199 -0
  51. package/src/commands/start.ts +64 -0
  52. package/src/commands/status.ts +46 -0
  53. package/src/commands/stop.ts +47 -0
  54. package/src/commands/update.ts +73 -0
  55. package/src/config/config.ts +146 -0
  56. package/src/index.ts +56 -0
  57. package/tsconfig.json +19 -0
@@ -0,0 +1,36 @@
1
+ type EventCallback = (taskId: string, eventType: string, data: Record<string, unknown>) => void;
2
+ export declare class CursorAdapter {
3
+ private running;
4
+ private onEvent;
5
+ constructor(onEvent: EventCallback);
6
+ /**
7
+ * Start a new task
8
+ */
9
+ startTask(taskId: string, instruction: string, projectPath?: string): Promise<void>;
10
+ /**
11
+ * Resume a task with user's reply
12
+ */
13
+ resumeTask(taskId: string, sessionId: string, message: string, projectPath?: string): Promise<void>;
14
+ /**
15
+ * Cancel a running task
16
+ */
17
+ cancelTask(taskId: string): Promise<void>;
18
+ /**
19
+ * Stop all running tasks
20
+ */
21
+ stopAll(): Promise<void>;
22
+ /**
23
+ * Get list of running task IDs
24
+ */
25
+ getRunningTasks(): string[];
26
+ /**
27
+ * Handle process stdout/stderr and emit events
28
+ */
29
+ private handleProcessOutput;
30
+ /**
31
+ * Handle a parsed stream event from Cursor CLI
32
+ */
33
+ private handleStreamEvent;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=cursor-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-cli.d.ts","sourceRoot":"","sources":["../../src/adapter/cursor-cli.ts"],"names":[],"mappings":"AAkDA,KAAK,aAAa,GAAG,CACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,IAAI,CAAC;AAEV,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAIlC;;OAEG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IA2DhB;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAwDhB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkD3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA2E1B"}
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CursorAdapter = void 0;
37
+ const child_process_1 = require("child_process");
38
+ const readline = __importStar(require("readline"));
39
+ const fs = __importStar(require("fs"));
40
+ const os = __importStar(require("os"));
41
+ const path = __importStar(require("path"));
42
+ const events_1 = require("./events");
43
+ const DEFAULT_TIMEOUT = 10 * 60 * 1000; // 10 minutes
44
+ // Find cursor-agent CLI in common locations
45
+ function findCursorCli() {
46
+ if (process.env.CURSOR_CLI_PATH) {
47
+ return process.env.CURSOR_CLI_PATH;
48
+ }
49
+ const home = os.homedir();
50
+ const commonPaths = [
51
+ path.join(home, '.cursor', 'bin', 'cursor-agent'),
52
+ path.join(home, '.local', 'bin', 'cursor-agent'),
53
+ '/usr/local/bin/cursor-agent',
54
+ '/opt/homebrew/bin/cursor-agent',
55
+ 'cursor-agent' // Fall back to PATH
56
+ ];
57
+ for (const p of commonPaths) {
58
+ if (p === 'cursor-agent')
59
+ return p; // PATH fallback
60
+ try {
61
+ if (fs.existsSync(p)) {
62
+ return p;
63
+ }
64
+ }
65
+ catch {
66
+ continue;
67
+ }
68
+ }
69
+ return 'cursor-agent'; // Fall back to PATH
70
+ }
71
+ const CLI_PATH = findCursorCli();
72
+ console.log(`[CursorAdapter] Using CLI path: ${CLI_PATH}`);
73
+ class CursorAdapter {
74
+ running = new Map();
75
+ onEvent;
76
+ constructor(onEvent) {
77
+ this.onEvent = onEvent;
78
+ }
79
+ /**
80
+ * Start a new task
81
+ */
82
+ async startTask(taskId, instruction, projectPath) {
83
+ console.log(`[${taskId}] Starting task: ${instruction.substring(0, 50)}...`);
84
+ const rt = {
85
+ taskId,
86
+ sessionId: '',
87
+ question: '',
88
+ context: '',
89
+ process: null,
90
+ timeoutHandle: null
91
+ };
92
+ this.running.set(taskId, rt);
93
+ // Validate cwd exists
94
+ let cwd = undefined;
95
+ if (projectPath && fs.existsSync(projectPath)) {
96
+ cwd = projectPath;
97
+ }
98
+ else if (projectPath) {
99
+ console.log(`[${taskId}] Warning: project path does not exist: ${projectPath}, using home dir`);
100
+ cwd = os.homedir();
101
+ this.onEvent(taskId, 'WARNING', {
102
+ warning: `Project path "${projectPath}" does not exist. Running in home directory instead.`
103
+ });
104
+ }
105
+ // Build command arguments for Cursor CLI
106
+ // cursor-agent -p "instruction" --output-format stream-json
107
+ const args = [
108
+ '-p', instruction,
109
+ '--output-format', 'stream-json'
110
+ ];
111
+ console.log(`[${taskId}] Spawning: ${CLI_PATH} with cwd: ${cwd || 'default'}`);
112
+ // Spawn Cursor CLI
113
+ const proc = (0, child_process_1.spawn)(CLI_PATH, args, {
114
+ cwd,
115
+ stdio: ['ignore', 'pipe', 'pipe'],
116
+ env: {
117
+ ...process.env,
118
+ // Pass through Cursor API key if set
119
+ CURSOR_API_KEY: process.env.CURSOR_API_KEY
120
+ }
121
+ });
122
+ rt.process = proc;
123
+ // Set timeout
124
+ rt.timeoutHandle = setTimeout(() => {
125
+ console.log(`[${taskId}] Task timed out`);
126
+ proc.kill('SIGKILL');
127
+ this.onEvent(taskId, 'ERROR', { error: 'execution timeout' });
128
+ }, DEFAULT_TIMEOUT);
129
+ // Handle process events
130
+ this.handleProcessOutput(taskId, proc, rt);
131
+ }
132
+ /**
133
+ * Resume a task with user's reply
134
+ */
135
+ async resumeTask(taskId, sessionId, message, projectPath) {
136
+ console.log(`[${taskId}] Resuming task with session ${sessionId}`);
137
+ const rt = {
138
+ taskId,
139
+ sessionId,
140
+ question: '',
141
+ context: '',
142
+ process: null,
143
+ timeoutHandle: null
144
+ };
145
+ this.running.set(taskId, rt);
146
+ // Validate cwd exists
147
+ let cwd = undefined;
148
+ if (projectPath && fs.existsSync(projectPath)) {
149
+ cwd = projectPath;
150
+ }
151
+ else if (projectPath) {
152
+ console.log(`[${taskId}] Warning: project path does not exist: ${projectPath}, using home dir`);
153
+ cwd = os.homedir();
154
+ }
155
+ // Build command arguments with --resume
156
+ // cursor-agent --resume="session-id" -p "user response" --output-format stream-json
157
+ const args = [
158
+ `--resume=${sessionId}`,
159
+ '-p', message,
160
+ '--output-format', 'stream-json'
161
+ ];
162
+ console.log(`[${taskId}] Spawning resume: ${CLI_PATH} --resume=${sessionId} with cwd: ${cwd || 'default'}`);
163
+ // Spawn Cursor CLI
164
+ const proc = (0, child_process_1.spawn)(CLI_PATH, args, {
165
+ cwd,
166
+ stdio: ['ignore', 'pipe', 'pipe'],
167
+ env: {
168
+ ...process.env,
169
+ CURSOR_API_KEY: process.env.CURSOR_API_KEY
170
+ }
171
+ });
172
+ rt.process = proc;
173
+ // Set timeout
174
+ rt.timeoutHandle = setTimeout(() => {
175
+ console.log(`[${taskId}] Task timed out`);
176
+ proc.kill('SIGKILL');
177
+ this.onEvent(taskId, 'ERROR', { error: 'execution timeout' });
178
+ }, DEFAULT_TIMEOUT);
179
+ // Handle process events
180
+ this.handleProcessOutput(taskId, proc, rt);
181
+ }
182
+ /**
183
+ * Cancel a running task
184
+ */
185
+ async cancelTask(taskId) {
186
+ const rt = this.running.get(taskId);
187
+ if (!rt) {
188
+ console.log(`[${taskId}] Task not found for cancellation`);
189
+ return;
190
+ }
191
+ if (rt.process) {
192
+ rt.process.kill('SIGTERM');
193
+ }
194
+ if (rt.timeoutHandle) {
195
+ clearTimeout(rt.timeoutHandle);
196
+ }
197
+ this.running.delete(taskId);
198
+ console.log(`[${taskId}] Task cancelled`);
199
+ }
200
+ /**
201
+ * Stop all running tasks
202
+ */
203
+ async stopAll() {
204
+ for (const [taskId, rt] of this.running) {
205
+ console.log(`[${taskId}] Stopping task`);
206
+ if (rt.process) {
207
+ rt.process.kill('SIGTERM');
208
+ }
209
+ if (rt.timeoutHandle) {
210
+ clearTimeout(rt.timeoutHandle);
211
+ }
212
+ }
213
+ this.running.clear();
214
+ }
215
+ /**
216
+ * Get list of running task IDs
217
+ */
218
+ getRunningTasks() {
219
+ return Array.from(this.running.keys());
220
+ }
221
+ /**
222
+ * Handle process stdout/stderr and emit events
223
+ */
224
+ handleProcessOutput(taskId, proc, rt) {
225
+ // Create readline interface for NDJSON parsing
226
+ const rl = readline.createInterface({
227
+ input: proc.stdout,
228
+ crlfDelay: Infinity
229
+ });
230
+ // Parse each line as JSON
231
+ rl.on('line', (line) => {
232
+ // Emit raw output for verbose mode
233
+ this.onEvent(taskId, 'OUTPUT', { output: line });
234
+ try {
235
+ const event = JSON.parse(line);
236
+ this.handleStreamEvent(taskId, event, rt);
237
+ }
238
+ catch {
239
+ // Not valid JSON, skip
240
+ }
241
+ });
242
+ // Log stderr
243
+ proc.stderr?.on('data', (data) => {
244
+ console.log(`[${taskId}] stderr: ${data.toString()}`);
245
+ });
246
+ // Handle process exit
247
+ proc.on('close', (code) => {
248
+ console.log(`[${taskId}] Process exited with code ${code}`);
249
+ if (rt.timeoutHandle) {
250
+ clearTimeout(rt.timeoutHandle);
251
+ }
252
+ this.running.delete(taskId);
253
+ });
254
+ proc.on('error', (err) => {
255
+ console.error(`[${taskId}] Process error:`, err);
256
+ this.onEvent(taskId, 'ERROR', { error: err.message });
257
+ if (rt.timeoutHandle) {
258
+ clearTimeout(rt.timeoutHandle);
259
+ }
260
+ this.running.delete(taskId);
261
+ });
262
+ }
263
+ /**
264
+ * Handle a parsed stream event from Cursor CLI
265
+ */
266
+ handleStreamEvent(taskId, event, rt) {
267
+ switch (event.type) {
268
+ case 'start':
269
+ if (event.session_id) {
270
+ rt.sessionId = event.session_id;
271
+ console.log(`[${taskId}] Session initialized: ${event.session_id}`);
272
+ }
273
+ break;
274
+ case 'thinking':
275
+ // Accumulate thinking content for context
276
+ if (event.content) {
277
+ if (rt.context) {
278
+ rt.context += '\n\n';
279
+ }
280
+ rt.context += event.content;
281
+ }
282
+ break;
283
+ case 'action':
284
+ // Track action for progress
285
+ const progress = (0, events_1.extractProgressFromAction)(event);
286
+ if (progress) {
287
+ this.onEvent(taskId, 'PROGRESS', {
288
+ action: progress.action,
289
+ target: progress.target
290
+ });
291
+ }
292
+ break;
293
+ case 'approval_request':
294
+ // User input needed - pause and wait
295
+ console.log(`[${taskId}] Approval requested: ${event.action}`);
296
+ rt.question = event.action || 'Approve this action?';
297
+ this.onEvent(taskId, 'WAIT_FOR_USER', {
298
+ session_id: rt.sessionId,
299
+ prompt: rt.question,
300
+ options: [],
301
+ context: rt.context,
302
+ approval_details: {
303
+ action: event.action,
304
+ tool: event.tool,
305
+ file: event.file
306
+ }
307
+ });
308
+ break;
309
+ case 'action_complete':
310
+ // Action was approved and completed
311
+ console.log(`[${taskId}] Action complete: ${event.status}`);
312
+ break;
313
+ case 'result':
314
+ // Task completed
315
+ console.log(`[${taskId}] Task completed`);
316
+ this.onEvent(taskId, 'TASK_COMPLETE', {
317
+ session_id: rt.sessionId,
318
+ result: event.content || ''
319
+ });
320
+ break;
321
+ case 'error':
322
+ // Error occurred
323
+ console.error(`[${taskId}] Error: ${event.error}`);
324
+ this.onEvent(taskId, 'ERROR', {
325
+ error: event.error || 'Unknown error'
326
+ });
327
+ break;
328
+ }
329
+ }
330
+ }
331
+ exports.CursorAdapter = CursorAdapter;
332
+ //# sourceMappingURL=cursor-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-cli.js","sourceRoot":"","sources":["../../src/adapter/cursor-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Types for Cursor CLI stream-json output
3
+ * Note: These are based on research and may need adjustment
4
+ * once we verify actual Cursor CLI output format
5
+ */
6
+ export interface StreamEvent {
7
+ type: 'start' | 'thinking' | 'action' | 'approval_request' | 'action_complete' | 'result' | 'error';
8
+ session_id?: string;
9
+ timestamp?: string;
10
+ content?: string;
11
+ tool?: string;
12
+ file?: string;
13
+ diff?: string;
14
+ action?: string;
15
+ status?: string;
16
+ error?: string;
17
+ }
18
+ export interface ApprovalRequest {
19
+ action: string;
20
+ tool: string;
21
+ file?: string;
22
+ command?: string;
23
+ description?: string;
24
+ }
25
+ export interface ProgressInfo {
26
+ action: string;
27
+ target: string;
28
+ }
29
+ /**
30
+ * Extract progress info from action event
31
+ */
32
+ export declare function extractProgressFromAction(event: StreamEvent): ProgressInfo | null;
33
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/adapter/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,IAAI,CAyCjF"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Types for Cursor CLI stream-json output
4
+ * Note: These are based on research and may need adjustment
5
+ * once we verify actual Cursor CLI output format
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.extractProgressFromAction = extractProgressFromAction;
9
+ /**
10
+ * Extract progress info from action event
11
+ */
12
+ function extractProgressFromAction(event) {
13
+ if (event.type !== 'action' || !event.tool) {
14
+ return null;
15
+ }
16
+ switch (event.tool) {
17
+ case 'file_read':
18
+ return {
19
+ action: 'Reading',
20
+ target: event.file || 'file'
21
+ };
22
+ case 'file_write':
23
+ case 'file_edit':
24
+ return {
25
+ action: 'Editing',
26
+ target: event.file || 'file'
27
+ };
28
+ case 'shell':
29
+ case 'terminal':
30
+ const cmd = event.content || '';
31
+ return {
32
+ action: 'Running',
33
+ target: cmd.length > 30 ? cmd.substring(0, 30) + '...' : cmd
34
+ };
35
+ case 'search':
36
+ case 'grep':
37
+ return {
38
+ action: 'Searching',
39
+ target: event.content || 'files'
40
+ };
41
+ case 'web_search':
42
+ return {
43
+ action: 'Searching web',
44
+ target: event.content || ''
45
+ };
46
+ default:
47
+ return {
48
+ action: event.tool,
49
+ target: event.file || event.content || ''
50
+ };
51
+ }
52
+ }
53
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/adapter/events.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA+BH,8DAyCC;AA5CD;;GAEG;AACH,SAAgB,yBAAyB,CAAC,KAAkB;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW;YACd,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;aAC7B,CAAC;QACJ,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW;YACd,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;aAC7B,CAAC;QACJ,KAAK,OAAO,CAAC;QACb,KAAK,UAAU;YACb,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG;aAC7D,CAAC;QACJ,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO;aACjC,CAAC;QACJ,KAAK,YAAY;YACf,OAAO;gBACL,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;aAC5B,CAAC;QACJ;YACE,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,IAAI;gBAClB,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE;aAC1C,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Message types for daemon <-> server communication
3
+ */
4
+ export interface PingMessage {
5
+ type: 'ping';
6
+ }
7
+ export interface TaskStartMessage {
8
+ type: 'task_start';
9
+ task_id: string;
10
+ instruction: string;
11
+ project_path?: string;
12
+ }
13
+ export interface TaskResumeMessage {
14
+ type: 'task_resume';
15
+ task_id: string;
16
+ session_id: string;
17
+ message: string;
18
+ project_path?: string;
19
+ }
20
+ export interface TaskCancelMessage {
21
+ type: 'task_cancel';
22
+ task_id: string;
23
+ }
24
+ export interface VersionStatusMessage {
25
+ type: 'version_status';
26
+ status: 'current' | 'update_available' | 'update_required';
27
+ your_version: string;
28
+ min_version?: string;
29
+ recommended_version?: string;
30
+ latest_version?: string;
31
+ changelog_url?: string;
32
+ message?: string;
33
+ }
34
+ export type ServerMessage = PingMessage | TaskStartMessage | TaskResumeMessage | TaskCancelMessage | VersionStatusMessage;
35
+ export interface PongMessage {
36
+ type: 'pong';
37
+ }
38
+ export interface StatusMessage {
39
+ type: 'status';
40
+ running_tasks: string[];
41
+ }
42
+ export interface EventMessage {
43
+ type: 'event';
44
+ task_id: string;
45
+ event_type: string;
46
+ [key: string]: unknown;
47
+ }
48
+ export type DaemonMessage = PongMessage | StatusMessage | EventMessage;
49
+ export type EventType = 'WAIT_FOR_USER' | 'TASK_COMPLETE' | 'OUTPUT' | 'PROGRESS' | 'ERROR';
50
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/client/messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,oBAAoB,CAAC;AAIzB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAGvE,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,eAAe,GACf,QAAQ,GACR,UAAU,GACV,OAAO,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Message types for daemon <-> server communication
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/client/messages.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,69 @@
1
+ import { CmdCtrlConfig, Credentials } from '../config/config';
2
+ export declare class DaemonClient {
3
+ private ws;
4
+ private config;
5
+ private credentials;
6
+ private reconnectDelay;
7
+ private reconnectTimer;
8
+ private pingTimer;
9
+ private shouldReconnect;
10
+ private adapter;
11
+ constructor(config: CmdCtrlConfig, credentials: Credentials);
12
+ /**
13
+ * Connect to the CmdCtrl server via WebSocket
14
+ */
15
+ connect(): Promise<void>;
16
+ /**
17
+ * Disconnect from server
18
+ */
19
+ disconnect(): Promise<void>;
20
+ /**
21
+ * Send a message to the server
22
+ */
23
+ private send;
24
+ /**
25
+ * Send an event for a task
26
+ */
27
+ private sendEvent;
28
+ /**
29
+ * Send current status to server
30
+ */
31
+ private sendStatus;
32
+ /**
33
+ * Handle incoming message from server
34
+ */
35
+ private handleMessage;
36
+ /**
37
+ * Handle task_start message
38
+ */
39
+ private handleTaskStart;
40
+ /**
41
+ * Handle task_resume message
42
+ */
43
+ private handleTaskResume;
44
+ /**
45
+ * Handle task_cancel message
46
+ */
47
+ private handleTaskCancel;
48
+ /**
49
+ * Handle version_status message from server
50
+ */
51
+ private handleVersionStatus;
52
+ /**
53
+ * Schedule reconnection with exponential backoff
54
+ */
55
+ private scheduleReconnect;
56
+ /**
57
+ * Start ping interval to keep connection alive
58
+ */
59
+ private startPingInterval;
60
+ /**
61
+ * Stop ping interval
62
+ */
63
+ private stopPingInterval;
64
+ /**
65
+ * Refresh access token using refresh token
66
+ */
67
+ refreshToken(): Promise<boolean>;
68
+ }
69
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/client/websocket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAiB9D,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW;IAM3D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;OAEG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;YACW,eAAe;IAa7B;;OAEG;YACW,gBAAgB;IAa9B;;OAEG;YACW,gBAAgB;IAK9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAIvC"}