@cmdctrl/cursor-cli 0.1.1 → 0.2.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 (51) hide show
  1. package/dist/adapter/cursor-cli.d.ts +23 -19
  2. package/dist/adapter/cursor-cli.d.ts.map +1 -1
  3. package/dist/adapter/cursor-cli.js +156 -126
  4. package/dist/adapter/cursor-cli.js.map +1 -1
  5. package/dist/adapter/events.d.ts +36 -20
  6. package/dist/adapter/events.d.ts.map +1 -1
  7. package/dist/adapter/events.js +40 -35
  8. package/dist/adapter/events.js.map +1 -1
  9. package/dist/commands/register.d.ts +0 -3
  10. package/dist/commands/register.d.ts.map +1 -1
  11. package/dist/commands/register.js +23 -122
  12. package/dist/commands/register.js.map +1 -1
  13. package/dist/commands/start.d.ts +1 -8
  14. package/dist/commands/start.d.ts.map +1 -1
  15. package/dist/commands/start.js +117 -30
  16. package/dist/commands/start.js.map +1 -1
  17. package/dist/commands/status.d.ts +1 -4
  18. package/dist/commands/status.d.ts.map +1 -1
  19. package/dist/commands/status.js +25 -22
  20. package/dist/commands/status.js.map +1 -1
  21. package/dist/commands/stop.d.ts +1 -4
  22. package/dist/commands/stop.d.ts.map +1 -1
  23. package/dist/commands/stop.js +21 -26
  24. package/dist/commands/stop.js.map +1 -1
  25. package/dist/commands/unregister.d.ts +2 -0
  26. package/dist/commands/unregister.d.ts.map +1 -0
  27. package/dist/commands/unregister.js +43 -0
  28. package/dist/commands/unregister.js.map +1 -0
  29. package/dist/commands/update.d.ts.map +1 -1
  30. package/dist/commands/update.js +21 -2
  31. package/dist/commands/update.js.map +1 -1
  32. package/dist/index.js +8 -4
  33. package/dist/index.js.map +1 -1
  34. package/dist/message-store.d.ts +18 -0
  35. package/dist/message-store.d.ts.map +1 -0
  36. package/dist/message-store.js +49 -0
  37. package/dist/message-store.js.map +1 -0
  38. package/package.json +2 -2
  39. package/src/adapter/cursor-cli.ts +165 -147
  40. package/src/adapter/events.ts +65 -51
  41. package/src/commands/register.ts +28 -170
  42. package/src/commands/start.ts +132 -41
  43. package/src/commands/status.ts +23 -28
  44. package/src/commands/stop.ts +21 -32
  45. package/src/commands/unregister.ts +43 -0
  46. package/src/commands/update.ts +24 -3
  47. package/src/index.ts +9 -4
  48. package/src/message-store.ts +61 -0
  49. package/src/client/messages.ts +0 -75
  50. package/src/client/websocket.ts +0 -308
  51. package/src/config/config.ts +0 -146
@@ -1,53 +1,58 @@
1
1
  "use strict";
2
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
3
+ * Types for Cursor CLI (cursor-agent) stream-json output.
4
+ *
5
+ * cursor-agent --output-format stream-json emits NDJSON events:
6
+ * system (subtype: init) - Session metadata (session_id, model, cwd)
7
+ * user - Echo of user message
8
+ * thinking (subtype: delta) - Streaming thinking text chunks
9
+ * thinking (subtype: completed) - Thinking finished
10
+ * assistant - Assistant response message
11
+ * tool_call - Tool invocation (file edit, shell, etc.)
12
+ * tool_result - Tool execution result
13
+ * result (subtype: success) - Final result with aggregated response
14
+ * result (subtype: error) - Error result
6
15
  */
7
16
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.extractProgressFromAction = extractProgressFromAction;
17
+ exports.extractProgressFromToolCall = extractProgressFromToolCall;
9
18
  /**
10
- * Extract progress info from action event
19
+ * Extract progress info from a tool_call event.
11
20
  */
