@yefengr/remote-pi 0.7.15 → 0.8.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 (76) hide show
  1. package/README.md +44 -95
  2. package/dist/actions/handlers.js +1 -1
  3. package/dist/actions/handlers.js.map +1 -1
  4. package/dist/actions/registry.d.ts +1 -1
  5. package/dist/actions/registry.js +1 -1
  6. package/dist/{daemon/commands.d.ts → commands.d.ts} +4 -5
  7. package/dist/commands.js +169 -0
  8. package/dist/commands.js.map +1 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.js +44 -39
  11. package/dist/index.js.map +1 -1
  12. package/dist/pairing/qr.d.ts +22 -21
  13. package/dist/pairing/qr.js +40 -65
  14. package/dist/pairing/qr.js.map +1 -1
  15. package/dist/pairing/storage.js +4 -4
  16. package/dist/pairing/storage.js.map +1 -1
  17. package/dist/protocol/types.d.ts +1 -1
  18. package/dist/protocol/v2/schemas.d.ts +5 -5
  19. package/dist/protocol/v2/schemas.js +2 -1
  20. package/dist/protocol/v2/schemas.js.map +1 -1
  21. package/dist/runtime/pairing_coordinator.js +6 -6
  22. package/dist/runtime/pairing_coordinator.js.map +1 -1
  23. package/dist/session/local_config.d.ts +0 -5
  24. package/dist/session/local_config.js +6 -29
  25. package/dist/session/local_config.js.map +1 -1
  26. package/dist/transport/relay_client.js.map +1 -1
  27. package/package.json +1 -8
  28. package/dist/bin/supervisord.d.ts +0 -2
  29. package/dist/bin/supervisord.js +0 -78
  30. package/dist/bin/supervisord.js.map +0 -1
  31. package/dist/daemon/cli-links.d.ts +0 -30
  32. package/dist/daemon/cli-links.js +0 -134
  33. package/dist/daemon/cli-links.js.map +0 -1
  34. package/dist/daemon/client.d.ts +0 -20
  35. package/dist/daemon/client.js +0 -131
  36. package/dist/daemon/client.js.map +0 -1
  37. package/dist/daemon/commands.js +0 -311
  38. package/dist/daemon/commands.js.map +0 -1
  39. package/dist/daemon/control_protocol.d.ts +0 -198
  40. package/dist/daemon/control_protocol.js +0 -40
  41. package/dist/daemon/control_protocol.js.map +0 -1
  42. package/dist/daemon/cron_log.d.ts +0 -24
  43. package/dist/daemon/cron_log.js +0 -57
  44. package/dist/daemon/cron_log.js.map +0 -1
  45. package/dist/daemon/cron_registry.d.ts +0 -43
  46. package/dist/daemon/cron_registry.js +0 -149
  47. package/dist/daemon/cron_registry.js.map +0 -1
  48. package/dist/daemon/install-runtime.d.ts +0 -10
  49. package/dist/daemon/install-runtime.js +0 -81
  50. package/dist/daemon/install-runtime.js.map +0 -1
  51. package/dist/daemon/install.d.ts +0 -110
  52. package/dist/daemon/install.js +0 -263
  53. package/dist/daemon/install.js.map +0 -1
  54. package/dist/daemon/registry.d.ts +0 -51
  55. package/dist/daemon/registry.js +0 -207
  56. package/dist/daemon/registry.js.map +0 -1
  57. package/dist/daemon/rpc_child.d.ts +0 -135
  58. package/dist/daemon/rpc_child.js +0 -472
  59. package/dist/daemon/rpc_child.js.map +0 -1
  60. package/dist/daemon/status.d.ts +0 -45
  61. package/dist/daemon/status.js +0 -87
  62. package/dist/daemon/status.js.map +0 -1
  63. package/dist/daemon/supervisor-ipc.d.ts +0 -2
  64. package/dist/daemon/supervisor-ipc.js +0 -20
  65. package/dist/daemon/supervisor-ipc.js.map +0 -1
  66. package/dist/daemon/supervisor.d.ts +0 -70
  67. package/dist/daemon/supervisor.js +0 -637
  68. package/dist/daemon/supervisor.js.map +0 -1
  69. package/dist/session/ipc.d.ts +0 -6
  70. package/dist/session/ipc.js +0 -15
  71. package/dist/session/ipc.js.map +0 -1
  72. package/docs/daemon.md +0 -175
  73. package/service-templates/launchd.plist.template +0 -35
  74. package/service-templates/systemd.service.template +0 -19
  75. package/service-templates/task-launcher.vbs.template +0 -10
  76. package/service-templates/task-scheduler.xml.template +0 -38
