youmd 0.8.29 → 0.9.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 (57) hide show
  1. package/dist/commands/orchestrate.d.ts +12 -0
  2. package/dist/commands/orchestrate.d.ts.map +1 -0
  3. package/dist/commands/orchestrate.js +273 -0
  4. package/dist/commands/orchestrate.js.map +1 -0
  5. package/dist/commands/remote.d.ts +8 -0
  6. package/dist/commands/remote.d.ts.map +1 -1
  7. package/dist/commands/remote.js +8 -0
  8. package/dist/commands/remote.js.map +1 -1
  9. package/dist/commands/stack.d.ts.map +1 -1
  10. package/dist/commands/stack.js +37 -3
  11. package/dist/commands/stack.js.map +1 -1
  12. package/dist/commands/status.js +1 -1
  13. package/dist/commands/status.js.map +1 -1
  14. package/dist/commands/storage.d.ts +7 -0
  15. package/dist/commands/storage.d.ts.map +1 -0
  16. package/dist/commands/storage.js +220 -0
  17. package/dist/commands/storage.js.map +1 -0
  18. package/dist/index.js +53 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/api.d.ts +32 -0
  21. package/dist/lib/api.d.ts.map +1 -1
  22. package/dist/lib/api.js +21 -0
  23. package/dist/lib/api.js.map +1 -1
  24. package/dist/lib/config.d.ts +15 -0
  25. package/dist/lib/config.d.ts.map +1 -1
  26. package/dist/lib/config.js.map +1 -1
  27. package/dist/lib/daemon.d.ts +19 -0
  28. package/dist/lib/daemon.d.ts.map +1 -1
  29. package/dist/lib/daemon.js +72 -1
  30. package/dist/lib/daemon.js.map +1 -1
  31. package/dist/lib/foldermd.d.ts +70 -0
  32. package/dist/lib/foldermd.d.ts.map +1 -0
  33. package/dist/lib/foldermd.js +226 -0
  34. package/dist/lib/foldermd.js.map +1 -0
  35. package/dist/lib/orchestrator/loop.d.ts +55 -0
  36. package/dist/lib/orchestrator/loop.d.ts.map +1 -0
  37. package/dist/lib/orchestrator/loop.js +248 -0
  38. package/dist/lib/orchestrator/loop.js.map +1 -0
  39. package/dist/lib/orchestrator/supervisor.d.ts +80 -0
  40. package/dist/lib/orchestrator/supervisor.d.ts.map +1 -0
  41. package/dist/lib/orchestrator/supervisor.js +315 -0
  42. package/dist/lib/orchestrator/supervisor.js.map +1 -0
  43. package/dist/lib/orchestrator/tools.d.ts +16 -0
  44. package/dist/lib/orchestrator/tools.d.ts.map +1 -0
  45. package/dist/lib/orchestrator/tools.js +258 -0
  46. package/dist/lib/orchestrator/tools.js.map +1 -0
  47. package/dist/lib/remote-executor.d.ts +15 -1
  48. package/dist/lib/remote-executor.d.ts.map +1 -1
  49. package/dist/lib/remote-executor.js +195 -0
  50. package/dist/lib/remote-executor.js.map +1 -1
  51. package/dist/mcp/registry.d.ts.map +1 -1
  52. package/dist/mcp/registry.js +89 -0
  53. package/dist/mcp/registry.js.map +1 -1
  54. package/package.json +1 -1
  55. package/scripts/skillstack-sync/com.you.orchestrator-watch.plist +38 -0
  56. package/scripts/skillstack-sync/install-daemons-linux.sh +168 -0
  57. package/scripts/skillstack-sync/install-daemons.sh +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ export type WorkerHarness = "claude" | "codex" | "cursor" | "custom";