12
- function extractProgressFromAction(event) {
13
- if (event.type !== 'action' || !event.tool) {
21
+ function extractProgressFromToolCall(event) {
22
+ if (event.type !== 'tool_call' || !event.tool_name)
14
23
  return null;
15
- }
16
- switch (event.tool) {
24
+ const params = event.parameters || {};
25
+ switch (event.tool_name) {
17
26
  case 'file_read':
18
- return {
19
- action: 'Reading',
20
- target: event.file || 'file'
21
- };
27
+ case 'ReadFile':
28
+ case 'read_file':
29
+ return { action: 'Reading', target: params.path || 'file' };
22
30
  case 'file_write':
31
+ case 'WriteFile':
32
+ case 'write_file':
33
+ return { action: 'Writing', target: params.path || 'file' };
23
34
  case 'file_edit':
24
- return {
25
- action: 'Editing',
26
- target: event.file || 'file'
27
- };
35
+ case 'EditFile':
36
+ case 'edit_file':
37
+ return { action: 'Editing', target: params.path || 'file' };
28
38
  case 'shell':
29
39
  case 'terminal':
30
- const cmd = event.content || '';
31
- return {
32
- action: 'Running',
33
- target: cmd.length > 30 ? cmd.substring(0, 30) + '...' : cmd
34
- };
40
+ case 'Shell':
41
+ case 'Bash': {
42
+ const cmd = String(params.command || '').substring(0, 40);
43
+ return { action: 'Running', target: cmd };
44
+ }
35
45
  case 'search':
36
46
  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
- };
47
+ case 'GrepTool':
48
+ case 'SearchFiles':
49
+ return { action: 'Searching', target: params.pattern || params.query || 'files' };
50
+ case 'list_directory':
51
+ case 'GlobTool':
52
+ case 'glob':
53
+ return { action: 'Searching', target: params.pattern || params.path || 'files' };
46
54
  default:
47
- return {
48
- action: event.tool,
49
- target: event.file || event.content || ''
50
- };
55
+ return { action: event.tool_name, target: '' };
51
56
  }
52
57
  }
53
58
  //# sourceMappingURL=events.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/adapter/events.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;AAwCH,kEAqCC;AAxCD;;GAEG;AACH,SAAgB,2BAA2B,CAAC,KAAkB;IAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAEhE,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IAEtC,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAG,MAAM,CAAC,IAAe,IAAI,MAAM,EAAE,CAAC;QAC1E,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAG,MAAM,CAAC,IAAe,IAAI,MAAM,EAAE,CAAC;QAC1E,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAG,MAAM,CAAC,IAAe,IAAI,MAAM,EAAE,CAAC;QAC1E,KAAK,OAAO,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,aAAa;YAChB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAG,MAAM,CAAC,OAAkB,IAAK,MAAM,CAAC,KAAgB,IAAI,OAAO,EAAE,CAAC;QAC5G,KAAK,gBAAgB,CAAC;QACtB,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAG,MAAM,CAAC,OAAkB,IAAK,MAAM,CAAC,IAAe,IAAI,OAAO,EAAE,CAAC;QAC3G;YACE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;AACH,CAAC"}
@@ -2,9 +2,6 @@ interface RegisterOptions {
2
2
  server: string;
3
3
  name?: string;
4
4
  }
5
- /**
6
- * Register command - implements GitHub CLI style device auth flow
7
- */
8
5
  export declare function register(options: RegisterOptions): Promise<void>;
9
6
  export {};
10
7
  //# sourceMappingURL=register.d.ts.map
@@ -1 +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;AA4GD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEtE"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAKA,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CtE"}
@@ -35,139 +35,40 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.register = register;
37
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
- // 400 with "authorization_pending" means keep polling
95
- const data = response.data;
96
- if (response.status === 400 && data.error === 'authorization_pending') {
97
- process.stdout.write('.');
98
- continue;
99
- }
100
- // Other errors should stop polling
101
- if (response.status >= 400) {
102
- console.error('\nError polling for token:', data);
103
- return null;
104
- }
105
- }
106
- catch (err) {
107
- console.error('\nError polling for token:', err);
108
- return null;
109
- }
110
- }
111
- console.error('\nDevice code expired. Please try again.');
112
- return null;
113
- }
114
- /**
115
- * Register command - implements GitHub CLI style device auth flow
116
- */
38
+ const daemon_sdk_1 = require("@cmdctrl/daemon-sdk");
39
+ const configManager = new daemon_sdk_1.ConfigManager('cursor-cli');
117
40
  async function register(options) {
118
- const serverUrl = options.server.replace(/\/$/, ''); // Remove trailing slash
41
+ const serverUrl = options.server.replace(/\/$/, '');
119
42
  const deviceName = options.name || `${os.hostname()}-cursor`;
120
- // Check if already registered
121
- if ((0, config_1.isRegistered)()) {
122
- const config = (0, config_1.readConfig)();
43
+ if (configManager.isRegistered()) {
44
+ const config = configManager.readConfig();
123
45
  console.log(`Already registered as "${config?.deviceName}" (${config?.deviceId})`);
124
46
  console.log(`Server: ${config?.serverUrl}`);
125
- console.log(`\nTo re-register, run: ${process.argv[1]} unregister`);
47
+ console.log(`\nTo re-register, run: cmdctrl-cursor-cli unregister`);
126
48
  return;
127
49
  }
128
50
  console.log(`Registering Cursor CLI device "${deviceName}" with ${serverUrl}...\n`);
129
- // Step 1: Request device code
130
- let codeResponse;
131
- try {
132
- const response = await request(`${serverUrl}/api/devices/code`, 'POST', {
133
- deviceName,
134
- hostname: os.hostname(),
135
- agentType: 'cursor_cli'
136
- });
137
- if (response.status !== 200) {
138
- console.error('Failed to get device code:', response.data);
139
- process.exit(1);
140
- }
141
- codeResponse = response.data;
142
- }
143
- catch (err) {
144
- console.error('Failed to connect to server:', err);
145
- process.exit(1);
146
- }
147
- // Step 2: Display instructions to user
148
- console.log('To complete registration, open this URL in your browser:\n');
149
- console.log(` ${codeResponse.verificationUrl}\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) {
51
+ const result = await (0, daemon_sdk_1.registerDevice)(serverUrl, deviceName, os.hostname(), 'cursor_cli', (url, _userCode) => {
52
+ console.log('To complete registration, open this URL in your browser:\n');
53
+ console.log(` ${url}\n`);
54
+ console.log('Waiting for verification...');
55
+ });
56
+ if (!result) {
57
+ console.error('\nDevice code expired. Please try again.');
154
58
  process.exit(1);
155
59
  }
156
- // Step 4: Save config and credentials
157
- const config = {
60
+ configManager.writeConfig({
158
61
  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);
62
+ deviceId: result.deviceId,
63
+ deviceName,
64
+ });
65
+ configManager.writeCredentials({
66
+ refreshToken: result.refreshToken,
67
+ accessToken: result.accessToken,
68
+ expiresAt: result.expiresIn ? Date.now() + result.expiresIn * 1000 : undefined,
69
+ });
169
70
  console.log('\n\nRegistration complete!');
170
- console.log(`Device ID: ${tokenResponse.deviceId}`);
71
+ console.log(`Device ID: ${result.deviceId}`);
171
72
  console.log(`\nRun 'cmdctrl-cursor-cli start' to connect to the server.`);
172
73
  }
173
74
  //# sourceMappingURL=register.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,4BA8CC;AAxDD,uCAAyB;AACzB,oDAAoE;AAEpE,MAAM,aAAa,GAAG,IAAI,0BAAa,CAAC,YAAY,CAAC,CAAC;AAO/C,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAE7D,IAAI,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,EAAE,UAAU,MAAM,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,UAAU,UAAU,SAAS,OAAO,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAc,EACjC,SAAS,EACT,UAAU,EACV,EAAE,CAAC,QAAQ,EAAE,EACb,YAAY,EACZ,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,aAAa,CAAC,WAAW,CAAC;QACxB,SAAS;QACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU;KACX,CAAC,CAAC;IAEH,aAAa,CAAC,gBAAgB,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;KAC/E,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;AAC5E,CAAC"}
@@ -1,9 +1,2 @@
1
- interface StartOptions {
2
- foreground?: boolean;
3
- }
4
- /**
5
- * Start the daemon
6
- */
7
- export declare function start(options: StartOptions): Promise<void>;
8
- export {};
1
+ export declare function start(): Promise<void>;
9
2
  //# sourceMappingURL=start.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AASA,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ChE"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAQA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAkJ3C"}
@@ -1,45 +1,132 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.start = start;
4
- const config_1 = require("../config/config");
5
- const websocket_1 = require("../client/websocket");
6
- /**
7
- * Start the daemon
8
- */
9
- async function start(options) {
10
- // Check if registered
11
- if (!(0, config_1.isRegistered)()) {
12
- console.error('Device not registered. Run "cmdctrl-cursor-cli-daemon register" first.');
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const daemon_sdk_1 = require("@cmdctrl/daemon-sdk");
7
+ const cursor_cli_1 = require("../adapter/cursor-cli");
8
+ const message_store_1 = require("../message-store");
9
+ const configManager = new daemon_sdk_1.ConfigManager('cursor-cli');
10
+ async function start() {
11
+ if (!configManager.isRegistered()) {
12
+ console.error('Device not registered. Run "cmdctrl-cursor-cli register" first.');
13
13
  process.exit(1);
14
14
  }
15
- // Check if already running
16
- if ((0, config_1.isDaemonRunning)()) {
17
- console.error('Daemon is already running. Use "cmdctrl-cursor-cli-daemon stop" to stop it.');
15
+ if (configManager.isDaemonRunning()) {
16
+ console.error('Daemon is already running. Run "cmdctrl-cursor-cli stop" first.');
18
17
  process.exit(1);
19
18
  }
20
- const config = (0, config_1.readConfig)();
21
- const credentials = (0, config_1.readCredentials)();
22
- console.log(`Starting Cursor CLI daemon for device "${config.deviceName}"...`);
23
- console.log(`Server: ${config.serverUrl}`);
24
- // Write PID file
25
- (0, config_1.writePidFile)(process.pid);
26
- // Create and connect client
27
- const client = new websocket_1.DaemonClient(config, credentials);
28
- // Handle shutdown signals
29
- const shutdown = async (signal) => {
30
- console.log(`\nReceived ${signal}, shutting down...`);
19
+ const config = configManager.readConfig();
20
+ const credentials = configManager.readCredentials();
21
+ let daemonVersion = 'unknown';
22
+ try {
23
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'package.json'), 'utf-8'));
24
+ daemonVersion = pkg.version;
25
+ }
26
+ catch {
27
+ try {
28
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', '..', 'package.json'), 'utf-8'));
29
+ daemonVersion = pkg.version;
30
+ }
31
+ catch { /* use default */ }
32
+ }
33
+ console.log('Cursor CLI Daemon');
34
+ console.log(` Server: ${config.serverUrl}`);
35
+ console.log(` Device: ${config.deviceName} (${config.deviceId})`);
36
+ console.log(` Version: ${daemonVersion}`);
37
+ console.log('');
38
+ configManager.writePidFile(process.pid);
39
+ const messageStore = new message_store_1.MessageStore();
40
+ const pendingInstructions = new Map();
41
+ const taskSessionMap = new Map();
42
+ // Event callback wired into the DaemonClient below
43
+ let sendEvent;
44
+ const adapter = new cursor_cli_1.CursorAdapter((taskId, eventType, data) => {
45
+ const sessionId = data.session_id;
46
+ // Store initial user message when session starts
47
+ if (eventType === 'SESSION_STARTED' && sessionId) {
48
+ const instruction = pendingInstructions.get(taskId);
49
+ if (instruction) {
50
+ messageStore.storeMessage(sessionId, 'USER', instruction);
51
+ pendingInstructions.delete(taskId);
52
+ }
53
+ }
54
+ // Store agent response on completion
55
+ if (eventType === 'TASK_COMPLETE' && data.result) {
56
+ const sid = data.session_id || taskSessionMap.get(taskId);
57
+ if (sid) {
58
+ messageStore.storeMessage(sid, 'AGENT', data.result);
59
+ }
60
+ }
61
+ sendEvent(taskId, eventType, data);
62
+ });
63
+ const client = new daemon_sdk_1.DaemonClient({
64
+ serverUrl: config.serverUrl,
65
+ deviceId: config.deviceId,
66
+ agentType: 'cursor_cli',
67
+ token: credentials.refreshToken,
68
+ version: daemonVersion,
69
+ });
70
+ // Wire up sendEvent to the client's internal method
71
+ sendEvent = (taskId, eventType, data) => {
72
+ // Use the client to send events — the SDK handles this via task handles,
73
+ // but since the adapter uses a callback pattern, we send raw events
74
+ client.send({
75
+ type: 'event',
76
+ task_id: taskId,
77
+ event_type: eventType,
78
+ ...data,
79
+ });
80
+ };
81
+ client.onTaskStart(async (task) => {
82
+ pendingInstructions.set(task.taskId, task.instruction);
83
+ try {
84
+ await adapter.startTask(task.taskId, task.instruction, task.projectPath);
85
+ }
86
+ catch (err) {
87
+ task.error(err instanceof Error ? err.message : 'Unknown error');
88
+ }
89
+ });
90
+ client.onTaskResume(async (task) => {
91
+ messageStore.storeMessage(task.sessionId, 'USER', task.message);
92
+ taskSessionMap.set(task.taskId, task.sessionId);
93
+ try {
94
+ await adapter.resumeTask(task.taskId, task.sessionId, task.message, task.projectPath);
95
+ }
96
+ catch (err) {
97
+ task.error(err instanceof Error ? err.message : 'Unknown error');
98
+ }
99
+ });
100
+ client.onTaskCancel(async (taskId) => {
101
+ await adapter.cancelTask(taskId);
102
+ });
103
+ client.onGetMessages((req) => {
104
+ const result = messageStore.getMessages(req.sessionId, req.limit, req.beforeUuid, req.afterUuid);
105
+ return {
106
+ messages: result.messages,
107
+ hasMore: result.hasMore,
108
+ oldestUuid: result.oldestUuid,
109
+ newestUuid: result.newestUuid,
110
+ };
111
+ });
112
+ client.onVersionStatus((msg) => {
113
+ if (msg.status === 'update_available') {
114
+ console.warn(`Update available: v${msg.latest_version} (you have v${msg.your_version})`);
115
+ }
116
+ });
117
+ const shutdown = async () => {
118
+ console.log('\nShutting down...');
119
+ await adapter.stopAll();
31
120
  await client.disconnect();
121
+ configManager.deletePidFile();
32
122
  process.exit(0);
33
123
  };
34
- process.on('SIGINT', () => shutdown('SIGINT'));
35
- process.on('SIGTERM', () => shutdown('SIGTERM'));
124
+ process.on('SIGINT', shutdown);
125
+ process.on('SIGTERM', shutdown);
36
126
  try {
37
127
  await client.connect();
38
- console.log('Cursor CLI daemon connected and ready for tasks.');
39
- // In foreground mode, just keep running
40
- if (options.foreground) {
41
- console.log('Running in foreground. Press Ctrl+C to stop.');
42
- }
128
+ console.log('Cursor CLI daemon running. Press Ctrl+C to stop.\n');
129
+ await new Promise(() => { });
43
130
  }
44
131
  catch (err) {
45
132
  console.error('Failed to connect:', err);
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;AAgBA,sBA+CC;AA/DD,6CAM0B;AAC1B,mDAAmD;AAMnD;;GAEG;AACI,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,sBAAsB;IACtB,IAAI,CAAC,IAAA,qBAAY,GAAE,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAA,wBAAe,GAAE,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAG,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAA,wBAAe,GAAG,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,0CAA0C,MAAM,CAAC,UAAU,MAAM,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAE3C,iBAAiB;IACjB,IAAA,qBAAY,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,wBAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAErD,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,oBAAoB,CAAC,CAAC;QACtD,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAEhE,wCAAwC;QACxC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;AAQA,sBAkJC;AA1JD,2BAAkC;AAClC,+BAA4B;AAC5B,oDAAkE;AAClE,sDAAsD;AACtD,oDAAgD;AAEhD,MAAM,aAAa,GAAG,IAAI,0BAAa,CAAC,YAAY,CAAC,CAAC;AAE/C,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,aAAa,CAAC,eAAe,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAG,CAAC;IAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,eAAe,EAAG,CAAC;IAErD,IAAI,aAAa,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3F,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,cAAc,aAAa,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAExC,MAAM,YAAY,GAAG,IAAI,4BAAY,EAAE,CAAC;IACxC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,mDAAmD;IACnD,IAAI,SAAqF,CAAC;IAE1F,MAAM,OAAO,GAAG,IAAI,0BAAa,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAgC,CAAC;QAExD,iDAAiD;QACjD,IAAI,SAAS,KAAK,iBAAiB,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,WAAW,EAAE,CAAC;gBAChB,YAAY,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC1D,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,SAAS,KAAK,eAAe,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,GAAG,GAAI,IAAI,CAAC,UAAqB,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,GAAG,EAAE,CAAC;gBACR,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,MAAgB,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,yBAAY,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,YAAY;QACvB,KAAK,EAAE,WAAW,CAAC,YAAY;QAC/B,OAAO,EAAE,aAAa;KACvB,CAAC,CAAC;IAEH,oDAAoD;IACpD,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;QACtC,yEAAyE;QACzE,oEAAoE;QACnE,MAAc,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,SAAS;YACrB,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAChC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACjC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CACrC,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,SAAS,CACd,CAAC;QACF,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,cAAc,eAAe,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,aAAa,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,5 +1,2 @@
1
- /**
2
- * Show daemon status
3
- */
4
- export declare function status(): Promise<void>;
1
+ export declare function status(): void;
5
2
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAkC5C"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAIA,wBAAgB,MAAM,IAAI,IAAI,CAoC7B"}
@@ -1,39 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.status = status;
4
- const config_1 = require("../config/config");
5
- /**
6
- * Show daemon status
7
- */
8
- async function status() {
9
- if (!(0, config_1.isRegistered)()) {
4
+ const daemon_sdk_1 = require("@cmdctrl/daemon-sdk");
5
+ const configManager = new daemon_sdk_1.ConfigManager('cursor-cli');
6
+ function status() {
7
+ if (!configManager.isRegistered()) {
10
8
  console.log('Status: Not registered');
11
- console.log('\nRun "cmdctrl-cursor-cli-daemon register" to register this device.');
9
+ console.log('\nRun "cmdctrl-cursor-cli register" to register this device.');
12
10
  return;
13
11
  }
14
- const config = (0, config_1.readConfig)();
15
- const credentials = (0, config_1.readCredentials)();
16
- const running = (0, config_1.isDaemonRunning)();
17
- const pid = (0, config_1.readPidFile)();
12
+ const config = configManager.readConfig();
13
+ const credentials = configManager.readCredentials();
18
14
  console.log('Cursor CLI Daemon Status');
19
15
  console.log('========================');
20
16
  console.log(`Device Name: ${config.deviceName}`);
21
17
  console.log(`Device ID: ${config.deviceId}`);
22
18
  console.log(`Server: ${config.serverUrl}`);
23
- console.log();
24
- console.log(`Daemon: ${running ? `Running (PID ${pid})` : 'Stopped'}`);
25
- if (credentials) {
19
+ if (credentials?.expiresAt) {
26
20
  const expiresIn = credentials.expiresAt - Date.now();
27
- const expired = expiresIn <= 0;
28
- console.log(`Token: ${expired ? 'Expired' : 'Valid'}`);
29
- if (!expired) {
30
- const hours = Math.floor(expiresIn / 1000 / 60 / 60);
31
- const minutes = Math.floor((expiresIn / 1000 / 60) % 60);
32
- console.log(`Expires in: ${hours}h ${minutes}m`);
21
+ if (expiresIn > 0) {
22
+ const hours = Math.floor(expiresIn / 3600000);
23
+ const minutes = Math.floor((expiresIn % 3600000) / 60000);
24
+ console.log(`Token: Valid (expires in ${hours}h ${minutes}m)`);
33
25
  }
26
+ else {
27
+ console.log('Token: Expired');
28
+ }
29
+ }
30
+ else {
31
+ console.log('Token: Present');
32
+ }
33
+ if (configManager.isDaemonRunning()) {
34
+ const pid = configManager.readPidFile();
35
+ console.log(`Daemon: Running (PID ${pid})`);
34
36
  }
35
- if (!running) {
36
- console.log('\nRun "cmdctrl-cursor-cli-daemon start" to start the daemon.');
37
+ else {
38
+ console.log('Daemon: Not running');
39
+ console.log('\nRun "cmdctrl-cursor-cli start" to start the daemon.');
37
40
  }
38
41
  }
39
42
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;AAWA,wBAkCC;AA7CD,6CAM0B;AAE1B;;GAEG;AACI,KAAK,UAAU,MAAM;IAC1B,IAAI,CAAC,IAAA,qBAAY,GAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAG,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAA,wBAAe,GAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAA,wBAAe,GAAE,CAAC;IAClC,MAAM,GAAG,GAAG,IAAA,oBAAW,GAAE,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAE5E,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,KAAK,OAAO,GAAG,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;AAIA,wBAoCC;AAxCD,oDAAoD;AAEpD,MAAM,aAAa,GAAG,IAAI,0BAAa,CAAC,YAAY,CAAC,CAAC;AAEtD,SAAgB,MAAM;IACpB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAG,CAAC;IAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAEhD,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,aAAa,CAAC,eAAe,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,GAAG,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -1,5 +1,2 @@
1
- /**
2
- * Stop the daemon
3
- */
4
- export declare function stop(): Promise<void>;
1
+ export declare function stop(): void;
5
2
  //# sourceMappingURL=stop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC1C"}
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAIA,wBAAgB,IAAI,IAAI,IAAI,CA+B3B"}