@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.
- package/dist/adapter/cursor-cli.d.ts +23 -19
- package/dist/adapter/cursor-cli.d.ts.map +1 -1
- package/dist/adapter/cursor-cli.js +156 -126
- package/dist/adapter/cursor-cli.js.map +1 -1
- package/dist/adapter/events.d.ts +36 -20
- package/dist/adapter/events.d.ts.map +1 -1
- package/dist/adapter/events.js +40 -35
- package/dist/adapter/events.js.map +1 -1
- package/dist/commands/register.d.ts +0 -3
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +23 -122
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/start.d.ts +1 -8
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +117 -30
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +1 -4
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +25 -22
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +1 -4
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +21 -26
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/unregister.d.ts +2 -0
- package/dist/commands/unregister.d.ts.map +1 -0
- package/dist/commands/unregister.js +43 -0
- package/dist/commands/unregister.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +21 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/message-store.d.ts +18 -0
- package/dist/message-store.d.ts.map +1 -0
- package/dist/message-store.js +49 -0
- package/dist/message-store.js.map +1 -0
- package/package.json +2 -2
- package/src/adapter/cursor-cli.ts +165 -147
- package/src/adapter/events.ts +65 -51
- package/src/commands/register.ts +28 -170
- package/src/commands/start.ts +132 -41
- package/src/commands/status.ts +23 -28
- package/src/commands/stop.ts +21 -32
- package/src/commands/unregister.ts +43 -0
- package/src/commands/update.ts +24 -3
- package/src/index.ts +9 -4
- package/src/message-store.ts +61 -0
- package/src/client/messages.ts +0 -75
- package/src/client/websocket.ts +0 -308
- package/src/config/config.ts +0 -146
package/dist/commands/stop.js
CHANGED
|
@@ -1,42 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.stop = stop;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
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 =
|
|
14
|
-
if (
|
|
15
|
-
console.log('
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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":";;
|
|
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 @@
|
|
|
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":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAmCA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA0D5C"}
|
package/dist/commands/update.js
CHANGED
|
@@ -4,6 +4,9 @@ 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
|
+
const daemon_sdk_1 = require("@cmdctrl/daemon-sdk");
|
|
8
|
+
const stop_1 = require("./stop");
|
|
9
|
+
const configManager = new daemon_sdk_1.ConfigManager('cursor-cli');
|
|
7
10
|
// Get the current version from package.json
|
|
8
11
|
function getCurrentVersion() {
|
|
9
12
|
try {
|
|
@@ -36,6 +39,7 @@ async function getLatestVersion(packageName) {
|
|
|
36
39
|
async function update() {
|
|
37
40
|
const packageName = '@cmdctrl/cursor-cli';
|
|
38
41
|
const currentVersion = getCurrentVersion();
|
|
42
|
+
const wasRunning = configManager.isDaemonRunning();
|
|
39
43
|
console.log(`Current version: ${currentVersion}`);
|
|
40
44
|
console.log(`Checking for updates...`);
|
|
41
45
|
const latestVersion = await getLatestVersion(packageName);
|
|
@@ -47,6 +51,13 @@ async function update() {
|
|
|
47
51
|
console.log(`Already up to date (v${currentVersion}).`);
|
|
48
52
|
return;
|
|
49
53
|
}
|
|
54
|
+
// Stop daemon before updating so the old process doesn't hold stale code
|
|
55
|
+
if (wasRunning) {
|
|
56
|
+
console.log('Stopping daemon before update...');
|
|
57
|
+
(0, stop_1.stop)();
|
|
58
|
+
// Wait for stop to complete (uses setTimeout internally)
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
60
|
+
}
|
|
50
61
|
console.log(`Updating ${packageName}: v${currentVersion} → v${latestVersion}`);
|
|
51
62
|
try {
|
|
52
63
|
(0, child_process_1.execSync)(`npm install -g ${packageName}@latest`, {
|
|
@@ -66,7 +77,15 @@ async function update() {
|
|
|
66
77
|
catch {
|
|
67
78
|
console.log(`\nUpdate installed. Run 'cmdctrl-cursor-cli --version' to verify.`);
|
|
68
79
|
}
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
// Restart daemon if it was running before update
|
|
81
|
+
if (wasRunning) {
|
|
82
|
+
console.log('Restarting daemon...');
|
|
83
|
+
const child = (0, child_process_1.spawn)('cmdctrl-cursor-cli', ['start'], {
|
|
84
|
+
detached: true,
|
|
85
|
+
stdio: 'ignore',
|
|
86
|
+
});
|
|
87
|
+
child.unref();
|
|
88
|
+
console.log('Daemon restarted.');
|
|
89
|
+
}
|
|
71
90
|
}
|
|
72
91
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
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('
|
|
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 (
|
|
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,
|
|
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.
|
|
3
|
+
"version": "0.2.1",
|
|
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
|
},
|