@cmdctrl/cursor-ide 0.1.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/dist/adapter/cdp-client.d.ts +66 -0
- package/dist/adapter/cdp-client.d.ts.map +1 -0
- package/dist/adapter/cdp-client.js +304 -0
- package/dist/adapter/cdp-client.js.map +1 -0
- package/dist/adapter/cursor-db.d.ts +114 -0
- package/dist/adapter/cursor-db.d.ts.map +1 -0
- package/dist/adapter/cursor-db.js +438 -0
- package/dist/adapter/cursor-db.js.map +1 -0
- package/dist/client/messages.d.ts +98 -0
- package/dist/client/messages.d.ts.map +1 -0
- package/dist/client/messages.js +6 -0
- package/dist/client/messages.js.map +1 -0
- package/dist/client/websocket.d.ts +103 -0
- package/dist/client/websocket.d.ts.map +1 -0
- package/dist/client/websocket.js +428 -0
- package/dist/client/websocket.js.map +1 -0
- package/dist/commands/register.d.ts +10 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +175 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +86 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +75 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +59 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/config/config.d.ts +68 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +189 -0
- package/dist/config/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/session-discovery.d.ts +22 -0
- package/dist/session-discovery.d.ts.map +1 -0
- package/dist/session-discovery.js +90 -0
- package/dist/session-discovery.js.map +1 -0
- package/dist/session-watcher.d.ts +62 -0
- package/dist/session-watcher.d.ts.map +1 -0
- package/dist/session-watcher.js +210 -0
- package/dist/session-watcher.js.map +1 -0
- package/package.json +40 -0
- package/src/adapter/cdp-client.ts +296 -0
- package/src/adapter/cursor-db.ts +486 -0
- package/src/client/messages.ts +138 -0
- package/src/client/websocket.ts +486 -0
- package/src/commands/register.ts +201 -0
- package/src/commands/start.ts +106 -0
- package/src/commands/status.ts +83 -0
- package/src/commands/stop.ts +58 -0
- package/src/config/config.ts +167 -0
- package/src/index.ts +39 -0
- package/src/session-discovery.ts +115 -0
- package/src/session-watcher.ts +253 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DaemonClient = void 0;
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
const url_1 = require("url");
|
|
9
|
+
const cdp_client_1 = require("../adapter/cdp-client");
|
|
10
|
+
const cursor_db_1 = require("../adapter/cursor-db");
|
|
11
|
+
const session_discovery_1 = require("../session-discovery");
|
|
12
|
+
const session_watcher_1 = require("../session-watcher");
|
|
13
|
+
const MAX_RECONNECT_DELAY = 30000; // 30 seconds
|
|
14
|
+
const INITIAL_RECONNECT_DELAY = 1000; // 1 second
|
|
15
|
+
const PING_INTERVAL = 30000; // 30 seconds
|
|
16
|
+
const SESSION_REFRESH_INTERVAL = 300000; // 5 minutes
|
|
17
|
+
class DaemonClient {
|
|
18
|
+
ws = null;
|
|
19
|
+
config;
|
|
20
|
+
credentials;
|
|
21
|
+
reconnectDelay = INITIAL_RECONNECT_DELAY;
|
|
22
|
+
reconnectTimer = null;
|
|
23
|
+
pingTimer = null;
|
|
24
|
+
sessionRefreshTimer = null;
|
|
25
|
+
shouldReconnect = true;
|
|
26
|
+
managedSessionIds = new Set();
|
|
27
|
+
runningTasks = new Set();
|
|
28
|
+
constructor(config, credentials) {
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.credentials = credentials;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Handle session activity from the watcher and forward to server
|
|
34
|
+
*/
|
|
35
|
+
handleSessionActivity(event) {
|
|
36
|
+
console.log(`[SessionWatcher] Sending activity for session ${event.session_id}`);
|
|
37
|
+
this.send({
|
|
38
|
+
type: 'session_activity',
|
|
39
|
+
session_id: event.session_id,
|
|
40
|
+
file_path: event.file_path,
|
|
41
|
+
last_message: event.last_message,
|
|
42
|
+
message_count: event.message_count,
|
|
43
|
+
is_completion: event.is_completion,
|
|
44
|
+
user_message_uuid: event.user_message_uuid,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Connect to the CmdCtrl server via WebSocket
|
|
49
|
+
*/
|
|
50
|
+
async connect() {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const serverUrl = new url_1.URL(this.config.serverUrl);
|
|
53
|
+
const wsProtocol = serverUrl.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
54
|
+
const wsUrl = `${wsProtocol}//${serverUrl.host}/ws/daemon`;
|
|
55
|
+
console.log(`Connecting to ${wsUrl}...`);
|
|
56
|
+
this.ws = new ws_1.default(wsUrl, {
|
|
57
|
+
headers: {
|
|
58
|
+
Authorization: `Bearer ${this.credentials.refreshToken}`,
|
|
59
|
+
'X-Device-ID': this.config.deviceId,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
this.ws.on('open', () => {
|
|
63
|
+
console.log('WebSocket connected');
|
|
64
|
+
this.reconnectDelay = INITIAL_RECONNECT_DELAY;
|
|
65
|
+
this.startPingInterval();
|
|
66
|
+
this.startSessionRefreshInterval();
|
|
67
|
+
this.startSessionWatcher();
|
|
68
|
+
this.sendStatus();
|
|
69
|
+
this.reportSessions();
|
|
70
|
+
resolve();
|
|
71
|
+
});
|
|
72
|
+
this.ws.on('message', (data) => {
|
|
73
|
+
this.handleMessage(data.toString());
|
|
74
|
+
});
|
|
75
|
+
this.ws.on('close', (code, reason) => {
|
|
76
|
+
console.log(`WebSocket closed: ${code} ${reason}`);
|
|
77
|
+
this.stopPingInterval();
|
|
78
|
+
this.stopSessionRefreshInterval();
|
|
79
|
+
this.stopSessionWatcher();
|
|
80
|
+
this.scheduleReconnect();
|
|
81
|
+
});
|
|
82
|
+
this.ws.on('error', (err) => {
|
|
83
|
+
console.error('WebSocket error:', err.message);
|
|
84
|
+
if (this.ws?.readyState === ws_1.default.CONNECTING) {
|
|
85
|
+
reject(err);
|
|
86
|
+
}
|
|
87
|
+
// For established connections, the 'close' event usually follows 'error',
|
|
88
|
+
// but if the connection was killed abruptly, we may not get a clean close.
|
|
89
|
+
// Force close the socket to ensure 'close' event fires and triggers reconnect.
|
|
90
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
91
|
+
this.ws.terminate();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Disconnect from server
|
|
98
|
+
*/
|
|
99
|
+
async disconnect() {
|
|
100
|
+
this.shouldReconnect = false;
|
|
101
|
+
if (this.reconnectTimer) {
|
|
102
|
+
clearTimeout(this.reconnectTimer);
|
|
103
|
+
this.reconnectTimer = null;
|
|
104
|
+
}
|
|
105
|
+
this.stopPingInterval();
|
|
106
|
+
this.stopSessionRefreshInterval();
|
|
107
|
+
this.stopSessionWatcher();
|
|
108
|
+
// Disconnect CDP client
|
|
109
|
+
(0, cdp_client_1.getCDPClient)().disconnect();
|
|
110
|
+
// Close cursor DB
|
|
111
|
+
(0, cursor_db_1.getCursorDB)().close();
|
|
112
|
+
if (this.ws) {
|
|
113
|
+
this.ws.close(1000, 'Daemon shutting down');
|
|
114
|
+
this.ws = null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Send a message to the server
|
|
119
|
+
*/
|
|
120
|
+
send(message) {
|
|
121
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
122
|
+
const json = JSON.stringify(message);
|
|
123
|
+
if (message.type !== 'pong') {
|
|
124
|
+
console.log(`[WS OUT] ${message.type}:`, json.length > 200 ? json.substring(0, 200) + '...' : json);
|
|
125
|
+
}
|
|
126
|
+
this.ws.send(json);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Send an event for a task
|
|
131
|
+
*/
|
|
132
|
+
sendEvent(taskId, eventType, data) {
|
|
133
|
+
this.send({
|
|
134
|
+
type: 'event',
|
|
135
|
+
task_id: taskId,
|
|
136
|
+
event_type: eventType,
|
|
137
|
+
...data,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Send current status to server
|
|
142
|
+
*/
|
|
143
|
+
sendStatus() {
|
|
144
|
+
this.send({
|
|
145
|
+
type: 'status',
|
|
146
|
+
running_tasks: Array.from(this.runningTasks),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Handle incoming message from server
|
|
151
|
+
*/
|
|
152
|
+
handleMessage(raw) {
|
|
153
|
+
let msg;
|
|
154
|
+
try {
|
|
155
|
+
msg = JSON.parse(raw);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
console.error('Failed to parse message:', raw);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (msg.type !== 'ping') {
|
|
162
|
+
console.log(`[WS IN] ${msg.type}:`, raw.length > 200 ? raw.substring(0, 200) + '...' : raw);
|
|
163
|
+
}
|
|
164
|
+
switch (msg.type) {
|
|
165
|
+
case 'ping':
|
|
166
|
+
this.send({ type: 'pong' });
|
|
167
|
+
break;
|
|
168
|
+
case 'task_start':
|
|
169
|
+
this.handleTaskStart(msg);
|
|
170
|
+
break;
|
|
171
|
+
case 'task_resume':
|
|
172
|
+
this.handleTaskResume(msg);
|
|
173
|
+
break;
|
|
174
|
+
case 'task_cancel':
|
|
175
|
+
// For Cursor, we can't really cancel a running AI response
|
|
176
|
+
console.log(`Task cancel requested for ${msg.task_id} (not implemented for Cursor)`);
|
|
177
|
+
break;
|
|
178
|
+
case 'get_messages':
|
|
179
|
+
this.handleGetMessages(msg);
|
|
180
|
+
break;
|
|
181
|
+
case 'watch_session':
|
|
182
|
+
this.handleWatchSession(msg);
|
|
183
|
+
break;
|
|
184
|
+
case 'unwatch_session':
|
|
185
|
+
this.handleUnwatchSession(msg);
|
|
186
|
+
break;
|
|
187
|
+
default:
|
|
188
|
+
console.warn('Unknown message type:', msg.type);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Handle task_start message - send message to Cursor via CDP
|
|
193
|
+
*/
|
|
194
|
+
async handleTaskStart(msg) {
|
|
195
|
+
console.log(`Starting task ${msg.task_id}: ${msg.instruction.substring(0, 50)}...`);
|
|
196
|
+
const cdp = (0, cdp_client_1.getCDPClient)();
|
|
197
|
+
// Check if CDP is available
|
|
198
|
+
const available = await cdp.isAvailable();
|
|
199
|
+
if (!available) {
|
|
200
|
+
console.error('CDP not available - Cursor not running with debug port?');
|
|
201
|
+
this.sendEvent(msg.task_id, 'ERROR', {
|
|
202
|
+
error: 'Cursor not available. Please start Cursor with: /Applications/Cursor.app/Contents/MacOS/Cursor --remote-debugging-port=9222',
|
|
203
|
+
});
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
// Connect to CDP
|
|
208
|
+
await cdp.connect();
|
|
209
|
+
// Check if composer is open
|
|
210
|
+
const composerOpen = await cdp.isComposerOpen();
|
|
211
|
+
if (!composerOpen) {
|
|
212
|
+
console.log('Opening composer panel...');
|
|
213
|
+
await cdp.toggleComposer();
|
|
214
|
+
// Wait a bit for panel to open
|
|
215
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
216
|
+
}
|
|
217
|
+
// Send the message
|
|
218
|
+
const success = await cdp.sendMessage(msg.instruction);
|
|
219
|
+
if (success) {
|
|
220
|
+
this.runningTasks.add(msg.task_id);
|
|
221
|
+
// For Cursor, we emit TASK_COMPLETE immediately since we can't track
|
|
222
|
+
// when the AI finishes responding. The session watcher will detect
|
|
223
|
+
// activity and send session_activity events.
|
|
224
|
+
this.sendEvent(msg.task_id, 'TASK_COMPLETE', {
|
|
225
|
+
result: 'Message sent to Cursor',
|
|
226
|
+
session_id: '', // We don't know the session ID yet
|
|
227
|
+
});
|
|
228
|
+
this.runningTasks.delete(msg.task_id);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
this.sendEvent(msg.task_id, 'ERROR', {
|
|
232
|
+
error: 'Failed to send message to Cursor',
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
console.error(`Failed to start task ${msg.task_id}:`, err);
|
|
238
|
+
this.sendEvent(msg.task_id, 'ERROR', {
|
|
239
|
+
error: err.message,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Handle task_resume message - send follow-up message to Cursor
|
|
245
|
+
*/
|
|
246
|
+
async handleTaskResume(msg) {
|
|
247
|
+
console.log(`Resuming task ${msg.task_id} with message`);
|
|
248
|
+
const cdp = (0, cdp_client_1.getCDPClient)();
|
|
249
|
+
try {
|
|
250
|
+
await cdp.connect();
|
|
251
|
+
const success = await cdp.sendMessage(msg.message);
|
|
252
|
+
if (success) {
|
|
253
|
+
this.sendEvent(msg.task_id, 'TASK_COMPLETE', {
|
|
254
|
+
result: 'Follow-up message sent to Cursor',
|
|
255
|
+
session_id: msg.session_id,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
this.sendEvent(msg.task_id, 'ERROR', {
|
|
260
|
+
error: 'Failed to send follow-up message to Cursor',
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
console.error(`Failed to resume task ${msg.task_id}:`, err);
|
|
266
|
+
this.sendEvent(msg.task_id, 'ERROR', {
|
|
267
|
+
error: err.message,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Handle get_messages request - read from Cursor SQLite database
|
|
273
|
+
*/
|
|
274
|
+
handleGetMessages(msg) {
|
|
275
|
+
console.log(`Getting messages for session ${msg.session_id}, limit=${msg.limit}, after=${msg.after_uuid || 'none'}`);
|
|
276
|
+
try {
|
|
277
|
+
const cursorDb = (0, cursor_db_1.getCursorDB)();
|
|
278
|
+
const result = cursorDb.getMessages(msg.session_id, msg.limit, msg.before_uuid, msg.after_uuid);
|
|
279
|
+
this.send({
|
|
280
|
+
type: 'messages',
|
|
281
|
+
request_id: msg.request_id,
|
|
282
|
+
session_id: msg.session_id,
|
|
283
|
+
messages: result.messages,
|
|
284
|
+
has_more: result.hasMore,
|
|
285
|
+
oldest_uuid: result.oldestUuid,
|
|
286
|
+
newest_uuid: result.newestUuid,
|
|
287
|
+
});
|
|
288
|
+
console.log(`Sent ${result.messages.length} messages, has_more=${result.hasMore}`);
|
|
289
|
+
}
|
|
290
|
+
catch (err) {
|
|
291
|
+
console.error(`Failed to get messages for session ${msg.session_id}:`, err);
|
|
292
|
+
this.send({
|
|
293
|
+
type: 'messages',
|
|
294
|
+
request_id: msg.request_id,
|
|
295
|
+
session_id: msg.session_id,
|
|
296
|
+
messages: [],
|
|
297
|
+
has_more: false,
|
|
298
|
+
error: err.message,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Handle watch_session request
|
|
304
|
+
*/
|
|
305
|
+
handleWatchSession(msg) {
|
|
306
|
+
console.log(`Starting to watch session ${msg.session_id}`);
|
|
307
|
+
const watcher = (0, session_watcher_1.getSessionWatcher)();
|
|
308
|
+
watcher.watchSession(msg.session_id);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Handle unwatch_session request
|
|
312
|
+
*/
|
|
313
|
+
handleUnwatchSession(msg) {
|
|
314
|
+
console.log(`Stopping watch for session ${msg.session_id}`);
|
|
315
|
+
const watcher = (0, session_watcher_1.getSessionWatcher)();
|
|
316
|
+
watcher.unwatchSession(msg.session_id);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Schedule reconnection with exponential backoff
|
|
320
|
+
*/
|
|
321
|
+
scheduleReconnect() {
|
|
322
|
+
if (!this.shouldReconnect) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
console.log(`Reconnecting in ${this.reconnectDelay / 1000}s...`);
|
|
326
|
+
this.reconnectTimer = setTimeout(async () => {
|
|
327
|
+
try {
|
|
328
|
+
await this.connect();
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
this.reconnectDelay = Math.min(this.reconnectDelay * 2, MAX_RECONNECT_DELAY);
|
|
332
|
+
this.scheduleReconnect();
|
|
333
|
+
}
|
|
334
|
+
}, this.reconnectDelay);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Start ping interval
|
|
338
|
+
*/
|
|
339
|
+
startPingInterval() {
|
|
340
|
+
this.pingTimer = setInterval(() => {
|
|
341
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
342
|
+
this.ws.ping();
|
|
343
|
+
}
|
|
344
|
+
}, PING_INTERVAL);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Stop ping interval
|
|
348
|
+
*/
|
|
349
|
+
stopPingInterval() {
|
|
350
|
+
if (this.pingTimer) {
|
|
351
|
+
clearInterval(this.pingTimer);
|
|
352
|
+
this.pingTimer = null;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Start the session watcher
|
|
357
|
+
*/
|
|
358
|
+
startSessionWatcher() {
|
|
359
|
+
const watcher = (0, session_watcher_1.getSessionWatcher)();
|
|
360
|
+
watcher.start(this.handleSessionActivity.bind(this));
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Stop the session watcher
|
|
364
|
+
*/
|
|
365
|
+
stopSessionWatcher() {
|
|
366
|
+
const watcher = (0, session_watcher_1.getSessionWatcher)();
|
|
367
|
+
watcher.stop();
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Report discovered external sessions to server
|
|
371
|
+
*/
|
|
372
|
+
reportSessions() {
|
|
373
|
+
try {
|
|
374
|
+
const sessions = (0, session_discovery_1.discoverSessions)(this.managedSessionIds);
|
|
375
|
+
const sessionInfos = sessions.map((s) => ({
|
|
376
|
+
session_id: s.session_id,
|
|
377
|
+
slug: s.slug,
|
|
378
|
+
title: s.title,
|
|
379
|
+
project: s.project,
|
|
380
|
+
project_name: s.project_name,
|
|
381
|
+
file_path: s.file_path,
|
|
382
|
+
last_message: s.last_message,
|
|
383
|
+
last_activity: s.last_activity,
|
|
384
|
+
is_active: s.is_active,
|
|
385
|
+
message_count: s.message_count,
|
|
386
|
+
}));
|
|
387
|
+
this.send({
|
|
388
|
+
type: 'report_sessions',
|
|
389
|
+
sessions: sessionInfos,
|
|
390
|
+
});
|
|
391
|
+
console.log(`Reported ${sessionInfos.length} external sessions`);
|
|
392
|
+
}
|
|
393
|
+
catch (err) {
|
|
394
|
+
console.error('Failed to report sessions:', err);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Start periodic session refresh
|
|
399
|
+
*/
|
|
400
|
+
startSessionRefreshInterval() {
|
|
401
|
+
this.sessionRefreshTimer = setInterval(() => {
|
|
402
|
+
this.reportSessions();
|
|
403
|
+
}, SESSION_REFRESH_INTERVAL);
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Stop session refresh interval
|
|
407
|
+
*/
|
|
408
|
+
stopSessionRefreshInterval() {
|
|
409
|
+
if (this.sessionRefreshTimer) {
|
|
410
|
+
clearInterval(this.sessionRefreshTimer);
|
|
411
|
+
this.sessionRefreshTimer = null;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Add a session ID to the managed set
|
|
416
|
+
*/
|
|
417
|
+
addManagedSession(sessionId) {
|
|
418
|
+
this.managedSessionIds.add(sessionId);
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Remove a session ID from the managed set
|
|
422
|
+
*/
|
|
423
|
+
removeManagedSession(sessionId) {
|
|
424
|
+
this.managedSessionIds.delete(sessionId);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
exports.DaemonClient = DaemonClient;
|
|
428
|
+
//# sourceMappingURL=websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/client/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface RegisterOptions {
|
|
2
|
+
server: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Register command - implements GitHub CLI style device auth flow
|
|
7
|
+
*/
|
|
8
|
+
export declare function register(options: RegisterOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAaA,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0GD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EtE"}
|
|
@@ -0,0 +1,175 @@
|
|
|
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.register = register;
|
|
37
|
+
const os = __importStar(require("os"));
|
|
38
|
+
const http = __importStar(require("http"));
|
|
39
|
+
const https = __importStar(require("https"));
|
|
40
|
+
const url_1 = require("url");
|
|
41
|
+
const config_1 = require("../config/config");
|
|
42
|
+
/**
|
|
43
|
+
* Make an HTTP(S) request
|
|
44
|
+
*/
|
|
45
|
+
function request(url, method, body) {
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
const parsed = new url_1.URL(url);
|
|
48
|
+
const client = parsed.protocol === 'https:' ? https : http;
|
|
49
|
+
const options = {
|
|
50
|
+
hostname: parsed.hostname,
|
|
51
|
+
port: parsed.port || (parsed.protocol === 'https:' ? 443 : 80),
|
|
52
|
+
path: parsed.pathname + parsed.search,
|
|
53
|
+
method,
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/json',
|
|
56
|
+
Accept: 'application/json',
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
const req = client.request(options, (res) => {
|
|
60
|
+
let data = '';
|
|
61
|
+
res.on('data', (chunk) => (data += chunk));
|
|
62
|
+
res.on('end', () => {
|
|
63
|
+
try {
|
|
64
|
+
const parsed = data ? JSON.parse(data) : {};
|
|
65
|
+
resolve({ status: res.statusCode || 0, data: parsed });
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
resolve({ status: res.statusCode || 0, data: {} });
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
req.on('error', reject);
|
|
73
|
+
if (body) {
|
|
74
|
+
req.write(JSON.stringify(body));
|
|
75
|
+
}
|
|
76
|
+
req.end();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Poll for token completion (after user verifies in browser)
|
|
81
|
+
*/
|
|
82
|
+
async function pollForToken(serverUrl, deviceCode, interval, expiresIn) {
|
|
83
|
+
const startTime = Date.now();
|
|
84
|
+
const expiresAt = startTime + expiresIn * 1000;
|
|
85
|
+
while (Date.now() < expiresAt) {
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, interval * 1000));
|
|
87
|
+
try {
|
|
88
|
+
const response = await request(`${serverUrl}/api/devices/token`, 'POST', {
|
|
89
|
+
deviceCode,
|
|
90
|
+
});
|
|
91
|
+
if (response.status === 200) {
|
|
92
|
+
return response.data;
|
|
93
|
+
}
|
|
94
|
+
const data = response.data;
|
|
95
|
+
if (response.status === 400 && data.error === 'authorization_pending') {
|
|
96
|
+
process.stdout.write('.');
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (response.status >= 400) {
|
|
100
|
+
console.error('\nError polling for token:', data);
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.error('\nError polling for token:', err);
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
console.error('\nDevice code expired. Please try again.');
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Register command - implements GitHub CLI style device auth flow
|
|
114
|
+
*/
|
|
115
|
+
async function register(options) {
|
|
116
|
+
const serverUrl = options.server.replace(/\/$/, '');
|
|
117
|
+
// Use hostname as device name - agent_type field distinguishes daemon types
|
|
118
|
+
const deviceName = options.name || os.hostname();
|
|
119
|
+
if ((0, config_1.isRegistered)()) {
|
|
120
|
+
const config = (0, config_1.readConfig)();
|
|
121
|
+
console.log(`Already registered as "${config?.deviceName}" (${config?.deviceId})`);
|
|
122
|
+
console.log(`Server: ${config?.serverUrl}`);
|
|
123
|
+
console.log('\nTo re-register, delete ~/.cmdctrl-cursor-ide/config.json and ~/.cmdctrl-cursor-ide/credentials');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
console.log(`Registering device "${deviceName}" with ${serverUrl}...\n`);
|
|
127
|
+
// Step 1: Request device code
|
|
128
|
+
let codeResponse;
|
|
129
|
+
try {
|
|
130
|
+
const response = await request(`${serverUrl}/api/devices/code`, 'POST', {
|
|
131
|
+
deviceName,
|
|
132
|
+
hostname: os.hostname(),
|
|
133
|
+
agentType: 'cursor_ide', // Identify as Cursor IDE daemon
|
|
134
|
+
});
|
|
135
|
+
if (response.status !== 200) {
|
|
136
|
+
console.error('Failed to get device code:', response.data);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
codeResponse = response.data;
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
console.error('Failed to connect to server:', err);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
// Step 2: Display instructions to user
|
|
146
|
+
console.log('To complete registration, open this URL in your browser:\n');
|
|
147
|
+
console.log(` ${codeResponse.verificationUrl}\n`);
|
|
148
|
+
console.log('Then enter this code:\n');
|
|
149
|
+
console.log(` ${codeResponse.userCode}\n`);
|
|
150
|
+
console.log('Waiting for verification...');
|
|
151
|
+
// Step 3: Poll for completion
|
|
152
|
+
const tokenResponse = await pollForToken(serverUrl, codeResponse.deviceCode, codeResponse.interval, codeResponse.expiresIn);
|
|
153
|
+
if (!tokenResponse) {
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
// Step 4: Save config and credentials
|
|
157
|
+
const config = {
|
|
158
|
+
serverUrl,
|
|
159
|
+
deviceId: tokenResponse.deviceId,
|
|
160
|
+
deviceName,
|
|
161
|
+
};
|
|
162
|
+
const credentials = {
|
|
163
|
+
accessToken: tokenResponse.accessToken,
|
|
164
|
+
refreshToken: tokenResponse.refreshToken,
|
|
165
|
+
expiresAt: Date.now() + tokenResponse.expiresIn * 1000,
|
|
166
|
+
};
|
|
167
|
+
(0, config_1.writeConfig)(config);
|
|
168
|
+
(0, config_1.writeCredentials)(credentials);
|
|
169
|
+
console.log('\n\nRegistration complete!');
|
|
170
|
+
console.log(`Device ID: ${tokenResponse.deviceId}`);
|
|
171
|
+
console.log(`\nRun 'cmdctrl-cursor-ide start' to connect to the server.`);
|
|
172
|
+
console.log(`\nIMPORTANT: Make sure to start Cursor with:`);
|
|
173
|
+
console.log(` /Applications/Cursor.app/Contents/MacOS/Cursor --remote-debugging-port=9222`);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAWA,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFhE"}
|