@loompad/cli 1.1.2 → 1.2.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.
- package/CHANGELOG.md +25 -0
- package/README.md +20 -5
- package/dist/adapters/antigravity-cli.d.ts +2 -0
- package/dist/adapters/antigravity-cli.js +20 -1
- package/dist/adapters/antigravity-cli.js.map +1 -1
- package/dist/adapters/model.js +1 -1
- package/dist/adapters/model.js.map +1 -1
- package/dist/cli/doctor.d.ts +30 -1
- package/dist/cli/doctor.js +117 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.js +294 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui.js +11 -7
- package/dist/cli/ui.js.map +1 -1
- package/dist/core/auto-policy.d.ts +46 -0
- package/dist/core/auto-policy.js +181 -0
- package/dist/core/auto-policy.js.map +1 -0
- package/dist/core/council.d.ts +55 -0
- package/dist/core/council.js +71 -0
- package/dist/core/council.js.map +1 -0
- package/dist/core/permissions.js +2 -2
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/prices.d.ts +55 -0
- package/dist/core/prices.js +99 -0
- package/dist/core/prices.js.map +1 -0
- package/dist/core/proof.d.ts +2 -0
- package/dist/core/proof.js +33 -10
- package/dist/core/proof.js.map +1 -1
- package/dist/core/providers.d.ts +13 -0
- package/dist/core/providers.js +17 -0
- package/dist/core/providers.js.map +1 -1
- package/dist/core/replay.js +14 -0
- package/dist/core/replay.js.map +1 -1
- package/dist/core/review.d.ts +60 -0
- package/dist/core/review.js +121 -0
- package/dist/core/review.js.map +1 -0
- package/dist/core/setup.d.ts +13 -0
- package/dist/core/setup.js +17 -1
- package/dist/core/setup.js.map +1 -1
- package/dist/core/turn-wait.d.ts +20 -0
- package/dist/core/turn-wait.js +39 -0
- package/dist/core/turn-wait.js.map +1 -0
- package/dist/core/usage.d.ts +7 -1
- package/dist/core/usage.js +11 -3
- package/dist/core/usage.js.map +1 -1
- package/dist/daemon/client.d.ts +46 -0
- package/dist/daemon/client.js +34 -0
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/council.d.ts +98 -0
- package/dist/daemon/council.js +248 -0
- package/dist/daemon/council.js.map +1 -0
- package/dist/daemon/proof.d.ts +6 -0
- package/dist/daemon/proof.js +22 -3
- package/dist/daemon/proof.js.map +1 -1
- package/dist/daemon/push.js +7 -0
- package/dist/daemon/push.js.map +1 -1
- package/dist/daemon/review.d.ts +89 -0
- package/dist/daemon/review.js +136 -0
- package/dist/daemon/review.js.map +1 -0
- package/dist/daemon/routes/council.d.ts +4 -0
- package/dist/daemon/routes/council.js +29 -0
- package/dist/daemon/routes/council.js.map +1 -0
- package/dist/daemon/routes/review.d.ts +4 -0
- package/dist/daemon/routes/review.js +40 -0
- package/dist/daemon/routes/review.js.map +1 -0
- package/dist/daemon/routes/routing.js +2 -1
- package/dist/daemon/routes/routing.js.map +1 -1
- package/dist/daemon/routes/setup.d.ts +2 -1
- package/dist/daemon/routes/setup.js +13 -5
- package/dist/daemon/routes/setup.js.map +1 -1
- package/dist/daemon/runtime/accounting.d.ts +6 -0
- package/dist/daemon/runtime/accounting.js +37 -1
- package/dist/daemon/runtime/accounting.js.map +1 -1
- package/dist/daemon/runtime/briefings.d.ts +8 -3
- package/dist/daemon/runtime/briefings.js +26 -14
- package/dist/daemon/runtime/briefings.js.map +1 -1
- package/dist/daemon/runtime.d.ts +40 -1
- package/dist/daemon/runtime.js +171 -2
- package/dist/daemon/runtime.js.map +1 -1
- package/dist/daemon/server.js +5 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/providers/agent.js +3 -0
- package/dist/providers/agent.js.map +1 -1
- package/dist/providers/claude/adapter.d.ts +3 -0
- package/dist/providers/claude/adapter.js +20 -1
- package/dist/providers/claude/adapter.js.map +1 -1
- package/dist/types.d.ts +19 -1
- package/dist/types.js.map +1 -1
- package/dist/web/app.css +44 -0
- package/dist/web/app.js +143 -12
- package/dist/web/app.js.map +3 -3
- package/docs/release-notes/v1.2.0.md +48 -0
- package/package.json +1 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review: the runner (#253). Each reviewer is a read-only subtask in the
|
|
3
|
+
* review's own chat — none takes the baton, so nobody is asked to hand off
|
|
4
|
+
* for a read — and once the last one has answered, one `review` card collects
|
|
5
|
+
* every finding to accept (it becomes a project decision) or reject. The
|
|
6
|
+
* reading of replies is core/review.ts.
|
|
7
|
+
*
|
|
8
|
+
* Events, one kind, `payload.phase`:
|
|
9
|
+
* started { reviewId, chat, target, agents, focus? }
|
|
10
|
+
* done { reviewId, chat, target, results[], findings[], summary }
|
|
11
|
+
* decided { reviewId, findingId, decision, note? }
|
|
12
|
+
*/
|
|
13
|
+
import { randomUUID } from "node:crypto";
|
|
14
|
+
import { collectFindings, decisionText, reviewPrompt, reviewSummary, targetLabel } from "../core/review.js";
|
|
15
|
+
/** What a target looks like on a card: the diff itself stays in the brief. */
|
|
16
|
+
const slim = (t) => (t.kind === "file" ? { kind: "file", file: t.file } : t.kind === "text" ? { kind: "text", label: targetLabel(t) } : { kind: t.kind });
|
|
17
|
+
export class ReviewRunner {
|
|
18
|
+
host;
|
|
19
|
+
pending = new Map();
|
|
20
|
+
constructor(host) {
|
|
21
|
+
this.host = host;
|
|
22
|
+
// a review the daemon restarted under will never hear back: close it, saying so
|
|
23
|
+
for (const e of host.list({ kinds: ["review"] })) {
|
|
24
|
+
if (e.payload.phase !== "started")
|
|
25
|
+
continue;
|
|
26
|
+
const id = String(e.payload.reviewId);
|
|
27
|
+
if (host.list({ kinds: ["review"], chat: String(e.chat ?? "main") }).some((d) => d.payload.phase === "done" && d.payload.reviewId === id))
|
|
28
|
+
continue;
|
|
29
|
+
const agents = e.payload.agents ?? [];
|
|
30
|
+
this.finish(id, String(e.chat), e.payload.target, agents, new Map(agents.map((a) => [a, { ok: false, message: "Loom restarted before it answered" }])), e.ts);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** The reviewers, deduplicated — or why they can't review. */
|
|
34
|
+
check(names) {
|
|
35
|
+
const agents = [...new Set(names.map((a) => a.trim()).filter(Boolean))];
|
|
36
|
+
if (!agents.length)
|
|
37
|
+
throw new Error("name at least one agent to review");
|
|
38
|
+
if (agents.length > this.host.maxReviewers)
|
|
39
|
+
throw new Error(`${agents.length} reviewers — ${this.host.maxReviewers} at a time is the limit`);
|
|
40
|
+
for (const a of agents) {
|
|
41
|
+
if (!this.host.hasAgent(a))
|
|
42
|
+
throw new Error(`no agent "${a}" in this project`);
|
|
43
|
+
if (!this.host.canReview(a))
|
|
44
|
+
throw new Error(`"${a}" can't run a review (it's a bridge, or switched off)`);
|
|
45
|
+
}
|
|
46
|
+
return agents;
|
|
47
|
+
}
|
|
48
|
+
async start(input) {
|
|
49
|
+
const agents = this.check(input.agents);
|
|
50
|
+
if (input.target.kind === "file" && !input.target.file.trim())
|
|
51
|
+
throw new Error("which file?");
|
|
52
|
+
const reviewId = randomUUID().slice(0, 6);
|
|
53
|
+
const label = targetLabel(input.target);
|
|
54
|
+
const chat = input.chat ?? this.host.createChat(`🔍 Review · ${label}`.slice(0, 60)).id;
|
|
55
|
+
const target = slim(input.target);
|
|
56
|
+
// the parent a child is filed under: whoever holds the baton, which a review never takes
|
|
57
|
+
const parent = this.host.holder() ?? agents[0];
|
|
58
|
+
const run = { chat, target, agents, settled: new Map(), startedAt: Date.now() };
|
|
59
|
+
this.pending.set(reviewId, run);
|
|
60
|
+
this.host.append({ kind: "review", chat, payload: { phase: "started", reviewId, chat, target, agents, ...(input.focus ? { focus: input.focus } : {}) } });
|
|
61
|
+
const task = reviewPrompt(input.target, input.focus);
|
|
62
|
+
for (const agentId of agents) {
|
|
63
|
+
const settle = (o) => {
|
|
64
|
+
run.settled.set(agentId, o);
|
|
65
|
+
if (run.settled.size === agents.length && this.pending.delete(reviewId))
|
|
66
|
+
this.finish(reviewId, chat, target, agents, run.settled, run.startedAt);
|
|
67
|
+
};
|
|
68
|
+
try {
|
|
69
|
+
await this.host.spawn(parent, { agentId, task, chat, readOnly: true, onSettled: settle });
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
settle({ ok: false, message: err instanceof Error ? err.message : String(err) });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { reviewId, chat, target, agents, status: "running" };
|
|
76
|
+
}
|
|
77
|
+
/** The reviewer's answer: its last reply in the review's chat. */
|
|
78
|
+
replyOf(chat, agent, since) {
|
|
79
|
+
const msgs = this.host.list({ chat, agentId: agent, kinds: ["message"], sinceTs: since }).filter((m) => !m.payload.reasoning && typeof m.payload.text === "string");
|
|
80
|
+
return String(msgs.at(-1)?.payload.text ?? "");
|
|
81
|
+
}
|
|
82
|
+
editsOf(chat, agent, since) {
|
|
83
|
+
const paths = this.host.list({ chat, agentId: agent, kinds: ["file_edit"], sinceTs: since }).map((e) => String(e.payload.path ?? "")).filter(Boolean);
|
|
84
|
+
return [...new Set(paths)];
|
|
85
|
+
}
|
|
86
|
+
finish(reviewId, chat, target, agents, settled, since) {
|
|
87
|
+
const results = agents.map((agent) => {
|
|
88
|
+
const s = settled.get(agent);
|
|
89
|
+
const reply = this.replyOf(chat, agent, since);
|
|
90
|
+
const edited = this.editsOf(chat, agent, since);
|
|
91
|
+
const base = s?.ok ? { agent, status: "done", reply: reply.slice(0, 6000) } : { agent, status: "failed", error: s?.message ?? "no answer", reply: reply.slice(0, 6000) };
|
|
92
|
+
return edited.length ? { ...base, edited } : base;
|
|
93
|
+
});
|
|
94
|
+
const findings = collectFindings(reviewId, results.filter((r) => r.status === "done").map((r) => ({ agent: r.agent, reply: r.reply })));
|
|
95
|
+
this.host.append({ kind: "review", chat, payload: { phase: "done", reviewId, chat, target, results, findings, summary: reviewSummary(results, findings) } });
|
|
96
|
+
}
|
|
97
|
+
doneEvent(reviewId) {
|
|
98
|
+
return this.host.list({ kinds: ["review"] }).find((e) => e.payload.phase === "done" && e.payload.reviewId === reviewId);
|
|
99
|
+
}
|
|
100
|
+
status(reviewId) {
|
|
101
|
+
const started = this.host.list({ kinds: ["review"] }).find((e) => e.payload.phase === "started" && e.payload.reviewId === reviewId);
|
|
102
|
+
if (!started)
|
|
103
|
+
return null;
|
|
104
|
+
const base = { reviewId, chat: String(started.payload.chat), target: started.payload.target, agents: started.payload.agents };
|
|
105
|
+
const done = this.doneEvent(reviewId);
|
|
106
|
+
if (!done)
|
|
107
|
+
return { ...base, status: "running" };
|
|
108
|
+
const decided = new Map(this.host.list({ kinds: ["review"], chat: base.chat }).filter((e) => e.payload.phase === "decided" && e.payload.reviewId === reviewId)
|
|
109
|
+
.map((e) => [String(e.payload.findingId), { decision: e.payload.decision, ...(e.payload.note ? { note: String(e.payload.note) } : {}) }]));
|
|
110
|
+
return { ...base, status: "done", results: done.payload.results, summary: String(done.payload.summary),
|
|
111
|
+
findings: done.payload.findings.map((f) => ({ ...f, ...decided.get(f.id) })) };
|
|
112
|
+
}
|
|
113
|
+
/** Accept (it becomes a project decision every agent is briefed with) or reject one finding. */
|
|
114
|
+
decide(findingId, decision, note) {
|
|
115
|
+
if (decision !== "accepted" && decision !== "rejected")
|
|
116
|
+
throw new Error("accept or reject");
|
|
117
|
+
const reviewId = findingId.split(".")[0];
|
|
118
|
+
const done = this.doneEvent(reviewId);
|
|
119
|
+
if (!done)
|
|
120
|
+
throw new Error(this.status(reviewId) ? "that review is still running" : `no review finding "${findingId}"`);
|
|
121
|
+
const finding = done.payload.findings.find((f) => f.id === findingId);
|
|
122
|
+
if (!finding)
|
|
123
|
+
throw new Error(`no finding "${findingId}" in review ${reviewId}`);
|
|
124
|
+
const was = this.status(reviewId).findings.find((f) => f.id === findingId).decision;
|
|
125
|
+
this.host.append({ kind: "review", chat: String(done.chat ?? done.payload.chat), payload: { phase: "decided", reviewId, findingId, decision, ...(note ? { note } : {}), text: finding.text } });
|
|
126
|
+
if (decision === "accepted" && was !== "accepted")
|
|
127
|
+
this.host.decide(decisionText(finding, note));
|
|
128
|
+
return { finding, decision };
|
|
129
|
+
}
|
|
130
|
+
/** The latest reviews, newest first. */
|
|
131
|
+
recent(limit = 10) {
|
|
132
|
+
return this.host.list({ kinds: ["review"] }).filter((e) => e.payload.phase === "started").slice(-limit).reverse()
|
|
133
|
+
.map((e) => this.status(String(e.payload.reviewId))).filter(Boolean);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/daemon/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Express } from 'express';
|
|
2
|
+
import type { WithRuntime } from './context.js';
|
|
3
|
+
/** Register Council routes (daemon/council.ts) in the order established by LoomDaemon.routes(). */
|
|
4
|
+
export declare function registerCouncilRoutes(app: Express, withRuntime: WithRuntime): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Register Council routes (daemon/council.ts) in the order established by LoomDaemon.routes(). */
|
|
2
|
+
export function registerCouncilRoutes(app, withRuntime) {
|
|
3
|
+
// Start one: { goal, planner, reviewers: string[] | "a,b" }
|
|
4
|
+
app.post("/api/projects/:id/councils", withRuntime(async (rt, req, res) => {
|
|
5
|
+
const b = (req.body ?? {});
|
|
6
|
+
const reviewers = Array.isArray(b.reviewers) ? b.reviewers.map(String) : typeof b.reviewers === "string" ? b.reviewers.split(",").map((r) => r.trim()).filter(Boolean) : [];
|
|
7
|
+
try {
|
|
8
|
+
res.json({ council: rt.councils.start({ goal: String(b.goal ?? ""), planner: String(b.planner ?? ""), reviewers }) });
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
12
|
+
}
|
|
13
|
+
}));
|
|
14
|
+
app.get("/api/projects/:id/councils", withRuntime(async (rt, _req, res) => void res.json({ active: rt.councils.active, councils: rt.councils.recent() })));
|
|
15
|
+
app.get("/api/projects/:id/councils/:councilId", withRuntime(async (rt, req, res) => {
|
|
16
|
+
const council = rt.councils.status(String(req.params.councilId));
|
|
17
|
+
if (!council)
|
|
18
|
+
return void res.status(404).json({ error: "no such council" });
|
|
19
|
+
res.json({ council });
|
|
20
|
+
}));
|
|
21
|
+
// Stop after the current stage (a turn in progress is interrupted).
|
|
22
|
+
app.delete("/api/projects/:id/councils", withRuntime(async (rt, _req, res) => {
|
|
23
|
+
const council = await rt.councils.stop();
|
|
24
|
+
if (!council)
|
|
25
|
+
return void res.status(404).json({ error: "no council is running" });
|
|
26
|
+
res.json({ council });
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=council.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"council.js","sourceRoot":"","sources":["../../../src/daemon/routes/council.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Express } from 'express';
|
|
2
|
+
import type { WithRuntime } from './context.js';
|
|
3
|
+
/** Register Review routes (daemon/review.ts) in the order established by LoomDaemon.routes(). */
|
|
4
|
+
export declare function registerReviewRoutes(app: Express, withRuntime: WithRuntime): void;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Register Review routes (daemon/review.ts) in the order established by LoomDaemon.routes(). */
|
|
2
|
+
export function registerReviewRoutes(app, withRuntime) {
|
|
3
|
+
const bad = (res, err) => res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
4
|
+
// Start one: { agents: string[], file?, text?, focus? } — no file and no text reviews the uncommitted changes.
|
|
5
|
+
app.post("/api/projects/:id/reviews", withRuntime(async (rt, req, res) => {
|
|
6
|
+
const b = (req.body ?? {});
|
|
7
|
+
const agents = Array.isArray(b.agents) ? b.agents.map(String) : typeof b.agents === "string" ? b.agents.split(",") : [];
|
|
8
|
+
try {
|
|
9
|
+
const review = await rt.startReview({
|
|
10
|
+
agents,
|
|
11
|
+
...(typeof b.file === "string" && b.file ? { file: b.file } : {}),
|
|
12
|
+
...(typeof b.text === "string" && b.text ? { text: b.text } : {}),
|
|
13
|
+
...(typeof b.focus === "string" && b.focus ? { focus: b.focus } : {}),
|
|
14
|
+
});
|
|
15
|
+
res.json({ review });
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
bad(res, err);
|
|
19
|
+
}
|
|
20
|
+
}));
|
|
21
|
+
app.get("/api/projects/:id/reviews", withRuntime(async (rt, _req, res) => void res.json({ reviews: rt.reviews.recent() })));
|
|
22
|
+
app.get("/api/projects/:id/reviews/:reviewId", withRuntime(async (rt, req, res) => {
|
|
23
|
+
const review = rt.reviews.status(String(req.params.reviewId));
|
|
24
|
+
if (!review)
|
|
25
|
+
return void res.status(404).json({ error: "no such review" });
|
|
26
|
+
res.json({ review });
|
|
27
|
+
}));
|
|
28
|
+
// Accept (it becomes a decision) or reject one finding: { decision: "accepted" | "rejected", note? }
|
|
29
|
+
app.post("/api/projects/:id/findings/:findingId", withRuntime(async (rt, req, res) => {
|
|
30
|
+
const b = (req.body ?? {});
|
|
31
|
+
const decision = b.decision === "accept" ? "accepted" : b.decision === "reject" ? "rejected" : b.decision;
|
|
32
|
+
try {
|
|
33
|
+
res.json(rt.reviews.decide(String(req.params.findingId), decision, typeof b.note === "string" && b.note.trim() ? b.note.trim() : undefined));
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
bad(res, err);
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/daemon/routes/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { usageReport } from '../../core/usage.js';
|
|
2
|
+
import { priceBook } from '../../core/prices.js';
|
|
2
3
|
/** Register routing routes in the order established by LoomDaemon.routes(). */
|
|
3
4
|
export function registerRoutingRoutes(app, withRuntime) {
|
|
4
5
|
app.post("/api/projects/:id/route", withRuntime(async (rt, req, res) => {
|
|
@@ -34,7 +35,7 @@ export function registerRoutingRoutes(app, withRuntime) {
|
|
|
34
35
|
}
|
|
35
36
|
// the report skips everything before `since`: don't read (and parse) it
|
|
36
37
|
const events = rt.log.list({ kinds: ["status", "run_complete", "tool_call", "error", "message", "needs_input", "turn_diff"], sinceTs: since });
|
|
37
|
-
const usage = usageReport(events, { since, kinds, models });
|
|
38
|
+
const usage = usageReport(events, { since, kinds, models, prices: priceBook() });
|
|
38
39
|
const titles = new Map(rt.chats().map((c) => [c.id, c.title]));
|
|
39
40
|
res.json({ days, usage: { ...usage, byChat: usage.byChat.map((c) => ({ ...c, title: titles.get(c.chat) ?? (c.chat === "main" ? "Main" : c.chat) })) } });
|
|
40
41
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/daemon/routes/routing.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/daemon/routes/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Express } from 'express';
|
|
2
|
+
import type { RouteContext } from './context.js';
|
|
2
3
|
/** Register setup routes in the order established by LoomDaemon.routes(). */
|
|
3
|
-
export declare function registerSetupRoutes(app: Express): void;
|
|
4
|
+
export declare function registerSetupRoutes(app: Express, ctx: Pick<RouteContext, "runtimes">): void;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { readProjectConfig } from "../../core/registry.js";
|
|
1
2
|
import { findProject } from "../../core/registry.js";
|
|
2
3
|
import { setupReport } from "../../core/setup.js";
|
|
3
4
|
import { forgetProbes } from "../../adapters/base.js";
|
|
4
5
|
/** Register setup routes in the order established by LoomDaemon.routes(). */
|
|
5
|
-
export function registerSetupRoutes(app) {
|
|
6
|
+
export function registerSetupRoutes(app, ctx) {
|
|
6
7
|
/**
|
|
7
8
|
* What this machine still needs — the same answer `loom doctor` gives.
|
|
8
9
|
*
|
|
@@ -31,15 +32,22 @@ export function registerSetupRoutes(app) {
|
|
|
31
32
|
forgetProbes();
|
|
32
33
|
void (async () => {
|
|
33
34
|
try {
|
|
34
|
-
const { envChecks, projectChecks } = await import("../../cli/doctor.js");
|
|
35
|
-
const checks = await envChecks();
|
|
35
|
+
const { envChecks, projectChecks, providerChecks, freeModelTrouble, envFacts } = await import("../../cli/doctor.js");
|
|
36
|
+
const [checks, providers] = await Promise.all([envChecks(), providerChecks()]);
|
|
37
|
+
checks.push(...providers);
|
|
36
38
|
const projId = req.query.project;
|
|
37
39
|
if (projId) {
|
|
38
40
|
const info = findProject(projId);
|
|
39
|
-
if (info)
|
|
41
|
+
if (info) {
|
|
40
42
|
checks.push(...projectChecks(info.dir));
|
|
43
|
+
const rt = ctx.runtimes.get(info.id);
|
|
44
|
+
const agents = readProjectConfig(info.dir)?.agents ?? [];
|
|
45
|
+
if (rt)
|
|
46
|
+
checks.push(...freeModelTrouble(rt.log.list({ kinds: ["error"], sinceTs: Date.now() - 86_400_000 }), agents));
|
|
47
|
+
}
|
|
41
48
|
}
|
|
42
|
-
|
|
49
|
+
// what this daemon process sees — PATH and key NAMES, never values — so `loom doctor` can compare it with the shell
|
|
50
|
+
res.json({ checks, facts: envFacts() });
|
|
43
51
|
}
|
|
44
52
|
catch (err) {
|
|
45
53
|
res.status(500).json({ error: err instanceof Error ? err.message : String(err) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/daemon/routes/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/daemon/routes/setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,GAAY,EAAE,GAAmC;IAEnF;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAClC,YAAY,EAAE,CAAC,CAAC,8EAA8E;QAC9F,KAAK,WAAW,EAAE;aACf,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAClC,YAAY,EAAE,CAAC;QACf,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBACrH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBAC/E,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBAC1B,MAAM,MAAM,GAAI,GAAG,CAAC,KAAgC,CAAC,OAAO,CAAC;gBAC7D,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;oBACjC,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;wBACxC,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACrC,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;wBACzD,IAAI,EAAE;4BAAE,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACxH,CAAC;gBACH,CAAC;gBACD,oHAAoH;gBACpH,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -25,6 +25,10 @@ export declare class RuntimeAccounting {
|
|
|
25
25
|
tokensIn: number;
|
|
26
26
|
tokensOut: number;
|
|
27
27
|
}>;
|
|
28
|
+
/** Whether an agent's current turn has reported money yet — a turn that ends without any is unpriced. */
|
|
29
|
+
private pricedTurn;
|
|
30
|
+
/** Unpriced turns' tokens, per agent per model, priced only when asked (the price list may arrive later). */
|
|
31
|
+
private unpriced;
|
|
28
32
|
/** Each agent's latest turns — cost and time — for the pre-flight forecast (core/forecast.ts). */
|
|
29
33
|
private recent;
|
|
30
34
|
private recentFor;
|
|
@@ -32,6 +36,8 @@ export declare class RuntimeAccounting {
|
|
|
32
36
|
forecast(agentId: string): Forecast | null;
|
|
33
37
|
rehydrateCosts(): void;
|
|
34
38
|
trackCost(event: LoomEvent): void;
|
|
39
|
+
/** An agent's unpriced tokens at API prices; undefined when there are none, or no price for them. */
|
|
40
|
+
private estimateFor;
|
|
35
41
|
costSummary(): CostSummary;
|
|
36
42
|
/** Per-agent spend budgets (USD/day), set from the Observatory burn-rate panel. */
|
|
37
43
|
budgets(): Record<string, number>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readProjectState, writeProjectState } from "../../core/registry.js";
|
|
2
2
|
import { Recent, forecastFrom } from "../../core/forecast.js";
|
|
3
|
+
import { estimateUsd, priceBook } from "../../core/prices.js";
|
|
3
4
|
import { BUDGET_PAUSE_REASON, BudgetExceededError, QuarantinedError, startOfDay } from '../runtime-support.js';
|
|
4
5
|
/** Owns accounting state for exactly one open project. */
|
|
5
6
|
export class RuntimeAccounting {
|
|
@@ -12,6 +13,10 @@ export class RuntimeAccounting {
|
|
|
12
13
|
// -------------------------------------------------------------------------
|
|
13
14
|
costs = { totalUsd: 0, turns: 0, totalMs: 0, tokensIn: 0, tokensOut: 0 };
|
|
14
15
|
costsByAgent = new Map();
|
|
16
|
+
/** Whether an agent's current turn has reported money yet — a turn that ends without any is unpriced. */
|
|
17
|
+
pricedTurn = new Map();
|
|
18
|
+
/** Unpriced turns' tokens, per agent per model, priced only when asked (the price list may arrive later). */
|
|
19
|
+
unpriced = new Map();
|
|
15
20
|
/** Each agent's latest turns — cost and time — for the pre-flight forecast (core/forecast.ts). */
|
|
16
21
|
recent = new Map();
|
|
17
22
|
recentFor(agentId) {
|
|
@@ -41,6 +46,7 @@ export class RuntimeAccounting {
|
|
|
41
46
|
if (event.kind === "status" && event.payload.state === "turn_cost") {
|
|
42
47
|
const usd = Number(event.payload.costUsd ?? 0);
|
|
43
48
|
if (usd > 0) {
|
|
49
|
+
this.pricedTurn.set(agentId, true);
|
|
44
50
|
this.recentFor(agentId).usd.push(usd);
|
|
45
51
|
this.costs.totalUsd += usd;
|
|
46
52
|
entry.usd += usd;
|
|
@@ -82,13 +88,43 @@ export class RuntimeAccounting {
|
|
|
82
88
|
entry.tokensIn += tin;
|
|
83
89
|
entry.tokensOut += tout;
|
|
84
90
|
this.costsByAgent.set(agentId, entry);
|
|
91
|
+
const priced = this.pricedTurn.get(agentId) || Number(event.payload.costUsd ?? 0) > 0;
|
|
92
|
+
this.pricedTurn.delete(agentId);
|
|
93
|
+
if (!priced && (tin || tout) && event.payload.model) {
|
|
94
|
+
const byModel = this.unpriced.get(agentId) ?? new Map();
|
|
95
|
+
const m = byModel.get(String(event.payload.model)) ?? { tokensIn: 0, tokensOut: 0, cachedIn: 0 };
|
|
96
|
+
m.tokensIn += tin;
|
|
97
|
+
m.tokensOut += tout;
|
|
98
|
+
m.cachedIn += Number(event.payload.cachedInputTokens ?? 0) || 0;
|
|
99
|
+
byModel.set(String(event.payload.model), m);
|
|
100
|
+
this.unpriced.set(agentId, byModel);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** An agent's unpriced tokens at API prices; undefined when there are none, or no price for them. */
|
|
105
|
+
estimateFor(agentId) {
|
|
106
|
+
const byModel = this.unpriced.get(agentId);
|
|
107
|
+
if (!byModel)
|
|
108
|
+
return undefined;
|
|
109
|
+
const book = priceBook();
|
|
110
|
+
let usd;
|
|
111
|
+
for (const [model, t] of byModel) {
|
|
112
|
+
const est = estimateUsd({ model, ...t }, book);
|
|
113
|
+
if (est !== undefined)
|
|
114
|
+
usd = (usd ?? 0) + est;
|
|
85
115
|
}
|
|
116
|
+
return usd;
|
|
86
117
|
}
|
|
87
118
|
costSummary() {
|
|
88
119
|
const byAgent = [...this.costsByAgent.entries()]
|
|
89
|
-
.map(([agentId, c]) =>
|
|
120
|
+
.map(([agentId, c]) => {
|
|
121
|
+
const estUsd = this.estimateFor(agentId);
|
|
122
|
+
return { agentId, ...c, ...(estUsd !== undefined ? { estUsd } : {}) };
|
|
123
|
+
})
|
|
90
124
|
.sort((a, b) => b.usd - a.usd || b.turns - a.turns);
|
|
125
|
+
const estimated = byAgent.filter((a) => a.estUsd !== undefined);
|
|
91
126
|
return {
|
|
127
|
+
...(estimated.length ? { estUsd: estimated.reduce((sum, a) => sum + a.estUsd, 0) } : {}),
|
|
92
128
|
totalUsd: this.costs.totalUsd,
|
|
93
129
|
turns: this.costs.turns,
|
|
94
130
|
totalMs: this.costs.totalMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounting.js","sourceRoot":"","sources":["../../../src/daemon/runtime/accounting.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accounting.js","sourceRoot":"","sources":["../../../src/daemon/runtime/accounting.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,8 +127,13 @@ export declare class RuntimeBriefings {
|
|
|
127
127
|
*/
|
|
128
128
|
extractMemory(agentId: string, files: string[]): void;
|
|
129
129
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
130
|
+
* One agent's most recent turn in a chat: the ask, and what *this* agent said and did — not the other
|
|
131
|
+
* agents talking in the same chat (a subtask's reviewer, a teammate). `replyId` is its last reply
|
|
132
|
+
* (null when it said nothing); `failed` when that turn ended in an error.
|
|
132
133
|
*/
|
|
133
|
-
|
|
134
|
+
gatherAgentTurn(chat: string, agentId: string): {
|
|
135
|
+
text: string;
|
|
136
|
+
replyId: number | null;
|
|
137
|
+
failed: boolean;
|
|
138
|
+
};
|
|
134
139
|
}
|
|
@@ -262,7 +262,11 @@ export class RuntimeBriefings {
|
|
|
262
262
|
if (this.lifetime.signal.aborted || this.host.config.brain?.continuity || this.host.config.brain?.extractor === "off")
|
|
263
263
|
return;
|
|
264
264
|
const chat = this.host.turnChat.get(agentId) ?? MAIN_CHAT;
|
|
265
|
-
|
|
265
|
+
// only this agent's own turn, and only if it answered: memories are credited to whoever wrote the
|
|
266
|
+
// text — never to an agent whose run failed or said nothing while others talked in the chat (#248)
|
|
267
|
+
const { text: turn, replyId, failed } = this.gatherAgentTurn(chat, agentId);
|
|
268
|
+
if (failed || replyId === null)
|
|
269
|
+
return;
|
|
266
270
|
if (turn.length < 40)
|
|
267
271
|
return; // nothing substantial to learn from
|
|
268
272
|
const model = this.host.config.brain?.model ?? "haiku";
|
|
@@ -274,7 +278,7 @@ export class RuntimeBriefings {
|
|
|
274
278
|
agentId,
|
|
275
279
|
chat,
|
|
276
280
|
...(files.length ? { files } : {}),
|
|
277
|
-
eventId:
|
|
281
|
+
eventId: replyId,
|
|
278
282
|
...(readExternalContent(recent) ? { untrusted: true } : {}),
|
|
279
283
|
})
|
|
280
284
|
.then((res) => {
|
|
@@ -295,35 +299,43 @@ export class RuntimeBriefings {
|
|
|
295
299
|
.catch(() => { });
|
|
296
300
|
}
|
|
297
301
|
/**
|
|
298
|
-
*
|
|
299
|
-
*
|
|
302
|
+
* One agent's most recent turn in a chat: the ask, and what *this* agent said and did — not the other
|
|
303
|
+
* agents talking in the same chat (a subtask's reviewer, a teammate). `replyId` is its last reply
|
|
304
|
+
* (null when it said nothing); `failed` when that turn ended in an error.
|
|
300
305
|
*/
|
|
301
|
-
|
|
302
|
-
const events = this.host.log.list({ chat, limit:
|
|
306
|
+
gatherAgentTurn(chat, agentId) {
|
|
307
|
+
const events = this.host.log.list({ chat, limit: 120 });
|
|
303
308
|
let start = 0;
|
|
304
309
|
for (let i = events.length - 1; i >= 0; i--) {
|
|
305
|
-
|
|
310
|
+
const e = events[i];
|
|
311
|
+
if (e.kind === "message" && (!e.agentId || e.payload.author === "user")) {
|
|
306
312
|
start = i;
|
|
307
313
|
break;
|
|
308
314
|
}
|
|
309
315
|
}
|
|
310
316
|
const lines = [];
|
|
317
|
+
let replyId = null, failed = false, lastEnd;
|
|
311
318
|
for (const e of events.slice(start)) {
|
|
312
319
|
const p = e.payload;
|
|
320
|
+
if (e.agentId && e.agentId !== agentId)
|
|
321
|
+
continue;
|
|
313
322
|
if (e.kind === "message") {
|
|
314
323
|
lines.push(`${e.agentId ?? "user"}: ${String(p.text ?? "").slice(0, 2000)}`);
|
|
324
|
+
if (e.agentId === agentId && !p.reasoning && String(p.text ?? "").trim())
|
|
325
|
+
replyId = e.id;
|
|
315
326
|
}
|
|
316
|
-
else if (e.kind === "tool_call")
|
|
327
|
+
else if (e.kind === "tool_call")
|
|
317
328
|
lines.push(`[${e.agentId} used ${String(p.tool ?? "a tool")}] ${String(p.summary ?? "")}`.trim());
|
|
318
|
-
|
|
319
|
-
else if (e.kind === "file_edit") {
|
|
329
|
+
else if (e.kind === "file_edit")
|
|
320
330
|
lines.push(`[${e.agentId} edited ${String(p.path ?? "")}]`);
|
|
321
|
-
|
|
322
|
-
else if (e.kind === "decision") {
|
|
331
|
+
else if (e.kind === "decision")
|
|
323
332
|
lines.push(`decision: ${String(p.text ?? "")}`);
|
|
324
|
-
|
|
333
|
+
else if (e.agentId === agentId && (e.kind === "run_complete" || e.kind === "error"))
|
|
334
|
+
lastEnd = e;
|
|
325
335
|
}
|
|
326
|
-
|
|
336
|
+
if (lastEnd && (lastEnd.kind === "error" || lastEnd.payload.error))
|
|
337
|
+
failed = true;
|
|
338
|
+
return { text: lines.join("\n").trim(), replyId, failed };
|
|
327
339
|
}
|
|
328
340
|
}
|
|
329
341
|
//# sourceMappingURL=briefings.js.map
|