cli-remote-agent 1.0.3 → 1.0.5
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/cli.js +31 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/setup.js +11 -0
- package/dist/setup.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -119,7 +119,18 @@ function decodeToken(token) {
|
|
|
119
119
|
function ask(rl, question) {
|
|
120
120
|
return new Promise((resolve) => rl.question(question, (answer) => resolve(answer)));
|
|
121
121
|
}
|
|
122
|
+
function normalizeServerUrl(url) {
|
|
123
|
+
const fixed = url.trim().replace(/^(wss?|https?)\/\//i, (_m, proto) => `${proto.toLowerCase()}://`);
|
|
124
|
+
try {
|
|
125
|
+
const u = new URL(fixed);
|
|
126
|
+
if (!/^(wss?:|https?:)$/.test(u.protocol)) throw new Error("unsupported protocol");
|
|
127
|
+
} catch {
|
|
128
|
+
throw new Error(`Invalid server URL: "${url}" (expected e.g. wss://crc.example.com)`);
|
|
129
|
+
}
|
|
130
|
+
return fixed;
|
|
131
|
+
}
|
|
122
132
|
function writeConfig(cfg) {
|
|
133
|
+
cfg.serverUrl = normalizeServerUrl(cfg.serverUrl);
|
|
123
134
|
import_fs2.default.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
124
135
|
import_fs2.default.writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2));
|
|
125
136
|
console.log(`Saved. Start the agent with: crc-agent`);
|
|
@@ -204,7 +215,7 @@ var init_types = __esm({
|
|
|
204
215
|
});
|
|
205
216
|
|
|
206
217
|
// ../shared/src/protocol.ts
|
|
207
|
-
var AGENT_HEARTBEAT, TERMINAL_OUTPUT, TERMINAL_EXIT, TERMINAL_OPEN, TERMINAL_INPUT, TERMINAL_RESIZE, TERMINAL_CLOSE, SESSION_ATTACH, SESSION_DETACH, SESSION_BUFFER, SESSION_SYNC, SESSION_SYNC_RESULT, VPN_LIST, VPN_CONNECT, VPN_DISCONNECT, VPN_UPDATE, FILES_LIST, FILES_DOWNLOAD, FILES_LIST_RESULT, FILES_DOWNLOAD_READY, FILES_DOWNLOAD_ERROR, AGENT_EXEC, AGENT_EXEC_RESULT, CLAUDE_CONV_READ, CLAUDE_CONV_DATA, CLAUDE_SESSIONS_LIST, CLAUDE_SESSIONS_RESULT, CLAUDE_HOOK, TMUX_LIST, TMUX_LIST_RESULT;
|
|
218
|
+
var AGENT_HEARTBEAT, TERMINAL_OUTPUT, TERMINAL_EXIT, TERMINAL_OPEN, TERMINAL_INPUT, TERMINAL_RESIZE, TERMINAL_CLOSE, SESSION_ATTACH, SESSION_DETACH, SESSION_BUFFER, SESSION_SYNC, SESSION_SYNC_RESULT, VPN_LIST, VPN_CONNECT, VPN_DISCONNECT, VPN_UPDATE, FILES_LIST, FILES_DOWNLOAD, FILES_LIST_RESULT, FILES_DOWNLOAD_READY, FILES_DOWNLOAD_ERROR, AGENT_EXEC, AGENT_EXEC_RESULT, CLAUDE_CONV_READ, CLAUDE_CONV_DATA, CLAUDE_SESSIONS_LIST, CLAUDE_SESSIONS_RESULT, CLAUDE_HOOK, TMUX_LIST, TMUX_LIST_RESULT, TMUX_KILL, TMUX_KILL_RESULT;
|
|
208
219
|
var init_protocol = __esm({
|
|
209
220
|
"../shared/src/protocol.ts"() {
|
|
210
221
|
"use strict";
|
|
@@ -238,6 +249,8 @@ var init_protocol = __esm({
|
|
|
238
249
|
CLAUDE_HOOK = "claude:hook";
|
|
239
250
|
TMUX_LIST = "tmux:list";
|
|
240
251
|
TMUX_LIST_RESULT = "tmux:list:result";
|
|
252
|
+
TMUX_KILL = "tmux:kill";
|
|
253
|
+
TMUX_KILL_RESULT = "tmux:kill:result";
|
|
241
254
|
}
|
|
242
255
|
});
|
|
243
256
|
|
|
@@ -506,6 +519,16 @@ async function listTmuxSessions() {
|
|
|
506
519
|
return [];
|
|
507
520
|
}
|
|
508
521
|
}
|
|
522
|
+
async function killTmuxSession(name) {
|
|
523
|
+
const { file, args } = tmuxCmd(["kill-session", "-t", `=${name}`]);
|
|
524
|
+
try {
|
|
525
|
+
await execFileAsync2(file, args, { timeout: 6e3 });
|
|
526
|
+
return { ok: true };
|
|
527
|
+
} catch (err) {
|
|
528
|
+
const msg = (err?.stderr || err?.message || "tmux kill failed").toString().trim();
|
|
529
|
+
return { ok: false, error: msg };
|
|
530
|
+
}
|
|
531
|
+
}
|
|
509
532
|
async function enrichWithPanesAndClaude(sessions2) {
|
|
510
533
|
if (IS_WIN || sessions2.length === 0) return;
|
|
511
534
|
try {
|
|
@@ -1768,6 +1791,13 @@ var init_index = __esm({
|
|
|
1768
1791
|
socket.emit(TMUX_LIST_RESULT, { requestId, sessions: [], error: err?.message || "tmux list failed" });
|
|
1769
1792
|
}
|
|
1770
1793
|
});
|
|
1794
|
+
socket.on(TMUX_KILL, async (payload) => {
|
|
1795
|
+
const { requestId, name } = payload;
|
|
1796
|
+
if (!requestId || !name) return;
|
|
1797
|
+
const result = await killTmuxSession(name);
|
|
1798
|
+
logger.info({ name, ok: result.ok, error: result.error }, "tmux kill requested");
|
|
1799
|
+
socket.emit(TMUX_KILL_RESULT, { requestId, name, ok: result.ok, error: result.error });
|
|
1800
|
+
});
|
|
1771
1801
|
socket.on(TERMINAL_INPUT, (payload) => {
|
|
1772
1802
|
writeToSession(payload.sessionId, payload.data);
|
|
1773
1803
|
});
|