remote-pi 0.4.3 → 0.5.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.
Files changed (72) hide show
  1. package/README.md +33 -0
  2. package/dist/daemon/client.js +5 -2
  3. package/dist/daemon/client.js.map +1 -1
  4. package/dist/daemon/control_protocol.d.ts +68 -0
  5. package/dist/daemon/control_protocol.js.map +1 -1
  6. package/dist/daemon/cron_log.d.ts +45 -0
  7. package/dist/daemon/cron_log.js +72 -0
  8. package/dist/daemon/cron_log.js.map +1 -0
  9. package/dist/daemon/cron_registry.d.ts +80 -0
  10. package/dist/daemon/cron_registry.js +194 -0
  11. package/dist/daemon/cron_registry.js.map +1 -0
  12. package/dist/daemon/id.d.ts +6 -0
  13. package/dist/daemon/id.js +6 -0
  14. package/dist/daemon/id.js.map +1 -1
  15. package/dist/daemon/install.d.ts +41 -3
  16. package/dist/daemon/install.js +252 -17
  17. package/dist/daemon/install.js.map +1 -1
  18. package/dist/daemon/registry.d.ts +17 -1
  19. package/dist/daemon/registry.js +34 -4
  20. package/dist/daemon/registry.js.map +1 -1
  21. package/dist/daemon/rpc_child.d.ts +91 -0
  22. package/dist/daemon/rpc_child.js +216 -7
  23. package/dist/daemon/rpc_child.js.map +1 -1
  24. package/dist/daemon/supervisor.d.ts +44 -0
  25. package/dist/daemon/supervisor.js +256 -21
  26. package/dist/daemon/supervisor.js.map +1 -1
  27. package/dist/index.d.ts +68 -11
  28. package/dist/index.js +0 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcp/mesh_server.js +18 -9
  31. package/dist/mcp/mesh_server.js.map +1 -1
  32. package/dist/pairing/qr.d.ts +8 -1
  33. package/dist/pairing/qr.js +13 -3
  34. package/dist/pairing/qr.js.map +1 -1
  35. package/dist/protocol/codec.js +1 -0
  36. package/dist/protocol/codec.js.map +1 -1
  37. package/dist/protocol/types.d.ts +11 -0
  38. package/dist/rooms.d.ts +20 -0
  39. package/dist/rooms.js +35 -0
  40. package/dist/rooms.js.map +1 -1
  41. package/dist/session/broker.d.ts +79 -3
  42. package/dist/session/broker.js +155 -28
  43. package/dist/session/broker.js.map +1 -1
  44. package/dist/session/broker_remote.d.ts +30 -10
  45. package/dist/session/broker_remote.js +77 -39
  46. package/dist/session/broker_remote.js.map +1 -1
  47. package/dist/session/cwd_lock.d.ts +7 -2
  48. package/dist/session/cwd_lock.js +39 -9
  49. package/dist/session/cwd_lock.js.map +1 -1
  50. package/dist/session/global_config.d.ts +12 -2
  51. package/dist/session/global_config.js +16 -3
  52. package/dist/session/global_config.js.map +1 -1
  53. package/dist/session/ipc.d.ts +27 -0
  54. package/dist/session/ipc.js +22 -0
  55. package/dist/session/ipc.js.map +1 -0
  56. package/dist/session/leader_election.js +8 -2
  57. package/dist/session/leader_election.js.map +1 -1
  58. package/dist/session/local_config.d.ts +36 -6
  59. package/dist/session/local_config.js +103 -28
  60. package/dist/session/local_config.js.map +1 -1
  61. package/dist/session/mesh_node.d.ts +15 -1
  62. package/dist/session/mesh_node.js +26 -5
  63. package/dist/session/mesh_node.js.map +1 -1
  64. package/dist/session/peer.d.ts +19 -2
  65. package/dist/session/peer.js +45 -9
  66. package/dist/session/peer.js.map +1 -1
  67. package/dist/session/tools.js +14 -12
  68. package/dist/session/tools.js.map +1 -1
  69. package/package.json +2 -1
  70. package/service-templates/task-launcher.vbs.template +10 -0
  71. package/service-templates/task-scheduler.xml.template +38 -0
  72. package/skills/agent-network/SKILL.md +63 -26
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/daemon/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/daemon/registry.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter } from "node:events";
2
2
  import type { DaemonState } from "./control_protocol.js";
