@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.
- 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 +0 -3
- 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 +0 -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":"AA6BA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAwC5C"}
|
package/dist/commands/update.js
CHANGED
|
@@ -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":";;
|
|
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('
|
|
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.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
|
},
|