2
+ export type WorkerStatus = "running" | "exited" | "failed" | "stopped" | "unknown";
3
+ export interface WorkerRecord {
4
+ id: string;
5
+ harness: WorkerHarness;
6
+ /** You.md project name / slug this worker is operating on (for reporting). */
7
+ project?: string;
8
+ /** Working directory the harness was launched in. */
9
+ cwd: string;
10
+ /** The task prompt handed to the worker. */
11
+ goal: string;
12
+ pid?: number;
13
+ status: WorkerStatus;
14
+ exitCode?: number;
15
+ startedAt: string;
16
+ endedAt?: string;
17
+ logFile: string;
18
+ /** Host that launched this worker (for cross-machine fleet views). */
19
+ host: string;
20
+ /** True once this worker's terminal transition has been reported (watch loop). */
21
+ reported?: boolean;
22
+ }
23
+ /** Terminal worker states — the worker is no longer doing work. */
24
+ export declare const TERMINAL_WORKER_STATUSES: WorkerStatus[];
25
+ export declare function isTerminalWorkerStatus(status: WorkerStatus): boolean;
26
+ export declare function loadWorkers(): WorkerRecord[];
27
+ /** True if a pid is alive (signal 0 probe). */
28
+ export declare function isPidAlive(pid: number | undefined): boolean;
29
+ /** Reconcile registry status against live pids (a running worker whose pid died → exited). */
30
+ export declare function refreshWorkers(workers?: WorkerRecord[]): WorkerRecord[];
31
+ export interface SpawnWorkerInput {
32
+ harness: WorkerHarness;
33
+ goal: string;
34
+ cwd: string;
35
+ project?: string;
36
+ host: string;
37
+ /** Required when harness === "custom": full argv, with {prompt} substituted in any element. */
38
+ customCommand?: string[];
39
+ /**
40
+ * Environment for the worker process. Defaults to the parent env for LOCAL spawns. Remote
41
+ * (bus-triggered) spawns MUST pass a minimized env so a remotely-launched agent does not
42
+ * inherit the daemon's secrets (you.md token, OPENROUTER_API_KEY, vault/folder keys).
43
+ */
44
+ env?: NodeJS.ProcessEnv;
45
+ }
46
+ export interface SpawnWorkerResult {
47
+ ok: boolean;
48
+ worker?: WorkerRecord;
49
+ error?: string;
50
+ }
51
+ /**
52
+ * Launch a worker harness detached, streaming its output to a per-worker log file, and record
53
+ * it in the registry. Detached + unref so the worker outlives this CLI process (an orchestrator
54
+ * dispatches and moves on; it does not block on the worker).
55
+ */
56
+ export declare function spawnWorker(input: SpawnWorkerInput): SpawnWorkerResult;
57
+ export declare function getWorker(id: string): WorkerRecord | undefined;
58
+ /** Tail the last `lines` of a worker's captured output. */
59
+ export declare function getWorkerOutput(id: string, lines?: number): {
60
+ ok: boolean;
61
+ output?: string;
62
+ error?: string;
63
+ };
64
+ /** Stop a running worker (SIGTERM the process group). */
65
+ export declare function stopWorker(id: string): {
66
+ ok: boolean;
67
+ error?: string;
68
+ };
69
+ /**
70
+ * Reconcile status, then return workers that just reached a terminal state and have NOT yet been
71
+ * reported. Does NOT flip the `reported` flag — the caller marks each id reported only AFTER a
72
+ * successful post (via markReported), so a failed/transient post is retried next pass instead of
73
+ * silently dropping the completion. The "always on, report back" primitive for the watch loop.
74
+ */
75
+ export declare function collectUnreportedCompletions(): WorkerRecord[];
76
+ /** Mark the given worker ids as reported (call only after the completion was successfully posted). */
77
+ export declare function markReported(ids: string[]): void;
78
+ /** Drop exited/stopped workers older than `maxAgeMs` from the registry (keeps running ones). */
79
+ export declare function pruneWorkers(maxAgeMs?: number): number;
80
+ //# sourceMappingURL=supervisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/supervisor.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,aAAa,CAAC;IACvB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,YAAY,EAAoC,CAAC;AAExF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAEpE;AAmCD,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAiB5C;AAaD,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAS3D;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,OAAO,GAAE,YAAY,EAAkB,GAAG,YAAY,EAAE,CAWtF;AASD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAoFtE;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE9D;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAUxG;AAED,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAqBtE;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,YAAY,EAAE,CAG7D;AAED,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAYhD;AAED,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,QAAQ,SAAsB,GAAG,MAAM,CAWnE"}
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ // supervisor.ts — process supervisor for the You agent orchestrator.
3
+ //
4
+ // The You agent is a MASTER ORCHESTRATOR, not a worker/coding agent. It launches, monitors,
5
+ // and stops other agentic harnesses (Claude Code, Codex, Cursor, etc.) — each best at a
6
+ // given task — in real project directories, captures their output, and reports back. This
7
+ // module is the deterministic substrate for that: spawn / list / tail / stop, persisted in a
8
+ // registry so an always-on daemon (or the next CLI invocation) can see the whole fleet.
9
+ //
10
+ // No LLM in this file. It is pure, testable process management; the loop (loop.ts) drives it.
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.TERMINAL_WORKER_STATUSES = void 0;
46
+ exports.isTerminalWorkerStatus = isTerminalWorkerStatus;
47
+ exports.loadWorkers = loadWorkers;
48
+ exports.isPidAlive = isPidAlive;
49
+ exports.refreshWorkers = refreshWorkers;
50
+ exports.spawnWorker = spawnWorker;
51
+ exports.getWorker = getWorker;
52
+ exports.getWorkerOutput = getWorkerOutput;
53
+ exports.stopWorker = stopWorker;
54
+ exports.collectUnreportedCompletions = collectUnreportedCompletions;
55
+ exports.markReported = markReported;
56
+ exports.pruneWorkers = pruneWorkers;
57
+ const child_process = __importStar(require("child_process"));
58
+ const fs = __importStar(require("fs"));
59
+ const path = __importStar(require("path"));
60
+ const config_1 = require("../config");
61
+ /** Terminal worker states — the worker is no longer doing work. */
62
+ exports.TERMINAL_WORKER_STATUSES = ["exited", "stopped", "failed"];
63
+ function isTerminalWorkerStatus(status) {
64
+ return exports.TERMINAL_WORKER_STATUSES.includes(status);
65
+ }
66
+ const HARNESS_SPECS = {
67
+ // Claude Code headless print mode.
68
+ claude: { bin: "claude", args: (p) => ["-p", p], overrideEnv: "YOU_HARNESS_CLAUDE" },
69
+ // Codex non-interactive exec mode.
70
+ codex: { bin: "codex", args: (p) => ["exec", p], overrideEnv: "YOU_HARNESS_CODEX" },
71
+ // Cursor agent CLI headless mode.
72
+ cursor: { bin: "cursor-agent", args: (p) => ["-p", p], overrideEnv: "YOU_HARNESS_CURSOR" },
73
+ };
74
+ function orchestratorDir() {
75
+ const dir = path.join((0, config_1.getWritableHomeBundleDir)(), "orchestrator");
76
+ fs.mkdirSync(dir, { recursive: true });
77
+ return dir;
78
+ }
79
+ function logsDir() {
80
+ const dir = path.join(orchestratorDir(), "logs");
81
+ fs.mkdirSync(dir, { recursive: true });
82
+ return dir;
83
+ }
84
+ function registryPath() {
85
+ return path.join(orchestratorDir(), "workers.json");
86
+ }
87
+ function loadWorkers() {
88
+ try {
89
+ const raw = fs.readFileSync(registryPath(), "utf-8");
90
+ const parsed = JSON.parse(raw);
91
+ if (!Array.isArray(parsed))
92
+ return [];
93
+ // Drop malformed records (partial write, hand-edit, schema drift) instead of letting a
94
+ // single bad entry throw downstream — a corrupt row shouldn't hide every healthy worker.
95
+ return parsed.filter((w) => !!w &&
96
+ typeof w === "object" &&
97
+ typeof w.id === "string" &&
98
+ typeof w.status === "string");
99
+ }
100
+ catch {
101
+ return [];
102
+ }
103
+ }
104
+ function saveWorkers(workers) {
105
+ // Atomic write (tmp + rename) so a concurrent reader never sees a half-written file.
106
+ // NOTE: this does not prevent lost updates under concurrent writers (the registry is a
107
+ // single JSON file with no lock); spawn/watch/remote runs are low-frequency so the window
108
+ // is small, but a future hardening is per-record files or a lockfile.
109
+ const target = registryPath();
110
+ const tmp = `${target}.${process.pid}.tmp`;
111
+ fs.writeFileSync(tmp, JSON.stringify(workers, null, 2));
112
+ fs.renameSync(tmp, target);
113
+ }
114
+ /** True if a pid is alive (signal 0 probe). */
115
+ function isPidAlive(pid) {
116
+ if (!pid || pid <= 0)
117
+ return false;
118
+ try {
119
+ process.kill(pid, 0);
120
+ return true;
121
+ }
122
+ catch (err) {
123
+ // ESRCH = no such process; EPERM = exists but not ours (still alive).
124
+ return err.code === "EPERM";
125
+ }
126
+ }
127
+ /** Reconcile registry status against live pids (a running worker whose pid died → exited). */
128
+ function refreshWorkers(workers = loadWorkers()) {
129
+ let changed = false;
130
+ for (const w of workers) {
131
+ if (w.status === "running" && !isPidAlive(w.pid)) {
132
+ w.status = "exited";
133
+ w.endedAt = w.endedAt ?? new Date().toISOString();
134
+ changed = true;
135
+ }
136
+ }
137
+ if (changed)
138
+ saveWorkers(workers);
139
+ return workers;
140
+ }
141
+ function shortId() {
142
+ // ULID-ish without external deps: time + random suffix. Not crypto; just a unique handle.
143
+ const rand = Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, "0");
144
+ const stamp = Date.now().toString(36);
145
+ return `w_${stamp}${rand}`;
146
+ }
147
+ /**
148
+ * Launch a worker harness detached, streaming its output to a per-worker log file, and record
149
+ * it in the registry. Detached + unref so the worker outlives this CLI process (an orchestrator
150
+ * dispatches and moves on; it does not block on the worker).
151
+ */
152
+ function spawnWorker(input) {
153
+ const { harness, goal, cwd, project, host } = input;
154
+ if (!fs.existsSync(cwd) || !fs.statSync(cwd).isDirectory()) {
155
+ return { ok: false, error: `working directory does not exist: ${cwd}` };
156
+ }
157
+ let bin;
158
+ let argv;
159
+ if (harness === "custom") {
160
+ if (!input.customCommand || input.customCommand.length === 0) {
161
+ return { ok: false, error: "custom harness requires customCommand argv" };
162
+ }
163
+ const subst = input.customCommand.map((part) => part.replace(/\{prompt\}/g, goal));
164
+ bin = subst[0];
165
+ argv = subst.slice(1);
166
+ }
167
+ else {
168
+ const spec = HARNESS_SPECS[harness];
169
+ const override = process.env[spec.overrideEnv];
170
+ bin = override && override.trim() ? override.trim() : spec.bin;
171
+ argv = spec.args(goal);
172
+ }
173
+ const id = shortId();
174
+ const logFile = path.join(logsDir(), `${id}.log`);
175
+ let pid;
176
+ try {
177
+ const out = fs.openSync(logFile, "a");
178
+ fs.writeSync(out, `# you orchestrator worker ${id}\n# harness=${harness} project=${project ?? "-"} cwd=${cwd}\n# goal: ${goal}\n# started: ${new Date().toISOString()}\n\n`);
179
+ const child = child_process.spawn(bin, argv, {
180
+ cwd,
181
+ detached: true,
182
+ stdio: ["ignore", out, out],
183
+ env: input.env ?? process.env,
184
+ });
185
+ pid = child.pid;
186
+ // A missing/unlaunchable binary surfaces ASYNCHRONOUSLY via 'error' (ENOENT), after spawn
187
+ // returns. Without this handler Node throws it as an uncaught exception, and the registry
188
+ // would keep a phantom "running" record. Mark the worker failed and never let it crash us.
189
+ child.on("error", (err) => {
190
+ try {
191
+ fs.appendFileSync(logFile, `\n# launch error: ${err.message}\n`);
192
+ }
193
+ catch {
194
+ /* ignore */
195
+ }
196
+ const all = loadWorkers();
197
+ const rec = all.find((w) => w.id === id);
198
+ if (rec && rec.status === "running") {
199
+ rec.status = "failed";
200
+ rec.endedAt = new Date().toISOString();
201
+ saveWorkers(all);
202
+ }
203
+ });
204
+ child.unref();
205
+ fs.closeSync(out);
206
+ }
207
+ catch (err) {
208
+ return {
209
+ ok: false,
210
+ error: `failed to launch ${bin}: ${err.message} (is the harness installed and on PATH?)`,
211
+ };
212
+ }
213
+ const worker = {
214
+ id,
215
+ harness,
216
+ project,
217
+ cwd,
218
+ goal,
219
+ pid,
220
+ status: pid ? "running" : "failed",
221
+ startedAt: new Date().toISOString(),
222
+ logFile,
223
+ host,
224
+ };
225
+ const workers = loadWorkers();
226
+ workers.push(worker);
227
+ saveWorkers(workers);
228
+ return { ok: true, worker };
229
+ }
230
+ function getWorker(id) {
231
+ return refreshWorkers().find((w) => w.id === id);
232
+ }
233
+ /** Tail the last `lines` of a worker's captured output. */
234
+ function getWorkerOutput(id, lines = 40) {
235
+ const worker = getWorker(id);
236
+ if (!worker)
237
+ return { ok: false, error: `no worker with id ${id}` };
238
+ try {
239
+ const raw = fs.readFileSync(worker.logFile, "utf-8");
240
+ const tail = raw.split(/\r?\n/).slice(-lines).join("\n");
241
+ return { ok: true, output: tail };
242
+ }
243
+ catch (err) {
244
+ return { ok: false, error: `could not read log: ${err.message}` };
245
+ }
246
+ }
247
+ /** Stop a running worker (SIGTERM the process group). */
248
+ function stopWorker(id) {
249
+ const workers = refreshWorkers();
250
+ const worker = workers.find((w) => w.id === id);
251
+ if (!worker)
252
+ return { ok: false, error: `no worker with id ${id}` };
253
+ if (worker.status !== "running")
254
+ return { ok: true };
255
+ try {
256
+ if (worker.pid && isPidAlive(worker.pid)) {
257
+ // Negative pid → kill the detached process group.
258
+ try {
259
+ process.kill(-worker.pid, "SIGTERM");
260
+ }
261
+ catch {
262
+ process.kill(worker.pid, "SIGTERM");
263
+ }
264
+ }
265
+ worker.status = "stopped";
266
+ worker.endedAt = new Date().toISOString();
267
+ saveWorkers(workers);
268
+ return { ok: true };
269
+ }
270
+ catch (err) {
271
+ return { ok: false, error: `failed to stop: ${err.message}` };
272
+ }
273
+ }
274
+ /**
275
+ * Reconcile status, then return workers that just reached a terminal state and have NOT yet been
276
+ * reported. Does NOT flip the `reported` flag — the caller marks each id reported only AFTER a
277
+ * successful post (via markReported), so a failed/transient post is retried next pass instead of
278
+ * silently dropping the completion. The "always on, report back" primitive for the watch loop.
279
+ */
280
+ function collectUnreportedCompletions() {
281
+ const workers = refreshWorkers();
282
+ return workers.filter((w) => isTerminalWorkerStatus(w.status) && !w.reported);
283
+ }
284
+ /** Mark the given worker ids as reported (call only after the completion was successfully posted). */
285
+ function markReported(ids) {
286
+ if (ids.length === 0)
287
+ return;
288
+ const set = new Set(ids);
289
+ const workers = loadWorkers();
290
+ let changed = false;
291
+ for (const w of workers) {
292
+ if (set.has(w.id) && !w.reported) {
293
+ w.reported = true;
294
+ changed = true;
295
+ }
296
+ }
297
+ if (changed)
298
+ saveWorkers(workers);
299
+ }
300
+ /** Drop exited/stopped workers older than `maxAgeMs` from the registry (keeps running ones). */
301
+ function pruneWorkers(maxAgeMs = 24 * 60 * 60 * 1000) {
302
+ const now = Date.now();
303
+ const workers = refreshWorkers();
304
+ const kept = workers.filter((w) => {
305
+ if (w.status === "running")
306
+ return true;
307
+ const ended = w.endedAt ? Date.parse(w.endedAt) : Date.parse(w.startedAt);
308
+ return now - ended < maxAgeMs;
309
+ });
310
+ const removed = workers.length - kept.length;
311
+ if (removed > 0)
312
+ saveWorkers(kept);
313
+ return removed;
314
+ }
315
+ //# sourceMappingURL=supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { LoopTool, ModelCaller } from "./loop";
2
+ /** Resolve a You.md project name to a directory under known roots, else treat as a path. */
3
+ export declare function resolveProjectDir(project: string | undefined, fallbackCwd: string): string;
4
+ export interface BuildToolsOptions {
5
+ host?: string;
6
+ /** Default cwd for spawns when no project/dir is supplied. */
7
+ cwd?: string;
8
+ }
9
+ /** Build the orchestrator tool set (process supervision over worker harnesses). */
10
+ export declare function buildOrchestratorTools(opts?: BuildToolsOptions): LoopTool[];
11
+ /**
12
+ * A harness/model-agnostic model caller: try the You.md chat proxy (no key needed), fall back to
13
+ * the user's OpenRouter key if present. Mirrors the proven onboarding.ts pattern.
14
+ */
15
+ export declare function makeModelCaller(): ModelCaller;
16
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/tools.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAe,WAAW,EAAE,MAAM,QAAQ,CAAC;AAiB5D,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAe1F;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,iBAAsB,GAAG,QAAQ,EAAE,CA2G/E;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,WAAW,CA4C7C"}