3
+ import { type LocalConfig } from "../session/local_config.js";
3
4
  /**
4
5
  * Wrapper around a `pi --mode rpc -e <extension>` child process for the
5
6
  * supervisor.
@@ -28,6 +29,15 @@ export interface RpcChildOptions {
28
29
  /** Additional env vars merged on top of `process.env` + the mandatory
29
30
  * `REMOTE_PI_DAEMON=1`. */
30
31
  env?: NodeJS.ProcessEnv;
32
+ /**
33
+ * Daemon config injected into the child via `REMOTE_PI_DIRECT_CONFIG`
34
+ * (JSON inline) instead of a per-cwd `.pi/remote-pi/config.json` file. The
35
+ * supervisor builds this from the registry. When set, the child reads it
36
+ * env-first (see `loadLocalConfig`) and no config file is needed. Also the
37
+ * source of the `--name` for the session. Falls back to the on-disk config
38
+ * when omitted.
39
+ */
40
+ config?: LocalConfig;
31
41
  }
32
42
  export interface RpcChildExitEvent {
33
43
  code: number | null;
@@ -36,6 +46,58 @@ export interface RpcChildExitEvent {
36
46
  isCrash: boolean;
37
47
  }
38
48
  export declare const EXIT_DAEMON_FRESH_SESSION = 42;
49
+ /**
50
+ * Resolve the `pi` executable for `spawn` (plan/40, decision C). On Windows a
51
+ * bare `pi` is actually `pi.cmd`/`pi.ps1`, and `spawn` won't find it without an
52
+ * extension → resolve the real path via `where` (rather than `shell:true`,
53
+ * which risks shell injection). An explicit path or an already-suffixed name is
54
+ * used as-is. POSIX returns the name unchanged. Best-effort: if `where` fails,
55
+ * fall back to the bare name (spawn will surface ENOENT honestly).
56
+ *
57
+ * `where` lists every match in PATH order, which on pi-node installs puts the
58
+ * extensionless `pi` (a shell script) BEFORE `pi.cmd`. Naively taking the first
59
+ * line spawns the unrunnable script → ENOENT → "crashed". So we prefer a result
60
+ * with a real Windows executable extension and only fall back to the first line.
61
+ */
62
+ export declare function resolvePiBin(piBin: string, plat?: NodeJS.Platform): string;
63
+ /** What to pass to `spawn`: the executable and any args to prepend before the
64
+ * caller's args. On POSIX (and for `.exe`) `prefixArgs` is empty. */
65
+ export interface PiSpawnTarget {
66
+ command: string;
67
+ prefixArgs: string[];
68
+ }
69
+ /**
70
+ * Resolve `pi` to a directly-spawnable target (plan/40). On Windows `pi` is an
71
+ * npm `.cmd` shim, which modern Node refuses to `spawn` without `shell:true`
72
+ * (EINVAL, post CVE-2024-27980). Wrapping it in `cmd.exe` would (a) add a layer
73
+ * that orphans the real `node` on kill and (b) complicate stdio — both fatal for
74
+ * a long-lived RPC daemon the supervisor must stop/restart cleanly. Instead we
75
+ * parse the shim to recover the underlying `node <cli.js>` and spawn that
76
+ * directly: one process, clean signals, clean stdio.
77
+ *
78
+ * Falls back to the bare resolved path when not a parseable shim (e.g. a real
79
+ * `pi.exe`, or POSIX) so `spawn` surfaces any real error honestly.
80
+ */
81
+ export declare function resolvePiSpawn(piBin: string, plat?: NodeJS.Platform, nodeExe?: string): PiSpawnTarget;
82
+ /**
83
+ * Extract the JS entry an npm `.cmd` shim launches. npm shims invoke
84
+ * `"%_prog%" "%dp0%\<relative>\entry.js" %*`; we recover `<dir>\<relative>\entry.js`
85
+ * (dir = the shim's own folder, i.e. `%dp0%`). Returns null when the shim
86
+ * doesn't match the expected shape or the target is missing.
87
+ */
88
+ export declare function _npmShimTarget(cmdPath: string): string | null;
89
+ /**
90
+ * Maps an RPC stdout line to a busy-state transition: `message_start` → true
91
+ * (a message is streaming), `message_end` → false. Other lines → null (no
92
+ * change). Pure + exported for tests.
93
+ *
94
+ * NOTE (plan/39 detail 1): the Pi RPC stream has NO turn-level event — only
95
+ * per-message start/end (and `response{command:"prompt"}` is emitted at
96
+ * PREFLIGHT, i.e. turn START, not end). So this passive flag reflects
97
+ * "a message is being produced right now"; the authoritative turn-busy signal
98
+ * is `get_state.isStreaming` (see `RpcChild.refreshBusy`).
99
+ */
100
+ export declare function busyTransition(line: string): boolean | null;
39
101
  /**
40
102
  * CLI args for the daemon's `pi --mode rpc` child.
41
103
  *
@@ -52,6 +114,17 @@ export declare const EXIT_DAEMON_FRESH_SESSION = 42;
52
114
  * same stable name in the picker/app instead of an auto-generated one. The
53
115
  * daemon's name is set at registration (`remote-pi create <cwd> --name "…"`).
54
116
  * Omitted when no name resolves, so the arg list stays minimal.
117
+ *
118
+ * `--approve` is mandatory for a daemon (pi ≥0.79 project trust): RPC mode is
119
+ * non-interactive, so without an override Pi resolves an untrusted project
120
+ * folder (any folder with `.pi/` or CLAUDE.md/AGENTS.md) to NOT trusted and
121
+ * silently skips its `.pi/settings.json` (model/provider/keys), instructions,
122
+ * resources and project extensions — the daemon then comes up with no model
123
+ * and fails on the first turn. The operator already authorized this folder by
124
+ * registering/launching a daemon in it, so `--approve` (trust-for-this-run) is
125
+ * the correct non-interactive stance. (Does NOT affect the separate "extension
126
+ * loaded twice" conflict, which comes from the extension being BOTH installed
127
+ * in ~/.pi/agent/extensions or cwd/.pi/extensions AND passed via `-e`.)
55
128
  */
56
129
  export declare function rpcSpawnArgs(extensionPath: string, sessionName?: string, useContinue?: boolean): string[];
57
130
  export declare class RpcChild extends EventEmitter {
@@ -70,8 +143,16 @@ export declare class RpcChild extends EventEmitter {
70
143
  private forceFreshSessionOnNextSpawn;
71
144
  /** Accumulates partial stdout lines while waiting for `\n`. */
72
145
  private stdoutBuf;
146
+ /** Passive busy flag derived from the RPC stream (message_start/end). Hint
147
+ * only; `refreshBusy` syncs it authoritatively via get_state.isStreaming. */
148
+ private _busy;
149
+ /** In-flight `get_state` requests, keyed by request id. */
150
+ private readonly _statePending;
73
151
  constructor(opts: RpcChildOptions);
74
152
  get state(): DaemonState;
153
+ /** Passive busy hint from the stream. Prefer `refreshBusy()` for an
154
+ * authoritative check before acting on it (cron skip_if_busy). */
155
+ get isBusy(): boolean;
75
156
  get pid(): number | undefined;
76
157
  get restartCount(): number;
77
158
  get uptimeMs(): number | undefined;
@@ -96,6 +177,16 @@ export declare class RpcChild extends EventEmitter {
96
177
  */
97
178
  stop(timeoutMs?: number): Promise<void>;
98
179
  private _onStdout;
180
+ private _handleStdoutLine;
181
+ /**
182
+ * Authoritative busy check: queries the child's `get_state` and syncs
183
+ * `_busy` to `isStreaming`. Resolves the passive flag on timeout (no
184
+ * response) or when the child isn't running. Used by the cron `skip_if_busy`
185
+ * gate, where a false "not busy" would pile a prompt onto a live turn.
186
+ */
187
+ refreshBusy(timeoutMs?: number): Promise<boolean>;
188
+ /** Test-only: feed a raw stdout line through the same handler. */
189
+ _ingestStdoutForTest(line: string): void;
99
190
  private _onExit;
100
191
  /** Bumps the restart counter — called by the supervisor when it
101
192
  * decides to re-spawn after a crash. Exposed so tests can drive it. */
@@ -1,7 +1,132 @@
1
- import { spawn } from "node:child_process";
1
+ import { execFileSync, spawn } from "node:child_process";
2
2
  import { EventEmitter } from "node:events";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { dirname, join } from "node:path";
3
5
  import { defaultAgentName, loadLocalConfig } from "../session/local_config.js";
4
6
  export const EXIT_DAEMON_FRESH_SESSION = 42;
7
+ /** Windows extensions `spawn` (without `shell`) can actually launch, in
8
+ * preference order: native `.exe` first, then the `.cmd`/`.bat` shims (run via
9
+ * cmd.exe). An extensionless `pi` is a Unix shell script Node CANNOT spawn on
10
+ * Windows — picking it yields `spawn … ENOENT` and the daemon shows "crashed". */
11
+ const WIN_EXECUTABLE_EXTS = [".exe", ".cmd", ".bat", ".com"];
12
+ /**
13
+ * Resolve the `pi` executable for `spawn` (plan/40, decision C). On Windows a
14
+ * bare `pi` is actually `pi.cmd`/`pi.ps1`, and `spawn` won't find it without an
15
+ * extension → resolve the real path via `where` (rather than `shell:true`,
16
+ * which risks shell injection). An explicit path or an already-suffixed name is
17
+ * used as-is. POSIX returns the name unchanged. Best-effort: if `where` fails,
18
+ * fall back to the bare name (spawn will surface ENOENT honestly).
19
+ *
20
+ * `where` lists every match in PATH order, which on pi-node installs puts the
21
+ * extensionless `pi` (a shell script) BEFORE `pi.cmd`. Naively taking the first
22
+ * line spawns the unrunnable script → ENOENT → "crashed". So we prefer a result
23
+ * with a real Windows executable extension and only fall back to the first line.
24
+ */
25
+ export function resolvePiBin(piBin, plat = process.platform) {
26
+ if (plat !== "win32")
27
+ return piBin;
28
+ if (piBin.includes("\\") || piBin.includes("/") || /\.[a-z0-9]+$/i.test(piBin))
29
+ return piBin;
30
+ try {
31
+ const out = execFileSync("where", [piBin], { encoding: "utf8" });
32
+ const lines = out.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
33
+ const runnable = lines.find((l) => WIN_EXECUTABLE_EXTS.some((ext) => l.toLowerCase().endsWith(ext)));
34
+ const chosen = runnable ?? lines[0];
35
+ if (chosen)
36
+ return chosen;
37
+ }
38
+ catch {
39
+ /* `where` unavailable or `pi` not found — fall back to the bare name */
40
+ }
41
+ return piBin;
42
+ }
43
+ /**
44
+ * Resolve `pi` to a directly-spawnable target (plan/40). On Windows `pi` is an
45
+ * npm `.cmd` shim, which modern Node refuses to `spawn` without `shell:true`
46
+ * (EINVAL, post CVE-2024-27980). Wrapping it in `cmd.exe` would (a) add a layer
47
+ * that orphans the real `node` on kill and (b) complicate stdio — both fatal for
48
+ * a long-lived RPC daemon the supervisor must stop/restart cleanly. Instead we
49
+ * parse the shim to recover the underlying `node <cli.js>` and spawn that
50
+ * directly: one process, clean signals, clean stdio.
51
+ *
52
+ * Falls back to the bare resolved path when not a parseable shim (e.g. a real
53
+ * `pi.exe`, or POSIX) so `spawn` surfaces any real error honestly.
54
+ */
55
+ export function resolvePiSpawn(piBin, plat = process.platform, nodeExe = process.execPath) {
56
+ const resolved = resolvePiBin(piBin, plat);
57
+ if (plat !== "win32")
58
+ return { command: resolved, prefixArgs: [] };
59
+ if (/\.(cmd|bat)$/i.test(resolved)) {
60
+ const target = _npmShimTarget(resolved);
61
+ if (target)
62
+ return { command: nodeExe, prefixArgs: [target] };
63
+ }
64
+ return { command: resolved, prefixArgs: [] };
65
+ }
66
+ /**
67
+ * Extract the JS entry an npm `.cmd` shim launches. npm shims invoke
68
+ * `"%_prog%" "%dp0%\<relative>\entry.js" %*`; we recover `<dir>\<relative>\entry.js`
69
+ * (dir = the shim's own folder, i.e. `%dp0%`). Returns null when the shim
70
+ * doesn't match the expected shape or the target is missing.
71
+ */
72
+ export function _npmShimTarget(cmdPath) {
73
+ let content;
74
+ try {
75
+ content = readFileSync(cmdPath, "utf8");
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ const m = content.match(/"%dp0%\\([^"]+\.[cm]?js)"/i);
81
+ if (!m)
82
+ return null;
83
+ const target = join(dirname(cmdPath), m[1]);
84
+ return existsSync(target) ? target : null;
85
+ }
86
+ /**
87
+ * Maps an RPC stdout line to a busy-state transition: `message_start` → true
88
+ * (a message is streaming), `message_end` → false. Other lines → null (no
89
+ * change). Pure + exported for tests.
90
+ *
91
+ * NOTE (plan/39 detail 1): the Pi RPC stream has NO turn-level event — only
92
+ * per-message start/end (and `response{command:"prompt"}` is emitted at
93
+ * PREFLIGHT, i.e. turn START, not end). So this passive flag reflects
94
+ * "a message is being produced right now"; the authoritative turn-busy signal
95
+ * is `get_state.isStreaming` (see `RpcChild.refreshBusy`).
96
+ */
97
+ export function busyTransition(line) {
98
+ let obj;
99
+ try {
100
+ obj = JSON.parse(line);
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ const t = obj?.type;
106
+ if (t === "message_start")
107
+ return true;
108
+ if (t === "message_end")
109
+ return false;
110
+ return null;
111
+ }
112
+ /** Parses a `get_state` RPC response line, returning its id + isStreaming. */
113
+ function parseGetStateResponse(line) {
114
+ let obj;
115
+ try {
116
+ obj = JSON.parse(line);
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ const o = obj;
122
+ if (o.type !== "response" || o.command !== "get_state")
123
+ return null;
124
+ const data = o.data;
125
+ return {
126
+ id: typeof o.id === "string" ? o.id : undefined,
127
+ isStreaming: typeof data?.isStreaming === "boolean" ? data.isStreaming : undefined,
128
+ };
129
+ }
5
130
  /**
6
131
  * CLI args for the daemon's `pi --mode rpc` child.
7
132
  *
@@ -18,10 +143,22 @@ export const EXIT_DAEMON_FRESH_SESSION = 42;
18
143
  * same stable name in the picker/app instead of an auto-generated one. The
19
144
  * daemon's name is set at registration (`remote-pi create <cwd> --name "…"`).
20
145
  * Omitted when no name resolves, so the arg list stays minimal.
146
+ *
147
+ * `--approve` is mandatory for a daemon (pi ≥0.79 project trust): RPC mode is
148
+ * non-interactive, so without an override Pi resolves an untrusted project
149
+ * folder (any folder with `.pi/` or CLAUDE.md/AGENTS.md) to NOT trusted and
150
+ * silently skips its `.pi/settings.json` (model/provider/keys), instructions,
151
+ * resources and project extensions — the daemon then comes up with no model
152
+ * and fails on the first turn. The operator already authorized this folder by
153
+ * registering/launching a daemon in it, so `--approve` (trust-for-this-run) is
154
+ * the correct non-interactive stance. (Does NOT affect the separate "extension
155
+ * loaded twice" conflict, which comes from the extension being BOTH installed
156
+ * in ~/.pi/agent/extensions or cwd/.pi/extensions AND passed via `-e`.)
21
157
  */
22
158
  export function rpcSpawnArgs(extensionPath, sessionName, useContinue = true) {
23
159
  return [
24
160
  "--mode", "rpc",
161
+ "--approve",
25
162
  ...(useContinue ? ["--continue"] : []),
26
163
  ...(sessionName ? ["--name", sessionName] : []),
27
164
  "-e", extensionPath,
@@ -43,11 +180,19 @@ export class RpcChild extends EventEmitter {
43
180
  forceFreshSessionOnNextSpawn = false;
44
181
  /** Accumulates partial stdout lines while waiting for `\n`. */
45
182
  stdoutBuf = "";
183
+ /** Passive busy flag derived from the RPC stream (message_start/end). Hint
184
+ * only; `refreshBusy` syncs it authoritatively via get_state.isStreaming. */
185
+ _busy = false;
186
+ /** In-flight `get_state` requests, keyed by request id. */
187
+ _statePending = new Map();
46
188
  constructor(opts) {
47
189
  super();
48
190
  this.opts = opts;
49
191
  }
50
192
  get state() { return this._state; }
193
+ /** Passive busy hint from the stream. Prefer `refreshBusy()` for an
194
+ * authoritative check before acting on it (cron skip_if_busy). */
195
+ get isBusy() { return this._busy; }
51
196
  get pid() { return this.child?.pid; }
52
197
  get restartCount() { return this._restartCount; }
53
198
  get uptimeMs() {
@@ -61,26 +206,37 @@ export class RpcChild extends EventEmitter {
61
206
  if (this.child)
62
207
  return;
63
208
  this._stopping = false; // fresh start — a later signal IS a real crash
209
+ this._busy = false;
64
210
  this._state = "starting";
65
- const piBin = this.opts.piBin ?? "pi";
211
+ const piTarget = resolvePiSpawn(this.opts.piBin ?? "pi");
66
212
  // Name the (single) daemon session after the daemon's configured identity,
67
213
  // so it shows up stably instead of an auto-generated name on each restart.
68
- const sessionName = loadLocalConfig(this.opts.cwd).agent_name
69
- ?? defaultAgentName(this.opts.cwd);
214
+ // Prefer the supervisor-injected config; fall back to the on-disk file.
215
+ const cfg = this.opts.config ?? loadLocalConfig(this.opts.cwd);
216
+ const sessionName = cfg.agent_name ?? defaultAgentName(this.opts.cwd);
70
217
  const useContinue = !this.forceFreshSessionOnNextSpawn;
71
218
  this.forceFreshSessionOnNextSpawn = false;
72
- const args = rpcSpawnArgs(this.opts.extensionPath, sessionName, useContinue);
219
+ // On Windows `prefixArgs` carries pi's cli.js (we spawn node directly); on
220
+ // POSIX it's empty and `command` is `pi` itself.
221
+ const args = [...piTarget.prefixArgs, ...rpcSpawnArgs(this.opts.extensionPath, sessionName, useContinue)];
73
222
  const env = {
74
223
  ...process.env,
75
224
  ...this.opts.env,
76
225
  // Mandatory daemon marker — `_cmdRoot` in index.ts can use this to
77
226
  // bail early if local config is missing (no wizard in RPC mode).
78
227
  REMOTE_PI_DAEMON: "1",
228
+ // Inject the daemon config inline so the child needs no config file.
229
+ ...(this.opts.config ? { REMOTE_PI_DIRECT_CONFIG: JSON.stringify(this.opts.config) } : {}),
79
230
  };
80
- const child = spawn(piBin, args, {
231
+ const child = spawn(piTarget.command, args, {
81
232
  cwd: this.opts.cwd,
82
233
  env,
83
234
  stdio: ["pipe", "pipe", "pipe"],
235
+ // Windows: suppress any console window the child might allocate. With the
236
+ // node+cli.js path (resolvePiSpawn) there's no cmd.exe layer, but keep this
237
+ // as belt-and-suspenders alongside the supervisor's hidden wscript launcher
238
+ // (service-templates/task-launcher.vbs.template). No-op on POSIX.
239
+ windowsHide: process.platform === "win32",
84
240
  });
85
241
  this.child = child;
86
242
  this._startedAt = Date.now();
@@ -154,9 +310,56 @@ export class RpcChild extends EventEmitter {
154
310
  this.stdoutBuf = this.stdoutBuf.slice(nl + 1);
155
311
  if (!line.trim())
156
312
  continue;
157
- this.emit("stdout", line);
313
+ this._handleStdoutLine(line);
158
314
  }
159
315
  }
316
+ _handleStdoutLine(line) {
317
+ const t = busyTransition(line);
318
+ if (t !== null)
319
+ this._busy = t;
320
+ const gs = parseGetStateResponse(line);
321
+ if (gs && gs.id) {
322
+ const pending = this._statePending.get(gs.id);
323
+ if (pending) {
324
+ clearTimeout(pending.timer);
325
+ this._statePending.delete(gs.id);
326
+ if (typeof gs.isStreaming === "boolean")
327
+ this._busy = gs.isStreaming;
328
+ pending.resolve(this._busy);
329
+ }
330
+ }
331
+ this.emit("stdout", line);
332
+ }
333
+ /**
334
+ * Authoritative busy check: queries the child's `get_state` and syncs
335
+ * `_busy` to `isStreaming`. Resolves the passive flag on timeout (no
336
+ * response) or when the child isn't running. Used by the cron `skip_if_busy`
337
+ * gate, where a false "not busy" would pile a prompt onto a live turn.
338
+ */
339
+ async refreshBusy(timeoutMs = 1500) {
340
+ if (this._state !== "running" || !this.child?.stdin)
341
+ return this._busy;
342
+ const id = `gs-${Date.now()}-${Math.round(Math.random() * 1e6)}`;
343
+ return new Promise((resolve) => {
344
+ const timer = setTimeout(() => {
345
+ this._statePending.delete(id);
346
+ resolve(this._busy);
347
+ }, timeoutMs);
348
+ this._statePending.set(id, { resolve, timer });
349
+ try {
350
+ this.child.stdin.write(JSON.stringify({ id, type: "get_state" }) + "\n");
351
+ }
352
+ catch {
353
+ clearTimeout(timer);
354
+ this._statePending.delete(id);
355
+ resolve(this._busy);
356
+ }
357
+ });
358
+ }
359
+ /** Test-only: feed a raw stdout line through the same handler. */
360
+ _ingestStdoutForTest(line) {
361
+ this._handleStdoutLine(line);
362
+ }
160
363
  _onExit(code, signal) {
161
364
  // Daemon app-action `/new`: child exits with a private code, supervisor
162
365
  // restarts it, and the next spawn omits --continue once to create a fresh
@@ -169,6 +372,12 @@ export class RpcChild extends EventEmitter {
169
372
  this._state = isCrash ? "crashed" : "stopped";
170
373
  this.child = null;
171
374
  this._startedAt = null;
375
+ this._busy = false;
376
+ for (const p of this._statePending.values()) {
377
+ clearTimeout(p.timer);
378
+ p.resolve(false);
379
+ }
380
+ this._statePending.clear();
172
381
  this.emit("exit", { code, signal, isCrash });
173
382
  }
174
383
  /** Bumps the restart counter — called by the supervisor when it
@@ -1 +1 @@
1
- {"version":3,"file":"rpc_child.js","sourceRoot":"","sources":["../../src/daemon/rpc_child.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc_child.js","sourceRoot":"","sources":["../../src/daemon/rpc_child.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type CronResult } from "./cron_log.js";
1
2
  /** Thrown by `start()` when another live supervisor already holds the UDS.
2
3
  * Prevents a second supervisor from orphaning the first's children. */
3
4
  export declare class SupervisorAlreadyRunningError extends Error {
@@ -12,10 +13,21 @@ export interface SupervisorOptions {
12
13
  /** Override the `pi` binary path. Defaults to "pi" on PATH. */
13
14
  piBin?: string;
14
15
  }
16
+ /** Pure decision for `fireJob` (plan/39) — picks the action from the daemon's
17
+ * liveness/busy state + the job's flags. Tested in isolation for all 4 ramos. */
18
+ export type FireAction = "send" | "wake_and_send" | "skip_down" | "skip_busy";
19
+ export declare function decideFireAction(o: {
20
+ running: boolean;
21
+ busy: boolean;
22
+ wake: boolean;
23
+ skipIfBusy: boolean;
24
+ }): FireAction;
15
25
  export declare class Supervisor {
16
26
  private readonly opts;
17
27
  private server;
18
28
  private readonly children;
29
+ /** Live croner schedules, keyed by cron job id (plan/39). */
30
+ private readonly cronJobs;
19
31
  private shuttingDown;
20
32
  constructor(opts: SupervisorOptions);
21
33
  /** Bind the control UDS + spawn all registered daemons. */
@@ -34,10 +46,42 @@ export declare class Supervisor {
34
46
  * immediately instead of waiting for the next supervisor restart. */
35
47
  private _opStart;
36
48
  private _opStopAll;
49
+ /** Stop a single registered daemon by id. Idempotent: a daemon that isn't
50
+ * running returns `stopped: false`. Unknown id → ok:false. Mirrors the
51
+ * per-id semantics of `_opStart`. Cancels any pending restart backoff so a
52
+ * deliberate stop stays stopped. */
53
+ private _opStop;
54
+ /** Restart a single registered daemon by id (stop-if-running, then spawn).
55
+ * Unknown id → ok:false. Resets the crash backoff. */
56
+ private _opRestart;
37
57
  private _opRestartAll;
38
58
  private _opSend;
39
59
  private _opRegister;
40
60
  private _opUnregister;
61
+ private _opCronAdd;
62
+ private _opCronList;
63
+ private _opCronRemove;
64
+ private _opCronEnable;
65
+ private _opCronRun;
66
+ private _opCronLog;
67
+ private _jobView;
68
+ /** Rebuild all live `Cron` schedules from the registry (enabled jobs only).
69
+ * Called on start; mutations reconcile incrementally via _scheduleCron/_stopCron. */
70
+ private _reconcileCron;
71
+ private _scheduleCron;
72
+ private _stopCron;
73
+ /** Detail 2: on start, run a catchup job once if its previous scheduled run
74
+ * was missed while the supervisor was down. Opt-in (`catchup`), at most 1×. */
75
+ private _runCatchup;
76
+ /**
77
+ * Fires a cron job: resolves the daemon, decides the action (decideFireAction),
78
+ * acts, and records the outcome — ALWAYS one `last_status` update + one JSONL
79
+ * line, for both fires and skips. Returns the result. `manual` bypasses the
80
+ * disabled-skip (used by `cron run` + catchup).
81
+ */
82
+ fireJob(jobId: string, opts?: {
83
+ manual?: boolean;
84
+ }): Promise<CronResult | "missing">;
41
85
  private _spawnAllFromRegistry;
42
86
  private _spawnEntry;
43
87
  private _onChildExit;