@@ -1,134 +0,0 @@
1
- import { delimiter, join } from "node:path";
2
- import { chmodSync, existsSync, lstatSync, mkdirSync, readlinkSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
3
- import { execFileSync } from "node:child_process";
4
- import { homedir, platform } from "node:os";
5
- import { findNodeBinary, findRemotePiScript, findSupervisorScript } from "./install.js";
6
- export function userLocalBinDir(home = homedir()) {
7
- return join(home, ".local", "bin");
8
- }
9
- export function isOnPath(dir, envPath = process.env["PATH"] ?? "") {
10
- const target = dir.replace(/\/+$/, "");
11
- return envPath.split(delimiter).some((entry) => entry.replace(/\/+$/, "") === target);
12
- }
13
- export function linkCliBinaries(home = homedir(), paths = {}, opts = {}) {
14
- const binDir = userLocalBinDir(home);
15
- if (platform() === "win32")
16
- return linkCliBinariesWindows(binDir, paths, opts);
17
- const log = [];
18
- mkdirSync(binDir, { recursive: true });
19
- log.push(`ensured ${binDir}`);
20
- const remotePi = paths.remotePi ?? findRemotePiScript();
21
- const supervisord = paths.supervisord ?? findSupervisorScript();
22
- assertScriptsExist(remotePi, supervisord);
23
- try {
24
- chmodSync(remotePi, 0o755);
25
- }
26
- catch { /* best-effort */ }
27
- try {
28
- chmodSync(supervisord, 0o755);
29
- }
30
- catch { /* best-effort */ }
31
- const links = [
32
- { name: "remote-pi", path: join(binDir, "remote-pi"), target: remotePi },
33
- { name: "pi-supervisord", path: join(binDir, "pi-supervisord"), target: supervisord },
34
- ];
35
- for (const link of links)
36
- replaceSymlink(link.path, link.target, log);
37
- const onPath = isOnPath(binDir);
38
- if (!onPath)
39
- log.push(`WARNING: ${binDir} is not on $PATH. Add this line to your shell rc: export PATH="$HOME/.local/bin:$PATH"`);
40
- return { binDir, links, onPath, log };
41
- }
42
- function assertScriptsExist(remotePi, supervisord) {
43
- if (!existsSync(remotePi))
44
- throw new Error(`remote-pi script not found at ${remotePi}. Run \`pnpm build\` (dev) or reinstall the extension.`);
45
- if (!existsSync(supervisord))
46
- throw new Error(`supervisor script not found at ${supervisord}. Run \`pnpm build\` (dev) or reinstall the extension.`);
47
- }
48
- function linkCliBinariesWindows(binDir, paths, opts) {
49
- const log = [];
50
- mkdirSync(binDir, { recursive: true });
51
- log.push(`ensured ${binDir}`);
52
- const node = opts.node ?? findNodeBinary();
53
- const remotePi = paths.remotePi ?? findRemotePiScript();
54
- const supervisord = paths.supervisord ?? findSupervisorScript();
55
- assertScriptsExist(remotePi, supervisord);
56
- const links = [
57
- { name: "remote-pi.cmd", path: join(binDir, "remote-pi.cmd"), target: remotePi },
58
- { name: "pi-supervisord.cmd", path: join(binDir, "pi-supervisord.cmd"), target: supervisord },
59
- ];
60
- for (const link of links) {
61
- writeFileSync(link.path, buildCmdShim(node, link.target));
62
- log.push(`wrote ${link.path}`);
63
- }
64
- const onPath = isOnPath(binDir);
65
- if (!onPath && opts.mutatePath !== false) {
66
- try {
67
- addUserPath(binDir);
68
- log.push(`added ${binDir} to your user PATH — open a NEW terminal for \`remote-pi\` to resolve.`);
69
- }
70
- catch (error) {
71
- log.push(`WARNING: ${binDir} is not on PATH and auto-add failed (${String(error)}). Add it manually: setx PATH "%PATH%;${binDir}"`);
72
- }
73
- }
74
- return { binDir, links, onPath, log };
75
- }
76
- export function buildCmdShim(node, target) {
77
- return `@echo off\r\n"${node}" "${target}" %*\r\n`;
78
- }
79
- function addUserPath(dir) {
80
- const literal = `'${dir.replace(/'/g, "''")}'`;
81
- execFileSync("powershell", [
82
- "-NoProfile", "-NonInteractive", "-Command",
83
- `$d = ${literal}; ` +
84
- "$p = [Environment]::GetEnvironmentVariable('Path','User'); " +
85
- "if (-not $p) { $p = '' }; " +
86
- "$parts = $p.Split(';') | Where-Object { $_ -ne '' }; " +
87
- "if ($parts -notcontains $d) { [Environment]::SetEnvironmentVariable('Path', (($parts + $d) -join ';'), 'User') }",
88
- ], { stdio: ["ignore", "pipe", "pipe"] });
89
- }
90
- export function unlinkCliBinaries(home = homedir()) {
91
- const binDir = userLocalBinDir(home);
92
- const log = [];
93
- const names = platform() === "win32" ? ["remote-pi.cmd", "pi-supervisord.cmd"] : ["remote-pi", "pi-supervisord"];
94
- const removed = [];
95
- for (const name of names) {
96
- const path = join(binDir, name);
97
- let existed = false;
98
- try {
99
- lstatSync(path);
100
- existed = true;
101
- }
102
- catch { /* absent */ }
103
- if (existed) {
104
- try {
105
- unlinkSync(path);
106
- log.push(`removed ${path}`);
107
- }
108
- catch (error) {
109
- log.push(`failed to remove ${path}: ${String(error)}`);
110
- existed = false;
111
- }
112
- }
113
- removed.push({ name, path, existed });
114
- }
115
- return { binDir, removed, log };
116
- }
117
- function replaceSymlink(linkPath, target, log) {
118
- let existing = null;
119
- try {
120
- existing = readlinkSync(linkPath);
121
- }
122
- catch { /* not a symlink */ }
123
- if (existing === target) {
124
- log.push(`symlink ${linkPath} → ${target} (unchanged)`);
125
- return;
126
- }
127
- try {
128
- unlinkSync(linkPath);
129
- }
130
- catch { /* absent */ }
131
- symlinkSync(target, linkPath);
132
- log.push(`symlink ${linkPath} → ${target}`);
133
- }
134
- //# sourceMappingURL=cli-links.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-links.js","sourceRoot":"","sources":["../../src/daemon/cli-links.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { type ControlReplyFor, type ControlRequest } from "./control_protocol.js";
2
- export declare class SupervisorOfflineError extends Error {
3
- readonly sockPath: string;
4
- constructor(sockPath: string);
5
- }
6
- /**
7
- * Sends a single request and returns the typed reply data.
8
- *
9
- * Throws:
10
- * - `SupervisorOfflineError` when the supervisor isn't reachable.
11
- * - `Error` from `parseReply` when the reply line is malformed.
12
- * - The supervisor's own error string when `ok: false`.
13
- */
14
- export declare function callSupervisor<Op extends ControlRequest["op"]>(req: Extract<ControlRequest, {
15
- op: Op;
16
- }>): Promise<ControlReplyFor<Op>>;
17
- /** Returns true when the supervisor is reachable. Used by `/remote-pi
18
- * daemons` to decide whether to query runtime state or fall back to
19
- * registry-only listing. */
20
- export declare function supervisorOnline(): Promise<boolean>;
@@ -1,131 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { createConnection } from "node:net";
3
- import { encodeRequest, parseReply, } from "./control_protocol.js";
4
- import { getSupervisorSockPath } from "./supervisor.js";
5
- import { usesNamedPipe } from "../session/ipc.js";
6
- /**
7
- * Tiny client for the `remote-pi` CLI to call the supervisor over the
8
- * `~/.pi/remote/supervisor.sock` UDS.
9
- *
10
- * Each call opens a fresh connection, sends one request line, reads one
11
- * reply line, closes. No connection pooling — the CLI is short-lived,
12
- * latency is dominated by the socket round-trip (<1ms).
13
- *
14
- * `SupervisorOfflineError` is the common error: thrown when the socket
15
- * file is missing OR the connect fails (no listener). The CLI handler
16
- * formats it as a friendly "Run `remote-pi install` first" message.
17
- */
18
- const CONNECT_TIMEOUT_MS = 1000;
19
- const REPLY_TIMEOUT_MS = 5000;
20
- export class SupervisorOfflineError extends Error {
21
- sockPath;
22
- constructor(sockPath) {
23
- super(`Supervisor is not running. UDS not responding at ${sockPath}.\n` +
24
- "Run `remote-pi install` to set it up, or start it manually with `pi-supervisord`.");
25
- this.sockPath = sockPath;
26
- this.name = "SupervisorOfflineError";
27
- }
28
- }
29
- /**
30
- * Sends a single request and returns the typed reply data.
31
- *
32
- * Throws:
33
- * - `SupervisorOfflineError` when the supervisor isn't reachable.
34
- * - `Error` from `parseReply` when the reply line is malformed.
35
- * - The supervisor's own error string when `ok: false`.
36
- */
37
- export async function callSupervisor(req) {
38
- const sockPath = getSupervisorSockPath();
39
- // POSIX fast-fail on a missing socket file. Windows pipes have no file —
40
- // skip the check and let `_connect` fail fast if the pipe isn't there.
41
- if (!usesNamedPipe() && !existsSync(sockPath))
42
- throw new SupervisorOfflineError(sockPath);
43
- const sock = await _connect(sockPath);
44
- try {
45
- sock.write(encodeRequest(req));
46
- const line = await _readLine(sock);
47
- const reply = parseReply(line);
48
- if (!reply.ok)
49
- throw new Error(reply.error);
50
- return reply.data;
51
- }
52
- finally {
53
- sock.destroy();
54
- }
55
- }
56
- /** Returns true when the supervisor is reachable. Used by `/remote-pi
57
- * daemons` to decide whether to query runtime state or fall back to
58
- * registry-only listing. */
59
- export async function supervisorOnline() {
60
- const sockPath = getSupervisorSockPath();
61
- if (!usesNamedPipe() && !existsSync(sockPath))
62
- return false;
63
- try {
64
- const sock = await _connect(sockPath);
65
- sock.destroy();
66
- return true;
67
- }
68
- catch {
69
- return false;
70
- }
71
- }
72
- // ── internals ───────────────────────────────────────────────────────────────
73
- function _connect(sockPath) {
74
- return new Promise((resolve, reject) => {
75
- const sock = createConnection({ path: sockPath });
76
- let settled = false;
77
- const timer = setTimeout(() => {
78
- if (settled)
79
- return;
80
- settled = true;
81
- sock.destroy();
82
- reject(new SupervisorOfflineError(sockPath));
83
- }, CONNECT_TIMEOUT_MS);
84
- sock.once("connect", () => {
85
- if (settled)
86
- return;
87
- settled = true;
88
- clearTimeout(timer);
89
- sock.setEncoding("utf8");
90
- resolve(sock);
91
- });
92
- sock.once("error", () => {
93
- if (settled)
94
- return;
95
- settled = true;
96
- clearTimeout(timer);
97
- reject(new SupervisorOfflineError(sockPath));
98
- });
99
- });
100
- }
101
- function _readLine(sock) {
102
- return new Promise((resolve, reject) => {
103
- let buf = "";
104
- const timer = setTimeout(() => {
105
- reject(new Error("supervisor reply timeout"));
106
- sock.destroy();
107
- }, REPLY_TIMEOUT_MS);
108
- sock.on("data", (chunk) => {
109
- buf += chunk;
110
- const nl = buf.indexOf("\n");
111
- if (nl >= 0) {
112
- clearTimeout(timer);
113
- resolve(buf.slice(0, nl));
114
- }
115
- });
116
- sock.on("end", () => {
117
- clearTimeout(timer);
118
- const nl = buf.indexOf("\n");
119
- if (nl >= 0)
120
- return resolve(buf.slice(0, nl));
121
- if (buf.length > 0)
122
- return resolve(buf);
123
- reject(new Error("supervisor closed connection without replying"));
124
- });
125
- sock.on("error", (err) => {
126
- clearTimeout(timer);
127
- reject(err);
128
- });
129
- });
130
- }
131
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"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"}
@@ -1,311 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
- import { dirname, join } from "node:path";
4
- import { canonicalizeEd25519PublicKey } from "../pairing/crypto.js";
5
- import { buildQRUri, clampPairTtlMs, qrSession, renderQRAscii, TOKEN_TTL_MS } from "../pairing/qr.js";
6
- import { listPeers, removePeer } from "../pairing/storage.js";
7
- import { isValidRelayUrl, isWebSocketScheme, resolveRelayUrl, saveConfig } from "../config.js";
8
- import { addDaemon, findDaemonByCwd, listDaemons, removeDaemon } from "./registry.js";
9
- import { callSupervisor, supervisorOnline, SupervisorOfflineError } from "./client.js";
10
- import { installService, uninstallService, linkCliBinaries, unlinkCliBinaries, LAUNCHD_LABEL, SYSTEMD_UNIT, } from "./install.js";
11
- function notify(ctx, text, kind = "info") {
12
- try {
13
- ctx.ui.notify(text, kind);
14
- }
15
- catch { /* headless/stale context */ }
16
- }
17
- async function pair(ctx, args, deps) {
18
- const result = deps.state() === "idle" ? await deps.start(ctx) : await deps.waitForInitialRelay();
19
- if (result === "cancelled") {
20
- notify(ctx, `[remote-pi] Pair requires a Relay connection; current state: ${deps.relayStatus()}.`, "warning");
21
- return;
22
- }
23
- const keypair = deps.keypair();
24
- if (!keypair) {
25
- notify(ctx, "[remote-pi] Pair requires an available device identity.", "warning");
26
- return;
27
- }
28
- if (!deps.hasRelay()) {
29
- const status = deps.relayStatus();
30
- notify(ctx, `[remote-pi] Pair requires a Relay connection; current state: ${status}.`, "warning");
31
- return;
32
- }
33
- const relayUrl = deps.relayUrl();
34
- if (!relayUrl) {
35
- notify(ctx, "[remote-pi] Pair requires a Relay URL.", "warning");
36
- return;
37
- }
38
- const ttl = /--ttl\s+(\d+)/.exec(args);
39
- const ttlMs = ttl ? clampPairTtlMs(Number(ttl[1]) * 1_000) : TOKEN_TTL_MS;
40
- const issued = qrSession.issueToken(ttlMs);
41
- const identity = deps.endpointIdentity();
42
- const uri = buildQRUri(issued.token, keypair.publicKey, deps.displayName(ctx.cwd), identity.endpointId, identity.runtimeInstanceId, relayUrl);
43
- try {
44
- deps.piApi()?.sendMessage({
45
- customType: "remote-pi:pair-code",
46
- content: `Scan to pair:\n\n${renderQRAscii(uri)}\n\n${uri}`,
47
- details: { uri, token: issued.token, expiresAt: issued.expiresAt, endpointId: identity.endpointId, name: deps.displayName(ctx.cwd) },
48
- display: true,
49
- });
50
- }
51
- catch { /* headless pairing still has a status message */ }
52
- notify(ctx, `[remote-pi] QR ready until ${new Date(issued.expiresAt).toLocaleTimeString()}.`);
53
- }
54
- async function listDevices(ctx, deps) {
55
- const peers = await listPeers();
56
- if (!peers.length) {
57
- notify(ctx, "[remote-pi] No paired devices.");
58
- return;
59
- }
60
- notify(ctx, `[remote-pi] Paired devices:\n${peers.map((peer) => `• ${peer.remote_epk.slice(0, 8)} — ${peer.name}${deps.isOwnerActive(peer.remote_epk) ? " 🟢 online" : ""}`).join("\n")}`);
61
- }
62
- async function revoke(args, ctx, deps) {
63
- const shortId = args.trim();
64
- if (!shortId) {
65
- notify(ctx, "[remote-pi] Usage: /remote-pi revoke <shortid>", "warning");
66
- return;
67
- }
68
- const matches = (await listPeers()).filter((peer) => peer.remote_epk.startsWith(shortId));
69
- if (matches.length !== 1) {
70
- notify(ctx, matches.length ? "[remote-pi] Ambiguous owner id." : "[remote-pi] No matching paired device.", "warning");
71
- return;
72
- }
73
- const peer = matches[0];
74
- await removePeer(peer.remote_epk);
75
- let ownerId = peer.remote_epk;
76
- try {
77
- ownerId = canonicalizeEd25519PublicKey(peer.remote_epk, "Owner public key");
78
- }
79
- catch { /* preserve cleanup for corrupt legacy records */ }
80
- deps.closeOwner(ownerId, "peer_stop");
81
- await deps.updateEndpoint();
82
- notify(ctx, `[remote-pi] Revoked: ${peer.name}`);
83
- }
84
- function status(ctx, deps) {
85
- const url = deps.relayUrl() ?? resolveRelayUrl().url;
86
- const identity = deps.endpointIdentity();
87
- const detail = deps.state() === "idle"
88
- ? "off"
89
- : `${deps.relayStatus()}, endpoint=${identity.endpointId}, runtime=${identity.runtimeInstanceId}, owners=${deps.activeOwnerCount()}`;
90
- notify(ctx, `[remote-pi] Relay ${detail} (${url})`);
91
- }
92
- function setRelay(value, ctx) {
93
- const url = value.trim();
94
- if (isWebSocketScheme(url)) {
95
- notify(ctx, "[remote-pi] Use http:// or https://; it is converted internally.", "warning");
96
- return;
97
- }
98
- if (!isValidRelayUrl(url)) {
99
- notify(ctx, "[remote-pi] Invalid Relay URL.", "warning");
100
- return;
101
- }
102
- saveConfig({ relay: url });
103
- notify(ctx, `[remote-pi] Relay set to ${url}.`);
104
- }
105
- export function persistModelDefault(provider, modelId) {
106
- try {
107
- const path = join(process.cwd(), ".pi", "settings.json");
108
- let config = {};
109
- try {
110
- config = JSON.parse(readFileSync(path, "utf8"));
111
- }
112
- catch { /* fresh file */ }
113
- config.defaultProvider = provider;
114
- config.defaultModel = modelId;
115
- mkdirSync(dirname(path), { recursive: true });
116
- writeFileSync(path, JSON.stringify(config, null, 2));
117
- }
118
- catch { /* a live model switch must not fail because persistence failed */ }
119
- }
120
- function daemonLines(daemons) {
121
- return daemons.map((daemon) => `${daemon.id.slice(0, 8)} ${daemon.name} ${daemon.health} ${daemon.relay}`).join("\n") || "(none)";
122
- }
123
- async function daemonList(ctx) {
124
- if (await supervisorOnline()) {
125
- const data = await callSupervisor({ op: "list" });
126
- notify(ctx, `[remote-pi] Daemons:\n${daemonLines(data.daemons)}`);
127
- return;
128
- }
129
- const entries = listDaemons();
130
- notify(ctx, `[remote-pi] Daemons (supervisor offline):\n${entries.map((entry) => `${entry.id.slice(0, 8)} ${entry.name} ${entry.desired_state}`).join("\n") || "(none)"}`);
131
- }
132
- async function daemonControl(op, id, ctx) {
133
- const data = await callSupervisor(id ? { op, id } : { op: `${op}_all` });
134
- notify(ctx, `[remote-pi] ${op}: ${JSON.stringify(data)}`);
135
- }
136
- async function daemonCreate(arg, ctx) {
137
- const cwd = arg.trim() || process.cwd();
138
- const entry = addDaemon(cwd);
139
- try {
140
- await callSupervisor({ op: "start", id: entry.id });
141
- }
142
- catch (error) {
143
- if (!(error instanceof SupervisorOfflineError))
144
- throw error;
145
- }
146
- notify(ctx, `[remote-pi] Registered daemon ${entry.id} for ${entry.cwd}.`);
147
- }
148
- async function daemonRemove(arg, ctx) {
149
- const id = arg.trim();
150
- if (!id) {
151
- notify(ctx, "[remote-pi] Usage: remove <daemon-id>", "warning");
152
- return;
153
- }
154
- const removed = await supervisorOnline() ? await callSupervisor({ op: "unregister", id }) : removeDaemon(id);
155
- notify(ctx, removed.removed ? "[remote-pi] Daemon removed." : "[remote-pi] No daemon matched.", removed.removed ? "info" : "warning");
156
- }
157
- async function daemonRemoveCwd(cwd, ctx) {
158
- const target = cwd.trim() || process.cwd();
159
- const removed = await supervisorOnline()
160
- ? await callSupervisor({ op: "unregister_cwd", cwd: target })
161
- : (() => { const entry = findDaemonByCwd(target); return entry ? removeDaemon(entry.id) : { removed: false }; })();
162
- notify(ctx, removed.removed ? "[remote-pi] Daemon removed." : "[remote-pi] No daemon matched.", removed.removed ? "info" : "warning");
163
- }
164
- function install(ctx) {
165
- try {
166
- installService();
167
- linkCliBinaries();
168
- notify(ctx, "[remote-pi] Supervisor service installed.");
169
- }
170
- catch (error) {
171
- notify(ctx, `[remote-pi] install failed: ${String(error)}`, "error");
172
- }
173
- }
174
- function uninstall(ctx) {
175
- try {
176
- uninstallService();
177
- unlinkCliBinaries();
178
- notify(ctx, "[remote-pi] Supervisor service removed.");
179
- }
180
- catch (error) {
181
- notify(ctx, `[remote-pi] uninstall failed: ${String(error)}`, "error");
182
- }
183
- }
184
- async function command(args, ctx, deps) {
185
- deps.setCommandContext(ctx);
186
- const [verb, ...rest] = args.trim().split(/\s+/);
187
- const value = rest.join(" ");
188
- try {
189
- switch (verb || "start") {
190
- case "start":
191
- await deps.start(ctx);
192
- return;
193
- case "stop":
194
- deps.stop();
195
- notify(ctx, "[remote-pi] Stopped.");
196
- return;
197
- case "status":
198
- status(ctx, deps);
199
- return;
200
- case "pair":
201
- await pair(ctx, value, deps);
202
- return;
203
- case "devices":
204
- await listDevices(ctx, deps);
205
- return;
206
- case "revoke":
207
- await revoke(value, ctx, deps);
208
- return;
209
- case "set-relay":
210
- setRelay(value, ctx);
211
- return;
212
- case "config":
213
- notify(ctx, `[remote-pi] ${resolveRelayUrl().url}`);
214
- return;
215
- case "daemons":
216
- await daemonList(ctx);
217
- return;
218
- case "create":
219
- await daemonCreate(value, ctx);
220
- return;
221
- case "remove":
222
- await daemonRemove(value, ctx);
223
- return;
224
- case "remove-cwd":
225
- await daemonRemoveCwd(value, ctx);
226
- return;
227
- case "install":
228
- install(ctx);
229
- return;
230
- case "uninstall":
231
- uninstall(ctx);
232
- return;
233
- case "daemon": {
234
- const [operation, id] = value.split(/\s+/, 2);
235
- if (operation === "start" || operation === "stop" || operation === "restart")
236
- await daemonControl(operation, id, ctx);
237
- else if (operation === "status")
238
- await daemonList(ctx);
239
- else
240
- notify(ctx, "[remote-pi] Usage: daemon <start|stop|restart|status> [id]", "warning");
241
- return;
242
- }
243
- case "internal-session-new":
244
- await deps.runInternalSessionNew(value, ctx);
245
- return;
246
- default:
247
- await deps.start(ctx);
248
- return;
249
- }
250
- }
251
- catch (error) {
252
- notify(ctx, `[remote-pi] ${verb} failed: ${String(error)}`, "error");
253
- }
254
- }
255
- export function registerCommands(pi, deps) {
256
- const handler = (args, ctx) => command(args, ctx, deps);
257
- pi.registerCommand("remote-pi", { description: "Connect this Pi endpoint to Remote Pi", handler });
258
- pi.registerCommand("remote-pi start", { description: "Connect this endpoint to Relay", handler: async (_, ctx) => handler("start", ctx) });
259
- pi.registerCommand("remote-pi stop", { description: "Disconnect this endpoint", handler: async (_, ctx) => handler("stop", ctx) });
260
- pi.registerCommand("remote-pi pair", { description: "Show an endpoint pairing QR", handler: async (args, ctx) => handler(`pair ${args}`, ctx) });
261
- pi.registerCommand("remote-pi devices", { description: "List locally paired Owners", handler: async (_, ctx) => handler("devices", ctx) });
262
- pi.registerCommand("remote-pi revoke", { description: "Revoke a locally paired Owner", handler: async (args, ctx) => handler(`revoke ${args}`, ctx) });
263
- pi.registerCommand("remote-pi remove-cwd", { description: "Unregister the daemon for a cwd", handler: async (args, ctx) => handler(`remove-cwd ${args}`, ctx) });
264
- pi.registerCommand("remote-pi set-relay", { description: "Set Relay URL", handler: async (args, ctx) => handler(`set-relay ${args}`, ctx) });
265
- }
266
- function directCliContext() {
267
- return { ui: { notify: (message) => console.log(message) } };
268
- }
269
- export function runDirectCli(deps, directRun) {
270
- if (!directRun)
271
- return;
272
- const [, , commandName, ...args] = process.argv;
273
- const ctx = directCliContext();
274
- if (commandName === "devices" || commandName === "list")
275
- void listDevices(ctx, deps);
276
- else if (commandName === "revoke")
277
- void revoke(args[0] ?? "", ctx, deps);
278
- else if (commandName === "set-relay")
279
- setRelay(args[0] ?? "", ctx);
280
- else if (commandName === "daemons" || (commandName === "daemon" && args[0] === "status"))
281
- void daemonList(ctx);
282
- else if (commandName === "daemon" && ["start", "stop", "restart"].includes(args[0] ?? ""))
283
- void daemonControl(args[0], args[1], ctx);
284
- else if (commandName === "create")
285
- void daemonCreate(args.join(" "), ctx);
286
- else if (commandName === "remove")
287
- void daemonRemove(args[0] ?? "", ctx);
288
- else if (commandName === "remove-cwd")
289
- void daemonRemoveCwd(args.join(" "), ctx);
290
- else if (commandName === "install")
291
- install(ctx);
292
- else if (commandName === "uninstall")
293
- uninstall(ctx);
294
- else if (commandName === "restart-supervisor")
295
- restartSupervisor();
296
- else
297
- console.log("Usage: remote-pi <devices|revoke|set-relay|daemons|daemon|create|remove|remove-cwd|install|uninstall>");
298
- }
299
- function restartSupervisor() {
300
- const uid = process.getuid?.() ?? 0;
301
- const step = process.platform === "darwin"
302
- ? ["launchctl", ["kickstart", "-k", `gui/${uid}/${LAUNCHD_LABEL}`]]
303
- : process.platform === "linux"
304
- ? ["systemctl", ["--user", "restart", SYSTEMD_UNIT]]
305
- : null;
306
- if (!step)
307
- process.exitCode = 1;
308
- else
309
- spawnSync(step[0], step[1], { stdio: "inherit" });
310
- }
311
- //# sourceMappingURL=commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/daemon/commands.ts"],"names":[],"mappings":"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"}