@loompad/cli 1.2.0 → 1.2.2
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/CHANGELOG.md +72 -0
- package/README.md +13 -7
- package/dist/adapters/antigravity-cli.js +7 -3
- package/dist/adapters/antigravity-cli.js.map +1 -1
- package/dist/adapters/opencode.d.ts +6 -0
- package/dist/adapters/opencode.js +27 -2
- package/dist/adapters/opencode.js.map +1 -1
- package/dist/cli/doctor.d.ts +9 -1
- package/dist/cli/doctor.js +48 -5
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.js +144 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui.js +3 -2
- package/dist/cli/ui.js.map +1 -1
- package/dist/core/brain-index.d.ts +0 -18
- package/dist/core/brain-index.js +10 -2
- package/dist/core/brain-index.js.map +1 -1
- package/dist/core/council.d.ts +3 -3
- package/dist/core/council.js +6 -4
- package/dist/core/council.js.map +1 -1
- package/dist/core/crew-protocol.js +4 -1
- package/dist/core/crew-protocol.js.map +1 -1
- package/dist/core/crew.d.ts +23 -1
- package/dist/core/crew.js +80 -9
- package/dist/core/crew.js.map +1 -1
- package/dist/core/digest.d.ts +2 -0
- package/dist/core/digest.js +9 -0
- package/dist/core/digest.js.map +1 -1
- package/dist/core/loops.js +22 -2
- package/dist/core/loops.js.map +1 -1
- package/dist/core/orchestra.d.ts +16 -0
- package/dist/core/orchestra.js +45 -2
- package/dist/core/orchestra.js.map +1 -1
- package/dist/core/prices.d.ts +27 -0
- package/dist/core/prices.js +38 -0
- package/dist/core/prices.js.map +1 -1
- package/dist/core/proof.d.ts +11 -1
- package/dist/core/proof.js +56 -7
- package/dist/core/proof.js.map +1 -1
- package/dist/core/registry.d.ts +7 -0
- package/dist/core/registry.js.map +1 -1
- package/dist/core/replay.js +3 -1
- package/dist/core/replay.js.map +1 -1
- package/dist/core/routes.js +14 -0
- package/dist/core/routes.js.map +1 -1
- package/dist/core/setup.d.ts +14 -0
- package/dist/core/setup.js +22 -6
- package/dist/core/setup.js.map +1 -1
- package/dist/core/shield.js +7 -3
- package/dist/core/shield.js.map +1 -1
- package/dist/core/shift.d.ts +2 -0
- package/dist/core/shift.js +14 -2
- package/dist/core/shift.js.map +1 -1
- package/dist/daemon/auth.d.ts +7 -1
- package/dist/daemon/auth.js +19 -3
- package/dist/daemon/auth.js.map +1 -1
- package/dist/daemon/client.d.ts +29 -1
- package/dist/daemon/client.js +37 -1
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/council.d.ts +8 -0
- package/dist/daemon/council.js +121 -36
- package/dist/daemon/council.js.map +1 -1
- package/dist/daemon/proof.js +11 -7
- package/dist/daemon/proof.js.map +1 -1
- package/dist/daemon/review.d.ts +10 -0
- package/dist/daemon/review.js +41 -3
- package/dist/daemon/review.js.map +1 -1
- package/dist/daemon/routes/brain.js +4 -0
- package/dist/daemon/routes/brain.js.map +1 -1
- package/dist/daemon/routes/council.js +9 -0
- package/dist/daemon/routes/council.js.map +1 -1
- package/dist/daemon/routes/crews.js +4 -0
- package/dist/daemon/routes/crews.js.map +1 -1
- package/dist/daemon/routes/messages.js +8 -2
- package/dist/daemon/routes/messages.js.map +1 -1
- package/dist/daemon/routes/pairing.js +6 -1
- package/dist/daemon/routes/pairing.js.map +1 -1
- package/dist/daemon/routes/setup.js +9 -1
- package/dist/daemon/routes/setup.js.map +1 -1
- package/dist/daemon/routes/team.js +2 -0
- package/dist/daemon/routes/team.js.map +1 -1
- package/dist/daemon/runtime/accounting.js +7 -3
- package/dist/daemon/runtime/accounting.js.map +1 -1
- package/dist/daemon/runtime/queue.d.ts +9 -0
- package/dist/daemon/runtime/queue.js +27 -1
- package/dist/daemon/runtime/queue.js.map +1 -1
- package/dist/daemon/runtime/relay.d.ts +2 -0
- package/dist/daemon/runtime/relay.js +7 -0
- package/dist/daemon/runtime/relay.js.map +1 -1
- package/dist/daemon/runtime/turns.d.ts +4 -0
- package/dist/daemon/runtime/turns.js +29 -0
- package/dist/daemon/runtime/turns.js.map +1 -1
- package/dist/daemon/runtime-support.d.ts +5 -1
- package/dist/daemon/runtime-support.js +9 -3
- package/dist/daemon/runtime-support.js.map +1 -1
- package/dist/daemon/runtime.d.ts +46 -2
- package/dist/daemon/runtime.js +158 -6
- package/dist/daemon/runtime.js.map +1 -1
- package/dist/daemon/server.js +4 -0
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shift.d.ts +6 -0
- package/dist/daemon/shift.js +11 -2
- package/dist/daemon/shift.js.map +1 -1
- package/dist/daemon/team.d.ts +6 -0
- package/dist/daemon/team.js +15 -0
- package/dist/daemon/team.js.map +1 -1
- package/dist/providers/agent.js +3 -0
- package/dist/providers/agent.js.map +1 -1
- package/dist/types.d.ts +12 -0
- package/dist/types.js.map +1 -1
- package/dist/web/app.css +72 -0
- package/dist/web/app.js +9834 -9635
- package/dist/web/app.js.map +4 -4
- package/docs/release-notes/v1.2.1.md +40 -0
- package/docs/release-notes/v1.2.2.md +39 -0
- package/package.json +1 -1
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface DoctorReport {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
export declare function doctorReport(checks: Check[]): DoctorReport;
|
|
24
|
-
export declare function projectChecks(dir: string): Check[];
|
|
24
|
+
export declare function projectChecks(dir: string, signedOutKinds?: string[]): Check[];
|
|
25
25
|
/**
|
|
26
26
|
* Repair what has exactly one safe repair; report what doesn't.
|
|
27
27
|
*
|
|
@@ -71,3 +71,11 @@ export declare function providerChecks(opts?: {
|
|
|
71
71
|
* capacity) — is better off on the free pool, which rotates. Pure over the log.
|
|
72
72
|
*/
|
|
73
73
|
export declare function freeModelTrouble(events: readonly LoomEvent[], agents: readonly AgentConfig[], now?: number): Check[];
|
|
74
|
+
export declare const fmtBytes: (n: number) => string;
|
|
75
|
+
/** Orchestra folders under ~/.loom whose project isn't registered any more: nothing will ever clean them up. */
|
|
76
|
+
export declare function orchestraOrphans(): Promise<Array<{
|
|
77
|
+
id: string;
|
|
78
|
+
dir: string;
|
|
79
|
+
bytes: number;
|
|
80
|
+
}>>;
|
|
81
|
+
export declare function diskChecks(): Promise<Check[]>;
|
package/dist/cli/doctor.js
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* whether the daemon sees what this shell sees (PATH, keys, sign-ins), whether
|
|
7
7
|
* each provider answers, and whether a free model keeps getting refused.
|
|
8
8
|
*/
|
|
9
|
-
import { execFile } from "../core/process.js";
|
|
9
|
+
import { execFile, execFileSync } from "../core/process.js";
|
|
10
10
|
import { codexBin, codexVersion } from "../providers/codex/adapter.js";
|
|
11
11
|
import fs from "node:fs";
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
import { createAgent, knownAgentKinds } from "../adapters/index.js";
|
|
14
14
|
import { setupReport } from "../core/setup.js";
|
|
15
|
-
import { readDaemonConfig, readProjectConfig, readProjectState, writeProjectConfig, writeProjectState, } from "../core/registry.js";
|
|
15
|
+
import { listProjects, loomHome, readDaemonConfig, readProjectConfig, readProjectState, writeProjectConfig, writeProjectState, } from "../core/registry.js";
|
|
16
16
|
import { resolveSteps, stepName } from "../core/routes.js";
|
|
17
17
|
import { isAdapter } from "../types.js";
|
|
18
18
|
import { ADES } from "../core/ades.js";
|
|
@@ -36,7 +36,7 @@ function fail(name, detail) {
|
|
|
36
36
|
// ---------------------------------------------------------------------------
|
|
37
37
|
// Project checks (pure over a directory — unit tested)
|
|
38
38
|
// ---------------------------------------------------------------------------
|
|
39
|
-
export function projectChecks(dir) {
|
|
39
|
+
export function projectChecks(dir, signedOutKinds = []) {
|
|
40
40
|
const checks = [];
|
|
41
41
|
const config = readProjectConfig(dir);
|
|
42
42
|
if (!config) {
|
|
@@ -77,7 +77,12 @@ export function projectChecks(dir) {
|
|
|
77
77
|
const off = config.agents.filter((a) => a.enabled === false).map((a) => a.id);
|
|
78
78
|
for (const id of off)
|
|
79
79
|
adapterIds.delete(id);
|
|
80
|
-
|
|
80
|
+
// a signed-out agent can't take a turn either (#319)
|
|
81
|
+
const out = config.agents.filter((a) => adapterIds.has(a.id) && signedOutKinds.includes(a.kind)).map((a) => a.id);
|
|
82
|
+
for (const id of out)
|
|
83
|
+
adapterIds.delete(id);
|
|
84
|
+
const why = [off.length ? `${off.join(", ")} switched off` : "", out.length ? `${out.join(", ")} signed out` : ""].filter(Boolean).join("; ");
|
|
85
|
+
checks.push(ok("agents", `${config.agents.length} configured, ${adapterIds.size} can hold the baton${why ? ` (${why})` : ""}`));
|
|
81
86
|
}
|
|
82
87
|
if (!adapterIds.size) {
|
|
83
88
|
checks.push(fail("agents", "no full-duplex adapters — nothing can take a turn"));
|
|
@@ -304,7 +309,7 @@ export function compareWithDaemon(shell, daemon, exists = fs.existsSync) {
|
|
|
304
309
|
out.push(fail(`daemon:${mine.name}`, `installed here, but the daemon can't find it — it runs with a different PATH${dirs.length ? ` (missing ${dirs.join(", ")})` : ""}; ${restart}`));
|
|
305
310
|
}
|
|
306
311
|
else if (mine.status === "ok" && d.status === "fail") {
|
|
307
|
-
out.push(fail(`daemon:${mine.name}`, `signed in here, signed out for the daemon — ${d.detail}`));
|
|
312
|
+
out.push(fail(`daemon:${mine.name}`, /^a turn by /.test(d.detail) ? `looks signed in, but ${d.detail}` : `signed in here, signed out for the daemon — ${d.detail}`));
|
|
308
313
|
}
|
|
309
314
|
}
|
|
310
315
|
const keysHere = shell.facts.keys.filter((k) => !daemon.facts.keys.includes(k));
|
|
@@ -379,4 +384,42 @@ export function freeModelTrouble(events, agents, now = Date.now()) {
|
|
|
379
384
|
}
|
|
380
385
|
return out;
|
|
381
386
|
}
|
|
387
|
+
// ---------------------------------------------------------------------------
|
|
388
|
+
// Disk: orchestra worktrees of projects no longer registered (#295)
|
|
389
|
+
// ---------------------------------------------------------------------------
|
|
390
|
+
/** How big a folder is, in bytes (`du`, so a 2 GB tree is quick); 0 when it can't say. */
|
|
391
|
+
async function sizeOf(dir) {
|
|
392
|
+
try {
|
|
393
|
+
const stdout = execFileSync("du", ["-sk", dir], { timeout: 20_000, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
394
|
+
return (Number(String(stdout).split(/\s+/)[0]) || 0) * 1024;
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
return 0;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
export const fmtBytes = (n) => n >= 1e9 ? `${(n / 1e9).toFixed(1)} GB` : n >= 1e6 ? `${Math.round(n / 1e6)} MB` : `${Math.round(n / 1e3)} KB`;
|
|
401
|
+
/** Orchestra folders under ~/.loom whose project isn't registered any more: nothing will ever clean them up. */
|
|
402
|
+
export async function orchestraOrphans() {
|
|
403
|
+
const root = path.join(loomHome(), "orchestra");
|
|
404
|
+
if (!fs.existsSync(root))
|
|
405
|
+
return [];
|
|
406
|
+
const known = new Set(listProjects().map((p) => p.id));
|
|
407
|
+
const out = [];
|
|
408
|
+
for (const id of fs.readdirSync(root)) {
|
|
409
|
+
const dir = path.join(root, id);
|
|
410
|
+
if (known.has(id) || !fs.statSync(dir, { throwIfNoEntry: false })?.isDirectory())
|
|
411
|
+
continue;
|
|
412
|
+
out.push({ id, dir, bytes: await sizeOf(dir) });
|
|
413
|
+
}
|
|
414
|
+
return out;
|
|
415
|
+
}
|
|
416
|
+
export async function diskChecks() {
|
|
417
|
+
if (process.platform === "win32")
|
|
418
|
+
return [];
|
|
419
|
+
const orphans = await orchestraOrphans();
|
|
420
|
+
if (!orphans.length)
|
|
421
|
+
return [ok("orchestra", "no orphaned worktrees")];
|
|
422
|
+
const total = orphans.reduce((n, o) => n + o.bytes, 0);
|
|
423
|
+
return [warn("orchestra", `${orphans.length} orchestra folder${orphans.length === 1 ? "" : "s"} from projects no longer registered (${fmtBytes(total)}): ${orphans.map((o) => `${o.id} ${fmtBytes(o.bytes)}`).join(", ")} — loom orchestra:clean removes them`)];
|
|
424
|
+
}
|
|
382
425
|
//# sourceMappingURL=doctor.js.map
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -27,7 +27,7 @@ import qrcode from "qrcode-terminal";
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
import { exitCodeFor, turnOutcome } from "../core/turn-wait.js";
|
|
30
|
-
import { DaemonClient, DaemonError, daemonRunning, ensureDaemon, stopDaemon, } from "../daemon/client.js";
|
|
30
|
+
import { DaemonClient, DaemonError, daemonRunning, desktopOwnsDaemon, ensureDaemon, stopDaemon, } from "../daemon/client.js";
|
|
31
31
|
import { installCrashGuards } from "../daemon/guards.js";
|
|
32
32
|
import { LoomDaemon, DEFAULT_PORT } from "../daemon/server.js";
|
|
33
33
|
import { ensureLoomHome, findProject, loomHome, readDaemonConfig } from "../core/registry.js";
|
|
@@ -200,8 +200,14 @@ program
|
|
|
200
200
|
.description("start the loom daemon in the background")
|
|
201
201
|
.option("--tailnet", "bind to this machine's Tailscale IP", false)
|
|
202
202
|
.option("--restart", "restart even if a daemon is already running", false)
|
|
203
|
+
.option("--force", "with --restart: replace even Loom Desktop's daemon with this CLI's")
|
|
203
204
|
.action(async (opts) => {
|
|
204
205
|
const running = await daemonRunning();
|
|
206
|
+
if (running && !opts.force && (await desktopOwnsDaemon(running))) {
|
|
207
|
+
// replacing it swapped Desktop onto the CLI's build without a word (#306)
|
|
208
|
+
console.log(pc.yellow("Loom Desktop runs this daemon — quit and reopen Loom Desktop to restart it (or loom up --restart --force to replace it with this CLI's)"));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
205
211
|
if (running) {
|
|
206
212
|
const { BUILD_REV } = await import("../daemon/server.js");
|
|
207
213
|
const health = (await fetch(`http://${running.host}:${running.port}/api/health`)
|
|
@@ -251,15 +257,21 @@ program
|
|
|
251
257
|
program
|
|
252
258
|
.command("status")
|
|
253
259
|
.description("daemon health and project board")
|
|
254
|
-
.
|
|
260
|
+
.option("--json", "print the projects as JSON")
|
|
261
|
+
.action(async (opts) => {
|
|
255
262
|
const cfg = await daemonRunning();
|
|
256
263
|
if (!cfg) {
|
|
264
|
+
if (opts.json)
|
|
265
|
+
return void console.log(JSON.stringify({ daemon: null, projects: [] }));
|
|
257
266
|
console.log(pc.dim("daemon: not running (loom up)"));
|
|
258
267
|
return;
|
|
259
268
|
}
|
|
260
|
-
|
|
269
|
+
if (!opts.json)
|
|
270
|
+
console.log(pc.green(`daemon: http://${cfg.host}:${cfg.port}`));
|
|
261
271
|
const client = new DaemonClient(cfg);
|
|
262
272
|
const { projects } = await client.listProjects();
|
|
273
|
+
if (opts.json)
|
|
274
|
+
return void console.log(JSON.stringify(projects)); // #315
|
|
263
275
|
if (!projects.length)
|
|
264
276
|
console.log(pc.dim("no projects yet — loom init"));
|
|
265
277
|
for (const p of projects)
|
|
@@ -290,6 +302,7 @@ program
|
|
|
290
302
|
.command("projects")
|
|
291
303
|
.description("board of all projects")
|
|
292
304
|
.option("--forget <idOrName>", "stop tracking a project (its .loom/ stays on disk)")
|
|
305
|
+
.option("--json", "print the projects as JSON")
|
|
293
306
|
.action(async (opts) => {
|
|
294
307
|
const client = await ensureDaemon();
|
|
295
308
|
if (opts.forget) {
|
|
@@ -309,6 +322,8 @@ program
|
|
|
309
322
|
return;
|
|
310
323
|
}
|
|
311
324
|
const { projects } = await client.listProjects();
|
|
325
|
+
if (opts.json)
|
|
326
|
+
return void console.log(JSON.stringify(projects)); // #315
|
|
312
327
|
if (!projects.length)
|
|
313
328
|
console.log(pc.dim("no projects yet — loom init"));
|
|
314
329
|
for (const p of projects)
|
|
@@ -1114,7 +1129,8 @@ program
|
|
|
1114
1129
|
return pc.dim(`${t} ${e.kind}`);
|
|
1115
1130
|
}
|
|
1116
1131
|
};
|
|
1117
|
-
|
|
1132
|
+
// the banner is for people: stderr, so --json's stdout is events and nothing else (#314)
|
|
1133
|
+
console.error(pc.dim(project
|
|
1118
1134
|
? `watching ${project.name} — ^C to stop`
|
|
1119
1135
|
: "watching every project — ^C to stop"));
|
|
1120
1136
|
const close = client.subscribe((pid, e) => {
|
|
@@ -1197,8 +1213,15 @@ program
|
|
|
1197
1213
|
({ review } = await client.startReview(project.id, { agents, ...(opts.file ? { file: opts.file } : {}), ...(opts.text ? { text: opts.text } : {}), ...(opts.focus ? { focus: opts.focus } : {}) }));
|
|
1198
1214
|
}
|
|
1199
1215
|
catch (err) {
|
|
1216
|
+
if (opts.json) {
|
|
1217
|
+
process.exitCode = 1;
|
|
1218
|
+
return void console.log(JSON.stringify({ status: "error", error: err instanceof Error ? err.message : String(err) }));
|
|
1219
|
+
}
|
|
1200
1220
|
return fail(err instanceof Error ? err.message : String(err));
|
|
1201
1221
|
}
|
|
1222
|
+
const shaky = review.unreliable ?? [];
|
|
1223
|
+
if (!opts.json && shaky.length)
|
|
1224
|
+
console.error(pc.yellow(`⚠ ${shaky.join(", ")} hasn't finished a review in this project yet (left out each time) — it may wait out review.timeoutMin`));
|
|
1202
1225
|
if (!opts.json)
|
|
1203
1226
|
console.error(pc.cyan(`🔍 ${agents.join(", ")} reviewing ${review.target.kind === "file" ? review.target.file : review.target.kind === "diff" ? "the uncommitted changes" : `“${review.target.label ?? "your request"}”`} · read-only, nobody takes the baton`));
|
|
1204
1227
|
if (!opts.wait)
|
|
@@ -1210,6 +1233,9 @@ program
|
|
|
1210
1233
|
}
|
|
1211
1234
|
if (review.status !== "done") {
|
|
1212
1235
|
process.exitCode = 124;
|
|
1236
|
+
// valid JSON on every exit path: who has answered so far, and who hasn't (#291)
|
|
1237
|
+
if (opts.json)
|
|
1238
|
+
return void console.log(JSON.stringify({ ...review, status: "timeout", waitingOn: review.agents }));
|
|
1213
1239
|
return void console.error(pc.yellow(`still reviewing after ${opts.timeout}s — loom reviews ${review.reviewId} later`));
|
|
1214
1240
|
}
|
|
1215
1241
|
if (opts.json)
|
|
@@ -1250,8 +1276,10 @@ program
|
|
|
1250
1276
|
await new Promise((r) => setTimeout(r, 1500));
|
|
1251
1277
|
}
|
|
1252
1278
|
console.log((council.status === "done" ? pc.green : council.status === "stopped" ? pc.yellow : pc.red)(`\n${council.summary ?? council.status}`));
|
|
1253
|
-
if (council.status === "failed")
|
|
1279
|
+
if (council.status === "failed") {
|
|
1254
1280
|
process.exitCode = 1;
|
|
1281
|
+
console.log(pc.dim(`carry on from where it stopped: loom council:resume ${council.councilId}`));
|
|
1282
|
+
}
|
|
1255
1283
|
});
|
|
1256
1284
|
program
|
|
1257
1285
|
.command("council:status [councilId]")
|
|
@@ -1268,6 +1296,21 @@ program
|
|
|
1268
1296
|
if (council.summary)
|
|
1269
1297
|
console.log(pc.dim(`\n${council.summary}`));
|
|
1270
1298
|
});
|
|
1299
|
+
program
|
|
1300
|
+
.command("council:resume <councilId>")
|
|
1301
|
+
.description("carry on a council that a restart, a failed turn or Stop ended — from the first stage that didn't finish")
|
|
1302
|
+
.action(async (councilId) => {
|
|
1303
|
+
const client = await ensureDaemon();
|
|
1304
|
+
const project = await currentProject(client);
|
|
1305
|
+
try {
|
|
1306
|
+
const { council } = await client.resumeCouncil(project.id, councilId);
|
|
1307
|
+
const next = council.stages.find((st) => !["done", "skipped", "unverified"].includes(st.status) && !(st.key === "prove" && st.status === "failed"));
|
|
1308
|
+
console.log(pc.cyan(`🏛 resuming council ${council.councilId} from ${next?.name ?? "the end"} — loom council:status ${council.councilId}`));
|
|
1309
|
+
}
|
|
1310
|
+
catch (err) {
|
|
1311
|
+
fail(err instanceof Error ? err.message : String(err));
|
|
1312
|
+
}
|
|
1313
|
+
});
|
|
1271
1314
|
program
|
|
1272
1315
|
.command("council:stop")
|
|
1273
1316
|
.description("stop the running council after its current stage")
|
|
@@ -1283,7 +1326,7 @@ program
|
|
|
1283
1326
|
}
|
|
1284
1327
|
});
|
|
1285
1328
|
function councilMark(status) {
|
|
1286
|
-
return status === "done" ? pc.green("✓") : status === "running" ? pc.cyan("◐") : status === "failed" ? pc.red("✗") : status === "skipped" ? pc.dim("–") : pc.dim("·");
|
|
1329
|
+
return status === "done" ? pc.green("✓") : status === "running" ? pc.cyan("◐") : status === "failed" ? pc.red("✗") : status === "unverified" ? pc.yellow("?") : status === "skipped" ? pc.dim("–") : pc.dim("·");
|
|
1287
1330
|
}
|
|
1288
1331
|
program
|
|
1289
1332
|
.command("reviews [reviewId]")
|
|
@@ -1382,6 +1425,8 @@ program
|
|
|
1382
1425
|
});
|
|
1383
1426
|
// ── orchestra: one orchestrator, many parallel workers (core/orchestra.ts) ──
|
|
1384
1427
|
const RUN_DONE = new Set(["completed", "failed", "aborted", "waiting_human"]);
|
|
1428
|
+
/** A run a restart cut off is "aborted" on disk but resumable: say so, and how (#305). */
|
|
1429
|
+
const runStatus = (r) => r.status === "aborted" && r.interrupted ? "interrupted (resumable)" : r.status;
|
|
1385
1430
|
const TASK_COLOR = {
|
|
1386
1431
|
done: pc.green,
|
|
1387
1432
|
running: pc.cyan,
|
|
@@ -1394,8 +1439,8 @@ const TASK_COLOR = {
|
|
|
1394
1439
|
function printRun(run) {
|
|
1395
1440
|
const done = run.tasks.filter((t) => t.status === "done").length;
|
|
1396
1441
|
console.log(run.race
|
|
1397
|
-
? `${pc.magenta("🏁")} ${pc.bold(run.id)} ${pc.dim(run
|
|
1398
|
-
: `${pc.magenta("🎼")} ${pc.bold(run.id)} ${pc.dim(run
|
|
1442
|
+
? `${pc.magenta("🏁")} ${pc.bold(run.id)} ${pc.dim(runStatus(run))} race · ${done}/${run.tasks.length} finished · ${fmtUsd(run.costUsd)}`
|
|
1443
|
+
: `${pc.magenta("🎼")} ${pc.bold(run.id)} ${pc.dim(runStatus(run))} ${done}/${run.tasks.length} tasks · ` +
|
|
1399
1444
|
`round ${run.round}/${run.maxRounds} · ${fmtUsd(run.costUsd)} · ${pc.dim(run.branch)}`);
|
|
1400
1445
|
console.log(` ${pc.dim("goal")} ${run.goal}`);
|
|
1401
1446
|
if (run.race)
|
|
@@ -1508,7 +1553,7 @@ program
|
|
|
1508
1553
|
return void console.log(pc.dim('no orchestra runs yet — loom orchestrate "<goal>"'));
|
|
1509
1554
|
for (const r of runs.slice(0, 15)) {
|
|
1510
1555
|
const done = r.tasks.filter((t) => t.status === "done").length;
|
|
1511
|
-
console.log(`${pc.bold(r.id)} ${r.
|
|
1556
|
+
console.log(`${pc.bold(r.id)} ${runStatus(r).padEnd(13)} ${String(done).padStart(2)}/${String(r.tasks.length).padEnd(2)} ` +
|
|
1512
1557
|
`${pc.dim(new Date(r.createdAt).toLocaleString())} ${r.goal.slice(0, 70)}`);
|
|
1513
1558
|
}
|
|
1514
1559
|
}
|
|
@@ -1796,14 +1841,18 @@ program
|
|
|
1796
1841
|
});
|
|
1797
1842
|
program
|
|
1798
1843
|
.command("crew [action] [args...]")
|
|
1799
|
-
.description("Agent Teams: status | create | goal | say | approve | pause | stop | resume | pick | refresh | budget | overlap | deliver | apply | diff | remove")
|
|
1844
|
+
.description("Agent Teams: status | create | goal | say | approve | pause | stop | resume | accept | pick | refresh | budget | overlap | deliver | apply | diff | remove")
|
|
1800
1845
|
.option("--crew <id>", "which crew, when the project has several")
|
|
1801
1846
|
.option("--to <teammate>", "say: to one teammate")
|
|
1802
1847
|
.option("--no-approval", "create: the Lead's plan starts without your OK")
|
|
1803
1848
|
.option("--play <play>", "ship, fanout or race")
|
|
1804
1849
|
.option("--parallel <n>", "create: maximum concurrent builders (1–4)")
|
|
1850
|
+
.option("--lead <agent>", "create: who leads")
|
|
1851
|
+
.option("--builders <agents>", "create: comma-separated agents that build")
|
|
1852
|
+
.option("--reviewer <agent>", "create: who reviews")
|
|
1853
|
+
.option("--tester <agent>", "create: who tests")
|
|
1805
1854
|
.option("--amount <usd>", "budget: new goal budget in USD")
|
|
1806
|
-
.option("--card <id>", "overlap: held card id")
|
|
1855
|
+
.option("--card <id>", "overlap: held card id; accept: the failed card to take as it stands")
|
|
1807
1856
|
.option("--decision <decision>", "overlap: narrow, wait:<goal>, or proceed:<reason>")
|
|
1808
1857
|
.option("--touches <globs>", "overlap: comma-separated revised paths")
|
|
1809
1858
|
.action(async (action, args, opts) => {
|
|
@@ -1817,7 +1866,10 @@ program
|
|
|
1817
1866
|
const template = first && templates.includes(first.toLowerCase()) ? first.toLowerCase() : "ship";
|
|
1818
1867
|
const name = (first && templates.includes(first.toLowerCase()) ? rest : args ?? []).join(" ");
|
|
1819
1868
|
const { crew } = await client.createCrew(project.id, { template, ...(name ? { name } : {}), ...(opts.approval === false ? { planApproval: false } : {}),
|
|
1820
|
-
...(opts.play ? { play: opts.play } : {}), ...(opts.parallel ? { maxParallel: Number(opts.parallel) } : {})
|
|
1869
|
+
...(opts.play ? { play: opts.play } : {}), ...(opts.parallel ? { maxParallel: Number(opts.parallel) } : {}),
|
|
1870
|
+
...(opts.lead || opts.builders || opts.reviewer || opts.tester ? { seats: { ...(opts.lead ? { lead: opts.lead } : {}),
|
|
1871
|
+
...(opts.builders ? { builders: opts.builders.split(",").map((x) => x.trim()).filter(Boolean) } : {}),
|
|
1872
|
+
...(opts.reviewer ? { reviewer: opts.reviewer } : {}), ...(opts.tester ? { tester: opts.tester } : {}) } } : {}) });
|
|
1821
1873
|
console.log(`${pc.green("✓")} ${pc.bold(crew.name)} (${crew.id}) — ${crew.teammates.map((t) => `${t.id}=${t.agent}`).join(", ")}`);
|
|
1822
1874
|
console.log(pc.dim(` give it a goal: loom crew goal "…"${crews.length ? ` --crew ${crew.id}` : ""}`));
|
|
1823
1875
|
return;
|
|
@@ -1853,6 +1905,8 @@ program
|
|
|
1853
1905
|
console.log(`${pc.green("✓")} ${out.routed === "goal" ? "new goal" : out.routed === "answer" ? "answered" : out.routed === "replan" ? "the Lead replans with that" : `noted for ${out.to}`}`);
|
|
1854
1906
|
else if (a === "apply")
|
|
1855
1907
|
console.log(`${pc.green("✓")} merged ${pc.bold(out.merged)} into ${pc.bold(out.into)}`);
|
|
1908
|
+
else if (a === "budget" && !out.goal?.status?.match(/running|planning|awaiting|waiting|paused/))
|
|
1909
|
+
console.log(`${pc.green("✓")} the next goal starts with a $${Number(opts.amount).toFixed(2)} budget`);
|
|
1856
1910
|
else
|
|
1857
1911
|
printCrew(out.crew);
|
|
1858
1912
|
});
|
|
@@ -2500,6 +2554,8 @@ program
|
|
|
2500
2554
|
// ---------------------------------------------------------------------------
|
|
2501
2555
|
// send / chat / handoff / interrupt / decision / log
|
|
2502
2556
|
// ---------------------------------------------------------------------------
|
|
2557
|
+
/** A session this big, resumed cold, is worth a warning before a turn re-reads it (#280). */
|
|
2558
|
+
const HEAVY_SESSION = 100_000;
|
|
2503
2559
|
/**
|
|
2504
2560
|
* .loom/ is this machine's runtime state — the event log, attachments, a 0600 config — not something
|
|
2505
2561
|
* to commit (a team's shared memory lives in AGENTS.md). In a git repo that doesn't ignore it yet,
|
|
@@ -2522,9 +2578,9 @@ async function offerGitignore(dir, choice) {
|
|
|
2522
2578
|
fs.writeFileSync(file, `${before}${before && !before.endsWith("\n") ? "\n" : ""}# Loom's local state (event log, attachments, machine config)\n.loom/\n`);
|
|
2523
2579
|
console.log(pc.green("✓ added .loom/ to .gitignore"));
|
|
2524
2580
|
}
|
|
2525
|
-
async function sendWithHandoffConfirm(client, projectId, text, agentId, interactive = true) {
|
|
2581
|
+
async function sendWithHandoffConfirm(client, projectId, text, agentId, interactive = true, fresh = false) {
|
|
2526
2582
|
try {
|
|
2527
|
-
return await client.send(projectId, text, agentId);
|
|
2583
|
+
return await client.send(projectId, text, agentId, { fresh });
|
|
2528
2584
|
}
|
|
2529
2585
|
catch (err) {
|
|
2530
2586
|
if (err instanceof DaemonError && err.status === 409 && agentId) {
|
|
@@ -2535,7 +2591,7 @@ async function sendWithHandoffConfirm(client, projectId, text, agentId, interact
|
|
|
2535
2591
|
if (!yes)
|
|
2536
2592
|
return null;
|
|
2537
2593
|
await client.handoff(projectId, agentId);
|
|
2538
|
-
return await client.send(projectId, text, agentId);
|
|
2594
|
+
return await client.send(projectId, text, agentId, { fresh });
|
|
2539
2595
|
}
|
|
2540
2596
|
throw err;
|
|
2541
2597
|
}
|
|
@@ -2547,12 +2603,29 @@ program
|
|
|
2547
2603
|
.option("--wait", "wait for the turn to end; print the reply and cost; exit 0 done, 1 failed, 2 asked a question, 124 timed out")
|
|
2548
2604
|
.option("--json", "with --wait: print the outcome as one JSON object")
|
|
2549
2605
|
.option("--timeout <seconds>", "with --wait: give up after this long", "1800")
|
|
2606
|
+
.option("--fresh", "start the agent's session in this chat over — a short question needn't re-read a long one")
|
|
2550
2607
|
.action(async (words, opts) => {
|
|
2551
2608
|
const client = await ensureDaemon();
|
|
2552
2609
|
const project = await currentProject(client);
|
|
2610
|
+
// a long session whose prompt cache has gone cold is re-read in full: say so before spending it (#280)
|
|
2611
|
+
const target = opts.agent ?? project.holder ?? undefined;
|
|
2612
|
+
if (!opts.fresh && target) {
|
|
2613
|
+
const weight = await client.sessionWeight(project.id, target).then((r) => r.session).catch(() => null);
|
|
2614
|
+
if (weight && weight.cold && weight.tokens >= HEAVY_SESSION) {
|
|
2615
|
+
const ago = weight.ageMs >= 3_600_000 ? `${Math.round(weight.ageMs / 3_600_000)}h` : `${Math.round(weight.ageMs / 60_000)}m`;
|
|
2616
|
+
console.error(pc.yellow(`⚠ ${target}'s session here is ${Math.round(weight.tokens / 1000)}k tokens, last used ${ago} ago — its cache has likely expired, so this turn re-reads all of it` +
|
|
2617
|
+
`${weight.estUsd !== undefined ? ` (~${fmtUsd(weight.estUsd)} est.)` : ""}. --fresh starts a new session instead.`));
|
|
2618
|
+
// a person at a terminal is asked, --wait or not; a script only gets the warning (#300)
|
|
2619
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
2620
|
+
const go = await confirm(pc.yellow("send it to the existing session anyway?"));
|
|
2621
|
+
if (!go)
|
|
2622
|
+
return void console.log(pc.dim(`not sent — loom send --fresh${opts.agent ? ` -a ${opts.agent}` : ""} "…"`));
|
|
2623
|
+
}
|
|
2624
|
+
}
|
|
2625
|
+
}
|
|
2553
2626
|
// where the log is now, so the wait reads only what this send causes (#254)
|
|
2554
2627
|
const since = opts.wait ? ((await client.events(project.id, undefined, 1)).events.at(-1)?.id ?? 0) : 0;
|
|
2555
|
-
const result = await sendWithHandoffConfirm(client, project.id, words.join(" "), opts.agent, !opts.wait || process.stdin.isTTY);
|
|
2628
|
+
const result = await sendWithHandoffConfirm(client, project.id, words.join(" "), opts.agent, !opts.wait || process.stdin.isTTY, Boolean(opts.fresh));
|
|
2556
2629
|
if (!result)
|
|
2557
2630
|
return;
|
|
2558
2631
|
if (!opts.wait)
|
|
@@ -2719,9 +2792,14 @@ program
|
|
|
2719
2792
|
cost: pc.dim,
|
|
2720
2793
|
turn: pc.dim,
|
|
2721
2794
|
};
|
|
2795
|
+
// a stretch that crosses midnight says which day each moment was; the totals row has no moment (#297)
|
|
2796
|
+
const day = (t) => new Date(t).toDateString();
|
|
2797
|
+
const spans = d.lines.some((l) => l.kind !== "cost" && day(l.at) !== day(Date.now()));
|
|
2798
|
+
const stamp = (l) => l.kind === "cost" ? "in all"
|
|
2799
|
+
: `${spans ? `${new Date(l.at).toLocaleDateString([], { month: "short", day: "numeric" })} ` : ""}${new Date(l.at).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })}`;
|
|
2800
|
+
const width = Math.max(...d.lines.map((l) => stamp(l).length));
|
|
2722
2801
|
for (const line of d.lines) {
|
|
2723
|
-
|
|
2724
|
-
console.log(`${pc.dim(when)} ${(paint[line.kind] ?? ((x) => x))(line.text)}`);
|
|
2802
|
+
console.log(`${pc.dim(stamp(line).padEnd(width))} ${(paint[line.kind] ?? ((x) => x))(line.text)}${line.count && line.count > 1 ? pc.dim(` ×${line.count}`) : ""}`);
|
|
2725
2803
|
}
|
|
2726
2804
|
if (d.waiting.length)
|
|
2727
2805
|
console.log(pc.yellow(`\nwaiting on you: ${d.waiting.join(", ")}`));
|
|
@@ -3085,6 +3163,15 @@ program
|
|
|
3085
3163
|
console.log(pc.dim(" no turns recorded yet"));
|
|
3086
3164
|
console.log(pc.dim("\n(costs come from agents that report them — claude-code and opencode do)"));
|
|
3087
3165
|
});
|
|
3166
|
+
program
|
|
3167
|
+
.command("memory:repair")
|
|
3168
|
+
.description("mend decisions recorded before 1.2.1 whose underscores and paths were stripped, from the planner's own words")
|
|
3169
|
+
.action(async () => {
|
|
3170
|
+
const client = await ensureDaemon();
|
|
3171
|
+
const project = await currentProject(client);
|
|
3172
|
+
const { repaired, checked } = await client.repairDecisions(project.id);
|
|
3173
|
+
console.log(repaired ? pc.green(`✓ mended ${repaired} of ${checked} review decisions`) : pc.dim(`nothing to mend among ${checked} review decisions`));
|
|
3174
|
+
});
|
|
3088
3175
|
program
|
|
3089
3176
|
.command("decision <text...>")
|
|
3090
3177
|
.description("record a decision into shared memory (projected on every handoff)")
|
|
@@ -3232,8 +3319,10 @@ program
|
|
|
3232
3319
|
// fall through to a fresh diagnosis, so the report reflects the repairs
|
|
3233
3320
|
}
|
|
3234
3321
|
const checks = await envChecks();
|
|
3322
|
+
checks.push(...(await (await import("./doctor.js")).diskChecks()));
|
|
3323
|
+
const signedOut = checks.filter((c) => c.status === "fail" && /signed out/.test(c.detail)).map((c) => c.name);
|
|
3235
3324
|
if (dir)
|
|
3236
|
-
checks.push(...projectChecks(dir));
|
|
3325
|
+
checks.push(...projectChecks(dir, signedOut));
|
|
3237
3326
|
else
|
|
3238
3327
|
checks.push({ name: "project", status: "warn", detail: "not inside a Loom project (loom init)" });
|
|
3239
3328
|
// The daemon is often the desktop app's, started without this shell's PATH or keys:
|
|
@@ -3277,13 +3366,46 @@ program
|
|
|
3277
3366
|
}
|
|
3278
3367
|
console.log(pc.green("\nall clear"));
|
|
3279
3368
|
});
|
|
3369
|
+
program
|
|
3370
|
+
.command("orchestra:clean")
|
|
3371
|
+
.description("remove orchestra worktrees left by projects that are no longer registered")
|
|
3372
|
+
.option("--dry-run", "only say what would go")
|
|
3373
|
+
.action(async (opts) => {
|
|
3374
|
+
const { orchestraOrphans, fmtBytes } = await import("./doctor.js");
|
|
3375
|
+
const orphans = await orchestraOrphans();
|
|
3376
|
+
if (!orphans.length)
|
|
3377
|
+
return void console.log(pc.dim("no orphaned orchestra worktrees"));
|
|
3378
|
+
for (const o of orphans) {
|
|
3379
|
+
if (!opts.dryRun)
|
|
3380
|
+
fs.rmSync(o.dir, { recursive: true, force: true });
|
|
3381
|
+
console.log(`${opts.dryRun ? pc.dim("would remove") : pc.green("✓ removed")} ${o.dir} ${pc.dim(fmtBytes(o.bytes))}`);
|
|
3382
|
+
}
|
|
3383
|
+
if (!opts.dryRun)
|
|
3384
|
+
console.log(pc.dim("their branches stay in each repo: git worktree prune there tidies git's own list"));
|
|
3385
|
+
});
|
|
3280
3386
|
program
|
|
3281
3387
|
.command("clients")
|
|
3282
3388
|
.description("list paired devices, revoke one, or ping them with a test push")
|
|
3283
3389
|
.option("--revoke <id>", "revoke a paired device's access")
|
|
3284
3390
|
.option("--ping", "send a test push notification to all registered devices", false)
|
|
3391
|
+
.option("--prune", "revoke devices not seen for --days (never one registered for push, nor Loom Desktop)")
|
|
3392
|
+
.option("--days <n>", "with --prune: how long unseen counts as gone", "30")
|
|
3393
|
+
.option("--dry-run", "with --prune: only list what would go")
|
|
3285
3394
|
.action(async (opts) => {
|
|
3286
3395
|
const client = await ensureDaemon();
|
|
3396
|
+
if (opts.prune) {
|
|
3397
|
+
// every pairing made a device and nothing retired them: 86 piled up in a day of testing (#320)
|
|
3398
|
+
const { clients } = await client.pairedClients();
|
|
3399
|
+
const cutoff = Date.now() - Math.max(1, Number(opts.days) || 30) * 86_400_000;
|
|
3400
|
+
const gone = clients.filter((c) => !c.push && !c.owner && (c.lastSeen ?? c.createdAt) < cutoff);
|
|
3401
|
+
for (const c of gone) {
|
|
3402
|
+
if (!opts.dryRun)
|
|
3403
|
+
await client.revokeClient(c.id);
|
|
3404
|
+
console.log(`${opts.dryRun ? pc.dim("would revoke") : pc.green("✓ revoked")} ${c.name} ${pc.dim(`(${c.id}) last seen ${new Date(c.lastSeen ?? c.createdAt).toLocaleDateString()}`)}`);
|
|
3405
|
+
}
|
|
3406
|
+
console.log(pc.dim(gone.length ? `${gone.length} of ${clients.length} devices${opts.dryRun ? " would go" : " revoked"}` : `nothing unseen for ${opts.days} days among ${clients.length} devices`));
|
|
3407
|
+
return;
|
|
3408
|
+
}
|
|
3287
3409
|
if (opts.revoke) {
|
|
3288
3410
|
await client.revokeClient(opts.revoke);
|
|
3289
3411
|
console.log(pc.green(`✓ revoked ${opts.revoke}`));
|
|
@@ -3301,9 +3423,11 @@ program
|
|
|
3301
3423
|
return void console.log(pc.dim("no paired devices — loom pair"));
|
|
3302
3424
|
for (const c of clients) {
|
|
3303
3425
|
console.log(` ${pc.bold(c.name)} ${pc.dim(`(${c.id})`)} paired ${new Date(c.createdAt).toLocaleString()}` +
|
|
3426
|
+
pc.dim(` ·seen ${c.lastSeen ? new Date(c.lastSeen).toLocaleDateString() : "never"}`) +
|
|
3427
|
+
(c.owner ? pc.cyan(" ·owner") : "") +
|
|
3304
3428
|
(c.push ? pc.green(" ·push✓") : pc.dim(" ·no push")));
|
|
3305
3429
|
}
|
|
3306
|
-
console.log(pc.dim("\nrevoke: loom clients --revoke <id> · test push: loom clients --ping"));
|
|
3430
|
+
console.log(pc.dim("\nrevoke: loom clients --revoke <id> · tidy up: loom clients --prune [--days 30] [--dry-run] · test push: loom clients --ping"));
|
|
3307
3431
|
});
|
|
3308
3432
|
program
|
|
3309
3433
|
.command("pair")
|