@cmdctrl/cursor-cli 0.1.1 → 0.2.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.
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 +0 -3
  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 +0 -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,42 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stop = stop;
4
- const config_1 = require("../config/config");
5
- /**
6
- * Stop the daemon
7
- */
8
- async function stop() {
9
- if (!(0, config_1.isDaemonRunning)()) {
4
+ const daemon_sdk_1 = require("@cmdctrl/daemon-sdk");
5
+ const configManager = new daemon_sdk_1.ConfigManager('cursor-cli');
6
+ function stop() {
7
+ if (!configManager.isDaemonRunning()) {
10
8
  console.log('Daemon is not running.');
11
9
  return;
12
10
  }
13
- const pid = (0, config_1.readPidFile)();
14
- if (!pid) {
15
- console.log('Could not find daemon PID.');
11
+ const pid = configManager.readPidFile();
12
+ if (pid === null) {
13
+ console.log('No PID file found.');
16
14
  return;
17
15
  }
18
- console.log(`Stopping Cursor CLI daemon (PID ${pid})...`);
19
16
  try {
20
- // Send SIGTERM to gracefully shutdown
21
17
  process.kill(pid, 'SIGTERM');
22
- // Wait a bit for graceful shutdown
23
- await new Promise(resolve => setTimeout(resolve, 1000));
24
- // Check if still running
25
- try {
26
- process.kill(pid, 0);
27
- // Still running, send SIGKILL
28
- console.log('Daemon not responding, force killing...');
29
- process.kill(pid, 'SIGKILL');
30
- }
31
- catch {
32
- // Process is gone
33
- }
34
- (0, config_1.deletePidFile)();
35
- console.log('Daemon stopped.');
18
+ console.log(`Sent SIGTERM to daemon (PID ${pid})`);
19
+ setTimeout(() => {
20
+ try {
21
+ process.kill(pid, 0);
22
+ console.log('Daemon still running, sending SIGKILL...');
23
+ process.kill(pid, 'SIGKILL');
24
+ }
25
+ catch {
26
+ // Process is gone
27
+ }
28
+ configManager.deletePidFile();
29
+ console.log('Daemon stopped.');
30
+ }, 2000);
36
31
  }
37
32
  catch (err) {
38
33
  console.error('Failed to stop daemon:', err);
39
- (0, config_1.deletePidFile)();
34
+ configManager.deletePidFile();
40
35
  }
41
36
  }
42
37
  //# sourceMappingURL=stop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";;AASA,oBAqCC;AA9CD,6CAI0B;AAE1B;;GAEG;AACI,KAAK,UAAU,IAAI;IACxB,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAA,oBAAW,GAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,MAAM,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAE7B,mCAAmC;QACnC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,yBAAyB;QACzB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrB,8BAA8B;YAC9B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;QAED,IAAA,sBAAa,GAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAA,sBAAa,GAAE,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";;AAIA,oBA+BC;AAnCD,oDAAoD;AAEpD,MAAM,aAAa,GAAG,IAAI,0BAAa,CAAC,YAAY,CAAC,CAAC;AAEtD,SAAgB,IAAI;IAClB,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,GAAG,CAAC,CAAC;QAEnD,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,kBAAkB;YACpB,CAAC;YACD,aAAa,CAAC,aAAa,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACjC,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAC7C,aAAa,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function unregister(): Promise<void>;
2
+ //# sourceMappingURL=unregister.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unregister.d.ts","sourceRoot":"","sources":["../../src/commands/unregister.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAsChD"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unregister = unregister;
4
+ const daemon_sdk_1 = require("@cmdctrl/daemon-sdk");
5
+ const configManager = new daemon_sdk_1.ConfigManager('cursor-cli');
6
+ async function unregister() {
7
+ const config = configManager.readConfig();
8
+ if (!config) {
9
+ console.log('Not registered.');
10
+ return;
11
+ }
12
+ if (configManager.isDaemonRunning()) {
13
+ console.error('Error: Daemon is currently running.');
14
+ console.error('Please stop the daemon first with: cmdctrl-cursor-cli stop');
15
+ process.exit(1);
16
+ }
17
+ console.log(`Unregistering device "${config.deviceName}" (${config.deviceId})...`);
18
+ const credentials = configManager.readCredentials();
19
+ if (credentials) {
20
+ try {
21
+ const response = await fetch(`${config.serverUrl}/api/devices/${config.deviceId}`, {
22
+ method: 'DELETE',
23
+ headers: { 'Authorization': `Bearer ${credentials.refreshToken}` },
24
+ });
25
+ if (response.ok || response.status === 204) {
26
+ console.log('Device removed from server.');
27
+ }
28
+ else if (response.status === 404) {
29
+ console.log('Device was already removed from server.');
30
+ }
31
+ else {
32
+ console.warn(`Warning: Failed to remove device from server (HTTP ${response.status}).`);
33
+ }
34
+ }
35
+ catch {
36
+ console.warn('Warning: Could not reach server to remove device.');
37
+ }
38
+ }
39
+ configManager.clearRegistration();
40
+ console.log('Local registration data cleared.');
41
+ console.log('You can now register again with: cmdctrl-cursor-cli register -s <server-url>');
42
+ }
43
+ //# sourceMappingURL=unregister.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unregister.js","sourceRoot":"","sources":["../../src/commands/unregister.ts"],"names":[],"mappings":";;AAIA,gCAsCC;AA1CD,oDAAoD;AAEpD,MAAM,aAAa,GAAG,IAAI,0BAAa,CAAC,YAAY,CAAC,CAAC;AAE/C,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;IAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,IAAI,aAAa,CAAC,eAAe,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,QAAQ,MAAM,CAAC,CAAC;IAEnF,MAAM,WAAW,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IACpD,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,gBAAgB,MAAM,CAAC,QAAQ,EAAE,EAAE;gBACjF,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,WAAW,CAAC,YAAY,EAAE,EAAE;aACnE,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,sDAAsD,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;AAC9F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AA+BA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAyC5C"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AA6BA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAwC5C"}
@@ -4,7 +4,6 @@ exports.update = update;
4
4
  const child_process_1 = require("child_process");
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
7
- // Get the current version from package.json
8
7
  function getCurrentVersion() {
9
8
  try {
10
9
  const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', '..', 'package.json'), 'utf-8'));
@@ -20,7 +19,6 @@ function getCurrentVersion() {
20
19
  }
21
20
  }
22
21
  }
23
- // Fetch the latest version from npm registry
24
22
  async function getLatestVersion(packageName) {
25
23
  try {
26
24
  const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);
@@ -58,7 +56,6 @@ async function update() {
58
56
  console.error(` sudo npm install -g ${packageName}@latest`);
59
57
  process.exit(1);
60
58
  }
61
- // Verify the update
62
59
  try {
63
60
  const result = (0, child_process_1.execSync)(`cmdctrl-cursor-cli --version`, { encoding: 'utf-8' }).trim();
64
61
  console.log(`\nUpdated successfully to v${result}`);
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;AA6BA,wBAwCC;AArED,iDAAyC;AACzC,2BAAkC;AAClC,+BAA4B;AAE5B,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,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;QAC3F,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,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,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACrF,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACjD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,8BAA8B,WAAW,SAAS,CAAC,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAyB,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,MAAM;IAC1B,MAAM,WAAW,GAAG,qBAAqB,CAAC;IAC1C,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE1D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,wBAAwB,cAAc,IAAI,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,MAAM,cAAc,OAAO,aAAa,EAAE,CAAC,CAAC;IAE/E,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,kBAAkB,WAAW,SAAS,EAAE;YAC/C,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,SAAS,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;AACvE,CAAC"}
package/dist/index.js CHANGED
@@ -5,11 +5,11 @@ const commander_1 = require("commander");
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
7
7
  const register_1 = require("./commands/register");
8
+ const unregister_1 = require("./commands/unregister");
8
9
  const start_1 = require("./commands/start");
9
10
  const status_1 = require("./commands/status");
10
11
  const stop_1 = require("./commands/stop");
11
12
  const update_1 = require("./commands/update");
12
- // Read version from package.json
13
13
  let version = '0.0.0';
14
14
  try {
15
15
  const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'package.json'), 'utf-8'));
@@ -21,7 +21,7 @@ catch {
21
21
  const program = new commander_1.Command();
22
22
  program
23
23
  .name('cmdctrl-cursor-cli')
24
- .description('Cursor CLI daemon - connects your workstation to the CmdCtrl orchestration server')
24
+ .description('CmdCtrl daemon for Cursor CLI')
25
25
  .version(version);
26
26
  program
27
27
  .command('register')
@@ -29,14 +29,18 @@ program
29
29
  .option('-s, --server <url>', 'CmdCtrl server URL', 'http://localhost:4000')
30
30
  .option('-n, --name <name>', 'Device name (defaults to hostname-cursor)')
31
31
  .action(register_1.register);
32
+ program
33
+ .command('unregister')
34
+ .description('Remove local registration data')
35
+ .action(unregister_1.unregister);
32
36
  program
33
37
  .command('start')
34
38
  .description('Start the daemon and connect to the CmdCtrl server')
35
- .option('-f, --foreground', 'Run in foreground (don\'t daemonize)')
39
+ .option('-f, --foreground', 'Run in foreground (default)')
36
40
  .action(start_1.start);
37
41
  program
38
42
  .command('status')
39
- .description('Check daemon connection status')
43
+ .description('Check daemon registration and connection status')
40
44
  .action(status_1.status);
41
45
  program
42
46
  .command('stop')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,kDAA+C;AAC/C,4CAAyC;AACzC,8CAA2C;AAC3C,0CAAuC;AACvC,8CAA2C;AAE3C,iCAAiC;AACjC,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrF,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACxB,CAAC;AAAC,MAAM,CAAC;IACP,2BAA2B;AAC7B,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,oBAAoB,CAAC;KAC1B,WAAW,CAAC,mFAAmF,CAAC;KAChG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,uBAAuB,CAAC;KAC3E,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,mBAAQ,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;KAClE,MAAM,CAAC,aAAK,CAAC,CAAC;AAEjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,eAAM,CAAC,CAAC;AAElB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,WAAI,CAAC,CAAC;AAEhB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,eAAM,CAAC,CAAC;AAElB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,kDAA+C;AAC/C,sDAAmD;AACnD,4CAAyC;AACzC,8CAA2C;AAC3C,0CAAuC;AACvC,8CAA2C;AAE3C,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrF,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACxB,CAAC;AAAC,MAAM,CAAC;IACP,2BAA2B;AAC7B,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,oBAAoB,CAAC;KAC1B,WAAW,CAAC,+BAA+B,CAAC;KAC5C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,uBAAuB,CAAC;KAC3E,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,mBAAQ,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,uBAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;KACzD,MAAM,CAAC,aAAK,CAAC,CAAC;AAEjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,eAAM,CAAC,CAAC;AAElB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,WAAI,CAAC,CAAC;AAEhB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,eAAM,CAAC,CAAC;AAElB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * In-memory message store for Cursor CLI sessions.
3
+ *
4
+ * Cursor CLI manages its own sessions internally, but for CmdCtrl's
5
+ * get_messages protocol we need to track messages ourselves.
6
+ */
7
+ import type { MessageEntry } from '@cmdctrl/daemon-sdk';
8
+ export declare class MessageStore {
9
+ private sessions;
10
+ storeMessage(sessionId: string, role: 'USER' | 'AGENT' | 'SYSTEM', content: string): string;
11
+ getMessages(sessionId: string, limit: number, beforeUuid?: string, afterUuid?: string): {
12
+ messages: MessageEntry[];
13
+ hasMore: boolean;
14
+ oldestUuid?: string;
15
+ newestUuid?: string;
16
+ };
17
+ }
18
+ //# sourceMappingURL=message-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-store.d.ts","sourceRoot":"","sources":["../src/message-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAA0C;IAE1D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAc3F,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB;QACD,QAAQ,EAAE,YAAY,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;CAuBF"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * In-memory message store for Cursor CLI sessions.
4
+ *
5
+ * Cursor CLI manages its own sessions internally, but for CmdCtrl's
6
+ * get_messages protocol we need to track messages ourselves.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MessageStore = void 0;
10
+ const crypto_1 = require("crypto");
11
+ class MessageStore {
12
+ sessions = new Map();
13
+ storeMessage(sessionId, role, content) {
14
+ const uuid = (0, crypto_1.randomUUID)();
15
+ if (!this.sessions.has(sessionId)) {
16
+ this.sessions.set(sessionId, []);
17
+ }
18
+ this.sessions.get(sessionId).push({
19
+ uuid,
20
+ role,
21
+ content,
22
+ timestamp: new Date().toISOString(),
23
+ });
24
+ return uuid;
25
+ }
26
+ getMessages(sessionId, limit, beforeUuid, afterUuid) {
27
+ let messages = this.sessions.get(sessionId) || [];
28
+ if (beforeUuid) {
29
+ const idx = messages.findIndex(m => m.uuid === beforeUuid);
30
+ if (idx > 0)
31
+ messages = messages.slice(0, idx);
32
+ }
33
+ if (afterUuid) {
34
+ const idx = messages.findIndex(m => m.uuid === afterUuid);
35
+ if (idx >= 0)
36
+ messages = messages.slice(idx + 1);
37
+ }
38
+ const hasMore = messages.length > limit;
39
+ const limited = messages.slice(-limit);
40
+ return {
41
+ messages: limited,
42
+ hasMore,
43
+ oldestUuid: limited[0]?.uuid,
44
+ newestUuid: limited[limited.length - 1]?.uuid,
45
+ };
46
+ }
47
+ }
48
+ exports.MessageStore = MessageStore;
49
+ //# sourceMappingURL=message-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-store.js","sourceRoot":"","sources":["../src/message-store.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,mCAAoC;AAGpC,MAAa,YAAY;IACf,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAE1D,YAAY,CAAC,SAAiB,EAAE,IAAiC,EAAE,OAAe;QAChF,MAAM,IAAI,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC;YACjC,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CACT,SAAiB,EACjB,KAAa,EACb,UAAmB,EACnB,SAAkB;QAOlB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAElD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAC3D,IAAI,GAAG,GAAG,CAAC;gBAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC1D,IAAI,GAAG,IAAI,CAAC;gBAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;QACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,OAAO;YACP,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI;YAC5B,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI;SAC9C,CAAC;IACJ,CAAC;CACF;AAlDD,oCAkDC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cmdctrl/cursor-cli",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "CmdCtrl daemon for Cursor CLI - connects your workstation to the CmdCtrl orchestration server",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {
@@ -10,7 +10,6 @@
10
10
  "build": "tsc",
11
11
  "dev": "ts-node src/index.ts",
12
12
  "start": "node dist/index.js",
13
- "lint": "eslint src --ext .ts",
14
13
  "clean": "rm -rf dist"
15
14
  },
16
15
  "keywords": [
@@ -23,6 +22,7 @@
23
22
  "author": "",
24
23
  "license": "MIT",
25
24
  "dependencies": {
25
+ "@cmdctrl/daemon-sdk": "file:../sdk",
26
26
  "commander": "^12.1.0",
27
27
  "ws": "^8.18.0"
28
28
  },