@enderfga/claw-orchestrator 5.1.0 → 6.0.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 (147) hide show
  1. package/README.md +26 -26
  2. package/dist/bin/cli.js +107 -1
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/src/acp-server.d.ts +5 -5
  5. package/dist/src/acp-server.js +3 -3
  6. package/dist/src/acp-server.js.map +1 -1
  7. package/dist/src/autoloop/dispatcher.d.ts +22 -0
  8. package/dist/src/autoloop/dispatcher.js +71 -13
  9. package/dist/src/autoloop/dispatcher.js.map +1 -1
  10. package/dist/src/autoloop/messages.d.ts +10 -0
  11. package/dist/src/autoloop/messages.js.map +1 -1
  12. package/dist/src/autoloop/runner.js +6 -0
  13. package/dist/src/autoloop/runner.js.map +1 -1
  14. package/dist/src/constants.d.ts +0 -6
  15. package/dist/src/constants.js +0 -6
  16. package/dist/src/constants.js.map +1 -1
  17. package/dist/src/council.d.ts +15 -0
  18. package/dist/src/council.js +48 -35
  19. package/dist/src/council.js.map +1 -1
  20. package/dist/src/dashboard/index.html +191 -6
  21. package/dist/src/embedded-server.js +132 -9
  22. package/dist/src/embedded-server.js.map +1 -1
  23. package/dist/src/fanout.d.ts +30 -1
  24. package/dist/src/fanout.js +32 -3
  25. package/dist/src/fanout.js.map +1 -1
  26. package/dist/src/index.js +359 -4
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/kernel/agent-step.d.ts +59 -0
  29. package/dist/src/kernel/agent-step.js +100 -0
  30. package/dist/src/kernel/agent-step.js.map +1 -0
  31. package/dist/src/kernel/conditions.d.ts +11 -0
  32. package/dist/src/kernel/conditions.js +24 -0
  33. package/dist/src/kernel/conditions.js.map +1 -0
  34. package/dist/src/kernel/engine.d.ts +319 -0
  35. package/dist/src/kernel/engine.js +1047 -0
  36. package/dist/src/kernel/engine.js.map +1 -0
  37. package/dist/src/kernel/exec.d.ts +43 -0
  38. package/dist/src/kernel/exec.js +112 -0
  39. package/dist/src/kernel/exec.js.map +1 -0
  40. package/dist/src/kernel/file-lock.d.ts +50 -0
  41. package/dist/src/kernel/file-lock.js +135 -0
  42. package/dist/src/kernel/file-lock.js.map +1 -0
  43. package/dist/src/kernel/nodes/agent.d.ts +4 -0
  44. package/dist/src/kernel/nodes/agent.js +35 -0
  45. package/dist/src/kernel/nodes/agent.js.map +1 -0
  46. package/dist/src/kernel/nodes/autoloop.d.ts +78 -0
  47. package/dist/src/kernel/nodes/autoloop.js +75 -0
  48. package/dist/src/kernel/nodes/autoloop.js.map +1 -0
  49. package/dist/src/kernel/nodes/council.d.ts +12 -0
  50. package/dist/src/kernel/nodes/council.js +88 -0
  51. package/dist/src/kernel/nodes/council.js.map +1 -0
  52. package/dist/src/kernel/nodes/fanout.d.ts +11 -0
  53. package/dist/src/kernel/nodes/fanout.js +63 -0
  54. package/dist/src/kernel/nodes/fanout.js.map +1 -0
  55. package/dist/src/kernel/nodes/human-gate.d.ts +4 -0
  56. package/dist/src/kernel/nodes/human-gate.js +7 -0
  57. package/dist/src/kernel/nodes/human-gate.js.map +1 -0
  58. package/dist/src/kernel/nodes/index.d.ts +12 -0
  59. package/dist/src/kernel/nodes/index.js +21 -0
  60. package/dist/src/kernel/nodes/index.js.map +1 -0
  61. package/dist/src/kernel/nodes/router.d.ts +4 -0
  62. package/dist/src/kernel/nodes/router.js +12 -0
  63. package/dist/src/kernel/nodes/router.js.map +1 -0
  64. package/dist/src/kernel/nodes/subflow.d.ts +13 -0
  65. package/dist/src/kernel/nodes/subflow.js +38 -0
  66. package/dist/src/kernel/nodes/subflow.js.map +1 -0
  67. package/dist/src/kernel/nodes/ultraapp.d.ts +60 -0
  68. package/dist/src/kernel/nodes/ultraapp.js +62 -0
  69. package/dist/src/kernel/nodes/ultraapp.js.map +1 -0
  70. package/dist/src/kernel/nodes/verifier.d.ts +14 -0
  71. package/dist/src/kernel/nodes/verifier.js +84 -0
  72. package/dist/src/kernel/nodes/verifier.js.map +1 -0
  73. package/dist/src/kernel/projections.d.ts +42 -0
  74. package/dist/src/kernel/projections.js +133 -0
  75. package/dist/src/kernel/projections.js.map +1 -0
  76. package/dist/src/kernel/repo.d.ts +13 -0
  77. package/dist/src/kernel/repo.js +64 -0
  78. package/dist/src/kernel/repo.js.map +1 -0
  79. package/dist/src/kernel/secrets.d.ts +25 -0
  80. package/dist/src/kernel/secrets.js +48 -0
  81. package/dist/src/kernel/secrets.js.map +1 -0
  82. package/dist/src/kernel/store.d.ts +225 -0
  83. package/dist/src/kernel/store.js +838 -0
  84. package/dist/src/kernel/store.js.map +1 -0
  85. package/dist/src/kernel/templates/index.d.ts +140 -0
  86. package/dist/src/kernel/templates/index.js +266 -0
  87. package/dist/src/kernel/templates/index.js.map +1 -0
  88. package/dist/src/kernel/types.d.ts +326 -0
  89. package/dist/src/kernel/types.js +19 -0
  90. package/dist/src/kernel/types.js.map +1 -0
  91. package/dist/src/run-ledger.d.ts +57 -3
  92. package/dist/src/run-ledger.js +45 -2
  93. package/dist/src/run-ledger.js.map +1 -1
  94. package/dist/src/session-manager.d.ts +176 -129
  95. package/dist/src/session-manager.js +652 -603
  96. package/dist/src/session-manager.js.map +1 -1
  97. package/dist/src/types.d.ts +33 -3
  98. package/dist/src/ultraapp/build.d.ts +117 -3
  99. package/dist/src/ultraapp/build.js +319 -3
  100. package/dist/src/ultraapp/build.js.map +1 -1
  101. package/dist/src/ultraapp/contract.d.ts +52 -0
  102. package/dist/src/ultraapp/contract.js +83 -0
  103. package/dist/src/ultraapp/contract.js.map +1 -0
  104. package/dist/src/ultraapp/conventions.js +9 -2
  105. package/dist/src/ultraapp/conventions.js.map +1 -1
  106. package/dist/src/ultraapp/fix-on-failure.d.ts +21 -2
  107. package/dist/src/ultraapp/fix-on-failure.js +46 -62
  108. package/dist/src/ultraapp/fix-on-failure.js.map +1 -1
  109. package/dist/src/ultraapp/manager.d.ts +107 -2
  110. package/dist/src/ultraapp/manager.js +305 -86
  111. package/dist/src/ultraapp/manager.js.map +1 -1
  112. package/dist/src/verify/baseline.d.ts +73 -0
  113. package/dist/src/verify/baseline.js +186 -0
  114. package/dist/src/verify/baseline.js.map +1 -0
  115. package/dist/src/verify/contract.d.ts +116 -0
  116. package/dist/src/verify/contract.js +142 -0
  117. package/dist/src/verify/contract.js.map +1 -0
  118. package/dist/src/verify/evidence.d.ts +61 -0
  119. package/dist/src/verify/evidence.js +133 -0
  120. package/dist/src/verify/evidence.js.map +1 -0
  121. package/dist/src/verify/runner.d.ts +63 -0
  122. package/dist/src/verify/runner.js +317 -0
  123. package/dist/src/verify/runner.js.map +1 -0
  124. package/openclaw.plugin.json +8 -0
  125. package/package.json +2 -2
  126. package/skills/SKILL.md +120 -79
  127. package/skills/references/acp.md +17 -17
  128. package/skills/references/autoloop.md +139 -65
  129. package/skills/references/claude-cli-tracking.md +4 -4
  130. package/skills/references/cli.md +101 -59
  131. package/skills/references/council.md +109 -37
  132. package/skills/references/dashboard.md +34 -6
  133. package/skills/references/getting-started.md +13 -13
  134. package/skills/references/inbox.md +4 -4
  135. package/skills/references/mcp.md +39 -34
  136. package/skills/references/multi-engine.md +51 -47
  137. package/skills/references/observability.md +88 -28
  138. package/skills/references/openai-compat.md +39 -39
  139. package/skills/references/sessions.md +43 -25
  140. package/skills/references/tools.md +402 -309
  141. package/skills/references/ultra.md +45 -45
  142. package/skills/references/ultraapp.md +126 -50
  143. package/skills/references/verification.md +187 -0
  144. package/skills/references/workflow.md +362 -0
  145. package/dist/src/ultraapp/fix-on-failure-session.d.ts +0 -23
  146. package/dist/src/ultraapp/fix-on-failure-session.js +0 -51
  147. package/dist/src/ultraapp/fix-on-failure-session.js.map +0 -1
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Kernel types — one state vocabulary for every run this runtime executes.
3
+ *
4
+ * Before this module the six orchestration modes each carried their own status
5
+ * union (`CouncilSession.status`, `FanoutSession.status`, `UltraplanResult.status`,
6
+ * `UltrareviewResult.status`, ultraapp's `RunMode`, `AutoloopStatus`) with no
7
+ * overlapping vocabulary, so "is it done" had six different answers and no
8
+ * cross-mode listing was possible. These types replace that.
9
+ *
10
+ * The important distinction encoded here is between *finishing* and *being
11
+ * right*. `RunState` says whether the work stopped; `RunOutcome` says whether
12
+ * anything checked it. A run with no acceptance contract finishes `completed` /
13
+ * `unverified` — it says it does not know, which is not the same as success.
14
+ */
15
+ import type { AcceptanceContract } from '../verify/contract.js';
16
+ import type { EngineType } from '../types.js';
17
+ /**
18
+ * `completed` is reachable only from `verifying`. A run carrying a contract
19
+ * whose evidence is red goes to `failed`, never to `completed` — that is the
20
+ * whole point of the state machine.
21
+ */
22
+ export type RunState = 'pending' | 'running' | 'awaiting_human' | 'verifying' | 'completed' | 'failed' | 'cancelled';
23
+ /**
24
+ * Whether anything independent of the agent checked the work.
25
+ * - `verified` — a contract ran and every required check passed.
26
+ * - `unverified` — no contract was declared. We do not know.
27
+ * - `refuted` — a contract ran and a required check failed.
28
+ */
29
+ export type RunOutcome = 'verified' | 'unverified' | 'refuted';
30
+ export type NodeState = 'pending' | 'running' | 'awaiting_human' | 'succeeded' | 'failed' | 'skipped' | 'cancelled';
31
+ export type NodeKind = 'agent' | 'fanout' | 'council' | 'verifier' | 'human_gate' | 'router' | 'subflow' | 'autoloop' | 'ultraapp_synth' | 'ultraapp_deploy';
32
+ export interface NodeBase {
33
+ id: string;
34
+ kind: NodeKind;
35
+ /** Explicit successor. Omitted means "the next node in `nodes` order". */
36
+ next?: string;
37
+ retry?: {
38
+ max: number;
39
+ backoffMs?: number;
40
+ };
41
+ /** Wall clock for one attempt. Omitted means the kernel default. */
42
+ timeoutMs?: number;
43
+ /** `continue` records the failure and proceeds; `fail` ends the run. Default `fail`. */
44
+ onFailure?: 'fail' | 'continue';
45
+ }
46
+ export interface AgentNode extends NodeBase {
47
+ kind: 'agent';
48
+ prompt: string;
49
+ engine?: EngineType;
50
+ model?: string;
51
+ cwd?: string;
52
+ /** Reuse a named session across nodes; omitted means one session per attempt. */
53
+ sessionName?: string;
54
+ effort?: string;
55
+ permissionMode?: string;
56
+ }
57
+ /**
58
+ * One agent in a fan-out or council.
59
+ *
60
+ * This mirrors the legacy per-agent shape field for field, deliberately. The
61
+ * first cut of the kernel carried only `name` / `engine` / `model` / `persona`,
62
+ * and the adapters silently dropped everything else — so an ultrareview that
63
+ * built a bespoke prompt and `permissionMode: 'plan'` per reviewer handed the
64
+ * session neither: every reviewer got the shared task, under
65
+ * `bypassPermissions`. A read-only review that can write is worse than no
66
+ * review, and nothing failed to say so.
67
+ *
68
+ * `customEngine` is the one field NOT here. It can carry credentials, and a
69
+ * spec is written to disk — see `StartOptions.secrets`.
70
+ */
71
+ export interface FanoutAgentSpec {
72
+ name: string;
73
+ engine?: EngineType;
74
+ model?: string;
75
+ /** Per-agent prompt. Overrides the node's shared prompt when present. */
76
+ prompt?: string;
77
+ /** Council-style persona text. */
78
+ persona?: string;
79
+ permissionMode?: string;
80
+ baseUrl?: string;
81
+ effort?: string;
82
+ ultracode?: boolean;
83
+ }
84
+ export interface FanoutNode extends NodeBase {
85
+ kind: 'fanout';
86
+ prompt: string;
87
+ agents: FanoutAgentSpec[];
88
+ synthesize?: boolean;
89
+ synthesisEngine?: EngineType;
90
+ synthesisModel?: string;
91
+ synthesisPermissionMode?: string;
92
+ maxTurnsPerAgent?: number;
93
+ maxBudgetUsd?: number;
94
+ cwd?: string;
95
+ }
96
+ export interface CouncilNode extends NodeBase {
97
+ kind: 'council';
98
+ task: string;
99
+ agents: FanoutAgentSpec[];
100
+ projectDir?: string;
101
+ maxRounds?: number;
102
+ maxTurnsPerAgent?: number;
103
+ maxBudgetUsd?: number;
104
+ defaultPermissionMode?: string;
105
+ }
106
+ export interface VerifierNode extends NodeBase {
107
+ kind: 'verifier';
108
+ /** Inline contract, or `'run'` to use the workflow-level contract. */
109
+ contract: AcceptanceContract | 'run';
110
+ cwd?: string;
111
+ }
112
+ export interface HumanGateNode extends NodeBase {
113
+ kind: 'human_gate';
114
+ prompt: string;
115
+ }
116
+ /**
117
+ * Declarative conditions only — no expression string is ever evaluated, so a
118
+ * workflow spec that reached us from an agent cannot execute code.
119
+ */
120
+ export type RouterCondition = {
121
+ type: 'always';
122
+ } | {
123
+ type: 'node_failed';
124
+ node: string;
125
+ } | {
126
+ type: 'node_succeeded';
127
+ node: string;
128
+ } | {
129
+ type: 'verified';
130
+ node: string;
131
+ } | {
132
+ type: 'visits_lt';
133
+ node: string;
134
+ n: number;
135
+ };
136
+ export interface RouterNode extends NodeBase {
137
+ kind: 'router';
138
+ /** First matching route wins. A route may point backwards — that is the loop. */
139
+ routes: Array<{
140
+ when: RouterCondition;
141
+ to: string;
142
+ }>;
143
+ /** Taken when nothing matches. Omitted means "fall through to the next node". */
144
+ default?: string;
145
+ }
146
+ export interface SubflowNode extends NodeBase {
147
+ kind: 'subflow';
148
+ workflow: string | WorkflowSpec;
149
+ }
150
+ /**
151
+ * A long-lived Planner / Coder / Reviewer loop.
152
+ *
153
+ * Unlike the other node kinds this one runs for as long as the user keeps
154
+ * talking to it — it settles when the loop terminates, not when a turn returns.
155
+ * The spec carries only JSON, because it is checkpointed; the executor that
156
+ * knows how to build a dispatcher is registered by SessionManager.
157
+ */
158
+ export interface AutoloopNode extends NodeBase {
159
+ kind: 'autoloop';
160
+ workspace: string;
161
+ config: Record<string, unknown>;
162
+ }
163
+ /**
164
+ * UltraApp's two expensive stages.
165
+ *
166
+ * They are their own kinds for the same reason `autoloop` is: the engine behind
167
+ * them needs a store, a router and a deploy strategy that the kernel has no
168
+ * business knowing about, so the executor is injected and the spec carries only
169
+ * JSON. What the kernel owns is what it owns for every other node — the
170
+ * checkpoint, the claim, the retry, the cancel, and the fact that a crash
171
+ * between them does not redo the one that already finished.
172
+ *
173
+ * The stage between them — running the build contract — is not here, because it
174
+ * is not UltraApp-specific: it is the ordinary `verifier` node.
175
+ */
176
+ export interface UltraappSynthNode extends NodeBase {
177
+ kind: 'ultraapp_synth';
178
+ /** UltraApp's own run id — the key its store is organised by. */
179
+ appRunId: string;
180
+ /** Absolute per-run directory; the council project and the codebase live under it. */
181
+ runDir: string;
182
+ slug: string;
183
+ }
184
+ export interface UltraappDeployNode extends NodeBase {
185
+ kind: 'ultraapp_deploy';
186
+ appRunId: string;
187
+ runDir: string;
188
+ slug: string;
189
+ version: string;
190
+ /** Where the synthesised codebase lives, once `ultraapp_synth` has produced it. */
191
+ codebasePath: string;
192
+ }
193
+ export type NodeSpec = AgentNode | FanoutNode | CouncilNode | VerifierNode | HumanGateNode | RouterNode | SubflowNode | AutoloopNode | UltraappSynthNode | UltraappDeployNode;
194
+ export interface WorkflowSpec {
195
+ name: string;
196
+ nodes: NodeSpec[];
197
+ cwd?: string;
198
+ /**
199
+ * Run-level acceptance contract. When present the kernel appends an implicit
200
+ * terminal verifier, so `completed` always means "a contract passed".
201
+ */
202
+ contract?: AcceptanceContract;
203
+ /** Loop bound. Exceeding it fails the run rather than spinning. Default 50. */
204
+ maxNodeVisits?: number;
205
+ }
206
+ export interface NodeRecord {
207
+ id: string;
208
+ kind: NodeKind;
209
+ state: NodeState;
210
+ /** Attempts of the current visit (retry counter). */
211
+ attempts: number;
212
+ /** Times the router has sent control here (loop counter). */
213
+ visits: number;
214
+ startedAt?: string;
215
+ endedAt?: string;
216
+ error?: string;
217
+ /** Truncated text output; the full text lives under `nodes/<id>/` when large. */
218
+ output?: string;
219
+ /** Paths relative to the run directory. */
220
+ artifacts?: string[];
221
+ evidenceId?: string;
222
+ /** Subflow nodes: the child run this node started, so it stays addressable. */
223
+ childRunId?: string;
224
+ /**
225
+ * Mode-specific payload, checkpointed with the run.
226
+ *
227
+ * This is what lets the legacy per-mode shapes (`CouncilSession`,
228
+ * `FanoutSession`, …) be projected from a run instead of held in their own
229
+ * in-memory maps. It has to be durable for the same reason the rest of the
230
+ * record does: a fan-out's results used to evaporate 30 minutes after it
231
+ * finished, because the only copy was in a `Map`.
232
+ */
233
+ data?: unknown;
234
+ }
235
+ /** Advisory only. A vote is recorded, never used as a termination condition. */
236
+ export interface ConsensusVote {
237
+ agent: string;
238
+ round: number;
239
+ vote: boolean;
240
+ source: 'strict' | 'variant' | 'none';
241
+ }
242
+ export interface RunRecord {
243
+ runId: string;
244
+ workflow: string;
245
+ spec: WorkflowSpec;
246
+ state: RunState;
247
+ outcome: RunOutcome;
248
+ cwd: string;
249
+ createdAt: string;
250
+ updatedAt: string;
251
+ endedAt?: string;
252
+ currentNode?: string;
253
+ nodes: Record<string, NodeRecord>;
254
+ error?: string;
255
+ /** Evidence bundle id of the terminal verifier, when one ran. */
256
+ evidenceId?: string;
257
+ /** `git rev-parse HEAD` captured at run start, when cwd is a repo. */
258
+ baseSha?: string;
259
+ /** Recorded for the record. Never consulted to decide completion. */
260
+ consensusVotes?: ConsensusVote[];
261
+ costUsd?: number;
262
+ /**
263
+ * Why the outcome is what it is, when that needs saying — chiefly when a
264
+ * passing verdict was downgraded because the tree moved after the check.
265
+ */
266
+ outcomeReason?: string;
267
+ /**
268
+ * The verdict currently in force: which node produced it, and the tree digest
269
+ * at that moment. Compared against the tree when the run ends, so evidence
270
+ * overtaken by later edits cannot keep standing as `verified`.
271
+ */
272
+ verdict?: {
273
+ node: string;
274
+ evidenceId: string;
275
+ treeFingerprint?: string;
276
+ sideEffectSeq: number;
277
+ };
278
+ /**
279
+ * Count of completed nodes that can touch the workspace (`agent`, `fanout`,
280
+ * `council`, `subflow`). Compared against the value stored on the verdict, so
281
+ * the kernel knows whether anything ran after the checks at all.
282
+ */
283
+ sideEffectSeq?: number;
284
+ }
285
+ export type KernelEvent = {
286
+ ts: string;
287
+ type: 'run_created';
288
+ runId: string;
289
+ workflow: string;
290
+ } | {
291
+ ts: string;
292
+ type: 'run_state';
293
+ state: RunState;
294
+ outcome?: RunOutcome;
295
+ error?: string;
296
+ } | {
297
+ ts: string;
298
+ type: 'node_state';
299
+ node: string;
300
+ state: NodeState;
301
+ attempt?: number;
302
+ error?: string;
303
+ } | {
304
+ ts: string;
305
+ type: 'node_output';
306
+ node: string;
307
+ text: string;
308
+ } | {
309
+ ts: string;
310
+ type: 'steer';
311
+ node: string;
312
+ text: string;
313
+ } | {
314
+ ts: string;
315
+ type: 'evidence';
316
+ node: string;
317
+ evidenceId: string;
318
+ passed: boolean;
319
+ } | {
320
+ ts: string;
321
+ type: 'log';
322
+ level: 'info' | 'warn' | 'error';
323
+ message: string;
324
+ };
325
+ export declare const TERMINAL_RUN_STATES: readonly RunState[];
326
+ export declare function isTerminalRunState(s: RunState): boolean;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Kernel types — one state vocabulary for every run this runtime executes.
3
+ *
4
+ * Before this module the six orchestration modes each carried their own status
5
+ * union (`CouncilSession.status`, `FanoutSession.status`, `UltraplanResult.status`,
6
+ * `UltrareviewResult.status`, ultraapp's `RunMode`, `AutoloopStatus`) with no
7
+ * overlapping vocabulary, so "is it done" had six different answers and no
8
+ * cross-mode listing was possible. These types replace that.
9
+ *
10
+ * The important distinction encoded here is between *finishing* and *being
11
+ * right*. `RunState` says whether the work stopped; `RunOutcome` says whether
12
+ * anything checked it. A run with no acceptance contract finishes `completed` /
13
+ * `unverified` — it says it does not know, which is not the same as success.
14
+ */
15
+ export const TERMINAL_RUN_STATES = ['completed', 'failed', 'cancelled'];
16
+ export function isTerminalRunState(s) {
17
+ return TERMINAL_RUN_STATES.includes(s);
18
+ }
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/kernel/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyTH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAE7F,MAAM,UAAU,kBAAkB,CAAC,CAAW;IAC5C,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -5,8 +5,13 @@
5
5
  * with the process, and per-session history is capped at MAX_HISTORY_ITEMS and
6
6
  * evicted. So until now nothing survived a restart except the resume-id registry
7
7
  * — there was no way to answer "what did we run today, on which engine, for how
8
- * much". The ledger is that record, and it is the data source a future routing
9
- * layer would need.
8
+ * much". The ledger is that record.
9
+ *
10
+ * As of 6.0.0 it is also usable as a routing signal, which it was not before: a
11
+ * row's `ok` is the engine's report on itself, and no amount of that teaches you
12
+ * which engine is actually better at a task. `verified` is the runtime's own
13
+ * measurement against an acceptance contract, and that is the column a router
14
+ * can learn from. Rows carry both, and the read surfaces keep them apart.
10
15
  *
11
16
  * Durability rules, copied from the pattern autoloop's dispatcher already proved
12
17
  * (`appendDecisionLog`): mkdir + append + swallow. A ledger failure must never
@@ -39,10 +44,35 @@ export interface RunLedgerRow {
39
44
  durationMs: number;
40
45
  toolCalls: number;
41
46
  toolErrors: number;
47
+ /**
48
+ * The engine's own terminal verdict for this turn — it ran and did not report
49
+ * failure. Distinct from `verified`: this is the engine talking about itself.
50
+ */
42
51
  ok: boolean;
43
52
  error?: string;
44
- /** council id / fanout id / autoloop run id, when this turn belongs to one. */
53
+ /** council id / fanout id / autoloop run id / workflow run id, when this turn belongs to one. */
45
54
  parent?: string;
55
+ /**
56
+ * True when an acceptance contract ran against the work this turn belonged to
57
+ * and every required check passed. Absent means no contract was declared —
58
+ * which is *not* the same as false, and the read surfaces must not collapse
59
+ * the two. `ok` is the engine's self-report; this is our own measurement.
60
+ *
61
+ * Not written at turn time, and deliberately so: a turn finishes before the
62
+ * verifier runs, so stamping a verdict there would be inventing one. It is
63
+ * filled in by `annotateVerdicts()` at read time from the run record, or
64
+ * written directly by a standalone `verify_run`.
65
+ */
66
+ verified?: boolean;
67
+ /** Evidence bundle id under the run directory, when a contract ran. */
68
+ evidenceId?: string;
69
+ contractId?: string;
70
+ /** Kernel node kind this turn belonged to (`agent`, `council`, `verifier`, …). */
71
+ nodeKind?: string;
72
+ /** Primary language detected from the repo's manifest. Detected, never guessed from prose. */
73
+ repoLang?: string;
74
+ /** Caller-declared task class. Never inferred — an inferred label is not a label. */
75
+ taskKind?: string;
46
76
  }
47
77
  export interface RunLedgerQuery {
48
78
  /** Epoch ms, ISO string, or a relative spec like "24h" / "7d" / "90m". */
@@ -50,6 +80,8 @@ export interface RunLedgerQuery {
50
80
  session?: string;
51
81
  engine?: string;
52
82
  parent?: string;
83
+ /** `true` keeps only verified rows, `false` keeps only refuted ones. Unset keeps all. */
84
+ verified?: boolean;
53
85
  /** Most recent N rows (applied after filtering). Default 200. */
54
86
  limit?: number;
55
87
  }
@@ -60,6 +92,12 @@ export interface RunLedgerSummary {
60
92
  tokensOut: number;
61
93
  /** Rows whose token counts were estimated rather than engine-reported. */
62
94
  estimatedRows: number;
95
+ /** Rows an acceptance contract passed. */
96
+ verifiedRows: number;
97
+ /** Rows an acceptance contract refuted. */
98
+ refutedRows: number;
99
+ /** Rows with no contract at all — we do not know either way. */
100
+ unverifiedRows: number;
63
101
  byEngine: Record<string, {
64
102
  rows: number;
65
103
  costUsd: number;
@@ -90,6 +128,22 @@ export declare function parseSince(spec: string | number | undefined, now?: numb
90
128
  * whole ledger unreadable.
91
129
  */
92
130
  export declare function readRunLedger(query?: RunLedgerQuery, logger?: Logger): RunLedgerRow[];
131
+ /** What a row's parent run says about it. Supplied by the caller so the ledger stays leaf-level. */
132
+ export interface RunVerdict {
133
+ verified?: boolean;
134
+ evidenceId?: string;
135
+ contractId?: string;
136
+ }
137
+ export type VerdictLookup = (parent: string) => RunVerdict | undefined;
138
+ /**
139
+ * Fill in each row's verdict from the run it belonged to.
140
+ *
141
+ * The join lives here rather than at write time because of the ordering: the
142
+ * turns that produce the work all finish before the verifier that judges it, so
143
+ * there is nothing truthful to stamp on them as they are written. The lookup is
144
+ * injected rather than imported so this module keeps no dependency on the kernel.
145
+ */
146
+ export declare function annotateVerdicts(rows: RunLedgerRow[], lookup: VerdictLookup): RunLedgerRow[];
93
147
  export declare function summarizeRuns(rows: RunLedgerRow[]): RunLedgerSummary;
94
148
  /** Render rows as a fixed-width table for the CLI. Pure — no I/O. */
95
149
  export declare function formatRunTable(rows: RunLedgerRow[]): string;
@@ -5,8 +5,13 @@
5
5
  * with the process, and per-session history is capped at MAX_HISTORY_ITEMS and
6
6
  * evicted. So until now nothing survived a restart except the resume-id registry
7
7
  * — there was no way to answer "what did we run today, on which engine, for how
8
- * much". The ledger is that record, and it is the data source a future routing
9
- * layer would need.
8
+ * much". The ledger is that record.
9
+ *
10
+ * As of 6.0.0 it is also usable as a routing signal, which it was not before: a
11
+ * row's `ok` is the engine's report on itself, and no amount of that teaches you
12
+ * which engine is actually better at a task. `verified` is the runtime's own
13
+ * measurement against an acceptance contract, and that is the column a router
14
+ * can learn from. Rows carry both, and the read surfaces keep them apart.
10
15
  *
11
16
  * Durability rules, copied from the pattern autoloop's dispatcher already proved
12
17
  * (`appendDecisionLog`): mkdir + append + swallow. A ledger failure must never
@@ -136,6 +141,8 @@ export function readRunLedger(query = {}, logger) {
136
141
  continue;
137
142
  if (query.parent && row.parent !== query.parent)
138
143
  continue;
144
+ if (query.verified !== undefined && row.verified !== query.verified)
145
+ continue;
139
146
  out.push(row);
140
147
  if (out.length >= limit)
141
148
  return out.reverse();
@@ -143,6 +150,25 @@ export function readRunLedger(query = {}, logger) {
143
150
  }
144
151
  return out.reverse();
145
152
  }
153
+ /**
154
+ * Fill in each row's verdict from the run it belonged to.
155
+ *
156
+ * The join lives here rather than at write time because of the ordering: the
157
+ * turns that produce the work all finish before the verifier that judges it, so
158
+ * there is nothing truthful to stamp on them as they are written. The lookup is
159
+ * injected rather than imported so this module keeps no dependency on the kernel.
160
+ */
161
+ export function annotateVerdicts(rows, lookup) {
162
+ const cache = new Map();
163
+ return rows.map((row) => {
164
+ if (!row.parent || row.verified !== undefined)
165
+ return row;
166
+ if (!cache.has(row.parent))
167
+ cache.set(row.parent, lookup(row.parent));
168
+ const verdict = cache.get(row.parent);
169
+ return verdict ? { ...row, ...verdict } : row;
170
+ });
171
+ }
146
172
  // ─── Aggregate + format (pure) ──────────────────────────────────────────────
147
173
  export function summarizeRuns(rows) {
148
174
  const summary = {
@@ -151,6 +177,9 @@ export function summarizeRuns(rows) {
151
177
  tokensIn: 0,
152
178
  tokensOut: 0,
153
179
  estimatedRows: 0,
180
+ verifiedRows: 0,
181
+ refutedRows: 0,
182
+ unverifiedRows: 0,
154
183
  byEngine: {},
155
184
  };
156
185
  for (const r of rows) {
@@ -159,6 +188,12 @@ export function summarizeRuns(rows) {
159
188
  summary.tokensOut += r.tokensOut || 0;
160
189
  if (r.tokensEstimated)
161
190
  summary.estimatedRows++;
191
+ if (r.verified === true)
192
+ summary.verifiedRows++;
193
+ else if (r.verified === false)
194
+ summary.refutedRows++;
195
+ else
196
+ summary.unverifiedRows++;
162
197
  const bucket = (summary.byEngine[r.engine] ??= { rows: 0, costUsd: 0 });
163
198
  bucket.rows++;
164
199
  bucket.costUsd = round4(bucket.costUsd + (r.costUsd || 0));
@@ -185,6 +220,7 @@ export function formatRunTable(rows) {
185
220
  pad('OUT', 9),
186
221
  pad('COST', 9),
187
222
  pad('DUR', 8),
223
+ pad('VERIFIED', 9),
188
224
  'STATUS',
189
225
  ].join(' ');
190
226
  const lines = rows.map((r) => {
@@ -199,6 +235,10 @@ export function formatRunTable(rows) {
199
235
  pad(String(r.tokensOut ?? 0), 9),
200
236
  pad(cost, 9),
201
237
  pad(dur, 8),
238
+ // Three states, not two: `—` means no contract was declared, which is a
239
+ // different claim from `no`. Collapsing them would let an unchecked run
240
+ // read as a checked-and-failed one, or worse, the reverse.
241
+ pad(r.verified === undefined ? '—' : r.verified ? 'yes' : 'NO', 9),
202
242
  // `ok: false` does not imply error text: a turn the engine declined to count as
203
243
  // succeeded (codex-app `interrupted`, agy's non-SUCCESS status) resolves without
204
244
  // throwing, so there is nothing to quote. Say so rather than print a bare label.
@@ -211,6 +251,9 @@ export function formatRunTable(rows) {
211
251
  .join(' ');
212
252
  const footer = `\n${s.rows} turns $${s.costUsd.toFixed(4)} ` +
213
253
  `${s.tokensIn} in / ${s.tokensOut} out\n${engines}` +
254
+ (s.verifiedRows + s.refutedRows > 0
255
+ ? `\nverified ${s.verifiedRows} · refuted ${s.refutedRows} · unchecked ${s.unverifiedRows}`
256
+ : `\n${s.unverifiedRows} turn(s) ran with no acceptance contract — unchecked, not passed.`) +
214
257
  (s.estimatedRows > 0
215
258
  ? `\n~ ${s.estimatedRows} turn(s) used estimated token counts (engine reported no usage).`
216
259
  : '');
@@ -1 +1 @@
1
- {"version":3,"file":"run-ledger.js","sourceRoot":"","sources":["../../src/run-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-ledger.js","sourceRoot":"","sources":["../../src/run-ledger.ts"],"names":[],"mappings":"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"}