@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.
- package/README.md +26 -26
- package/dist/bin/cli.js +107 -1
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/acp-server.d.ts +5 -5
- package/dist/src/acp-server.js +3 -3
- package/dist/src/acp-server.js.map +1 -1
- package/dist/src/autoloop/dispatcher.d.ts +22 -0
- package/dist/src/autoloop/dispatcher.js +71 -13
- package/dist/src/autoloop/dispatcher.js.map +1 -1
- package/dist/src/autoloop/messages.d.ts +10 -0
- package/dist/src/autoloop/messages.js.map +1 -1
- package/dist/src/autoloop/runner.js +6 -0
- package/dist/src/autoloop/runner.js.map +1 -1
- package/dist/src/constants.d.ts +0 -6
- package/dist/src/constants.js +0 -6
- package/dist/src/constants.js.map +1 -1
- package/dist/src/council.d.ts +15 -0
- package/dist/src/council.js +48 -35
- package/dist/src/council.js.map +1 -1
- package/dist/src/dashboard/index.html +191 -6
- package/dist/src/embedded-server.js +132 -9
- package/dist/src/embedded-server.js.map +1 -1
- package/dist/src/fanout.d.ts +30 -1
- package/dist/src/fanout.js +32 -3
- package/dist/src/fanout.js.map +1 -1
- package/dist/src/index.js +359 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/kernel/agent-step.d.ts +59 -0
- package/dist/src/kernel/agent-step.js +100 -0
- package/dist/src/kernel/agent-step.js.map +1 -0
- package/dist/src/kernel/conditions.d.ts +11 -0
- package/dist/src/kernel/conditions.js +24 -0
- package/dist/src/kernel/conditions.js.map +1 -0
- package/dist/src/kernel/engine.d.ts +319 -0
- package/dist/src/kernel/engine.js +1047 -0
- package/dist/src/kernel/engine.js.map +1 -0
- package/dist/src/kernel/exec.d.ts +43 -0
- package/dist/src/kernel/exec.js +112 -0
- package/dist/src/kernel/exec.js.map +1 -0
- package/dist/src/kernel/file-lock.d.ts +50 -0
- package/dist/src/kernel/file-lock.js +135 -0
- package/dist/src/kernel/file-lock.js.map +1 -0
- package/dist/src/kernel/nodes/agent.d.ts +4 -0
- package/dist/src/kernel/nodes/agent.js +35 -0
- package/dist/src/kernel/nodes/agent.js.map +1 -0
- package/dist/src/kernel/nodes/autoloop.d.ts +78 -0
- package/dist/src/kernel/nodes/autoloop.js +75 -0
- package/dist/src/kernel/nodes/autoloop.js.map +1 -0
- package/dist/src/kernel/nodes/council.d.ts +12 -0
- package/dist/src/kernel/nodes/council.js +88 -0
- package/dist/src/kernel/nodes/council.js.map +1 -0
- package/dist/src/kernel/nodes/fanout.d.ts +11 -0
- package/dist/src/kernel/nodes/fanout.js +63 -0
- package/dist/src/kernel/nodes/fanout.js.map +1 -0
- package/dist/src/kernel/nodes/human-gate.d.ts +4 -0
- package/dist/src/kernel/nodes/human-gate.js +7 -0
- package/dist/src/kernel/nodes/human-gate.js.map +1 -0
- package/dist/src/kernel/nodes/index.d.ts +12 -0
- package/dist/src/kernel/nodes/index.js +21 -0
- package/dist/src/kernel/nodes/index.js.map +1 -0
- package/dist/src/kernel/nodes/router.d.ts +4 -0
- package/dist/src/kernel/nodes/router.js +12 -0
- package/dist/src/kernel/nodes/router.js.map +1 -0
- package/dist/src/kernel/nodes/subflow.d.ts +13 -0
- package/dist/src/kernel/nodes/subflow.js +38 -0
- package/dist/src/kernel/nodes/subflow.js.map +1 -0
- package/dist/src/kernel/nodes/ultraapp.d.ts +60 -0
- package/dist/src/kernel/nodes/ultraapp.js +62 -0
- package/dist/src/kernel/nodes/ultraapp.js.map +1 -0
- package/dist/src/kernel/nodes/verifier.d.ts +14 -0
- package/dist/src/kernel/nodes/verifier.js +84 -0
- package/dist/src/kernel/nodes/verifier.js.map +1 -0
- package/dist/src/kernel/projections.d.ts +42 -0
- package/dist/src/kernel/projections.js +133 -0
- package/dist/src/kernel/projections.js.map +1 -0
- package/dist/src/kernel/repo.d.ts +13 -0
- package/dist/src/kernel/repo.js +64 -0
- package/dist/src/kernel/repo.js.map +1 -0
- package/dist/src/kernel/secrets.d.ts +25 -0
- package/dist/src/kernel/secrets.js +48 -0
- package/dist/src/kernel/secrets.js.map +1 -0
- package/dist/src/kernel/store.d.ts +225 -0
- package/dist/src/kernel/store.js +838 -0
- package/dist/src/kernel/store.js.map +1 -0
- package/dist/src/kernel/templates/index.d.ts +140 -0
- package/dist/src/kernel/templates/index.js +266 -0
- package/dist/src/kernel/templates/index.js.map +1 -0
- package/dist/src/kernel/types.d.ts +326 -0
- package/dist/src/kernel/types.js +19 -0
- package/dist/src/kernel/types.js.map +1 -0
- package/dist/src/run-ledger.d.ts +57 -3
- package/dist/src/run-ledger.js +45 -2
- package/dist/src/run-ledger.js.map +1 -1
- package/dist/src/session-manager.d.ts +176 -129
- package/dist/src/session-manager.js +652 -603
- package/dist/src/session-manager.js.map +1 -1
- package/dist/src/types.d.ts +33 -3
- package/dist/src/ultraapp/build.d.ts +117 -3
- package/dist/src/ultraapp/build.js +319 -3
- package/dist/src/ultraapp/build.js.map +1 -1
- package/dist/src/ultraapp/contract.d.ts +52 -0
- package/dist/src/ultraapp/contract.js +83 -0
- package/dist/src/ultraapp/contract.js.map +1 -0
- package/dist/src/ultraapp/conventions.js +9 -2
- package/dist/src/ultraapp/conventions.js.map +1 -1
- package/dist/src/ultraapp/fix-on-failure.d.ts +21 -2
- package/dist/src/ultraapp/fix-on-failure.js +46 -62
- package/dist/src/ultraapp/fix-on-failure.js.map +1 -1
- package/dist/src/ultraapp/manager.d.ts +107 -2
- package/dist/src/ultraapp/manager.js +305 -86
- package/dist/src/ultraapp/manager.js.map +1 -1
- package/dist/src/verify/baseline.d.ts +73 -0
- package/dist/src/verify/baseline.js +186 -0
- package/dist/src/verify/baseline.js.map +1 -0
- package/dist/src/verify/contract.d.ts +116 -0
- package/dist/src/verify/contract.js +142 -0
- package/dist/src/verify/contract.js.map +1 -0
- package/dist/src/verify/evidence.d.ts +61 -0
- package/dist/src/verify/evidence.js +133 -0
- package/dist/src/verify/evidence.js.map +1 -0
- package/dist/src/verify/runner.d.ts +63 -0
- package/dist/src/verify/runner.js +317 -0
- package/dist/src/verify/runner.js.map +1 -0
- package/openclaw.plugin.json +8 -0
- package/package.json +2 -2
- package/skills/SKILL.md +120 -79
- package/skills/references/acp.md +17 -17
- package/skills/references/autoloop.md +139 -65
- package/skills/references/claude-cli-tracking.md +4 -4
- package/skills/references/cli.md +101 -59
- package/skills/references/council.md +109 -37
- package/skills/references/dashboard.md +34 -6
- package/skills/references/getting-started.md +13 -13
- package/skills/references/inbox.md +4 -4
- package/skills/references/mcp.md +39 -34
- package/skills/references/multi-engine.md +51 -47
- package/skills/references/observability.md +88 -28
- package/skills/references/openai-compat.md +39 -39
- package/skills/references/sessions.md +43 -25
- package/skills/references/tools.md +402 -309
- package/skills/references/ultra.md +45 -45
- package/skills/references/ultraapp.md +126 -50
- package/skills/references/verification.md +187 -0
- package/skills/references/workflow.md +362 -0
- package/dist/src/ultraapp/fix-on-failure-session.d.ts +0 -23
- package/dist/src/ultraapp/fix-on-failure-session.js +0 -51
- 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"}
|
package/dist/src/run-ledger.d.ts
CHANGED
|
@@ -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
|
|
9
|
-
*
|
|
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;
|
package/dist/src/run-ledger.js
CHANGED
|
@@ -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
|
|
9
|
-
*
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"run-ledger.js","sourceRoot":"","sources":["../../src/run-ledger.ts"],"names":[],"mappings":"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"}
|