@obversa/runtime 0.1.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/LICENSE +21 -0
- package/README.md +192 -0
- package/dist/api.d.ts +72 -0
- package/dist/api.js +9775 -0
- package/dist/api.js.map +1 -0
- package/dist/artifacts/conformance.d.ts +1 -0
- package/dist/artifacts/file-store.d.ts +8 -0
- package/dist/artifacts/store.d.ts +1 -0
- package/dist/callback/approval.d.ts +8 -0
- package/dist/callback/client.d.ts +38 -0
- package/dist/callback/gate.d.ts +1 -0
- package/dist/callback/stored-client.d.ts +5 -0
- package/dist/chunk-3L6YNPN6.js +3 -0
- package/dist/chunk-3L6YNPN6.js.map +1 -0
- package/dist/chunk-5GLEABOU.js +3 -0
- package/dist/chunk-5GLEABOU.js.map +1 -0
- package/dist/chunk-DEW5R23M.js +338 -0
- package/dist/chunk-DEW5R23M.js.map +1 -0
- package/dist/chunk-DV5P4QLI.js +3056 -0
- package/dist/chunk-DV5P4QLI.js.map +1 -0
- package/dist/chunk-NIBHM5I5.js +34 -0
- package/dist/chunk-NIBHM5I5.js.map +1 -0
- package/dist/chunk-RZLMX3IA.js +368 -0
- package/dist/chunk-RZLMX3IA.js.map +1 -0
- package/dist/core/agent-md.d.ts +36 -0
- package/dist/core/agent.d.ts +86 -0
- package/dist/core/approval-job.d.ts +43 -0
- package/dist/core/assert-graph.d.ts +34 -0
- package/dist/core/budget.d.ts +49 -0
- package/dist/core/concurrency.d.ts +2 -0
- package/dist/core/condition.d.ts +209 -0
- package/dist/core/context.d.ts +36 -0
- package/dist/core/cost.d.ts +59 -0
- package/dist/core/dag.d.ts +20 -0
- package/dist/core/decision.d.ts +29 -0
- package/dist/core/describe.d.ts +56 -0
- package/dist/core/engine-meta.d.ts +5 -0
- package/dist/core/env-overlay.d.ts +35 -0
- package/dist/core/errors.d.ts +46 -0
- package/dist/core/feedback.d.ts +68 -0
- package/dist/core/git.d.ts +152 -0
- package/dist/core/guards.d.ts +70 -0
- package/dist/core/isolated.d.ts +40 -0
- package/dist/core/job.d.ts +134 -0
- package/dist/core/limits.d.ts +22 -0
- package/dist/core/loop.d.ts +24 -0
- package/dist/core/merge.d.ts +30 -0
- package/dist/core/pipeline.d.ts +35 -0
- package/dist/core/process.d.ts +11 -0
- package/dist/core/progress.d.ts +82 -0
- package/dist/core/redact.d.ts +1 -0
- package/dist/core/stats.d.ts +63 -0
- package/dist/core/team.d.ts +34 -0
- package/dist/core/text.d.ts +8 -0
- package/dist/core/tournament.d.ts +25 -0
- package/dist/core/types.d.ts +650 -0
- package/dist/engines/command-runner.d.ts +1 -0
- package/dist/engines/conformance.d.ts +1 -0
- package/dist/engines/engine.d.ts +4 -0
- package/dist/engines/failure.d.ts +1 -0
- package/dist/engines/fallback.d.ts +35 -0
- package/dist/engines/message-map.d.ts +1 -0
- package/dist/engines/mock.d.ts +1 -0
- package/dist/engines/preflight.d.ts +36 -0
- package/dist/env/command.d.ts +50 -0
- package/dist/env/command.js +65 -0
- package/dist/env/command.js.map +1 -0
- package/dist/env/environment.d.ts +4 -0
- package/dist/env/mock.d.ts +24 -0
- package/dist/events/conformance.d.ts +1 -0
- package/dist/events/envelope.d.ts +1 -0
- package/dist/events/jsonl-store.d.ts +8 -0
- package/dist/events/store.d.ts +1 -0
- package/dist/graph/commands.d.ts +5 -0
- package/dist/graph/conformance.d.ts +32 -0
- package/dist/graph/kernel.d.ts +5 -0
- package/dist/graph/plan.d.ts +1 -0
- package/dist/graph/type.d.ts +7 -0
- package/dist/graph/value.d.ts +1 -0
- package/dist/graph-types/dag.d.ts +137 -0
- package/dist/graph-types/loop.d.ts +194 -0
- package/dist/graph-types/team.d.ts +68 -0
- package/dist/memory.d.ts +82 -0
- package/dist/memory.js +397 -0
- package/dist/memory.js.map +1 -0
- package/dist/proof/acceptance.d.ts +5 -0
- package/dist/proof/artifact.d.ts +6 -0
- package/dist/proof/cache.d.ts +4 -0
- package/dist/runtime/attempt.d.ts +19 -0
- package/dist/runtime/budget.d.ts +4 -0
- package/dist/runtime/engine-availability.d.ts +18 -0
- package/dist/runtime/graph-executor.d.ts +7 -0
- package/dist/runtime/monitor.d.ts +80 -0
- package/dist/runtime/node-lifecycle.d.ts +84 -0
- package/dist/runtime/paths.d.ts +2 -0
- package/dist/runtime/persist.d.ts +31 -0
- package/dist/runtime/preflight-record.d.ts +149 -0
- package/dist/runtime/process-tree.d.ts +1 -0
- package/dist/runtime/result-contract.d.ts +4 -0
- package/dist/runtime/result-parts.d.ts +1 -0
- package/dist/runtime/run-definition.d.ts +24 -0
- package/dist/runtime/run-event.d.ts +9 -0
- package/dist/runtime/runner.d.ts +139 -0
- package/dist/runtime/supervisor.d.ts +111 -0
- package/dist/runtime/team-rooms.d.ts +13 -0
- package/dist/runtime/workspace-policy.d.ts +25 -0
- package/dist/storage/error.d.ts +1 -0
- package/dist/storage/id.d.ts +1 -0
- package/dist/storage/local.d.ts +12 -0
- package/dist/storage/local.js +1492 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/testing.d.ts +15 -0
- package/dist/testing.js +274 -0
- package/dist/testing.js.map +1 -0
- package/dist/workflow-agent-response.d.ts +3 -0
- package/dist/workflow-support.d.ts +36 -0
- package/dist/workflow-support.js +5 -0
- package/dist/workflow-support.js.map +1 -0
- package/dist/workflow.d.ts +73 -0
- package/dist/workspace/conformance.d.ts +1 -0
- package/dist/workspace/git-provider.d.ts +26 -0
- package/dist/workspace/provider.d.ts +2 -0
- package/package.json +91 -0
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/merge.ts","../src/core/dag.ts","../src/core/limits.ts","../src/core/progress.ts","../src/core/loop.ts","../src/core/stats.ts","../src/core/cost.ts","../src/runtime/persist.ts","../src/runtime/paths.ts","../src/runtime/supervisor.ts","../src/callback/client.ts","../src/runtime/monitor.ts","../src/runtime/runner.ts","../src/workflow.ts","../src/graph-types/dag.ts","../src/graph-types/team.ts","../src/graph-types/loop.ts","../src/runtime/budget.ts","../src/runtime/engine-availability.ts","../src/core/guards.ts","../src/runtime/workspace-policy.ts","../src/runtime/node-lifecycle.ts","../src/runtime/run-event.ts","../src/callback/approval.ts","../src/callback/stored-client.ts","../src/proof/acceptance.ts","../src/proof/artifact.ts","../src/proof/cache.ts","../src/engines/preflight.ts","../src/runtime/attempt.ts","../src/runtime/preflight-record.ts","../src/runtime/graph-executor.ts","../src/runtime/team-rooms.ts","../src/workspace/git-provider.ts","../src/core/pipeline.ts","../src/core/tournament.ts","../src/core/isolated.ts","../src/core/team.ts","../src/core/assert-graph.ts","../src/core/agent-md.ts","../src/core/decision.ts","../src/engines/fallback.ts","../src/api.ts"],"names":["text","limit","pLimit","job","forkSeq","isolated","outcome","record","run","convergence","resolve","usage","readFileSync","stage","writeFileSync","join","mkdirSync","existsSync","stat","NOISE","slug","appendFileSync","invalid","all","createHash","writes","randomUUID","always","toposort","dag","isDeepStrictEqual","issue","path","value","failed","message","role","nodes","nodeState","object","selection","unavailable","key","homedir","dirname","lstatSync","CONTROL_CHARACTER","checked","isAbsolute","realpath","result","effective","error","check","validateActionDecision","digestJson","cloneFrozenJson","isObject","payload","validateApprovalRecord","validateCallbackEvent","snapshotApprovalSubject","assertApprovalPermissionsAdmitted","prepared","hasExactFields","event","identifier","failure","extra","reference","fail","targets","target","preflight","probeFailure","command","contexts","permissions","document","binding","start","observation","GRAPH_PREFIX","GraphExecutionError","exact","reviewContext","basename","line"],"mappings":"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","file":"api.js","sourcesContent":["/**\n * Merge as synthesis. A raw `git merge` either applies cleanly or fails on conflict.\n * `mergeSynthesis` instead has an agent resolve each conflicted file coherently\n * (preserving both intents), and writes a merge commit body that synthesises what the\n * two branches were each trying to do, not \"merge branch X\".\n *\n * It is text-in/text-out, so it works through any `Engine` (no tool-use needed): the\n * conflicted file content goes in, the resolved content comes back. One call per\n * conflicted file plus one for the synthesis body, and nothing when the merge is\n * already clean. The merge is aborted if resolution throws, so the target is never\n * left half-merged.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport pLimit from 'p-limit';\n\nimport type { JobContext } from './types.js';\nimport type { EngineRef } from '../engines/engine.js';\nimport {\n mergeNoCommit,\n mergeAbort,\n stageAll,\n commit,\n branchCommits,\n} from './git.js';\nimport { LoopError } from './errors.js';\nimport { requireFinalResultText } from '../runtime/result-parts.js';\n\n// One process-wide lock; use per-workspace locks if throughput requires it.\nexport const mergeLock = pLimit(1);\n\nexport interface MergeSynthesisConfig {\n /** The branch to land into the current workspace. */\n branch: string;\n /** Conventional subject for the merge commit. */\n message?: string;\n engine?: EngineRef;\n model?: string;\n}\n\nexport interface MergeSynthesisResult {\n ok: boolean;\n /** Whether a conflict had to be resolved. */\n conflict: boolean;\n sha?: string;\n}\n\n/** Strip a single wrapping code fence a model sometimes adds around file output. */\nfunction stripFence(s: string): string {\n const m = /^```[^\\n]*\\n([\\s\\S]*?)\\n```$/.exec(s.trim());\n return `${(m ? m[1]! : s).replace(/\\s+$/, '')}\\n`;\n}\n\nfunction firstLine(s: string): string {\n return s.split('\\n').find((l) => l.trim()) ?? '';\n}\n\n/** Match an ordered Git conflict block, not standalone document underlines. */\nfunction hasConflictBlock(text: string): boolean {\n const openings = new Map<number, boolean>();\n for (const [line, marker] of text.matchAll(/^(<{7,}|={7,}|>{7,})(?:[ \\t].*)?\\r?$/gm)) {\n const width = marker!.length;\n if (line.startsWith('<')) {\n if (!openings.has(width)) openings.set(width, false);\n } else if (line.startsWith('=')) {\n if (openings.has(width)) openings.set(width, true);\n } else if (openings.get(width)) return true;\n }\n return false;\n}\n\nexport async function mergeSynthesis(\n ctx: JobContext,\n config: MergeSynthesisConfig,\n): Promise<MergeSynthesisResult> {\n const cwd = ctx.workspace.dir;\n const engine = ctx.resolveEngine(config.engine);\n const merge = await mergeNoCommit(cwd, config.branch, { signal: ctx.signal });\n\n try {\n if (!merge.clean) {\n for (const file of merge.conflicted) {\n const conflicted = readFileSync(join(cwd, file), 'utf8');\n const out = await engine.run(\n {\n prompt:\n `Resolve this git merge conflict in \\`${file}\\`. Combine both sides ` +\n `coherently, preserving the intent of each. Output ONLY the fully ` +\n `resolved file content — no conflict markers, no commentary, no code ` +\n `fence.\\n\\n${conflicted}`,\n model: config.model,\n maxTokens: 4000,\n },\n () => {},\n ctx.signal,\n );\n const resolved = stripFence(requireFinalResultText(out));\n if (hasConflictBlock(resolved)) {\n throw new LoopError({\n code: 'BODY',\n message: `Merge resolution for \"${file}\" still contains conflict markers.`,\n path: ctx.path,\n });\n }\n writeFileSync(join(cwd, file), resolved);\n }\n await stageAll({ cwd, signal: ctx.signal });\n }\n\n const body = await synthesiseBody(ctx, engine, config);\n const sha = await commit(\n {\n subject: config.message ?? `merge: ${config.branch} (synthesis)`,\n body,\n allowEmpty: true, // a merge commit may have an empty diff after resolution\n },\n { cwd, signal: ctx.signal },\n );\n return { ok: true, conflict: !merge.clean, sha };\n } catch (e) {\n await mergeAbort(cwd, { signal: ctx.signal }).catch(() => {});\n throw LoopError.from(e, { code: 'BODY', path: ctx.path });\n }\n}\n\n/** Compose the merge body from the merged branch's own commits. */\nasync function synthesiseBody(\n ctx: JobContext,\n engine: ReturnType<JobContext['resolveEngine']>,\n config: MergeSynthesisConfig,\n): Promise<string> {\n const ways = await branchCommits({\n cwd: ctx.workspace.dir,\n ref: config.branch,\n max: 8,\n signal: ctx.signal,\n });\n const summary = ways\n .map((w) => `- ${w.subject}${w.body ? `: ${firstLine(w.body)}` : ''}`)\n .join('\\n');\n const out = await engine.run(\n {\n prompt:\n `A branch is being merged. Its commits:\\n${summary || '(none)'}\\n\\n` +\n `Write a concise MERGE SYNTHESIS for the commit body: what this line of ` +\n `work accomplished, how it integrates, and any tradeoff reconciled. A few ` +\n `sentences, no preamble.`,\n system: 'You write merge synthesis commit bodies that capture intent.',\n model: config.model,\n maxTokens: 600,\n },\n () => {},\n ctx.signal,\n );\n return requireFinalResultText(out).trim();\n}\n","/**\n * The DAG / stages layer. `dag(config)` returns a `Job`, so it nests with\n * `loop()` both ways. Nodes declare `needs` (dependencies); each node waits on\n * its dependencies' promises, then runs under a shared `p-limit` concurrency\n * gate. Cycle/missing-dep detection is delegated to `toposort` and happens\n * before any work runs.\n *\n * Failure policy (ours, not the libs'):\n * - a required node failing blocks its dependents (they don't run);\n * - with `stopOnError` (default) the first required failure stops scheduling\n * anything not already in flight;\n * - `optional` nodes never fail the DAG nor block dependents;\n * - an unmet `when` gate *skips* the node, which counts as green.\n */\n\nimport pLimit from 'p-limit';\nimport toposort from 'toposort';\n\nimport type {\n DagConfig,\n KickbackBudget,\n DagNode,\n Job,\n JobContext,\n Outcome,\n Workspace,\n} from './types.js';\nimport { childContext } from './context.js';\nimport { nodeJobContext } from './approval-job.js';\nimport { needDecisionsOf, toCondition } from './condition.js';\nimport { setMeta, jobMeta, describeConditions } from './describe.js';\nimport {\n isRepo,\n stageAll,\n commit,\n addWorktree,\n removeWorktree,\n deleteBranch,\n mergeBranch,\n} from './git.js';\nimport { mergeLock, mergeSynthesis } from './merge.js';\nimport type { EnvHandle } from '../env/environment.js';\nimport { LoopError } from './errors.js';\nimport { revisionFromOutcome } from './feedback.js';\nimport { DEFAULT_FANOUT_CONCURRENCY } from './concurrency.js';\n\n/** Sanitise a name into a git-ref-safe slug. */\nfunction slug(s: string): string {\n return s.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/(^-+|-+$)/g, '') || 'node';\n}\n\nfunction normalizeNeeds(needs: DagNode['needs']): string[] {\n if (needs === undefined) return [];\n return typeof needs === 'string' ? [needs] : [...needs];\n}\n\nfunction normalize(node: DagNode | Job): DagNode {\n if (typeof node === 'function') return { job: node, needs: [] };\n return {\n ...node,\n needs: normalizeNeeds(node.needs),\n };\n}\n\nfunction validateKickbackBudget(\n budget: KickbackBudget | undefined,\n nodes: ReadonlyMap<string, DagNode>,\n): void {\n if (budget === undefined) return;\n if (typeof budget === 'number') {\n if (!Number.isInteger(budget) || budget < 0) {\n throw new LoopError({\n code: 'CONFIG',\n message: 'dag maxKickbacks must be a non-negative integer',\n });\n }\n return;\n }\n if (budget === null || typeof budget !== 'object' || Array.isArray(budget)) {\n throw new LoopError({\n code: 'CONFIG',\n message: 'dag maxKickbacks must be a number or target budget map',\n });\n }\n for (const [target, limit] of Object.entries(budget)) {\n if (!nodes.has(target)) {\n throw new LoopError({\n code: 'CONFIG',\n message: `dag maxKickbacks names unknown target \"${target}\"`,\n });\n }\n if (!Number.isInteger(limit) || limit < 0) {\n throw new LoopError({\n code: 'CONFIG',\n message: `dag maxKickbacks for \"${target}\" must be a non-negative integer`,\n });\n }\n }\n}\n\nexport function dag(config: DagConfig): Job {\n if (!config.name)\n throw new LoopError({\n code: 'CONFIG',\n message: 'dag() requires a non-empty name',\n });\n const names = Object.keys(config.nodes);\n const nodes = new Map<string, DagNode>(\n names.map((n) => [n, normalize(config.nodes[n]!)]),\n );\n validateKickbackBudget(config.maxKickbacks, nodes);\n\n // Fail fast on a bad graph, before the Job is ever run.\n const edges: [string, string][] = [];\n for (const [name, node] of nodes) {\n for (const dep of normalizeNeeds(node.needs)) {\n if (!nodes.has(dep)) {\n throw new LoopError({\n code: 'CONFIG',\n message: `dag \"${config.name}\": node \"${name}\" needs unknown node \"${dep}\"`,\n });\n }\n edges.push([dep, name]); // dep must precede name\n }\n // A `when` that reads a dependency's outcome (`passed(x)`, `failed(x)`,\n // however composed) must name one of this node's needs, and a branch on\n // `failed(x)` is reached only when x is optional: a required x that\n // fails blocks this node before its `when` is ever read.\n for (const { on, need } of node.when === undefined ? [] : needDecisionsOf(node.when)) {\n const where = `dag \"${config.name}\": node \"${name}\" branches on ${on}(\"${need}\")`;\n if (!nodes.has(need)) {\n throw new LoopError({ code: 'CONFIG', message: `${where}, but \"${need}\" is not a node in this dag` });\n }\n if (!normalizeNeeds(node.needs).includes(need)) {\n throw new LoopError({\n code: 'CONFIG',\n message: `${where}, but \"${need}\" is not one of its needs; add it to the node's needs`,\n });\n }\n if (on === 'failed' && nodes.get(need)?.optional !== true) {\n throw new LoopError({\n code: 'CONFIG',\n message: `${where}, so \"${need}\" must be optional: true; `\n + `a required node that fails blocks \"${name}\" before its when runs`,\n });\n }\n }\n }\n let order: string[];\n try {\n order = toposort.array(names, edges);\n } catch (e) {\n throw new LoopError({\n code: 'CONFIG',\n message: `dag \"${config.name}\": dependency cycle detected`,\n cause: e,\n });\n }\n\n const stopOnError = config.stopOnError ?? true;\n const maxKickbacks = config.maxKickbacks ?? 0;\n const perTargetBudget = typeof maxKickbacks !== 'number';\n const targetLimit = (target: string): number => typeof maxKickbacks === 'number'\n ? maxKickbacks\n : maxKickbacks[target] ?? 0;\n const routeKickbacks = config.maxKickbacks !== undefined\n && (perTargetBudget || maxKickbacks > 0);\n\n // Static graph relations for routing cross-stage feedback (kickback). All pure\n // functions of the declared `needs` edges, computed once. `dependents` is the\n // forward adjacency (who needs me); a kickback to a target re-runs the target\n // plus everything reachable from it, and the target must be an ancestor.\n const dependents = new Map<string, string[]>(names.map((n) => [n, []]));\n for (const [dep, name] of edges) dependents.get(dep)!.push(name);\n const ancestorsOf = (name: string): Set<string> => {\n const seen = new Set<string>();\n const stack = normalizeNeeds(nodes.get(name)!.needs);\n while (stack.length) {\n const n = stack.pop()!;\n if (seen.has(n)) continue;\n seen.add(n);\n stack.push(...normalizeNeeds(nodes.get(n)!.needs));\n }\n return seen;\n };\n const dirtyFrom = (target: string): Set<string> => {\n const seen = new Set<string>([target]);\n const stack = [target];\n while (stack.length) {\n const n = stack.pop()!;\n for (const d of dependents.get(n)!)\n if (!seen.has(d)) {\n seen.add(d);\n stack.push(d);\n }\n }\n return seen;\n };\n const limitN =\n config.concurrency && config.concurrency > 0\n ? config.concurrency\n : DEFAULT_FANOUT_CONCURRENCY;\n\n const job: Job = async (parent: JobContext): Promise<Outcome> => {\n const path = [...parent.path, config.name];\n const depth = parent.depth + 1;\n const ts = () => Date.now();\n const targetCounts = new Map<string, number>();\n parent.emit({ kind: 'dag:start', ts: ts(), path, depth, nodes: names });\n\n const limit = pLimit(limitN);\n const results = new Map<string, Outcome>();\n const memo = new Map<string, Promise<Outcome>>();\n // How many times each node has run (1 on the first pass, +1 per kickback\n // re-run). Stamped onto its dag:node events so records can tell rounds apart.\n const attempts = new Map<string, number>();\n let stopped = false;\n // When a node is kicked back to, the reason rides into its next run as\n // `lastReview` — the same channel a loop's failed `review` uses, so the next\n // worker receives it. Empty in the common (no-kickback) case.\n const pendingKickback = new Map<string, Outcome>();\n\n // Each node runs under its own name in the path, so a nested job (e.g. a\n // loop) is uniquely addressable for stats/logs even across same-named siblings.\n const nodeContext = (name: string) => {\n const node = nodes.get(name)!;\n return {\n needs: normalizeNeeds(node.needs),\n ...(node.desc !== undefined ? { desc: node.desc } : {}),\n ...(node.gate !== undefined ? { gate: node.gate } : {}),\n };\n };\n\n const nodeCtx = (\n name: string,\n job: Job | undefined,\n workspace?: Workspace,\n environment?: EnvHandle,\n ): JobContext =>\n nodeJobContext(childContext(parent, {\n depth,\n path: [...path, name],\n workspace,\n environment,\n lastReview: pendingKickback.get(name),\n needs: Object.freeze(Object.fromEntries(\n normalizeNeeds(nodes.get(name)!.needs)\n .filter((n) => results.has(n))\n .map((n) => [n, results.get(n)!]),\n )),\n graph: {\n dag: config.name,\n node: name,\n attempt: attempts.get(name) ?? 1,\n path: [...path, name],\n ...nodeContext(name),\n dependents: dependents.get(name) ?? [],\n },\n // A nested DAG node starts a new reviewer scope. Its own reviewer\n // receives stageGate below; other checks must not see an ancestor's.\n reviewerGate: null,\n // Bind the node's criterion, including an explicit empty value. A\n // nested ungated node must not inherit its parent's criterion.\n stageGate: nodes.get(name)!.gate ?? null,\n timeoutMs: nodes.get(name)!.timeoutMs,\n timeoutGraceMs: nodes.get(name)!.timeoutGraceMs,\n }), job);\n\n let forkSeq = 0;\n\n /**\n * Run a node, in its own worktree when isolated. On pass the node's work is\n * captured (any uncommitted remainder is committed in the worktree) and\n * landed back into the parent branch (`--no-ff`, serialised). A merge\n * conflict fails the node unless synthesis is enabled. The worktree is\n * always removed; a cleanly-merged fork branch is deleted.\n */\n const runNodeJob = async (\n name: string,\n node: DagNode,\n ): Promise<Outcome> => {\n const isolated = node.isolate ?? config.isolation === 'worktree';\n if (!isolated) return node.job(nodeCtx(name, node.job));\n\n const base = parent.workspace;\n if (!(await isRepo({ cwd: base.dir, signal: parent.signal }))) {\n parent.log(\n `node \"${name}\" requested worktree isolation but ${base.dir} is not a git repo; running in the shared workspace`,\n 'warn',\n );\n return node.job(nodeCtx(name, node.job));\n }\n\n const branch = `lines/${slug(config.name)}-${slug(name)}-${(forkSeq += 1)}`;\n const wt = await addWorktree(base.dir, {\n branch,\n base: 'HEAD',\n signal: parent.signal,\n });\n const wtWs: Workspace = { dir: wt.dir, branch };\n // Each team gets its own environment, named after its branch — born with\n // the worktree, torn down with it. A failed start propagates and the node\n // is recorded as failed; the worktree is still cleaned up in `finally`.\n let envHandle: EnvHandle | undefined;\n try {\n if (config.environment)\n envHandle = await config.environment.up(wtWs, parent.signal);\n const outcome = await node.job(nodeCtx(name, node.job, wtWs, envHandle));\n if (outcome.status === 'pass') {\n // Capture anything the node left uncommitted, so nothing is stranded\n // in the worktree, then land it back.\n await stageAll({ cwd: wt.dir, signal: parent.signal });\n await commit(\n {\n subject: `chore(${slug(name)}): worktree changes`,\n },\n { cwd: wt.dir, signal: parent.signal },\n );\n const merged = await mergeLock(() =>\n mergeBranch(base.dir, branch, {\n signal: parent.signal,\n message: `merge ${branch} (node ${name})`,\n }),\n );\n if (!merged.ok) {\n // Conflict. Either fail, or synthesise the merge (an agent\n // resolves it and writes a synthesised body).\n if (config.onConflict !== 'synthesize') {\n return {\n status: 'fail',\n summary: `node \"${name}\" landed with a merge conflict; needs resolution`,\n error: new LoopError({\n code: 'BODY',\n message: `merge conflict landing node \"${name}\"`,\n path: [...path, name],\n }),\n };\n }\n try {\n await mergeLock(() =>\n mergeSynthesis(parent, {\n branch,\n message: `merge: ${branch} (node ${name}, synthesis)`,\n }),\n );\n } catch (e) {\n const error = LoopError.from(e, {\n code: 'BODY',\n path: [...path, name],\n });\n return {\n status: 'fail',\n summary: `node \"${name}\" merge synthesis failed: ${error.message}`,\n error,\n };\n }\n }\n await deleteBranch(base.dir, branch, { signal: parent.signal }).catch(\n () => {},\n );\n }\n return outcome;\n } finally {\n if (envHandle)\n await envHandle.down(parent.signal).catch(() => {});\n await removeWorktree(base.dir, wt.dir, {\n signal: parent.signal,\n }).catch(() => {});\n }\n };\n\n const record = (\n name: string,\n outcome: Outcome,\n phase: 'done' | 'skip',\n ): Outcome => {\n results.set(name, outcome);\n parent.emit({\n kind: 'dag:node',\n ts: ts(),\n path,\n node: name,\n phase,\n ...nodeContext(name),\n outcome,\n attempt: attempts.get(name),\n timeoutMs: nodes.get(name)!.timeoutMs,\n });\n // A paused node is a deliberate halt, not a failure: stop scheduling nodes\n // even when `stopOnError` is false or the node is optional.\n if (phase === 'done' && outcome.status === 'paused') {\n stopped = true;\n }\n if (\n phase === 'done' &&\n outcome.status !== 'pass' &&\n nodes.get(name)!.optional !== true &&\n stopOnError &&\n // A node requesting a kickback is going to be re-run — don't let its\n // (provisional) non-pass abort siblings before the feedback is resolved.\n !(routeKickbacks && revisionFromOutcome(outcome)?.target)\n ) {\n stopped = true;\n }\n return outcome;\n };\n\n const run = (name: string): Promise<Outcome> => {\n const existing = memo.get(name);\n if (existing) return existing;\n const node = nodes.get(name)!;\n const promise = (async (): Promise<Outcome> => {\n // This node's run count: 1 the first time, +1 each kickback re-run (the\n // memo/results were cleared for the dirty subgraph, so run() re-enters).\n attempts.set(name, (attempts.get(name) ?? 0) + 1);\n // Whole node is guarded: a throw anywhere (dep resolution, `when`, the\n // job) becomes a recorded outcome, so the DAG always reaches `dag:end`.\n try {\n const needs = normalizeNeeds(node.needs);\n const deps = await Promise.all(needs.map(run));\n // A declared `needs` on a REQUIRED producer is a hard dependency — its\n // failure blocks this consumer. An OPTIONAL producer is best-effort:\n // its failure neither fails the DAG nor blocks consumers, so a consumer\n // must tolerate that producer's artifacts being absent. Skipped deps\n // (unmet `when`) come back with status 'pass', so they never block.\n const blocked = needs.some(\n (dep, i) =>\n deps[i]!.status !== 'pass' && nodes.get(dep)!.optional !== true,\n );\n if (blocked)\n return record(\n name,\n { status: 'aborted', summary: 'blocked by a failed dependency' },\n 'done',\n );\n if (parent.signal.aborted || stopped)\n return record(\n name,\n { status: 'aborted', summary: 'aborted before start' },\n 'done',\n );\n\n // `when` + the job both run inside the concurrency limit, so an\n // agentCheck gate counts against the cap (it's real backend load).\n const result = await limit(\n async (): Promise<{ outcome: Outcome; phase: 'done' | 'skip' }> => {\n if (parent.signal.aborted || stopped)\n return {\n outcome: {\n status: 'aborted',\n summary: 'aborted before start',\n },\n phase: 'done',\n };\n if (node.when) {\n const conditionCtx = nodeCtx(name, undefined);\n const r = await toCondition(node.when)(conditionCtx, undefined);\n parent.emit({\n kind: 'condition:result',\n ts: ts(),\n path: [...conditionCtx.path],\n label: 'when',\n iteration: conditionCtx.iteration,\n result: r,\n });\n if (!r.met)\n return {\n outcome: {\n status: 'pass',\n summary: `skipped: ${r.reason}`,\n data: { skipped: true },\n },\n phase: 'skip',\n };\n }\n parent.emit({\n kind: 'dag:node',\n ts: ts(),\n path,\n node: name,\n phase: 'start',\n ...nodeContext(name),\n attempt: attempts.get(name),\n timeoutMs: node.timeoutMs,\n });\n return { outcome: await runNodeJob(name, node), phase: 'done' };\n },\n );\n return record(name, result.outcome, result.phase);\n } catch (e) {\n const error = LoopError.from(e, {\n code: 'BODY',\n phase: 'body',\n path: [...path, name],\n });\n parent.emit({\n kind: 'error',\n ts: ts(),\n path: [...path, name],\n message: error.message,\n code: error.code,\n });\n return record(\n name,\n { status: 'fail', summary: error.message, error },\n 'done',\n );\n }\n })();\n memo.set(name, promise);\n return promise;\n };\n\n await Promise.all(names.map(run));\n\n // Cross-stage feedback: a node may return a `kickback` asking an earlier\n // node to redo work. We re-run the target + its dependents (the cycle lives\n // in execution, the graph stays acyclic), bounded by `maxKickbacks` so it\n // provably terminates. An omitted budget or numeric zero keeps the default\n // single-pass path; a target map still records rejected requests at zero.\n if (routeKickbacks) {\n let used = 0;\n const rejected = new Set<string>();\n const emitKickback = (\n from: string,\n to: string,\n reason: string,\n accepted: boolean,\n count: number,\n limit: number,\n note?: string,\n ) =>\n parent.emit({\n kind: 'dag:kickback',\n ts: ts(),\n path,\n from,\n to,\n reason,\n accepted,\n count,\n limit,\n note,\n });\n for (;;) {\n // A pause outranks a pending kickback. Nothing may run past it.\n if (names.some((n) => results.get(n)?.status === 'paused')) break;\n // Honour kickbacks in topological order, skipping any already rejected.\n const from = order.find(\n (n) => {\n const result = results.get(n);\n return (\n result !== undefined &&\n revisionFromOutcome(result)?.target !== undefined &&\n !rejected.has(n)\n );\n },\n );\n if (!from) break;\n const request = revisionFromOutcome(results.get(from)!)!;\n const to = request.target!;\n const { reason } = request;\n const count = (targetCounts.get(to) ?? 0) + 1;\n targetCounts.set(to, count);\n const limit = targetLimit(to);\n\n // Validate the target: it must exist, be an ancestor, and (if the node\n // declares `acceptsKickbackTo`) be an allowed target. An invalid target\n // is rejected once and never reconsidered unless the node itself re-runs.\n const allow = nodes.get(from)!.acceptsKickbackTo;\n const note = !nodes.has(to)\n ? `unknown node \"${to}\"`\n : !ancestorsOf(from).has(to)\n ? `\"${to}\" is not an ancestor of \"${from}\"`\n : allow && !allow.includes(to)\n ? `\"${from}\" does not accept kickback to \"${to}\"`\n : undefined;\n if (note) {\n rejected.add(from);\n emitKickback(from, to, reason, false, count, limit, note);\n continue;\n }\n\n if (perTargetBudget ? count > limit : used >= limit) {\n // Budget spent. Reject and stop: the unresolved kickback leaves the\n // kicking node's own outcome to stand.\n emitKickback(\n from,\n to,\n reason,\n false,\n count,\n limit,\n `kickback budget for \"${to}\" (${limit}) exhausted`,\n );\n if (perTargetBudget) {\n rejected.add(from);\n continue;\n }\n break;\n }\n\n used += 1;\n emitKickback(from, to, reason, true, count, limit);\n const dirty = dirtyFrom(to);\n for (const d of dirty) {\n memo.delete(d); // force re-run\n results.delete(d);\n rejected.delete(d); // a re-run earns a fresh verdict\n }\n pendingKickback.set(to, {\n status: 'fail',\n summary: `Kicked back from \"${from}\": ${reason}`,\n revision: { ...request, source: request.source ?? from },\n });\n stopped = false; // a prior stopOnError must not block the re-run\n await Promise.all(names.map(run));\n }\n }\n\n const requiredFailed = names.filter(\n (n) =>\n results.get(n)?.status === 'fail' && nodes.get(n)!.optional !== true,\n );\n const requiredAborted = names.filter(\n (n) =>\n results.get(n)?.status === 'aborted' && nodes.get(n)!.optional !== true,\n );\n // A pause anywhere in the graph (any node, optional included) pauses the\n // whole dag. First in declaration order names the outcome.\n const pausedNode = names.find((n) => results.get(n)?.status === 'paused');\n const data = Object.fromEntries(results);\n const late = [...results.values()].some((r) => r.late);\n let outcome: Outcome;\n if (parent.signal.aborted) {\n // a genuine user/signal cancellation\n outcome = {\n status: 'aborted',\n ...(late ? { late: true } : {}),\n summary: `dag \"${config.name}\" aborted`,\n data,\n };\n } else if (pausedNode) {\n // Paused takes precedence over fail. The paused node's dependents land\n // blocked-aborted as usual; they must not flip this to fail.\n outcome = {\n status: 'paused',\n ...(late ? { late: true } : {}),\n summary: results.get(pausedNode)!.summary,\n data,\n };\n } else if (requiredFailed.length > 0 || requiredAborted.length > 0) {\n // a real failure (direct, or a required node left undone by an upstream\n // failure) is a fail (exit 1), distinct from a cancellation (exit 130).\n outcome = {\n status: 'fail',\n ...(late ? { late: true } : {}),\n summary: `dag \"${config.name}\": ${requiredFailed.length + requiredAborted.length} required node(s) did not complete`,\n data,\n };\n } else {\n outcome = {\n status: 'pass',\n ...(late ? { late: true } : {}),\n summary: `dag \"${config.name}\": all ${names.length} node(s) green`,\n data,\n };\n }\n parent.emit({ kind: 'dag:end', ts: ts(), path, outcome });\n return outcome;\n };\n\n return setMeta(job, {\n kind: 'dag',\n name: config.name,\n ...(config.maxKickbacks !== undefined\n ? { maxKickbacks: config.maxKickbacks }\n : {}),\n nodes: Object.entries(config.nodes).map(([name, v]) => {\n const node = typeof v === 'function' ? undefined : v;\n const nodeJob = node ? node.job : (v as Job);\n return {\n name,\n needs: normalizeNeeds(node?.needs),\n ...(node?.desc !== undefined ? { desc: node.desc } : {}),\n ...(node?.gate !== undefined ? { gate: node.gate } : {}),\n isolate: node?.isolate ?? false,\n optional: node?.optional === true,\n ...(node?.timeoutMs ? { timeoutMs: node.timeoutMs } : {}),\n // Condition labels only — the meta must stay JSON-serializable\n // so outside readers can serialize it directly.\n ...(node?.when ? { when: describeConditions(node.when) } : {}),\n job: jobMeta(nodeJob),\n };\n }),\n });\n}\n\n/** Run jobs strictly in order; stop at the first non-pass. Sugar over `dag`. */\nexport function sequence(name: string, ...jobs: Job[]): Job {\n const nodes: Record<string, DagNode> = {};\n jobs.forEach((job, i) => {\n nodes[`step-${i}`] = { job, needs: i > 0 ? [`step-${i - 1}`] : [] };\n });\n return dag({ name, nodes, concurrency: 1, stopOnError: true });\n}\n\n/** Run jobs concurrently; default fan-out is capped at 4. */\nexport function parallel(\n name: string,\n jobs: Record<string, Job> | Job[],\n concurrency?: number,\n): Job {\n const record = Array.isArray(jobs)\n ? Object.fromEntries(jobs.map((j, i) => [`task-${i}`, j] as const))\n : jobs;\n return dag({ name, nodes: record, concurrency, stopOnError: false });\n}\n","/**\n * Provider-limit plumbing shared by the engines and the runner.\n *\n * Engines report a provider-neutral `EngineError`. The runtime maps rate-limit\n * and quota failures to a `LoopError` while preserving `retryAfterMs` and\n * `resetAt`. The runner reads that hint through `waitMsFor` to decide whether\n * to wait, pause, or fail (see `onLimit`).\n *\n * Keeping the reset-time math in one place means every engine and the policy\n * agree on what \"a known, bounded wait\" means.\n */\n\nimport type { LoopError, LoopErrorCode } from './errors.js';\n\nexport { retryAfterHeaderToMs } from '@obversa/core/command';\n\n/** The error codes the limit policy reacts to: provider limits + the budget. */\nconst LIMIT_CODES: ReadonlySet<LoopErrorCode> = new Set([\n 'RATE_LIMIT',\n 'QUOTA',\n 'BUDGET',\n]);\n\n/** True when an error is one the `onLimit` policy governs. */\nexport function isLimitError(error: LoopError | undefined): error is LoopError {\n return !!error && LIMIT_CODES.has(error.code);\n}\n\n/**\n * The wait a limit error implies, in ms, or `undefined` when no reset is known.\n * Prefers an explicit `retryAfterMs`; falls back to `resetAt - now` (floored at\n * 0 so an already-passed reset waits nothing rather than going negative). BUDGET\n * never refreshes within a run, so it never yields a wait.\n */\nexport function waitMsFor(\n error: LoopError,\n now: number = Date.now(),\n): number | undefined {\n if (error.code === 'BUDGET') return undefined;\n if (typeof error.retryAfterMs === 'number' && error.retryAfterMs >= 0)\n return error.retryAfterMs;\n if (typeof error.resetAt === 'number')\n return Math.max(0, error.resetAt - now);\n return undefined;\n}\n","/**\n * No-progress (stall) detection: the third hard stop, alongside `max` and\n * `budget`. `max` bounds how many attempts a loop gets and `budget` bounds what\n * they cost; neither can tell slow-but-real convergence from the same failure\n * repeating. This module detects the latter, so a stalled loop exits at\n * iteration N+window instead of running to its cap.\n *\n * The decision rule is NOVELTY, not change. An iteration makes progress when it\n * reaches a state this run has never seen:\n *\n * - the workspace fingerprint (HEAD + pending diff + untracked content) is new\n * — so an agent oscillating A→B→A gets no credit for the return trip;\n * - a caller-supplied `signal` value is new — the escape hatch for loop jobs whose\n * progress lives outside the worktree (a queue length, a passing-test count);\n * - the gate confidence beats its previous best by `minConfidenceDelta` — a\n * high-water mark, so judge jitter around a flat score is not progress but\n * slow, steady improvement accumulates until it clears the bar;\n * - (opt-in, `gate: true`) the failing until-gate's diagnostic OUTPUT is new\n * — the same failure signature repeating is stall evidence, for\n * deterministic gates whose output is stable across identical failures.\n *\n * `window` consecutive iterations with evidence and no novelty = stalled. The\n * default is deliberately conservative (any channel's novelty counts): a false\n * \"stalled\" on work that was actually converging is worse than one more\n * iteration. An iteration with NO evidence channel at all (no git workspace, no\n * confidence, no signal) is indeterminate — it neither extends nor resets the\n * stall run, and the detector reports itself inert so the loop can warn once.\n * Gate/review reasons are deliberately NOT compared: judge prose varies between\n * identical verdicts, so it is quoted in the report but never used as evidence.\n */\n\nimport { createHash } from 'node:crypto';\n\nimport type { NoProgressConfig, NoProgressInput, StallReport } from './types.js';\nexport type { NoProgressConfig, NoProgressInput, StallReport } from './types.js';\n\n/** One completed, non-converged iteration as the tracker sees it. */\nexport interface ProgressSample {\n iteration: number;\n /** Workspace fingerprint, when the workspace is a git repo. */\n fingerprint?: string;\n /** The confidence that gated this turn (review ?? until ?? body). */\n confidence?: number;\n /** The custom signal value, when a `signal` fn is configured. */\n signal?: string;\n /** The failing gate's diagnostic OUTPUT — never the prose reason. */\n gate?: string;\n /** The gate/review reason — reporting only, never evidence. */\n reason?: string;\n}\n\n/** Resolve the `noProgress` sugar (`3` ⇒ `{ window: 3 }`) with defaults applied. */\nexport function resolveNoProgress(\n input: NoProgressInput | undefined,\n): Required<Pick<NoProgressConfig, 'window' | 'minConfidenceDelta' | 'gate'>> &\n NoProgressConfig | undefined {\n if (input == null) return undefined;\n const cfg = typeof input === 'number' ? { window: input } : input;\n return {\n ...cfg,\n window: cfg.window ?? 3,\n minConfidenceDelta: cfg.minConfidenceDelta ?? 0.02,\n gate: cfg.gate ?? false,\n };\n}\n\n/**\n * The novelty tracker behind `LoopConfig.noProgress`. Feed it one sample per\n * non-converged iteration; it returns a `StallReport` the moment `window`\n * consecutive samples show evidence and no novelty.\n */\nexport class ProgressTracker {\n readonly window: number;\n readonly minConfidenceDelta: number;\n /** Every state this run has reached, namespaced by channel. */\n private readonly seen = new Set<string>();\n /** Confidence high-water mark — the best score at the last progress point. */\n private best: number | undefined;\n /** The current run of consecutive no-progress iterations. */\n private stalledRun: number[] = [];\n private lastEvidence: string[] = [];\n private lastReason = 'gate not met';\n private indeterminate = 0;\n private sampled = 0;\n\n constructor(cfg: { window: number; minConfidenceDelta: number }) {\n this.window = cfg.window;\n this.minConfidenceDelta = cfg.minConfidenceDelta;\n }\n\n /**\n * Record one iteration. Returns a `StallReport` when this sample fills the\n * window, else undefined.\n */\n record(sample: ProgressSample): StallReport | undefined {\n this.sampled += 1;\n if (sample.reason) this.lastReason = sample.reason;\n\n const flat: string[] = []; // channels that saw no novelty this turn\n let progressed = false;\n let channels = 0;\n\n if (sample.fingerprint !== undefined) {\n channels += 1;\n const key = `fp:${sample.fingerprint}`;\n if (this.seen.has(key)) {\n flat.push('workspace: no state this run has not already visited');\n } else {\n this.seen.add(key);\n progressed = true;\n }\n }\n if (sample.signal !== undefined) {\n channels += 1;\n const key = `sig:${sample.signal}`;\n if (this.seen.has(key)) {\n flat.push(`signal: \"${sample.signal}\" already seen this run`);\n } else {\n this.seen.add(key);\n progressed = true;\n }\n }\n if (sample.gate !== undefined) {\n channels += 1;\n // Hashed so the run-wide seen set stays bounded whatever the output size.\n const key = `gate:${createHash('sha256').update(sample.gate).digest('hex')}`;\n if (this.seen.has(key)) {\n flat.push('gate: failure output already seen this run');\n } else {\n this.seen.add(key);\n progressed = true;\n }\n }\n if (sample.confidence !== undefined) {\n channels += 1;\n if (\n this.best === undefined ||\n sample.confidence >= this.best + this.minConfidenceDelta\n ) {\n this.best = Math.max(this.best ?? -Infinity, sample.confidence);\n progressed = true;\n } else {\n flat.push(\n `confidence ${sample.confidence.toFixed(2)} did not improve on ` +\n `${this.best.toFixed(2)} (needs +${this.minConfidenceDelta})`,\n );\n }\n }\n\n if (channels === 0) {\n // Indeterminate: no evidence either way. Neither extend nor reset.\n this.indeterminate += 1;\n return undefined;\n }\n if (progressed) {\n this.stalledRun = [];\n return undefined;\n }\n\n this.stalledRun.push(sample.iteration);\n this.lastEvidence = flat;\n if (this.stalledRun.length < this.window) return undefined;\n return {\n window: this.window,\n iterations: [...this.stalledRun],\n reason: this.lastReason,\n evidence: [...this.lastEvidence],\n };\n }\n\n /**\n * True when the detector has seen a full window of samples and none carried\n * any evidence channel — detection is configured but cannot fire. The loop\n * uses this to warn once instead of failing silently-inert.\n */\n isInert(): boolean {\n return this.indeterminate >= this.window && this.indeterminate === this.sampled;\n }\n}\n","/**\n * The loop primitive. `loop(config)` returns a `Job`, so loop jobs nest by simply\n * passing one as another's `body` or `review`.\n *\n * Lifecycle of one loop:\n * 1. `start` gate (one-or-many conditions) — unmet => `aborted`.\n * 2. repeat, up to `max`:\n * run `body` (fresh context each turn) → `stopOn`? → `until`?\n * if `until` is met and there's a `review`, run it:\n * review `pass` => loop completes `pass`\n * review !pass => re-enter the loop ← \"review fails, run main loop again\"\n * with no `until`, a `pass` body ends the loop; `max` reached => `exhausted`.\n * 3. `onComplete` post-action runs once, whatever the status.\n *\n * The review-restart cycle is bounded: by `max` (shared with ordinary\n * iterations) and, independently, by `maxReviewRestarts`. The failed review is\n * threaded to the next iteration as `ctx.lastReview` so the body can act on it.\n *\n * Every piece of user code (conditions, the body, hooks, the review) is guarded:\n * a throw is classified and ends the loop with `fail`, but `loop:end` and the\n * `onComplete` post-action still run.\n */\n\nimport type {\n Condition,\n ConditionResult,\n JobContext,\n LoopConfig,\n Outcome,\n Job,\n} from './types.js';\nimport { childContext } from './context.js';\nimport { prepareCondition } from './condition.js';\nimport { setMeta, jobMeta, describeConditions } from './describe.js';\nimport { LoopError, type LoopPhase } from './errors.js';\nimport { isLimitError, waitMsFor } from './limits.js';\nimport { ProgressTracker, resolveNoProgress } from './progress.js';\nimport { workspaceFingerprint } from './git.js';\n\nconst VALID_STATUS = new Set<Outcome['status']>([\n 'pass',\n 'fail',\n 'aborted',\n 'exhausted',\n 'paused',\n]);\n\n/** A limit policy's verdict for one limited iteration. */\ntype LimitAction =\n | { kind: 'wait'; waitMs: number }\n | { kind: 'pause'; reason: string };\n\n/**\n * Decide what to do about a limit error under the run's `onLimit` policy.\n * - `fail` → never handled here (caller treats it as fatal).\n * - `auto` → wait when the reset is known AND within `maxWaitMs`\n * (BUDGET never refreshes, so it always pauses).\n * - `wait` → wait whenever the reset is known (no ceiling).\n * - `exit` → never wait; always pause.\n */\nfunction decideLimit(error: LoopError, ctx: JobContext): LimitAction {\n const reason = error.message;\n if (ctx.onLimit === 'exit') return { kind: 'pause', reason };\n const waitMs = waitMsFor(error);\n if (waitMs == null) return { kind: 'pause', reason };\n if (ctx.onLimit === 'wait') return { kind: 'wait', waitMs };\n // auto: wait only within the ceiling.\n if (waitMs <= ctx.maxWaitMs) return { kind: 'wait', waitMs };\n return {\n kind: 'pause',\n reason: `${reason} (reset in ${Math.round(waitMs / 1000)}s exceeds maxWait ${Math.round(ctx.maxWaitMs / 1000)}s)`,\n };\n}\nconst yieldToLoop = (): Promise<void> => new Promise((r) => setImmediate(r));\n\nexport function loop(config: LoopConfig): Job {\n if (!config.name)\n throw new LoopError({\n code: 'CONFIG',\n message: 'loop() requires a non-empty name',\n });\n if (config.checkFirst && config.until == null)\n throw new LoopError({\n code: 'CONFIG',\n message: 'loop() checkFirst requires an explicit until gate',\n });\n const onError = config.retry?.onError ?? 'continue';\n const noProgress = resolveNoProgress(config.noProgress);\n\n const job: Job = async (parent: JobContext): Promise<Outcome> => {\n const path = [...parent.path, config.name];\n const depth = parent.depth + 1;\n const ts = () => Date.now();\n\n let lastReview: Outcome | undefined;\n let lastGate: ConditionResult | undefined;\n let iteration = 0;\n const ctxAt = (iter: number, lastOutcome?: Outcome): JobContext =>\n childContext(parent, {\n depth,\n path,\n iteration: iter,\n lastOutcome,\n lastReview,\n lastGate,\n });\n\n parent.emit({ kind: 'loop:start', ts: ts(), path, depth, max: config.max });\n\n const finish = async (\n outcome: Outcome,\n iterations: number,\n ): Promise<Outcome> => {\n parent.emit({ kind: 'loop:end', ts: ts(), path, outcome, iterations });\n if (config.onComplete) {\n try {\n await config.onComplete(outcome, ctxAt(iterations));\n } catch (e) {\n const error = LoopError.from(e, {\n code: 'BODY',\n phase: 'review',\n path,\n iteration: iterations,\n });\n parent.emit({\n kind: 'error',\n ts: ts(),\n path,\n message: `onComplete threw: ${error.message}`,\n code: error.code,\n });\n }\n }\n return outcome;\n };\n\n // Evaluate a gate, classifying any throw with the gate's phase.\n const gate = async (\n cond: Condition,\n which: LoopPhase,\n ctx: JobContext,\n last: Outcome | undefined,\n ) => {\n try {\n return await cond(ctx, last);\n } catch (e) {\n throw LoopError.from(e, {\n code: 'VALIDATION',\n phase: which,\n path,\n iteration,\n });\n }\n };\n\n try {\n if (parent.signal.aborted)\n return finish(\n { status: 'aborted', summary: 'aborted by signal' },\n 0,\n );\n const entryContext = ctxAt(0);\n const [start, until, stopOn] = await Promise.all([\n config.start ? prepareCondition(config.start, entryContext) : undefined,\n config.until ? prepareCondition(config.until, entryContext) : undefined,\n config.stopOn ? prepareCondition(config.stopOn, entryContext) : undefined,\n ]);\n\n // 1. start gate\n if (start) {\n const r = await gate(start, 'start', ctxAt(0), undefined);\n parent.emit({\n kind: 'loop:condition',\n ts: ts(),\n path,\n which: 'start',\n iteration: 0,\n result: r,\n });\n if (!r.met)\n return finish(\n { status: 'aborted', summary: `start gate not met: ${r.reason}` },\n 0,\n );\n }\n\n let last: Outcome | undefined;\n let consecutiveErrors = 0;\n let consecutiveReviewFails = 0;\n // Per-invocation, so a re-run of the same Job (a kickback, a nested loop's\n // second pass) starts with a clean novelty set.\n const tracker = noProgress\n ? new ProgressTracker(noProgress)\n : undefined;\n let warnedInert = false;\n\n type ConvergenceAttempt = {\n conv: ConditionResult;\n turnReview?: Outcome;\n terminal?: Outcome;\n };\n const evaluateConvergence = async (\n at: number,\n gateContext: JobContext,\n bodyOutcome: Outcome | undefined,\n ): Promise<ConvergenceAttempt> => {\n // Explicit `until`, else the ordinary post-body pass verdict. checkFirst\n // requires `until`, so the synthesized branch always has a body outcome.\n const conv: ConditionResult = until\n ? await gate(until, 'until', gateContext, bodyOutcome)\n : {\n met: bodyOutcome!.status === 'pass',\n confidence: bodyOutcome!.confidence,\n reason: `body status = ${bodyOutcome!.status}`,\n };\n if (parent.signal.aborted) {\n return {\n conv,\n terminal: { status: 'aborted', summary: 'aborted by signal' },\n };\n }\n if (until) {\n parent.emit({\n kind: 'loop:condition',\n ts: ts(),\n path,\n which: 'until',\n iteration: at,\n result: conv,\n });\n // Thread the latest explicit verdict (met or not) to the next body\n // as `ctx.lastGate`. Set before the met-branch so a review-reject\n // re-entry carries it too. The synthesized body-pass verdict is never\n // threaded because it carries no diagnostic value.\n lastGate = conv;\n }\n\n if (!conv.met) return { conv };\n\n if (!config.review) {\n if (parent.signal.aborted) {\n return {\n conv,\n terminal: { status: 'aborted', summary: 'aborted by signal' },\n };\n }\n return {\n conv,\n terminal: {\n status: 'pass',\n confidence: conv.confidence ?? bodyOutcome?.confidence,\n ...(bodyOutcome?.late ? { late: true } : {}),\n summary: bodyOutcome ? bodyOutcome.summary : conv.reason,\n data: bodyOutcome?.data,\n },\n };\n }\n\n let reviewOutcome: Outcome;\n try {\n reviewOutcome = await config.review(ctxAt(at, bodyOutcome));\n } catch (e) {\n throw LoopError.from(e, {\n code: 'VALIDATION',\n phase: 'review',\n path,\n iteration: at,\n });\n }\n if (parent.signal.aborted) {\n return {\n conv,\n terminal: { status: 'aborted', summary: 'aborted by signal' },\n };\n }\n // A paused review is a deliberate halt, not a rejection. Propagate it\n // instead of burning iterations. This runs before `loop:review`, so a\n // consumer never reads the pause as a rejected review.\n if (reviewOutcome.status === 'paused') {\n return { conv, terminal: { ...reviewOutcome } };\n }\n // Decide whether this failing review will actually re-enter the loop\n // before emitting, so the event carries an accurate accept/reject bit\n // (a downstream records consumer must not read a dropped review as\n // acted-on). Re-entry is blocked by the restart bound or by having no\n // iteration left; `consecutiveReviewFails` is still pre-increment here.\n const reviewPassed = reviewOutcome.status === 'pass';\n const restartsExhausted =\n config.maxReviewRestarts != null &&\n consecutiveReviewFails + 1 >= config.maxReviewRestarts;\n const iterationsRemain = config.max == null || at < config.max;\n const willReenter =\n !reviewPassed && !restartsExhausted && iterationsRemain;\n parent.emit({\n kind: 'loop:review',\n ts: ts(),\n path,\n outcome: reviewOutcome,\n accepted: willReenter,\n });\n if (reviewPassed) {\n if (parent.signal.aborted) {\n return {\n conv,\n terminal: { status: 'aborted', summary: 'aborted by signal' },\n };\n }\n return {\n conv,\n terminal: {\n status: 'pass',\n confidence: reviewOutcome.confidence ?? conv.confidence,\n ...(bodyOutcome?.late || reviewOutcome.late\n ? { late: true }\n : {}),\n summary:\n reviewOutcome.summary ??\n (bodyOutcome ? bodyOutcome.summary : conv.reason),\n data: bodyOutcome?.data,\n },\n };\n }\n // Review rejected: thread the verdict to the next iteration\n // (context-scoped, not run-global, so concurrent sibling loop jobs do not\n // cross-contaminate) and bound the restart cycle.\n consecutiveReviewFails += 1;\n lastReview = reviewOutcome;\n parent.log(\n `review did not pass (${reviewOutcome.summary ?? reviewOutcome.status}); re-entering ${config.name}`,\n 'warn',\n );\n if (restartsExhausted) {\n return {\n conv,\n turnReview: reviewOutcome,\n terminal: {\n status: 'exhausted',\n summary: `review rejected ${consecutiveReviewFails}× (maxReviewRestarts)`,\n ...(bodyOutcome?.late || reviewOutcome.late\n ? { late: true }\n : {}),\n data: bodyOutcome?.data,\n },\n };\n }\n return { conv, turnReview: reviewOutcome };\n };\n\n if (config.checkFirst) {\n await yieldToLoop();\n if (parent.signal.aborted)\n return finish(\n { status: 'aborted', summary: 'aborted by signal' },\n 0,\n );\n const precheck = await evaluateConvergence(0, ctxAt(0), undefined);\n if (precheck.terminal) return finish(precheck.terminal, 0);\n }\n\n // 2. iterate\n while (true) {\n await yieldToLoop(); // ensure an abort/SIGINT can be delivered even with a synchronous body\n if (parent.signal.aborted)\n return finish(\n { status: 'aborted', summary: 'aborted by signal' },\n iteration,\n );\n if (config.max != null && iteration >= config.max) {\n return finish(\n {\n status: 'exhausted',\n summary:\n last?.summary ?? `reached max iterations (${config.max})`,\n confidence: last?.confidence,\n ...(last?.late ? { late: true } : {}),\n data: last?.data,\n },\n iteration,\n );\n }\n\n iteration += 1;\n const ctx = ctxAt(iteration, last);\n // The review outcome of THIS turn, when one ran and rejected — feeds the\n // no-progress sample (its confidence/summary gated the continuation).\n let turnReview: Outcome | undefined;\n parent.emit({ kind: 'loop:iteration', ts: ts(), path, iteration });\n\n // run the body (fresh context this turn)\n let bodyThrew = false;\n try {\n last = await config.body(ctx);\n consecutiveErrors = 0;\n } catch (e) {\n bodyThrew = true;\n const error = LoopError.from(e, {\n code: 'BODY',\n phase: 'body',\n path,\n iteration,\n });\n parent.emit({\n kind: 'error',\n ts: ts(),\n path,\n message: error.message,\n code: error.code,\n });\n consecutiveErrors += 1;\n // A thrown body error is governed by the retry policy (default: continue).\n const tooMany =\n config.retry?.maxConsecutive != null &&\n consecutiveErrors >= config.retry.maxConsecutive;\n if (onError === 'fail' || tooMany)\n return finish(\n { status: 'fail', summary: error.message, error },\n iteration,\n );\n last = { status: 'fail', summary: error.message, error };\n if (config.retry?.backoffMs)\n await delay(config.retry.backoffMs, parent.signal);\n }\n\n // a malformed Outcome (e.g. a body that forgot `status`) is a bug — fail loudly, don't spin\n if (!last || !VALID_STATUS.has(last.status)) {\n const error = new LoopError({\n code: 'VALIDATION',\n phase: 'body',\n path,\n iteration,\n message: `body returned an Outcome with no valid \"status\" (got ${JSON.stringify(last?.status)})`,\n });\n parent.emit({\n kind: 'error',\n ts: ts(),\n path,\n message: error.message,\n code: error.code,\n });\n return finish(\n { status: 'fail', summary: error.message, error },\n iteration,\n );\n }\n // A body-returned `paused` is a deliberate halt. Finish with it instead\n // of treating the turn as failed and iterating again. No overlap\n // with the limit handling below: that path keys on status 'fail'.\n if (last.status === 'paused') {\n return finish({ ...last }, iteration);\n }\n // A rate limit / quota / budget hit is governed by the `onLimit` policy\n // (default `auto`): wait out a known, bounded reset and retry the same\n // step, else pause. `fail` opts out\n // and lets the generic fatal handling below treat it as terminal.\n if (\n last.status === 'fail' &&\n isLimitError(last.error) &&\n ctx.onLimit !== 'fail'\n ) {\n const action = decideLimit(last.error, ctx);\n if (action.kind === 'wait') {\n const now = ts();\n parent.emit({\n kind: 'limit:wait',\n ts: now,\n path,\n code: last.error.code,\n waitMs: action.waitMs,\n resumeAt: now + action.waitMs,\n });\n await delay(action.waitMs, parent.signal);\n // Don't burn an iteration on a throttled attempt: re-run this step.\n iteration -= 1;\n last = undefined;\n continue;\n }\n parent.emit({\n kind: 'limit:pause',\n ts: ts(),\n path,\n code: last.error.code,\n reason: action.reason,\n });\n return finish(\n {\n status: 'paused',\n summary: action.reason,\n error: last.error,\n data: last.data,\n },\n iteration,\n );\n }\n\n // A *returned* fail outcome carrying an unrecoverable error (e.g. an\n // engine auth/config failure) must not loop to `exhausted`. Thrown\n // errors are excluded — the retry policy above owns those.\n if (\n !bodyThrew &&\n last.status === 'fail' &&\n last.error &&\n !last.error.retryable\n ) {\n return finish(\n { status: 'fail', summary: last.summary, error: last.error },\n iteration,\n );\n }\n\n if (config.onIteration) {\n try {\n await config.onIteration(last, ctx);\n } catch (e) {\n throw LoopError.from(e, {\n code: 'VALIDATION',\n phase: 'body',\n path,\n iteration,\n });\n }\n }\n\n // hard early-exit\n if (stopOn) {\n const r = await gate(stopOn, 'stopOn', ctx, last);\n parent.emit({\n kind: 'loop:condition',\n ts: ts(),\n path,\n which: 'stopOn',\n iteration,\n result: r,\n });\n if (r.met)\n return finish(\n {\n status: 'aborted',\n summary: `stopOn met: ${r.reason}`,\n data: last.data,\n },\n iteration,\n );\n }\n\n const convergence = await evaluateConvergence(iteration, ctx, last);\n const { conv } = convergence;\n turnReview = convergence.turnReview;\n if (convergence.terminal)\n return finish(convergence.terminal, iteration);\n\n // No-progress check — the loop is about to go again, so ask whether the\n // turn that just finished reached any state this run had not already\n // seen. A throttled turn never gets here (the limit path re-runs the\n // step), so a rate-limit wait is not evidence of a stall.\n if (tracker) {\n let fingerprint: string | undefined;\n if (noProgress!.workspace !== false) {\n // Best-effort: a git hiccup drops the channel for this turn, it\n // never sinks the run (undefined = \"no evidence\", not \"unchanged\").\n fingerprint = await workspaceFingerprint({\n cwd: ctx.workspace.dir,\n signal: parent.signal,\n excludePaths: ctx.fingerprintExcludePaths,\n });\n }\n let signalValue: string | undefined;\n if (noProgress!.signal) {\n try {\n const v = await noProgress!.signal(ctx, last);\n signalValue = v == null ? undefined : String(v);\n } catch (e) {\n // A broken signal fn is a bug in the definition; silently losing\n // the channel would leave the user believing they are protected.\n throw LoopError.from(e, {\n code: 'VALIDATION',\n phase: 'body',\n path,\n iteration,\n });\n }\n }\n const report = tracker.record({\n iteration,\n fingerprint,\n signal: signalValue,\n // An absent output leaves the channel out of this turn's evidence\n // (indeterminate) — never a fabricated value.\n gate:\n noProgress!.gate && until && !conv.met ? conv.output : undefined,\n confidence:\n turnReview?.confidence ?? conv.confidence ?? last.confidence,\n reason: turnReview\n ? (turnReview.summary ?? 'review rejected')\n : conv.reason,\n });\n if (!warnedInert && tracker.isInert()) {\n warnedInert = true;\n parent.log(\n `noProgress is set on ${config.name} but no evidence channel exists ` +\n `(no git workspace, no gate confidence, no custom signal); ` +\n `stall detection is inert`,\n 'warn',\n );\n }\n if (report) {\n parent.emit({\n kind: 'loop:stall',\n ts: ts(),\n path,\n iteration,\n report,\n });\n return finish(\n {\n status: 'exhausted',\n summary:\n `stalled after ${report.iterations.length} iterations with ` +\n `no observable progress: ${report.reason}`,\n confidence: last.confidence,\n ...(last.late ? { late: true } : {}),\n data: last.data,\n stall: report,\n },\n iteration,\n );\n }\n }\n\n if (config.delayMs) await delay(config.delayMs, parent.signal);\n }\n } catch (e) {\n const error = LoopError.from(e, { code: 'UNKNOWN', path, iteration });\n if (parent.signal.aborted || error.code === 'ABORTED') {\n return finish(\n {\n status: 'aborted',\n summary: parent.signal.aborted ? 'aborted by signal' : error.message,\n error,\n },\n iteration,\n );\n }\n parent.emit({\n kind: 'error',\n ts: ts(),\n path,\n message: error.message,\n code: error.code,\n });\n return finish(\n { status: 'fail', summary: error.message, error },\n iteration,\n );\n }\n };\n\n return setMeta(job, {\n kind: 'loop',\n name: config.name,\n max: config.max,\n noProgress: noProgress?.window,\n checkFirst: !!config.checkFirst,\n start: describeConditions(config.start),\n gate: describeConditions(config.until),\n stopOn: describeConditions(config.stopOn),\n review: !!config.review,\n maxReviewRestarts: config.maxReviewRestarts,\n body: jobMeta(config.body),\n });\n}\n\n/** Sleep that resolves early (does not reject) when the signal aborts. */\nfunction delay(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const t = setTimeout(done, ms);\n const onAbort = () => done();\n function done() {\n clearTimeout(t);\n signal.removeEventListener('abort', onAbort);\n resolve();\n }\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n","/**\n * Stats collector. Subscribes to the event stream and accumulates everything\n * a host status view needs: per-loop iteration counts, review\n * pass/fail tallies, token usage by model, errors, and wall-clock timing.\n */\n\nimport type { LoopEvent, Outcome } from './types.js';\n\nexport interface LoopStat {\n path: string;\n iterations: number;\n reviewsPassed: number;\n reviewsFailed: number;\n lastStatus?: Outcome['status'];\n}\n\nexport interface ModelUsage {\n model: string;\n calls: number;\n reportedCalls: number;\n unknownUsageCalls: number;\n inputTokens: number;\n outputTokens: number;\n cacheCreationInputTokens?: number;\n cacheReadInputTokens?: number;\n}\n\nexport interface ErrorEntry {\n path: string;\n code: string;\n message: string;\n ts: number;\n}\n\nexport interface StatsSnapshot {\n startedAt: number;\n elapsedMs: number;\n loopRuns: LoopStat[];\n models: ModelUsage[];\n totalInputTokens: number;\n totalOutputTokens: number;\n /**\n * What the whole run created and read from cache. The per-model breakdown\n * carried these already; the run-wide totals did not, so nothing could\n * answer \"what did this run read from cache\" without summing models by hand.\n */\n totalCacheCreationInputTokens: number;\n totalCacheReadInputTokens: number;\n /**\n * How many calls reported no usage at all. The per-call line says \"usage\n * unknown\" rather than inventing a zero; without this the aggregate quietly\n * drops those calls and a total that might be missing three of them looks\n * complete.\n */\n totalUnmeasuredCalls: number;\n agentCalls: number;\n errors: ErrorEntry[];\n}\n\nexport class Stats {\n private readonly startedAt = Date.now();\n private readonly loopRuns = new Map<string, LoopStat>();\n private readonly models = new Map<string, ModelUsage>();\n private readonly errors: ErrorEntry[] = [];\n\n record(event: LoopEvent): void {\n const key = event.path.join(' / ') || '(root)';\n switch (event.kind) {\n case 'loop:start':\n this.loopFor(key);\n break;\n case 'loop:iteration':\n this.loopFor(key).iterations = event.iteration;\n break;\n case 'loop:review': {\n const s = this.loopFor(key);\n if (event.outcome.status === 'pass') s.reviewsPassed += 1;\n else s.reviewsFailed += 1;\n break;\n }\n case 'loop:end':\n this.loopFor(key).lastStatus = event.outcome.status;\n break;\n case 'engine:usage': {\n const m = this.modelFor(event.model);\n m.calls += 1;\n if (event.usage.kind === 'unknown') {\n m.unknownUsageCalls += 1;\n break;\n }\n m.reportedCalls += 1;\n m.inputTokens += event.usage.inputTokens;\n m.outputTokens += event.usage.outputTokens;\n if (event.usage.cacheCreationInputTokens !== undefined)\n m.cacheCreationInputTokens =\n (m.cacheCreationInputTokens ?? 0) + event.usage.cacheCreationInputTokens;\n if (event.usage.cacheReadInputTokens !== undefined)\n m.cacheReadInputTokens =\n (m.cacheReadInputTokens ?? 0) + event.usage.cacheReadInputTokens;\n break;\n }\n case 'error':\n this.errors.push({\n path: key,\n code: event.code,\n message: event.message,\n ts: event.ts,\n });\n break;\n }\n }\n\n snapshot(): StatsSnapshot {\n const models = [...this.models.values()];\n return {\n startedAt: this.startedAt,\n elapsedMs: Date.now() - this.startedAt,\n loopRuns: [...this.loopRuns.values()],\n models,\n totalInputTokens: models.reduce((a, m) => a + m.inputTokens, 0),\n totalOutputTokens: models.reduce((a, m) => a + m.outputTokens, 0),\n totalCacheCreationInputTokens: models.reduce((a, m) => a + (m.cacheCreationInputTokens ?? 0), 0),\n totalCacheReadInputTokens: models.reduce((a, m) => a + (m.cacheReadInputTokens ?? 0), 0),\n totalUnmeasuredCalls: models.reduce((a, m) => a + m.unknownUsageCalls, 0),\n agentCalls: models.reduce((a, m) => a + m.calls, 0),\n errors: this.errors,\n };\n }\n\n private loopFor(path: string): LoopStat {\n let s = this.loopRuns.get(path);\n if (!s) {\n s = { path, iterations: 0, reviewsPassed: 0, reviewsFailed: 0 };\n this.loopRuns.set(path, s);\n }\n return s;\n }\n\n private modelFor(model: string): ModelUsage {\n let m = this.models.get(model);\n if (!m) {\n m = {\n model,\n calls: 0,\n reportedCalls: 0,\n unknownUsageCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n };\n this.models.set(model, m);\n }\n return m;\n }\n}\n","/**\n * Cost accounting over the run's measured token usage — the honest-receipt\n * fold. Two rules keep cost reports honest:\n *\n * 1. **Never silently $0.** A model without complete price coverage lands in\n * `unpricedModels`, and the totals stay `undefined` rather than pretending\n * the run was free or pricing cached input at the base input rate.\n * 2. **The baseline is labeled a reconstruction.** `baselineUsd` prices the\n * SAME measured token stream at the baseline model's rates — \"what these\n * exact tokens would have cost on the ceiling model\". It is a like-for-like\n * counterfactual, not a measured alternative run, and consumers should say\n * so when they print it.\n *\n * Prices are supplied by the caller (a JSON file via `--prices`, or a table\n * in code). The library ships none: hardcoded prices go stale, and a wrong\n * price is worse than no price.\n */\n\nimport type { StatsSnapshot } from './stats.js';\n\nexport interface ModelPrice {\n /** Dollars per million input tokens. */\n inputPerMTokUsd: number;\n /** Dollars per million output tokens. */\n outputPerMTokUsd: number;\n}\n\n/** Model id → price. Keys match exactly first, then by longest prefix, so\n * `\"claude-sonnet-5\"` covers dated ids like `claude-sonnet-5-20250929`. */\nexport type PriceTable = Record<string, ModelPrice>;\n\nexport interface ModelCost {\n model: string;\n calls: number;\n reportedCalls: number;\n unknownUsageCalls: number;\n inputTokens: number;\n outputTokens: number;\n /** Undefined when the table cannot price this model's complete usage. */\n usd?: number;\n}\n\nexport interface CostReport {\n /** Measured usage priced at each model's own rate; undefined if ANY used\n * model is unpriced (a partial total masquerading as a total is a lie). */\n spentUsd?: number;\n /** The same token stream repriced at the baseline model — a reconstruction. */\n baselineModel?: string;\n baselineUsd?: number;\n /** `baselineUsd - spentUsd` when both exist. Negative means the run cost\n * MORE than the baseline would have. */\n savedUsd?: number;\n /** Models whose complete usage cannot be priced by the supplied table. */\n unpricedModels: string[];\n /** Models with calls whose provider reported no usage receipt. */\n unknownUsageModels: string[];\n models: ModelCost[];\n}\n\n/** Exact key first, then the longest prefix whose next char is a boundary. */\nexport function priceFor(\n table: PriceTable,\n model: string,\n): ModelPrice | undefined {\n if (table[model]) return table[model];\n let best: { key: string; price: ModelPrice } | undefined;\n for (const [key, price] of Object.entries(table)) {\n if (!model.startsWith(key)) continue;\n const boundary = model.charAt(key.length);\n if (boundary !== '' && boundary !== '-' && boundary !== ':' && boundary !== '.')\n continue;\n if (!best || key.length > best.key.length) best = { key, price };\n }\n return best?.price;\n}\n\nfunction usdFor(\n price: ModelPrice,\n inputTokens: number,\n outputTokens: number,\n): number {\n return (\n (inputTokens * price.inputPerMTokUsd +\n outputTokens * price.outputPerMTokUsd) /\n 1_000_000\n );\n}\n\nfunction round(usd: number): number {\n return Number(usd.toFixed(6));\n}\n\nfunction hasCachedInput(usage: StatsSnapshot['models'][number]): boolean {\n return (\n (usage.cacheCreationInputTokens ?? 0) > 0 ||\n (usage.cacheReadInputTokens ?? 0) > 0\n );\n}\n\nexport function costReport(\n snapshot: Pick<StatsSnapshot, 'models'>,\n prices: PriceTable,\n baselineModel?: string,\n): CostReport {\n const models: ModelCost[] = [];\n const unpriced: string[] = [];\n const unknownUsage: string[] = [];\n let spent = 0;\n let allPriced = true;\n const hasAnyCachedInput = snapshot.models.some(hasCachedInput);\n const hasAnyUnknownUsage = snapshot.models.some(\n (model) => model.unknownUsageCalls > 0,\n );\n for (const m of snapshot.models) {\n const price = priceFor(prices, m.model);\n const usd =\n price && !hasCachedInput(m) && m.unknownUsageCalls === 0\n ? round(usdFor(price, m.inputTokens, m.outputTokens))\n : undefined;\n if (m.unknownUsageCalls > 0) unknownUsage.push(m.model);\n if (usd === undefined) {\n allPriced = false;\n if (!price || hasCachedInput(m)) unpriced.push(m.model);\n } else {\n spent += usd;\n }\n models.push({\n model: m.model,\n calls: m.calls,\n reportedCalls: m.reportedCalls,\n unknownUsageCalls: m.unknownUsageCalls,\n inputTokens: m.inputTokens,\n outputTokens: m.outputTokens,\n usd,\n });\n }\n\n let baselineUsd: number | undefined;\n if (\n baselineModel &&\n snapshot.models.length &&\n !hasAnyCachedInput &&\n !hasAnyUnknownUsage\n ) {\n const baselinePrice = priceFor(prices, baselineModel);\n if (baselinePrice) {\n baselineUsd = round(\n snapshot.models.reduce(\n (sum, m) => sum + usdFor(baselinePrice, m.inputTokens, m.outputTokens),\n 0,\n ),\n );\n }\n }\n const spentUsd = allPriced && models.length ? round(spent) : undefined;\n return {\n spentUsd,\n baselineModel,\n baselineUsd,\n savedUsd:\n spentUsd !== undefined && baselineUsd !== undefined\n ? round(baselineUsd - spentUsd)\n : undefined,\n unpricedModels: unpriced,\n unknownUsageModels: unknownUsage,\n models,\n };\n}\n\n/** A compact receipt for the exit summary. States what is measured and what\n * is reconstructed; names unpriced models instead of zeroing them. */\nexport function formatCostReport(report: CostReport): string[] {\n const lines: string[] = [];\n for (const m of report.models) {\n lines.push(\n `${m.model}: ${m.inputTokens}/${m.outputTokens} tok over ${m.calls} call(s)${\n m.unknownUsageCalls\n ? ` (usage unknown for ${m.unknownUsageCalls} call(s))`\n : m.usd !== undefined\n ? ` = $${m.usd}`\n : ' (incomplete price coverage)'\n }`,\n );\n }\n if (report.spentUsd !== undefined) {\n lines.push(`spent (measured): $${report.spentUsd}`);\n }\n if (report.unpricedModels.length) {\n lines.push(\n `no total: incomplete price coverage for model(s) ${report.unpricedModels.join(', ')}`,\n );\n }\n if (report.unknownUsageModels.length) {\n lines.push(\n `no total: usage unknown for model(s) ${report.unknownUsageModels.join(', ')}`,\n );\n }\n if (report.baselineUsd !== undefined) {\n lines.push(\n `baseline (reconstructed, same tokens on ${report.baselineModel}): $${report.baselineUsd}`,\n );\n if (report.savedUsd !== undefined) {\n lines.push(\n report.savedUsd >= 0\n ? `saved vs baseline: $${report.savedUsd}`\n : `over baseline: $${Math.abs(report.savedUsd)}`,\n );\n }\n }\n return lines;\n}\n","import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport type { RecordedEngineUsage } from '../core/job.js';\nimport type { LoopEvent, Outcome } from '../core/types.js';\n\nconst NOISE: ReadonlySet<LoopEvent['kind']> = new Set([\n 'engine:text',\n 'engine:thinking',\n]);\n\ninterface RecorderOptions {\n thin?: boolean;\n /** Append to the existing record instead of truncating it. */\n resume?: boolean;\n}\n\nexport type RecordedStage =\n | { readonly kind: 'interrupted'; readonly startLine: number }\n | { readonly kind: 'completed'; readonly outcome: Outcome };\n\nexport interface ResumedStageRecords {\n readonly anchors: ReadonlyMap<string, { readonly identity: string; readonly workspace: string; readonly recordId: string }>;\n readonly stages: ReadonlyMap<string, RecordedStage>;\n}\n\n/** Read the latest stage state and the engine answers recorded for each stage.\n * A missing record has no stage state, so resume starts fresh. */\nexport function readResumeRecord(path: string): {\n readonly outcomes: ResumedStageRecords;\n readonly usage: ReadonlyMap<string, readonly RecordedEngineUsage[]>;\n} {\n const anchors = new Map<string, { identity: string; workspace: string; recordId: string }>();\n const stages = new Map<string, RecordedStage>();\n const usage = new Map<string, RecordedEngineUsage[]>();\n const started = new Set<string>();\n if (!existsSync(path)) return { outcomes: { anchors, stages }, usage };\n const lines = readFileSync(path, 'utf8').split(/\\r?\\n/);\n for (const [lineNumber, line] of lines.entries()) {\n if (!line) continue;\n let event: LoopEvent;\n try {\n event = JSON.parse(line) as LoopEvent;\n } catch {\n continue;\n }\n if (event.kind === 'workflow:start') {\n const key = event.path.join('/');\n const prior = anchors.get(key);\n if (prior?.identity !== event.identity || prior.workspace !== event.workspace) {\n const prefix = key ? `${key}/` : '';\n for (const stage of stages.keys()) {\n if (stage.startsWith(prefix)) stages.delete(stage);\n }\n for (const stage of usage.keys()) {\n if (stage.startsWith(prefix)) usage.delete(stage);\n }\n for (const stage of started) {\n if (stage.startsWith(prefix)) started.delete(stage);\n }\n }\n anchors.set(key, { identity: event.identity, workspace: event.workspace, recordId: event.recordId });\n } else if (event.kind === 'dag:node') {\n const key = [...event.path, event.node].join('/');\n started.add(key);\n if (event.phase === 'start') {\n const prior = stages.get(key);\n const safeCompletion = prior?.kind === 'completed'\n && (prior.outcome.status === 'paused'\n || (prior.outcome.status === 'pass'\n && (prior.outcome.data as { skipped?: boolean } | undefined)?.skipped !== true));\n if (event.attempt !== 1 || !safeCompletion) {\n stages.set(key, { kind: 'interrupted', startLine: lineNumber });\n }\n } else if (event.outcome !== undefined) {\n stages.set(key, { kind: 'completed', outcome: event.outcome });\n }\n } else if (event.kind === 'engine:usage' && event.role !== undefined && event.stage !== undefined) {\n for (let index = event.path.length; index > 0; index -= 1) {\n if (event.path[index - 1] !== event.stage) continue;\n const key = event.path.slice(0, index).join('/');\n if (!started.has(key)) continue;\n const answers = usage.get(key) ?? [];\n answers.push({ model: event.model, path: event.path, role: event.role, stage: event.stage });\n usage.set(key, answers);\n break;\n }\n }\n }\n return { outcomes: { anchors, stages }, usage };\n}\n\nfunction ensureDir(path: string): void {\n const dir = dirname(path);\n if (dir && dir !== '.') mkdirSync(dir, { recursive: true });\n}\n\n/** Append every durable event as one JSON line. */\nexport function makeRecorder(\n path: string,\n options: RecorderOptions = {},\n): (event: LoopEvent) => void {\n ensureDir(path);\n if (options.resume !== true) writeFileSync(path, '');\n return (event) => {\n if (NOISE.has(event.kind)) return;\n try {\n appendFileSync(\n path,\n `${JSON.stringify(options.thin ? thinEvent(event) : event)}\\n`,\n );\n } catch {\n // Recording is best-effort until the durable event store arrives in D3.\n }\n };\n}\n\nfunction thinEvent(event: LoopEvent): unknown {\n switch (event.kind) {\n case 'run:end':\n case 'job:end':\n case 'loop:end':\n case 'loop:review':\n case 'dag:end':\n return { ...event, outcome: thinOutcome(event.outcome) };\n case 'dag:node':\n return event.outcome\n ? { ...event, outcome: thinOutcome(event.outcome) }\n : event;\n case 'proof':\n return { ...event, artifact: thinProofArtifact(event.artifact) };\n case 'loop:condition':\n case 'condition:result':\n return {\n ...event,\n result:\n event.result.output === undefined\n ? event.result\n : { ...event.result, output: '[omitted from compact record]' },\n };\n default:\n return event;\n }\n}\n\nfunction thinOutcome(outcome: Outcome): Outcome {\n const thin: Outcome = { status: outcome.status };\n if (outcome.confidence !== undefined) thin.confidence = outcome.confidence;\n if (outcome.late !== undefined) thin.late = outcome.late;\n if (outcome.summary !== undefined) thin.summary = outcome.summary;\n if (outcome.error !== undefined) thin.error = outcome.error;\n if (outcome.stall !== undefined) thin.stall = outcome.stall;\n if (outcome.revision !== undefined) thin.revision = outcome.revision;\n return thin;\n}\n\nfunction thinProofArtifact(\n artifact: Extract<LoopEvent, { kind: 'proof' }>['artifact'],\n): Extract<LoopEvent, { kind: 'proof' }>['artifact'] {\n if (artifact.data === undefined) return artifact;\n const { data: _data, ...rest } = artifact;\n return rest;\n}\n","import { existsSync, lstatSync, mkdirSync, realpathSync, writeFileSync } from 'node:fs';\nimport { join, relative, resolve, sep } from 'node:path';\n\nconst RUN_DIR = '.obversa';\n\n/** Create one safe runtime-owned directory under the workspace. */\nexport function ensureRunSubdir(workspaceDir: string, name: string): string {\n const root = resolve(workspaceDir);\n const runDir = join(root, RUN_DIR);\n assertSafeDirectory(root, runDir, RUN_DIR);\n mkdirSync(runDir, { recursive: true });\n assertSafeDirectory(root, runDir, RUN_DIR);\n\n const dir = join(runDir, name);\n assertSafeDirectory(root, dir, `${RUN_DIR}/${name}`);\n mkdirSync(dir, { recursive: true });\n assertSafeDirectory(root, dir, `${RUN_DIR}/${name}`);\n\n const ignore = join(runDir, '.gitignore');\n if (!existsSync(ignore)) writeFileSync(ignore, '*\\n');\n return dir;\n}\n\nfunction assertSafeDirectory(root: string, dir: string, label: string): void {\n if (!existsSync(dir)) return;\n const stat = lstatSync(dir);\n if (stat.isSymbolicLink() || !stat.isDirectory()) {\n throw new Error(`unsafe ${label}: expected a real workspace directory`);\n }\n const rel = relative(realpathSync(root), realpathSync(dir));\n if (rel === '..' || rel.startsWith(`..${sep}`)) {\n throw new Error(`unsafe ${label}: resolves outside the workspace`);\n }\n}\n","/** Filesystem-backed status for a run that another process can inspect. */\n\nimport {\n appendFileSync,\n closeSync,\n existsSync,\n fstatSync,\n mkdirSync,\n openSync,\n readdirSync,\n readFileSync,\n readSync,\n writeFileSync,\n} from 'node:fs';\nimport { randomBytes } from 'node:crypto';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nimport type {\n JobMeta,\n LoopEvent,\n Outcome,\n ProofRecord,\n UsageTotals,\n} from '../core/types.js';\n\nconst NOISE: ReadonlySet<LoopEvent['kind']> = new Set([\n 'engine:text',\n 'engine:thinking',\n]);\nconst PROGRESS_TAIL = 200;\nconst PROGRESS_TAIL_BYTES = 256 * 1024;\n\nexport function runsHome(): string {\n return join(process.env.OBVERSA_HOME ?? join(homedir(), '.obversa'), 'runs');\n}\n\nfunction slug(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 32) || 'run'\n );\n}\n\nexport function newRunId(title: string): string {\n return `${slug(title)}-${randomBytes(3).toString('hex')}`;\n}\n\nexport interface CurrentWork {\n kind: 'job' | 'dag-node';\n path: string[];\n label?: string;\n node?: string;\n startedAt: number;\n timeoutMs?: number;\n deadlineAt?: number;\n}\n\nexport interface RunLive {\n path: string[];\n iteration: number;\n current?: CurrentWork;\n active?: Record<string, CurrentWork>;\n lastGate?: {\n which: string;\n met: boolean;\n confidence?: number;\n reason: string;\n };\n lastOutcome?: { status: string; summary?: string; late?: boolean };\n usage: {\n inputTokens: number;\n outputTokens: number;\n /** What this run has been served from cache, the figure the line reports. */\n cacheReadInputTokens: number;\n /** What it paid to build that cache, kept separate on purpose. */\n cacheCreationInputTokens: number;\n calls: number;\n unmeasuredCalls: number;\n };\n}\n\nexport interface RunStatus {\n runId: string;\n pid: number;\n cwd: string;\n title: string;\n startedAt: number;\n updatedAt: number;\n endedAt?: number;\n status: 'running' | Outcome['status'];\n alive?: boolean;\n shape?: JobMeta;\n live: RunLive;\n evidence?: {\n count: number;\n indexPath: string;\n latest?: ProofRecord;\n };\n}\n\nexport interface Supervisor {\n runId: string;\n dir: string;\n sink: (event: LoopEvent) => void;\n finish: (outcome: Outcome) => void;\n}\n\nexport function startSupervisor(input: {\n runId: string;\n cwd: string;\n title: string;\n shape?: JobMeta;\n}): Supervisor {\n const dir = join(runsHome(), input.runId);\n const eventsPath = join(dir, 'events.jsonl');\n const proofsPath = join(dir, 'proofs.jsonl');\n const statusPath = join(dir, 'status.json');\n mkdirSync(dir, { recursive: true });\n writeBestEffort(eventsPath, '');\n writeBestEffort(proofsPath, '');\n\n const startedAt = Date.now();\n const status: RunStatus = {\n runId: input.runId,\n pid: process.pid,\n cwd: input.cwd,\n title: input.title,\n startedAt,\n updatedAt: startedAt,\n status: 'running',\n shape: input.shape,\n live: {\n path: [],\n iteration: 0,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n cacheReadInputTokens: 0,\n cacheCreationInputTokens: 0,\n calls: 0,\n unmeasuredCalls: 0,\n },\n },\n };\n const active = new Map<string, CurrentWork>();\n let proofCount = 0;\n\n const writeStatus = () => {\n status.updatedAt = Date.now();\n writeBestEffort(statusPath, JSON.stringify(status, null, 2));\n };\n const refreshCurrent = () => {\n status.live.active = active.size\n ? Object.fromEntries(active.entries())\n : undefined;\n status.live.current = [...active.values()].sort((a, b) => {\n const deadline =\n (a.deadlineAt ?? Number.POSITIVE_INFINITY) -\n (b.deadlineAt ?? Number.POSITIVE_INFINITY);\n return deadline || b.startedAt - a.startedAt;\n })[0];\n };\n const activeKey = (kind: CurrentWork['kind'], path: readonly string[]) =>\n `${kind}:${path.join('\\u0000')}`;\n\n writeStatus();\n\n const sink = (event: LoopEvent) => {\n if (!NOISE.has(event.kind)) appendBestEffort(eventsPath, event);\n\n switch (event.kind) {\n case 'run:end':\n status.live.lastOutcome = outcomeSummary(event.outcome);\n break;\n case 'loop:iteration':\n status.live.path = event.path;\n status.live.iteration = event.iteration;\n break;\n case 'loop:condition':\n status.live.lastGate = {\n which: event.which,\n met: event.result.met,\n confidence: event.result.confidence,\n reason: event.result.reason,\n };\n break;\n case 'condition:result':\n status.live.lastGate = {\n which: event.label,\n met: event.result.met,\n confidence: event.result.confidence,\n reason: event.result.reason,\n };\n break;\n case 'dag:node': {\n const path = [...event.path, event.node];\n status.live.path = path;\n if (event.phase === 'start') {\n active.set(activeKey('dag-node', path), {\n kind: 'dag-node',\n path,\n node: event.node,\n startedAt: event.ts,\n timeoutMs: event.timeoutMs,\n deadlineAt: event.timeoutMs ? event.ts + event.timeoutMs : undefined,\n });\n } else {\n active.delete(activeKey('dag-node', path));\n }\n refreshCurrent();\n break;\n }\n case 'job:start': {\n const path = [...event.path, event.label];\n active.set(activeKey('job', path), {\n kind: 'job',\n path: event.path,\n label: event.label,\n startedAt: event.ts,\n timeoutMs: event.timeoutMs,\n deadlineAt: event.timeoutMs ? event.ts + event.timeoutMs : undefined,\n });\n refreshCurrent();\n break;\n }\n case 'loop:end':\n case 'dag:end':\n case 'job:end':\n status.live.path = event.path;\n status.live.lastOutcome = outcomeSummary(event.outcome);\n if (event.kind === 'job:end') {\n active.delete(activeKey('job', [...event.path, event.label]));\n refreshCurrent();\n }\n break;\n case 'engine:usage':\n status.live.usage.calls += 1;\n if (event.usage.kind === 'unknown') {\n status.live.usage.unmeasuredCalls += 1;\n } else {\n status.live.usage.inputTokens += event.usage.inputTokens;\n status.live.usage.outputTokens += event.usage.outputTokens;\n status.live.usage.cacheReadInputTokens += event.usage.cacheReadInputTokens ?? 0;\n status.live.usage.cacheCreationInputTokens += event.usage.cacheCreationInputTokens ?? 0;\n }\n break;\n case 'proof': {\n const proof: ProofRecord = {\n name: event.name,\n path: event.path,\n artifact: event.artifact,\n };\n proofCount += 1;\n appendBestEffort(proofsPath, proof);\n status.evidence = {\n count: proofCount,\n indexPath: proofsPath,\n latest: proof,\n };\n break;\n }\n }\n\n if (!NOISE.has(event.kind)) writeStatus();\n };\n\n const finish = (outcome: Outcome) => {\n status.status = outcome.status;\n status.endedAt = Date.now();\n status.live.current = undefined;\n status.live.active = undefined;\n status.live.lastOutcome = outcomeSummary(outcome);\n writeStatus();\n };\n\n return { runId: input.runId, dir, sink, finish };\n}\n\nfunction outcomeSummary(outcome: Outcome): RunLive['lastOutcome'] {\n return {\n status: outcome.status,\n summary: outcome.summary,\n late: outcome.late,\n };\n}\n\nfunction writeBestEffort(path: string, text: string): void {\n try {\n writeFileSync(path, text);\n } catch {\n // Supervision must not stop the run.\n }\n}\n\nfunction appendBestEffort(path: string, value: unknown): void {\n try {\n appendFileSync(path, `${JSON.stringify(value)}\\n`);\n } catch {\n // Supervision must not stop the run.\n }\n}\n\nexport function isAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return (error as NodeJS.ErrnoException).code === 'EPERM';\n }\n}\n\nexport function readRunStatus(runId: string): RunStatus | undefined {\n if (!/^[a-z0-9][a-z0-9-]*$/.test(runId)) return undefined;\n try {\n const status = JSON.parse(\n readFileSync(join(runsHome(), runId, 'status.json'), 'utf8'),\n ) as RunStatus;\n status.alive = status.status === 'running' ? isAlive(status.pid) : false;\n return status;\n } catch {\n return undefined;\n }\n}\n\nexport function listRuns(): RunStatus[] {\n if (!existsSync(runsHome())) return [];\n return readdirSync(runsHome())\n .map(readRunStatus)\n .filter((status): status is RunStatus => status !== undefined)\n .sort((a, b) => b.startedAt - a.startedAt);\n}\n\nexport function runEventsPath(runId: string): string {\n return join(runsHome(), runId, 'events.jsonl');\n}\n\nexport function runEvidenceIndexPath(runId: string): string {\n return join(runsHome(), runId, 'proofs.jsonl');\n}\n\nexport interface RunProgress {\n runId: string;\n status: RunStatus['status'];\n alive?: boolean;\n title: string;\n stage: string;\n iteration: number;\n lastGate?: RunLive['lastGate'];\n lastOutcome?: RunLive['lastOutcome'];\n usage: RunLive['usage'];\n current?: RunLive['current'] & {\n elapsedMs: number;\n remainingMs?: number;\n };\n evidence?: RunStatus['evidence'];\n startedAt: number;\n updatedAt: number;\n blocker?: {\n kind: 'gate-failing' | 'limit-pause' | 'error';\n detail: string;\n };\n recent: string[];\n}\n\nfunction readEventTail(runId: string): LoopEvent[] {\n let raw: string;\n try {\n const fd = openSync(runEventsPath(runId), 'r');\n try {\n const size = fstatSync(fd).size;\n // Include the preceding byte so a cut at a newline keeps the next record.\n const start = Math.max(0, size - PROGRESS_TAIL_BYTES - 1);\n const buffer = Buffer.alloc(size - start);\n readSync(fd, buffer, 0, buffer.length, start);\n raw = buffer.toString('utf8');\n if (start > 0) raw = raw.slice(raw.indexOf('\\n') + 1);\n } finally {\n closeSync(fd);\n }\n } catch {\n return [];\n }\n\n const events: LoopEvent[] = [];\n for (const line of raw.split('\\n').slice(-PROGRESS_TAIL)) {\n if (!line.trim()) continue;\n try {\n events.push(JSON.parse(line) as LoopEvent);\n } catch {\n // Ignore a partial last line.\n }\n }\n return events;\n}\n\nfunction deriveBlocker(\n status: RunStatus['status'],\n events: LoopEvent[],\n live: RunLive,\n): RunProgress['blocker'] {\n if (status === 'pass') return undefined;\n let progressSince = false;\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const event = events[index]!;\n if (event.kind === 'limit:pause')\n return { kind: 'limit-pause', detail: event.reason };\n if (event.kind === 'error' && !progressSince)\n return { kind: 'error', detail: event.message };\n if (\n event.kind === 'loop:iteration' ||\n event.kind === 'dag:node' ||\n ((event.kind === 'loop:end' || event.kind === 'dag:end') &&\n event.outcome.status === 'pass')\n )\n progressSince = true;\n }\n if (live.lastGate?.met === false)\n return { kind: 'gate-failing', detail: live.lastGate.reason };\n return undefined;\n}\n\nexport function readRunProgress(\n runId: string,\n options?: { recent?: number },\n): RunProgress | undefined {\n const status = readRunStatus(runId);\n if (!status) return undefined;\n const events = readEventTail(runId);\n const now = Date.now();\n const current = status.live.current\n ? {\n ...status.live.current,\n elapsedMs: Math.max(0, now - status.live.current.startedAt),\n remainingMs: status.live.current.deadlineAt\n ? Math.max(0, status.live.current.deadlineAt - now)\n : undefined,\n }\n : undefined;\n return {\n runId: status.runId,\n status: status.status,\n alive: status.alive,\n title: status.title,\n stage: status.live.path.length ? status.live.path.join(' / ') : '(root)',\n iteration: status.live.iteration,\n lastGate: status.live.lastGate,\n lastOutcome: status.live.lastOutcome,\n usage: status.live.usage,\n current,\n evidence: status.evidence,\n startedAt: status.startedAt,\n updatedAt: status.updatedAt,\n blocker: deriveBlocker(status.status, events, status.live),\n // Not `.map(formatEvent)`: map passes the index as the second argument,\n // which now lands in `totals`. The compiler caught it, and the same trap\n // waits for any caller who passes this function by reference.\n recent: events.slice(-(options?.recent ?? 10)).map((event) => formatEvent(event, status.live.usage)),\n };\n}\n\nexport function runningTotal(totals: UsageTotals): string {\n // Cache READ only, and named. Creation and read are different things:\n // creation is what was paid to build the cache, read is what was served\n // from it. Summing them under one word makes a reader guess which they are\n // looking at, and a number whose meaning is guessed is worse than none on a\n // page whose whole subject is being transparent about spend. Both figures\n // stay on StatsSnapshot in full; this line is a summary, not the record.\n const read = totals.cacheReadInputTokens ?? 0;\n const unmeasured = totals.unmeasuredCalls ?? 0;\n // Shown only when there is one, so an honest complete run stays clean and an\n // incomplete one says so rather than presenting a total as the whole story.\n // The words are the ones a single call already prints, \"usage unknown\", so a\n // reader who learns the phrase once knows it at both levels instead of\n // meeting two spellings of one idea and wondering if they differ.\n const missing = unmeasured > 0 ? `, usage unknown on ${unmeasured} call${unmeasured === 1 ? '' : 's'}` : '';\n const base = `${totals.inputTokens}/${totals.outputTokens} tok`;\n // The unit stays on the number: a bare 900 beside a labelled pair reads as\n // the same kind of thing as the pair, and it is not.\n return `${base}${read > 0 ? `, ${read} tok from cache` : ''}${missing}`;\n}\n\nexport function toLine(value: string): string {\n return value.replace(/[\\u0000-\\u001f\\u007f]+/g, ' ');\n}\n\n/**\n * Format one event with optional totals the caller already holds.\n *\n * `StatsSnapshot` accumulates the totals and the monitor's live status tracks\n * them, so nothing here remembers anything: the function stays one event in,\n * one string out. Omitting the totals prints exactly what it printed before.\n */\nexport function formatEvent(event: LoopEvent, totals?: UsageTotals): string {\n return toLine(renderEvent(event, totals));\n}\n\nfunction renderEvent(event: LoopEvent, totals?: UsageTotals): string {\n const at = event.path.length ? `${event.path.join(' › ')} ` : '';\n switch (event.kind) {\n case 'run:start':\n return '▸ run';\n case 'run:end':\n return `◂ run ${event.outcome.status}${event.outcome.late ? ' late' : ''} (${runningTotal(event.usage)})`;\n case 'loop:start':\n return `${at}▸ loop${event.max ? ` (max ${event.max})` : ''}`;\n case 'dag:start':\n return `${at}▸ dag (${event.nodes.length} nodes)`;\n case 'loop:iteration':\n return `${at}· iteration ${event.iteration}`;\n case 'loop:condition':\n return `${at}· ${event.which} ${event.result.met ? 'met' : 'not met'}: ${event.result.reason}`;\n case 'condition:result':\n return `${at}· ${event.label} ${event.result.met ? 'met' : 'not met'}: ${event.result.reason}`;\n case 'loop:review':\n return `${at}· review: ${event.outcome.status}${event.outcome.late ? ' late' : ''}`;\n case 'loop:end':\n return `${at}◂ ${event.outcome.status}${event.outcome.late ? ' late' : ''} (${event.iterations} iter)`;\n case 'dag:node':\n return `${at}· node ${event.node}: ${event.phase}${event.outcome ? ` (${event.outcome.status}${event.outcome.late ? ' late' : ''})` : ''}`;\n case 'dag:kickback':\n return `${at}↩ kickback ${event.accepted ? 'accepted' : 'rejected'} ${event.from} -> ${event.to} [${event.count}/${event.limit}]: ${event.reason}${event.note ? ` (${event.note})` : ''}`;\n case 'dag:end':\n return `${at}◂ dag ${event.outcome.status}${event.outcome.late ? ' late' : ''}`;\n case 'job:start':\n return `${at}• ${event.label}`;\n case 'advisor:consult':\n return `${at}◇ advisor ${event.label} #${event.call}: ${event.question}`;\n case 'proof':\n return `${at}◈ proof ${event.name}: ${event.artifact.title ?? event.artifact.path ?? event.artifact.kind}`;\n case 'job:end':\n return `${at}• ${event.label}: ${event.outcome.status}${event.outcome.late ? ' late' : ''}`;\n case 'engine:tool':\n return `${at} tool ${event.name} ${event.phase}`;\n case 'engine:usage': {\n const call = event.usage.kind === 'unknown'\n ? 'usage unknown'\n : `${event.usage.inputTokens}/${event.usage.outputTokens} tok`;\n // A person watching wants both: what this call cost, and what the run\n // has cost so far. Without the second, a long run is a wall of numbers\n // that never answers the question being asked.\n return `${at} ${event.model}: ${call}${totals ? ` (run ${runningTotal(totals)})` : ''}`;\n }\n case 'loop:stall':\n return `${at}⏹ stalled after ${event.report.iterations.length} no-progress iterations: ${event.report.reason}`;\n case 'limit:wait':\n return `${at}⏸ limit ${event.code}: waiting ${Math.round(event.waitMs / 1000)}s`;\n case 'limit:pause':\n return `${at}⏸ paused (${event.code}): ${event.reason}`;\n case 'log':\n return `${at}${event.message}`;\n case 'error':\n return `${at}✗ ${event.code}: ${event.message}`;\n default:\n return `${at}${event.kind}`;\n }\n}\n","/**\n * The callback client (roadmap D7): the router-facing side of the Callback\n * Gate. Pending requests are observable without starting any effect; a\n * router claims a request through atomic assignment — two racing routers,\n * exactly one winner — submits a structured response validated against\n * the request's response schema and its digest, and can release or be\n * reassigned.\n *\n * The client is event-sourced: every mutation is recorded as an event, and\n * the request states are a fold of the log — `replayCallbackClient`\n * rebuilds a full client from any history, so no state is hidden outside\n * the events. A newer request from the same gate supersedes the older\n * unanswered ones with a recorded event, and a submit whose digest does\n * not match the posted request is refused as stale.\n *\n * The direct-router helper takes a plain responder function and drives\n * the whole loop. It imports no Surfacer, agent, or service code — it is\n * the smallest possible router, and the proof that the contract is\n * replaceable.\n */\n\nimport { randomUUID } from 'node:crypto';\n\nimport { validateCallbackRequest, validateCallbackResponse } from './gate.js';\nimport type { CallbackRequest } from './gate.js';\nimport type { JsonObject } from '../graph/value.js';\n\nimport { validateCallbackEvent, type CallbackEvent, type CallbackClient, type ClaimRefused, type ClaimOk, type SubmitRefused, type SubmitOk, type SubmitResult, type ReleaseRefused, type ReleaseOk, type Responder } from '@obversa/api';\nexport {\n type CallbackEvent,\n validateCallbackEvent,\n type ClaimOk,\n type ClaimRefused,\n type ClaimResult,\n type SubmitOk,\n type SubmitRefused,\n type SubmitResult,\n type ReleaseOk,\n type ReleaseRefused,\n type ReleaseResult,\n type CallbackClient,\n type Responder,\n} from '@obversa/api';\n\ninterface RequestState {\n readonly request: CallbackRequest;\n status: 'pending' | 'claimed' | 'answered' | 'superseded';\n routerId: string | null;\n claimToken: string | null;\n}\n\n/** Fold one event into the request states. The client is its log. */\nfunction applyEvent(\n states: Map<string, RequestState>,\n event: CallbackEvent,\n): void {\n switch (event.kind) {\n case 'callback-requested': {\n const existing = states.get(event.request.requestId);\n // A superseded question posted again is live again: the newest post is\n // always the question a router can answer.\n if (existing !== undefined && existing.status !== 'superseded') {\n throw new TypeError('callback request is recorded more than once');\n }\n states.set(event.request.requestId, {\n request: event.request,\n status: 'pending',\n routerId: null,\n claimToken: null,\n });\n return;\n }\n case 'callback-claimed': {\n const state = states.get(event.requestId);\n if (state === undefined || state.status !== 'pending') {\n throw new TypeError('callback claim has no pending request');\n }\n state.status = 'claimed';\n state.routerId = event.routerId;\n state.claimToken = event.claimToken;\n return;\n }\n case 'callback-released': {\n const state = states.get(event.requestId);\n if (state === undefined || state.status !== 'claimed' || state.routerId !== event.routerId) {\n throw new TypeError('callback release has no matching claimed request');\n }\n state.status = 'pending';\n state.routerId = null;\n state.claimToken = null;\n return;\n }\n case 'callback-submitted': {\n const state = states.get(event.requestId);\n if (state === undefined || state.status !== 'claimed') {\n throw new TypeError('callback submission has no claimed request');\n }\n if (state.routerId !== event.routerId || state.request.digest !== event.requestDigest) {\n throw new TypeError('callback submission does not match its claimed request');\n }\n if (!validateCallbackResponse(event.response, state.request.responseSchema).ok) {\n throw new TypeError('callback submission does not match its response schema');\n }\n state.status = 'answered';\n state.routerId = null;\n state.claimToken = null;\n return;\n }\n case 'callback-superseded': {\n const state = states.get(event.requestId);\n if (state === undefined || state.status === 'answered' || state.status === 'superseded') {\n throw new TypeError('callback supersession has no live request');\n }\n state.status = 'superseded';\n state.routerId = null;\n state.claimToken = null;\n return;\n }\n case 'callback-rejected': {\n const state = states.get(event.requestId);\n if (state === undefined || state.status !== 'claimed' || state.routerId !== event.routerId) {\n throw new TypeError('callback rejection has no matching claimed request');\n }\n return;\n }\n }\n}\n\n/** Rebuild a complete client from a callback history. A pure fold. */\nexport function replayCallbackClient(events: readonly CallbackEvent[]): CallbackClient {\n return createCallbackClient(events);\n}\n\n/**\n * An event-sourced callback client. Seeding from a history replays it\n * through the same fold the live client applies, so the log is the only\n * state there is.\n */\nexport function createCallbackClient(seed?: readonly CallbackEvent[]): CallbackClient {\n const states = new Map<string, RequestState>();\n const log: CallbackEvent[] = [];\n\n const record = (event: CallbackEvent): void => {\n const stored = validateCallbackEvent(event);\n log.push(stored);\n applyEvent(states, stored);\n };\n for (const event of seed ?? []) record(event);\n\n const client: CallbackClient = {\n post(request) {\n const storedRequest = validateCallbackRequest(request);\n // A newer request from the same gate supersedes the older,\n // unanswered ones with a recorded event, so a stale question can\n // never be answered and the history can rebuild the state.\n for (const [id, state] of states) {\n if (state.request.gateId === storedRequest.gateId\n && state.request.requestId !== storedRequest.requestId\n && state.status !== 'answered'\n && state.status !== 'superseded') {\n record({\n kind: 'callback-superseded',\n requestId: id,\n supersededBy: storedRequest.requestId,\n });\n }\n }\n const current = states.get(storedRequest.requestId);\n if (current === undefined || current.status === 'superseded') {\n record({ kind: 'callback-requested', request: storedRequest });\n }\n },\n listPending() {\n return [...states.values()]\n .filter((state) => state.status === 'pending')\n .map((state) => state.request);\n },\n claim(requestId, routerId) {\n const state = states.get(requestId);\n if (state === undefined) {\n const missing: ClaimRefused = { ok: false, kind: 'missing', routerId: null };\n return missing;\n }\n // Atomic assignment: the check and the write happen in one\n // synchronous section, so of two racing claims exactly one wins.\n if (state.status !== 'pending') {\n const refusal: ClaimRefused = {\n ok: false,\n kind: state.status === 'claimed' ? 'claimed'\n : state.status === 'answered' ? 'answered' : 'superseded',\n routerId: state.routerId,\n };\n return refusal;\n }\n const claimToken = randomUUID();\n record({ kind: 'callback-claimed', requestId, routerId, claimToken });\n const won: ClaimOk = { ok: true, claimToken };\n return won;\n },\n submit(requestId, claimToken, routerId, requestDigest, response) {\n const state = states.get(requestId);\n if (state === undefined) {\n const missing: SubmitRefused = {\n ok: false, kind: 'missing', reason: 'the request does not exist',\n };\n return missing;\n }\n if (state.status !== 'claimed') {\n const notClaimed: SubmitRefused = {\n ok: false,\n kind: state.status === 'superseded' ? 'stale' : 'not-claimed',\n reason: `the request is ${state.status}`,\n };\n return notClaimed;\n }\n if (state.claimToken !== claimToken || state.routerId !== routerId) {\n const notOwner: SubmitRefused = {\n ok: false,\n kind: 'not-owner',\n reason: 'the claim belongs to another router',\n };\n return notOwner;\n }\n if (requestDigest !== state.request.digest) {\n const stale: SubmitRefused = {\n ok: false,\n kind: 'stale',\n reason: 'the submit digest does not match the posted request',\n };\n return stale;\n }\n const validated = validateCallbackResponse(response, state.request.responseSchema);\n if (!validated.ok) {\n record({ kind: 'callback-rejected', requestId, routerId, reason: validated.reason });\n const invalid: SubmitRefused = { ok: false, kind: 'invalid', reason: validated.reason };\n return invalid;\n }\n record({ kind: 'callback-submitted', requestId, requestDigest, routerId, response });\n const accepted: SubmitOk = { ok: true, response };\n return accepted;\n },\n release(requestId, claimToken) {\n const state = states.get(requestId);\n if (state === undefined) {\n const missing: ReleaseRefused = { ok: false, kind: 'missing' };\n return missing;\n }\n if (state.status !== 'claimed' || state.claimToken !== claimToken) {\n const notOwner: ReleaseRefused = { ok: false, kind: 'not-owner' };\n return notOwner;\n }\n record({ kind: 'callback-released', requestId, routerId: state.routerId! });\n const released: ReleaseOk = { ok: true };\n return released;\n },\n supersede(requestId, supersededBy) {\n const state = states.get(requestId);\n if (state === undefined || state.status === 'answered' || state.status === 'superseded') {\n return;\n }\n record({ kind: 'callback-superseded', requestId, supersededBy });\n },\n history(requestId) {\n if (requestId === undefined) return Object.freeze([...log]);\n return Object.freeze(log.filter((event) => event.kind === 'callback-requested'\n ? event.request.requestId === requestId\n : 'requestId' in event && event.requestId === requestId));\n },\n };\n return Object.freeze(client);\n}\n\n/**\n * The smallest router: claim the pending request for one gate, ask the\n * responder function, and submit its structured answer with the digest the\n * request carries. Imports nothing beyond the contract — no Surfacer,\n * agent, or service code.\n */\nexport async function directRouter(\n client: CallbackClient,\n request: CallbackRequest,\n routerId: string,\n responder: Responder,\n): Promise<SubmitResult> {\n const claim = client.claim(request.requestId, routerId);\n if (!claim.ok) {\n return {\n ok: false,\n kind: claim.kind === 'missing' ? 'missing' : 'not-claimed',\n reason: `the request could not be claimed: ${claim.kind}`,\n };\n }\n let response: JsonObject;\n try {\n response = await responder(request);\n } catch (error) {\n client.release(request.requestId, claim.claimToken);\n throw error;\n }\n const submitted = client.submit(\n request.requestId,\n claim.claimToken,\n routerId,\n request.digest,\n response,\n );\n if (!submitted.ok && submitted.kind === 'invalid') {\n client.release(request.requestId, claim.claimToken);\n }\n return submitted;\n}\n","/**\n * The run monitor: one page per run, served from the runtime itself with no\n * build step and no framework. It binds a free port on the loopback address,\n * folds the run's own event stream into the state of each declared node, and\n * serves that state as JSON and as a page that polls it. Its only control is\n * answering a pending question through the run's callbacks client, which is\n * what a callback router may do already; nothing on the page starts, stops or\n * edits a run. The server does not keep the process alive: a script ends\n * when its run ends, and the page lives as long as the process does.\n */\n\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http';\nimport type { Socket } from 'node:net';\n\nimport type { CallbackRequest } from '../callback/gate.js';\nimport { jobMeta } from '../core/describe.js';\nimport type { JsonObject, JsonValue } from '../graph/value.js';\nimport type { Job, JobMeta, LoopEvent, Outcome, RunCallbacks, UsageTotals } from '../core/types.js';\nimport { runningTotal } from './supervisor.js';\n\nexport interface RunMonitor {\n /** The page's address: `http://127.0.0.1:<port>/`. */\n readonly url: string;\n /** Stop serving and release the port. */\n close(): Promise<void>;\n}\n\nexport type MonitorNodePhase = 'declared' | 'running' | 'done' | 'skipped';\n\nexport interface MonitorNodeState {\n phase: MonitorNodePhase;\n needs: string[];\n desc?: string;\n gate?: string;\n optional?: boolean;\n /** How many times the node has started in this run. */\n runs: number;\n outcome?: { status: Outcome['status']; summary?: string };\n}\n\nexport interface MonitorKickback {\n from: string;\n to: string;\n reason: string;\n accepted: boolean;\n count: number;\n limit: number;\n note?: string;\n}\n\nexport interface MonitorState {\n runId?: string;\n name?: string;\n status: 'running' | 'done';\n outcome?: { status: Outcome['status']; summary?: string };\n nodes: Record<string, MonitorNodeState>;\n kickbacks: MonitorKickback[];\n /** What the run has spent so far, the same shape the line formatter takes. */\n usage: UsageTotals;\n /** The same spend as one line of text, already formatted; `/state` sends it. */\n usageSummary: string;\n pending: Array<{ requestId: string; decisionText: string; input: JsonValue }>;\n events: Array<{ kind: string; ts: number; path: string[]; node?: string; label?: string; summary?: string }>;\n}\n\nconst EVENT_TAIL = 200;\n\ninterface DeclaredNode {\n name: string;\n needs?: string[];\n desc?: string;\n gate?: string;\n optional?: boolean;\n}\n\n/** The nodes a job declares, read from its meta; a bare job declares none. */\nfunction declaredNodes(meta: JobMeta | undefined): DeclaredNode[] {\n if (!meta || meta.kind !== 'dag' || !Array.isArray(meta.nodes)) return [];\n return (meta.nodes as DeclaredNode[]).filter((n) => typeof n?.name === 'string');\n}\n\nfunction outcomeLine(outcome: Outcome | undefined): MonitorNodeState['outcome'] {\n if (!outcome) return undefined;\n return outcome.summary === undefined ? { status: outcome.status } : { status: outcome.status, summary: outcome.summary };\n}\n\nclass MonitorFold {\n readonly nodes: Record<string, MonitorNodeState> = {};\n readonly kickbacks: MonitorKickback[] = [];\n readonly events: MonitorState['events'] = [];\n readonly usage = { inputTokens: 0, outputTokens: 0, cacheReadInputTokens: 0, cacheCreationInputTokens: 0, unmeasuredCalls: 0 };\n status: MonitorState['status'] = 'running';\n outcome?: MonitorState['outcome'];\n readonly name?: string;\n\n constructor(job: Job) {\n const meta = jobMeta(job);\n this.name = typeof meta?.name === 'string' ? meta.name : undefined;\n for (const node of declaredNodes(meta)) {\n this.nodes[node.name] = {\n phase: 'declared',\n needs: node.needs ?? [],\n ...(node.desc !== undefined ? { desc: node.desc } : {}),\n ...(node.gate !== undefined ? { gate: node.gate } : {}),\n ...(node.optional ? { optional: true } : {}),\n runs: 0,\n };\n }\n }\n\n apply(event: LoopEvent): void {\n if (event.kind === 'run:end') {\n this.status = 'done';\n this.outcome = outcomeLine(event.outcome);\n }\n if (event.kind === 'engine:usage') {\n if (event.usage.kind === 'unknown') this.usage.unmeasuredCalls += 1;\n else {\n this.usage.inputTokens += event.usage.inputTokens;\n this.usage.outputTokens += event.usage.outputTokens;\n this.usage.cacheReadInputTokens += event.usage.cacheReadInputTokens ?? 0;\n this.usage.cacheCreationInputTokens += event.usage.cacheCreationInputTokens ?? 0;\n }\n }\n // Only the root dag's nodes are the page's nodes; a nested dag's are its\n // own step's business and show through that step's outcome.\n if (event.kind === 'dag:node' && event.path.length <= 1) {\n const node = this.nodes[event.node] ?? (this.nodes[event.node] = { phase: 'declared', needs: event.needs ?? [], runs: 0 });\n if (event.needs) node.needs = event.needs;\n if (event.desc !== undefined) node.desc = event.desc;\n if (event.gate !== undefined) node.gate = event.gate;\n if (event.phase === 'start') { node.phase = 'running'; node.runs += 1; delete node.outcome; }\n if (event.phase === 'skip') { node.phase = 'skipped'; node.outcome = outcomeLine(event.outcome); }\n if (event.phase === 'done') { node.phase = 'done'; node.outcome = outcomeLine(event.outcome); }\n }\n if (event.kind === 'dag:kickback' && event.path.length <= 1) {\n this.kickbacks.push({\n from: event.from, to: event.to, reason: event.reason, accepted: event.accepted,\n count: event.count, limit: event.limit, ...(event.note !== undefined ? { note: event.note } : {}),\n });\n }\n const line: MonitorState['events'][number] = { kind: event.kind, ts: event.ts, path: [...event.path] };\n if ('node' in event && typeof event.node === 'string') line.node = event.node;\n if ('label' in event && typeof event.label === 'string') line.label = event.label;\n if ('outcome' in event && event.outcome && typeof event.outcome === 'object' && 'summary' in event.outcome && typeof event.outcome.summary === 'string') {\n line.summary = event.outcome.summary;\n }\n this.events.push(line);\n if (this.events.length > EVENT_TAIL) this.events.splice(0, this.events.length - EVENT_TAIL);\n }\n\n finish(outcome: Outcome): void {\n this.status = 'done';\n this.outcome = outcomeLine(outcome);\n }\n}\n\nasync function pendingOf(client: RunCallbacks): Promise<MonitorState['pending']> {\n const pending = await client.listPending();\n return pending.map((request) => ({ requestId: request.requestId, decisionText: request.decisionText, input: request.input }));\n}\n\nconst BODY_LIMIT = 64 * 1024;\n\nclass BodyError extends Error {\n constructor(readonly status: number, message: string) { super(message); }\n}\n\n/** The body as JSON, bounded, or a status the handler answers with. */\nasync function readJson(req: IncomingMessage): Promise<JsonValue> {\n const type = String(req.headers['content-type'] ?? '').split(';')[0]!.trim().toLowerCase();\n if (type !== 'application/json') throw new BodyError(415, 'the body must be application/json');\n const chunks: Buffer[] = [];\n let size = 0;\n for await (const chunk of req) {\n size += (chunk as Buffer).length;\n if (size > BODY_LIMIT) throw new BodyError(413, 'the body is too large');\n chunks.push(chunk as Buffer);\n }\n const text = Buffer.concat(chunks).toString('utf8');\n try {\n return text ? (JSON.parse(text) as JsonValue) : null;\n } catch {\n throw new BodyError(400, 'the body is not valid JSON');\n }\n}\n\n/**\n * Only the page's own browser tab may read or write: the Host must be the\n * bound loopback address (a rebound DNS name is refused), and a write must\n * come from our own origin or from no origin at all (a script), never from\n * another site's page.\n */\nfunction ownPage(req: IncomingMessage, host: string): boolean {\n if (req.headers.host !== host) return false;\n const origin = req.headers.origin;\n if (typeof origin === 'string' && origin !== `http://${host}`) return false;\n const site = req.headers['sec-fetch-site'];\n if (typeof site === 'string' && site !== 'same-origin' && site !== 'none') return false;\n return true;\n}\n\nfunction send(res: ServerResponse, status: number, body: string, type: string): void {\n // No page may frame this one: the answer buttons must be the person's own click on this tab.\n res.writeHead(status, {\n 'content-type': type,\n 'content-length': Buffer.byteLength(body),\n 'cache-control': 'no-store',\n 'x-frame-options': 'DENY',\n 'content-security-policy': \"frame-ancestors 'none'\",\n });\n res.end(body);\n}\n\nconst json = (res: ServerResponse, status: number, value: unknown): void => send(res, status, JSON.stringify(value), 'application/json; charset=utf-8');\n\n/** Answer one pending question as the page's router, through the same client any router uses. */\nasync function answer(client: RunCallbacks, body: JsonValue): Promise<{ status: number; result: JsonObject }> {\n const asked = body !== null && typeof body === 'object' && !Array.isArray(body) ? (body as JsonObject) : undefined;\n if (asked === undefined || typeof asked.requestId !== 'string') {\n return { status: 400, result: { ok: false, reason: 'the body needs a requestId and a response' } };\n }\n const request = (await client.listPending()).find((r: CallbackRequest) => r.requestId === asked.requestId);\n if (!request) return { status: 404, result: { ok: false, reason: 'no pending question has that requestId' } };\n const claim = await client.claim(request.requestId, 'monitor');\n if (!claim.ok) return { status: 409, result: { ok: false, reason: `the question could not be claimed: ${claim.kind}` } };\n try {\n const submitted = await client.submit(request.requestId, claim.claimToken, 'monitor', request.digest, asked.response ?? null);\n if (!submitted.ok) {\n await client.release(request.requestId, claim.claimToken);\n return { status: 400, result: { ok: false, kind: submitted.kind, reason: submitted.reason } };\n }\n return { status: 200, result: { ok: true, response: submitted.response } };\n } catch (error) {\n await client.release(request.requestId, claim.claimToken);\n return { status: 400, result: { ok: false, reason: error instanceof Error ? error.message : String(error) } };\n }\n}\n\nexport interface StartedMonitor {\n monitor: RunMonitor;\n sink: (event: LoopEvent) => void;\n finish: (outcome: Outcome) => void;\n}\n\n/** Bind the page to a free loopback port and return its address, sink and finish hook. */\nexport async function startMonitor(opts: { job: Job; callbacks: RunCallbacks; runId?: string }): Promise<StartedMonitor> {\n const fold = new MonitorFold(opts.job);\n const state = async (): Promise<MonitorState> => ({\n ...(opts.runId !== undefined ? { runId: opts.runId } : {}),\n ...(fold.name !== undefined ? { name: fold.name } : {}),\n status: fold.status,\n ...(fold.outcome !== undefined ? { outcome: fold.outcome } : {}),\n nodes: fold.nodes,\n kickbacks: fold.kickbacks,\n usage: fold.usage,\n usageSummary: runningTotal(fold.usage),\n pending: await pendingOf(opts.callbacks),\n events: fold.events,\n });\n\n let host = '';\n const server: Server = createServer((req, res) => {\n void (async () => {\n const path = (req.url ?? '/').split('?')[0];\n try {\n if (!ownPage(req, host)) return send(res, 403, 'not this page', 'text/plain');\n if (path === '/' || path === '/index.html') {\n if (req.method !== 'GET') return send(res, 405, 'method not allowed', 'text/plain');\n return send(res, 200, page(fold.name), 'text/html; charset=utf-8');\n }\n if (path === '/state') {\n if (req.method !== 'GET') return send(res, 405, 'method not allowed', 'text/plain');\n return json(res, 200, await state());\n }\n if (path === '/answer') {\n if (req.method !== 'POST') return send(res, 405, 'method not allowed', 'text/plain');\n const { status, result } = await answer(opts.callbacks, await readJson(req));\n return json(res, status, result);\n }\n return send(res, 404, 'not found', 'text/plain');\n } catch (error) {\n if (error instanceof BodyError) return json(res, error.status, { ok: false, reason: error.message });\n return json(res, 500, { ok: false, reason: error instanceof Error ? error.message : String(error) });\n }\n })();\n });\n const sockets = new Set<Socket>();\n server.on('connection', (socket) => { sockets.add(socket); socket.on('close', () => sockets.delete(socket)); });\n await new Promise<void>((resolve, reject) => {\n server.once('error', reject);\n server.listen(0, '127.0.0.1', () => { server.off('error', reject); resolve(); });\n });\n server.unref();\n const address = server.address();\n const port = typeof address === 'object' && address ? address.port : 0;\n host = `127.0.0.1:${port}`;\n const url = `http://${host}/`;\n let closed: Promise<void> | undefined;\n const monitor: RunMonitor = {\n url,\n close: () => {\n closed ??= new Promise<void>((resolve) => {\n for (const socket of sockets) socket.destroy();\n server.close(() => resolve());\n });\n return closed;\n },\n };\n return { monitor, sink: (event) => fold.apply(event), finish: (outcome) => fold.finish(outcome) };\n}\n\n/** The page: the declared graph, each node's live state, the returns, the pending questions and the record tail, polled once a second. */\nfunction page(name: string | undefined): string {\n const title = name ? `${name}, running` : 'a run';\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>${escapeHtml(title)}</title>\n<style>\n :root { color-scheme: dark; --bg: #0E1F15; --panel: #142A1C; --ink: #E8F3E9; --muted: #9EC8AA; --line: #2F5A3F; --mark: #73E2A7; --back: #E0A458; --fail: #E07A7A; }\n body { margin: 0; background: var(--bg); color: var(--ink); font: 15px/1.5 \"Helvetica Neue\", Arial, sans-serif; }\n main { max-width: 64rem; margin: 0 auto; padding: 1.5rem clamp(1rem, 4vw, 3rem) 3rem; }\n h1 { font-size: 1.3rem; margin: 0 0 .25rem; } h2 { font-size: 1rem; margin: 2rem 0 .5rem; color: var(--muted); font-weight: 500; }\n .status { font-family: ui-monospace, Menlo, monospace; color: var(--muted); font-size: .9rem; }\n ol.nodes { list-style: none; margin: 1rem 0 0; padding: 0; border-top: 1px solid var(--line); }\n ol.nodes li { display: grid; grid-template-columns: 9rem minmax(0, 1fr) 8rem; gap: 1rem; padding: .7rem 0; border-bottom: 1px solid var(--line); align-items: baseline; }\n .name { font-weight: 700; } .needs, .desc, .summary { color: var(--muted); font-size: .9rem; }\n .phase { font-family: ui-monospace, Menlo, monospace; font-size: .85rem; text-align: right; }\n .phase[data-phase=\"running\"] { color: var(--mark); } .phase[data-phase=\"done\"][data-status=\"fail\"] { color: var(--fail); }\n .phase[data-phase=\"skipped\"], .phase[data-phase=\"declared\"] { color: var(--muted); }\n .kick { color: var(--back); font-size: .9rem; }\n form { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; margin-top: .5rem; }\n button { font: inherit; padding: .4rem .8rem; border-radius: 4px; border: 1px solid var(--line); background: var(--panel); color: var(--ink); cursor: pointer; }\n button.yes { background: var(--mark); color: #071209; border-color: var(--mark); }\n input { font: inherit; padding: .4rem .6rem; border-radius: 4px; border: 1px solid var(--line); background: var(--panel); color: var(--ink); min-width: 18rem; }\n pre { font: .8rem/1.5 ui-monospace, Menlo, monospace; color: var(--muted); background: var(--panel); padding: .8rem 1rem; border-radius: 4px; overflow-x: auto; max-height: 20rem; }\n @media (max-width: 640px) { ol.nodes li { grid-template-columns: 1fr; gap: .2rem; } .phase { text-align: left; } }\n</style>\n</head>\n<body>\n<main>\n <h1 id=\"title\">${escapeHtml(title)}</h1>\n <p class=\"status\"><span id=\"status\">connecting</span><span id=\"usage\"></span></p>\n <ol class=\"nodes\" id=\"nodes\"></ol>\n <div id=\"kickbacks\"></div>\n <h2 id=\"pending-title\" hidden>Waiting for a person</h2>\n <div id=\"pending\"></div>\n <h2>The record</h2>\n <pre id=\"record\"></pre>\n</main>\n<script>\n(() => {\n const el = (id) => document.getElementById(id);\n const esc = (s) => String(s).replace(/[&<>\"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '\"': '"' }[c]));\n async function answer(requestId, approved) {\n const box = document.querySelector('[data-note=\"' + CSS.escape(requestId) + '\"]');\n const note = box && box.value ? box.value : '';\n const response = note ? { approved, note } : { approved };\n const res = await fetch('answer', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ requestId, response }) });\n const result = await res.json().catch(() => ({ ok: false, reason: 'no answer from the run' }));\n el('status').textContent = result.ok ? 'answered' : 'the answer was refused: ' + (result.reason || res.status);\n render();\n }\n el('pending').addEventListener('click', (event) => {\n const button = event.target.closest('button[data-answer]');\n if (button) answer(button.getAttribute('data-request'), button.getAttribute('data-answer') === 'yes');\n });\n async function render() {\n let s;\n try { s = await (await fetch('state', { cache: 'no-store' })).json(); } catch { el('status').textContent = 'the run has gone'; return; }\n el('title').textContent = (s.name || 'a run') + (s.status === 'done' ? ', ' + (s.outcome ? s.outcome.status : 'done') : ', running');\n el('status').textContent = s.status === 'done' ? (s.outcome && s.outcome.summary ? s.outcome.summary : 'finished') : 'running' + (s.runId ? ' · ' + s.runId : '');\n el('usage').textContent = ' · ' + s.usageSummary;\n const names = Object.keys(s.nodes);\n el('nodes').innerHTML = names.map((n) => { const v = s.nodes[n]; return '<li><span class=\"name\">' + esc(n) + (v.runs > 1 ? ' <span class=\"desc\">ran ' + v.runs + ' times</span>' : '') + '</span>'\n + '<span>' + (v.desc ? '<div class=\"desc\">' + esc(v.desc) + '</div>' : '') + (v.needs && v.needs.length ? '<div class=\"needs\">needs ' + esc(v.needs.join(', ')) + '</div>' : '') + (v.outcome && v.outcome.summary ? '<div class=\"summary\">' + esc(v.outcome.summary) + '</div>' : '') + '</span>'\n + '<span class=\"phase\" data-phase=\"' + esc(v.phase) + '\" data-status=\"' + esc(v.outcome ? v.outcome.status : '') + '\">' + esc(v.phase === 'done' && v.outcome ? v.outcome.status : v.phase) + '</span></li>'; }).join('');\n el('kickbacks').innerHTML = s.kickbacks.map((k) => '<p class=\"kick\">' + esc(k.from) + ' sent work back to ' + esc(k.to) + (k.accepted ? '' : ' (not accepted' + (k.note ? ': ' + esc(k.note) : '') + ')') + ': ' + esc(k.reason) + ' (' + k.count + ' of ' + k.limit + ')</p>').join('');\n el('pending-title').hidden = s.pending.length === 0;\n el('pending').innerHTML = s.pending.map((p) => '<div><p>' + esc(p.decisionText) + '</p><form onsubmit=\"return false\"><input data-note=\"' + esc(p.requestId) + '\" placeholder=\"a note, if any\"><button class=\"yes\" data-answer=\"yes\" data-request=\"' + esc(p.requestId) + '\">Yes</button><button data-answer=\"no\" data-request=\"' + esc(p.requestId) + '\">No</button></form></div>').join('');\n el('record').textContent = s.events.slice(-40).map((e) => new Date(e.ts).toISOString().slice(11, 19) + ' ' + e.kind.padEnd(14) + (e.node || e.label || '') + (e.summary ? ' ' + e.summary : '')).join('\\\\n');\n if (s.status !== 'done') setTimeout(render, 1000);\n }\n render();\n})();\n</script>\n</body>\n</html>\n`;\n}\n\nfunction escapeHtml(text: string): string {\n return text.replace(/[&<>\"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '\"': '"' })[c] ?? c);\n}\n","/**\n * The runner assembles a `JobContext` and executes a root `Job` (a loop, a dag,\n * or any job). It owns the engine resolver, the abort controller, the shared\n * state, and the stats collector. Hosts observe via `onEvent`.\n */\n\nimport { join } from 'node:path';\n\nimport type {\n Engine,\n EngineRef,\n} from '../engines/engine.js';\nimport { isEngine } from '../engines/engine.js';\nimport { Stats, type StatsSnapshot } from '../core/stats.js';\nimport { costReport, type CostReport, type PriceTable } from '../core/cost.js';\nimport { LoopError } from '../core/errors.js';\nimport { Budget, type BudgetConfig } from '../core/budget.js';\nimport { makeRecorder, readResumeRecord } from './persist.js';\n\n/** Run-owned keys holding the workflow state read from its record. */\nexport const RESUME_STAGE_OUTCOMES = 'obversa:resumed-stage-outcomes';\nexport const RESUME_RECORDED_USAGE = 'obversa:resumed-recorded-usage';\nimport { ensureRunSubdir } from './paths.js';\nimport { startSupervisor, newRunId, type Supervisor } from './supervisor.js';\nimport { jobMeta } from '../core/describe.js';\nimport { currentBranch } from '../core/git.js';\nimport type { Environment, EnvHandle } from '../env/environment.js';\nimport type { Memory } from '@obversa/api';\nimport { createCallbackClient } from '../callback/client.js';\nimport { startMonitor, type RunMonitor, type StartedMonitor } from './monitor.js';\nimport {\n cloneFrozenJson,\n JsonValueError,\n type RunBrief,\n} from '../graph/value.js';\nimport type {\n Job,\n JobContext,\n LimitPolicy,\n LoopEvent,\n Outcome,\n UsageTotals,\n Workspace,\n RunCallbacks,\n} from '../core/types.js';\n\n/** Default ceiling on an interruptible limit-wait: 5 minutes. */\nconst DEFAULT_MAX_WAIT_MS = 300_000;\n\n/**\n * Exit code for a `paused` run: EX_TEMPFAIL (sysexits.h). Distinct from `fail`\n * (1) so a wrapper can tell \"paused\" from \"failed\".\n */\nexport const EXIT_PAUSED = 75;\n\nexport interface RunOptions {\n /** Default engine selected when a job or condition names none. */\n readonly engine?: EngineRef;\n /** Ready-made engines available to jobs and conditions by name. */\n readonly engines?: Readonly<Record<string, Engine>>;\n /** External abort signal. */\n signal?: AbortSignal;\n /** Root working directory the run operates in. Default: process.cwd(). */\n cwd?: string;\n /**\n * Bring an environment up for the run (the root workspace) before the job and\n * tear it down after, so the gate can test the running thing. You supply the\n * adapter; the runtime owns only the interface. Per-team environments at the\n * worktree boundary are a separate, later binding.\n */\n environment?: Environment;\n onEvent?: (event: LoopEvent) => void;\n /** Immutable run brief shared by every job. */\n params?: RunBrief;\n /** Seed the shared, mutable run state. */\n state?: Record<string, unknown>;\n /** Memory instance available to every job in the run. */\n memory?: Memory;\n /**\n * The client the run's questions go through (`approval`). Default: a fresh\n * in-memory client for this run, so a run without one forgets its questions\n * when it ends. Pass a client to keep them: the in-memory one across runs\n * in a process, the stored client (`createStoredCallbackClient`) across a\n * process exit.\n */\n callbacks?: RunCallbacks;\n /** Wait for an outside answer, or return paused (the default). */\n onCallback?: 'wait' | 'exit';\n /**\n * Serve the run's own page on a free loopback port: the declared graph with\n * each step's live state, the returns, the pending questions, the record\n * tail. Off by default; on under `supervise` unless set to false. The\n * address is one `monitor` event and one line in the record, never stdout.\n */\n monitor?: boolean;\n /**\n * Cap total tokens (input + output) for the run. A bare number is the limit;\n * pass `{ limit, headroom?, soft? }` for headroom or warn-don't-refuse mode.\n * Engine call sites refuse to spend past it (see `Budget`).\n */\n budget?: number | BudgetConfig;\n /** Append every structured event as JSONL here, or auto-name one under `.obversa/records`. */\n recordTo?: string | 'auto';\n /**\n * Resume from the record at `recordTo` instead of truncating it: stages\n * whose completion is already recorded are skipped, interrupted stages\n * re-run. Requires an explicit `recordTo` path; a missing record is a\n * fresh run, not an error. Two processes resuming one record at once is\n * out of scope.\n */\n resume?: boolean;\n /**\n * Register this run in the global registry (`~/.obversa/runs/<runId>`) and write\n * its live state there, so another process can inspect it. Off by default;\n * opt in to make a run observable from outside.\n */\n supervise?: boolean;\n /**\n * Assign the registry id instead of generating one, so an outside controller\n * knows the id before the run registers.\n * Must match the registry alphabet (`[a-z0-9][a-z0-9-]*`); only meaningful\n * with `supervise` or `recordTo: 'auto'`.\n */\n runId?: string;\n /**\n * How a loop reacts to a rate limit / quota / token budget. Default `auto`:\n * wait out a known reset within `maxWaitMs`, else pause (exit code 75).\n * `wait` waits any known reset with no ceiling; `exit` never waits; `fail` is\n * fatal\n * behaviour.\n */\n onLimit?: LimitPolicy;\n /** Ceiling on a single interruptible limit-wait, in ms. Default 300000. */\n maxWaitMs?: number;\n /**\n * Price the run's measured token usage (`RunResult.cost`). Prices are\n * caller-supplied — the library hardcodes none. `baselineModel` adds the\n * reconstructed counterfactual: the same token stream at that model's rates.\n */\n cost?: { prices: PriceTable; baselineModel?: string };\n}\n\n/** The run's totals, in the shape the line formatter takes. */\nfunction usageOf(snapshot: StatsSnapshot): UsageTotals {\n return {\n inputTokens: snapshot.totalInputTokens,\n outputTokens: snapshot.totalOutputTokens,\n cacheReadInputTokens: snapshot.totalCacheReadInputTokens,\n cacheCreationInputTokens: snapshot.totalCacheCreationInputTokens,\n unmeasuredCalls: snapshot.totalUnmeasuredCalls,\n };\n}\n\nexport interface RunResult {\n outcome: Outcome;\n stats: StatsSnapshot;\n /**\n * What the whole run spent, in the shape `formatEvent` takes, so the totals\n * a run reports can be handed straight back to the line formatter. The same\n * numbers are in `stats`; this is the summary a person reads rather than the\n * per-model record.\n */\n usage: UsageTotals;\n /** Final token accounting, when a budget was set. */\n budget?: { limit: number; spent: number; remaining: number };\n /** The registry id, when the run was supervised. */\n runId?: string;\n /** The run's page, when `monitor` was on: its address, and a way to close it. */\n monitor?: RunMonitor;\n /** The JSONL event record path, when recording was enabled. */\n recordPath?: string;\n /** The priced receipt, when `RunOptions.cost` was set. */\n cost?: CostReport;\n}\n\nfunction uniquePaths(paths: Array<string | undefined>): string[] {\n return [...new Set(paths.filter((path): path is string => path !== undefined))];\n}\n\nexport async function run(\n job: Job,\n options: RunOptions = {},\n): Promise<RunResult> {\n if (options.onCallback !== undefined && options.onCallback !== 'wait' && options.onCallback !== 'exit') {\n throw new TypeError('onCallback must be wait or exit');\n }\n const paramsInput: unknown = options.params === undefined ? {} : options.params;\n if (\n paramsInput === null\n || typeof paramsInput !== 'object'\n || Array.isArray(paramsInput)\n ) {\n throw new JsonValueError('', 'run brief must be a JSON object');\n }\n const params = cloneFrozenJson(paramsInput as RunBrief);\n const stats = new Stats();\n const controller = new AbortController();\n if (options.signal) {\n if (options.signal.aborted) controller.abort();\n else\n options.signal.addEventListener('abort', () => controller.abort(), {\n once: true,\n });\n }\n\n const budget =\n options.budget != null\n ? new Budget(\n typeof options.budget === 'number'\n ? { limit: options.budget }\n : options.budget,\n )\n : undefined;\n const dir = options.cwd ?? process.cwd();\n const shape = jobMeta(job);\n const title = shape?.name ?? 'run';\n const needsRunId = options.supervise || options.recordTo === 'auto';\n if (options.runId != null && !/^[a-z0-9][a-z0-9-]*$/.test(options.runId)) {\n throw new LoopError({\n code: 'CONFIG',\n message: `runId must match [a-z0-9][a-z0-9-]*, got \"${options.runId}\"`,\n });\n }\n const runId = needsRunId ? (options.runId ?? newRunId(title)) : undefined;\n const callerState = options.state ?? {};\n const resumeState: Record<string, unknown> = {};\n const privateKeys = new Set([RESUME_STAGE_OUTCOMES, RESUME_RECORDED_USAGE]);\n const initialState: Record<string, unknown> = new Proxy(callerState, {\n get(target, key) {\n return typeof key === 'string' && privateKeys.has(key)\n ? resumeState[key]\n : target[key as string];\n },\n set(target, key, value) {\n if (typeof key === 'string' && privateKeys.has(key)) {\n resumeState[key] = value;\n } else {\n target[key as string] = value;\n }\n return true;\n },\n });\n\n // Persistence sinks observe the same event stream as outside readers.\n const sinks: Array<(event: LoopEvent) => void> = [];\n if (options.resume === true && (options.recordTo === undefined || options.recordTo === 'auto')) {\n throw new TypeError('resume requires an explicit recordTo path');\n }\n const recordPath =\n options.recordTo === 'auto'\n ? join(ensureRunSubdir(dir, 'records'), `${runId!}.jsonl`)\n : options.recordTo;\n if (recordPath) {\n const resumed = options.resume === true ? readResumeRecord(recordPath) : undefined;\n sinks.push(makeRecorder(recordPath, {\n thin: options.recordTo === 'auto',\n ...(resumed === undefined ? {} : { resume: true }),\n }));\n if (resumed !== undefined && resumed.outcomes.anchors.size > 0) {\n initialState[RESUME_STAGE_OUTCOMES] = resumed.outcomes;\n initialState[RESUME_RECORDED_USAGE] = resumed.usage;\n }\n }\n // A supervised run registers itself in the global registry (~/.obversa/runs) and\n // writes its live state there, so another process can list/status/tail it.\n let supervisor: Supervisor | undefined;\n if (options.supervise) {\n supervisor = startSupervisor({\n runId: runId!,\n cwd: dir,\n title,\n shape,\n });\n sinks.push(supervisor.sink);\n }\n\n const callbacks = options.callbacks ?? createCallbackClient();\n let started: StartedMonitor | undefined;\n if (options.monitor ?? options.supervise === true) {\n started = await startMonitor({ job, callbacks, runId: supervisor?.runId ?? runId });\n sinks.push(started.sink);\n }\n\n const emit = (event: LoopEvent) => {\n stats.record(event);\n if (budget && event.kind === 'engine:usage') budget.addUsage(event.usage);\n options.onEvent?.(event);\n for (const sink of sinks) sink(event);\n };\n const resolveEngine = (ref?: EngineRef): Engine => {\n const selected = ref ?? options.engine;\n if (isEngine(selected)) return selected;\n if (selected === undefined) {\n throw new LoopError({\n code: 'CONFIG',\n message: 'an engine instance or named engine map entry is required',\n });\n }\n const engine = options.engines?.[selected];\n if (!isEngine(engine)) {\n throw new LoopError({\n code: 'CONFIG',\n message: `unknown engine \"${selected}\"`,\n });\n }\n return engine;\n };\n const rootEngine = options.engine === undefined ? undefined : resolveEngine(options.engine);\n\n // The root workspace is the substrate the whole run reads and writes. Branch\n // resolution is best-effort: a non-git cwd just leaves `branch` undefined.\n const workspace: Workspace = {\n dir,\n branch: await currentBranch({ cwd: dir, signal: controller.signal }),\n };\n\n // The page's address goes out before anything can fail, so the record\n // carries it on every path.\n if (started) emit({ kind: 'monitor', ts: Date.now(), path: [], url: started.monitor.url });\n\n const resultRunId = supervisor?.runId ?? runId;\n const runIdentity = {\n ...(resultRunId === undefined ? {} : { runId: resultRunId }),\n ...(recordPath === undefined ? {} : { recordPath }),\n };\n emit({ kind: 'run:start', ts: Date.now(), path: [], ...runIdentity });\n\n // Bring the environment up for the run before the job, so the gate can test\n // the running thing. A failed start fails the run cleanly rather than throwing.\n let environment: EnvHandle | undefined;\n if (options.environment) {\n try {\n environment = await options.environment.up(workspace, controller.signal);\n } catch (e) {\n const error = LoopError.from(e, { code: 'CONFIG' });\n emit({\n kind: 'error',\n ts: Date.now(),\n path: [],\n message: `environment \"${options.environment.name}\" failed to start: ${error.message}`,\n code: error.code,\n });\n const failOutcome: Outcome = {\n status: 'fail',\n summary: `environment failed to start: ${error.message}`,\n error,\n };\n const failStats = stats.snapshot();\n const failUsage = usageOf(failStats);\n emit({\n kind: 'run:end',\n ts: Date.now(),\n path: [],\n outcome: failOutcome,\n usage: failUsage,\n ...runIdentity,\n });\n supervisor?.finish(failOutcome);\n started?.finish(failOutcome);\n return {\n outcome: failOutcome,\n stats: failStats,\n usage: failUsage,\n budget: budget\n ? {\n limit: budget.limit,\n spent: budget.spent(),\n remaining: budget.remaining(),\n }\n : undefined,\n runId: resultRunId,\n recordPath,\n ...(started ? { monitor: started.monitor } : {}),\n };\n }\n }\n\n const rootCtx: JobContext = {\n engine: rootEngine,\n resolveEngine,\n signal: controller.signal,\n runId,\n fingerprintExcludePaths: uniquePaths([recordPath]),\n emit,\n params,\n state: initialState,\n memory: options.memory,\n callbacks,\n onCallback: options.onCallback ?? 'exit',\n workspace,\n environment,\n budget,\n onLimit: options.onLimit ?? 'auto',\n maxWaitMs: options.maxWaitMs ?? DEFAULT_MAX_WAIT_MS,\n iteration: 0,\n depth: 0,\n path: [],\n log: (message, level = 'info') =>\n emit({ kind: 'log', ts: Date.now(), path: [], level, message }),\n };\n\n let outcome: Outcome;\n try {\n outcome = await job(rootCtx);\n } catch (e) {\n const error = LoopError.from(e, { code: 'UNKNOWN' });\n emit({\n kind: 'error',\n ts: Date.now(),\n path: [],\n message: error.message,\n code: error.code,\n });\n outcome = { status: 'fail', summary: error.message, error };\n } finally {\n // Tear the environment down whatever happened (best-effort).\n if (environment) await environment.down(controller.signal).catch(() => {});\n }\n\n const finalStats = stats.snapshot();\n const finalUsage = usageOf(finalStats);\n emit({\n kind: 'run:end',\n ts: Date.now(),\n path: [],\n outcome,\n usage: finalUsage,\n ...runIdentity,\n });\n supervisor?.finish(outcome);\n started?.finish(outcome);\n\n return {\n outcome,\n stats: finalStats,\n usage: finalUsage,\n budget: budget\n ? {\n limit: budget.limit,\n spent: budget.spent(),\n remaining: budget.remaining(),\n }\n : undefined,\n runId: resultRunId,\n recordPath,\n ...(started ? { monitor: started.monitor } : {}),\n cost: options.cost\n ? costReport(finalStats, options.cost.prices, options.cost.baselineModel)\n : undefined,\n };\n}\n\n/** Process exit code mapped from a terminal outcome. */\nexport function exitCodeFor(outcome: Outcome): number {\n switch (outcome.status) {\n case 'pass':\n return 0;\n case 'fail':\n return 1;\n case 'exhausted':\n return 2;\n case 'aborted':\n return 130;\n case 'paused':\n return EXIT_PAUSED;\n }\n}\n","import { createHash, randomUUID } from 'node:crypto';\n\nimport { modelIdentity, type TeamSeat } from '@obversa/api';\nimport { readFileSync } from 'node:fs';\nimport { readFile, stat } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { agentJob, RECORDED_ENGINE_USAGE, type RecordedEngineUsage } from './core/job.js';\nimport { approval, delegateNodeJob } from './core/approval-job.js';\nimport { commandJob, predicate } from './core/condition.js';\nimport { copyJobMeta } from './core/describe.js';\nimport { dag } from './core/dag.js';\nimport { LoopError } from './core/errors.js';\nimport { loop } from './core/loop.js';\nimport { reviewPanel } from './core/feedback.js';\nimport type { Job, JobContext, Outcome, ConditionInput } from './core/types.js';\nimport { RESUME_RECORDED_USAGE, RESUME_STAGE_OUTCOMES } from './runtime/runner.js';\nimport type { ResumedStageRecords } from './runtime/persist.js';\n\nimport { outcomeFromAgentText } from './workflow-agent-response.js';\nimport {\n assertDistinctSeats,\n panelReviewers,\n requireNoFiles,\n requireNonEmptyFiles,\n seatIdentity,\n} from './workflow-support.js';\nimport type { ReviewerSeat, TeamInput } from './workflow-support.js';\n\nexport interface BriefSource {\n readonly brief: string;\n readonly files?: readonly string[];\n}\n\nexport interface PersonRole {\n readonly kind: 'person';\n readonly question: string;\n}\n\nexport type WorkflowRole = TeamSeat | readonly TeamSeat[] | PersonRole;\n\nexport interface WorkflowStageBase {\n readonly writes?: string | readonly string[];\n readonly desc?: string;\n readonly gate?: string;\n readonly when?: ConditionInput;\n readonly optional?: boolean;\n readonly needs?: string | readonly string[];\n readonly sendsBackTo?: string;\n readonly retry?: number;\n /** An interrupted attempt may run again without a person's reconciliation. */\n readonly retrySafe?: boolean;\n}\n\nexport type WorkflowStage = WorkflowStageBase & {\n} & (\n | { readonly agent: string; readonly reviewedBy?: string; readonly run?: never; readonly panel?: never; readonly input?: never; }\n | { readonly run: string | readonly string[]; readonly agent?: never; readonly panel?: never; readonly input?: never; }\n | { readonly panel: string; readonly agree?: number; readonly agent?: never; readonly run?: never; readonly input?: never; }\n | { readonly input: string; readonly agent?: never; readonly run?: never; readonly panel?: never; }\n);\n\nexport interface NamedStage {\n readonly name: string;\n readonly config: WorkflowStage;\n}\n\nexport interface WorkflowOptions {\n readonly timeout?: string | number;\n}\n\nexport interface WorkflowRecord {\n readonly outcome: Outcome;\n summary(): string;\n}\n\nexport interface WorkflowPostContext {\n readonly record: WorkflowRecord;\n}\n\nexport interface WorkflowConfig {\n readonly brief: string | BriefSource;\n readonly options?: WorkflowOptions;\n readonly roles: Readonly<Record<string, WorkflowRole>>;\n readonly stages: readonly NamedStage[];\n readonly post?: {\n readonly always?: (context: WorkflowPostContext) => void | Promise<void>;\n };\n}\n\nconst PATH_FIELDS = new Set(['files']);\n\nfunction text(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new TypeError(`${label} must be a non-empty string`);\n }\n return value.trim();\n}\n\nfunction relativePath(value: string, label: string): string {\n const path = text(value, label);\n if (path.startsWith('/') || path.split('/').includes('..')) {\n throw new TypeError(`${label} must be a relative path: ${path}`);\n }\n return path;\n}\n\nfunction pathList(value: unknown, label: string): string[] {\n const parsed = typeof value === 'string' && value.trim().startsWith('[')\n ? JSON.parse(value) as unknown\n : value;\n const values = Array.isArray(parsed)\n ? parsed\n : typeof parsed === 'string'\n ? parsed.split(',').map((item) => item.trim()).filter(Boolean)\n : [];\n if (!values.length) throw new TypeError(`${label} must contain at least one path`);\n const result = values.map((item, index) => relativePath(item, `${label}[${index}]`));\n if (new Set(result).size !== result.length) throw new TypeError(`${label} must not contain duplicates`);\n return result;\n}\n\nfunction parseFrontMatter(source: string): BriefSource {\n const lines = source.split(/\\r?\\n/);\n if (lines[0] !== '---') return { brief: source.trim() };\n const closingLine = lines.findIndex((line, index) => index > 0 && line === '---');\n if (closingLine < 0) throw new TypeError('brief front matter is not closed');\n const header = lines.slice(1, closingLine).join('\\n').trim();\n const body = lines.slice(closingLine + 1).join('\\n').trim();\n const values: Record<string, unknown> = {};\n for (const line of header.split(/\\r?\\n/)) {\n if (!line.trim()) continue;\n const separator = line.indexOf(':');\n if (separator < 1) throw new TypeError(`invalid brief front matter line: ${line}`);\n const key = line.slice(0, separator).trim();\n const value = line.slice(separator + 1).trim();\n if (PATH_FIELDS.has(key)) values[key] = pathList(value, key);\n else throw new TypeError(`unknown brief front matter field: ${key}`);\n }\n return {\n brief: body,\n ...(values.files === undefined ? {} : { files: values.files as string[] }),\n };\n}\n\nexport function briefFromFile(path: string | URL): BriefSource {\n return parseFrontMatter(readFileSync(path, 'utf8'));\n}\n\nexport function person(question: string): PersonRole {\n return { kind: 'person', question: text(question, 'person question') };\n}\n\nexport function stage(name: string, config: WorkflowStage): NamedStage {\n return { name: text(name, 'stage name'), config: { ...config } };\n}\n\nfunction duration(value: string | number | undefined): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'number') {\n if (!Number.isSafeInteger(value) || value < 1) throw new TypeError('workflow timeout must be positive');\n return value;\n }\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m|h)$/.exec(value.trim());\n if (!match) throw new TypeError(`workflow timeout is not a duration: ${value}`);\n const amount = Number(match[1]);\n const multiplier = { ms: 1, s: 1_000, m: 60_000, h: 3_600_000 }[match[2] as 'ms' | 's' | 'm' | 'h'];\n const milliseconds = amount * multiplier;\n if (!Number.isSafeInteger(milliseconds) || milliseconds < 1) throw new TypeError('workflow timeout must be positive');\n return milliseconds;\n}\n\nfunction writesOf(config: WorkflowStage): string[] {\n if (config.writes === undefined) return [];\n const values = Array.isArray(config.writes) ? config.writes : [config.writes];\n const writes = values.map((file, index) => relativePath(file, `writes[${index}]`));\n if (!writes.length || new Set(writes).size !== writes.length) throw new TypeError('writes must contain unique paths');\n return writes;\n}\n\nfunction retryCount(retry: number | undefined, label: string): number {\n if (retry === undefined) return 0;\n if (!Number.isSafeInteger(retry) || retry < 0) throw new TypeError(`${label} must be a non-negative integer`);\n return retry;\n}\n\nfunction optionalFlag(optional: unknown): boolean | undefined {\n if (optional === undefined) return undefined;\n if (typeof optional !== 'boolean') throw new TypeError('optional must be a boolean');\n return optional;\n}\n\nfunction retryOf(config: WorkflowStage): number {\n return config.retry === undefined ? 1 : retryCount(config.retry, 'retry');\n}\n\nfunction retryForStage(config: WorkflowStage, receivesKickback: boolean): number {\n if ('reviewedBy' in config && config.reviewedBy) return retryOf(config);\n if (receivesKickback) return retryOf(config);\n if (config.retry !== undefined) {\n throw new TypeError('retry must be on a reviewed stage or a kickback target');\n }\n return 0;\n}\n\nfunction stageDependencies(stages: readonly NamedStage[], index: number): string[] {\n const stage = stages[index]!;\n const requested = stage.config.needs === undefined\n ? []\n : Array.isArray(stage.config.needs)\n ? [...stage.config.needs]\n : [stage.config.needs];\n const earlier = new Set(stages.slice(0, index).map((candidate) => candidate.name));\n const explicit = requested.map((name, needIndex) => text(name, `needs[${needIndex}]`));\n for (const name of explicit) {\n if (!earlier.has(name)) {\n throw new TypeError(`stage ${stage.name} needs ${name}, which is not an earlier stage`);\n }\n }\n const previous = index === 0 ? [] : [stages[index - 1]!.name];\n return [...new Set([...previous, ...explicit])];\n}\n\nfunction panelInput(brief: BriefSource, files: readonly string[], workspace: string): TeamInput {\n return {\n brief: brief.brief,\n workspace,\n files,\n test: { command: 'true', args: [] },\n };\n}\n\nfunction reviewerDefinitions(\n named: NamedStage,\n seats: readonly TeamSeat[],\n): ReviewerSeat[] {\n return seats.map((seat, index) => ({\n name: `${named.name}-${index + 1}`,\n seat,\n }));\n}\n\nfunction reviewTarget(\n named: NamedStage,\n targetFiles?: readonly string[],\n): string {\n const writes = targetFiles ?? writesOf(named.config);\n return writes.length ? writes.join(', ') : 'no declared writes';\n}\n\nfunction reviewerPanel(\n brief: BriefSource,\n named: NamedStage,\n seats: readonly TeamSeat[],\n files: readonly string[],\n declaredFiles: readonly string[],\n targetFiles: readonly string[] | undefined,\n target?: string,\n agree?: number,\n): Job {\n const pass = agree === undefined ? 'all' : (() => {\n if (!Number.isSafeInteger(agree) || agree < 1 || agree > seats.length) {\n throw new TypeError(`agree must be between 1 and ${seats.length}`);\n }\n return agree;\n })();\n const definitions = reviewerDefinitions(named, seats);\n return reviewPanel({\n label: named.name,\n pass,\n target,\n reviewers: definitions.map((definition, index) => ({\n name: definition.name,\n scope: definition.scope,\n job: async (ctx) => {\n const reviewer = panelReviewers(\n definitions,\n panelInput(brief, files, ctx.workspace.dir),\n reviewTarget(named, targetFiles),\n { role: 'reviewer', stage: named.name },\n )[index]!;\n return requireNoFiles(\n `${named.name}-${definition.name}`,\n reviewer.job,\n ctx.workspace.dir,\n declaredFiles,\n )(ctx);\n },\n })),\n });\n}\n\nfunction briefValue(value: string | BriefSource): BriefSource {\n return typeof value === 'string' ? { brief: text(value, 'brief') } : {\n brief: text(value.brief, 'brief'),\n ...(value.files === undefined ? {} : { files: pathList(value.files, 'files') }),\n };\n}\n\nfunction role(roles: WorkflowConfig['roles'], name: string): WorkflowRole {\n const value = roles[name];\n if (value === undefined) throw new TypeError(`unknown workflow role: ${name}`);\n return value;\n}\n\nfunction seatRole(roles: WorkflowConfig['roles'], name: string): TeamSeat {\n const value = role(roles, name);\n if (Array.isArray(value) || typeof value !== 'object' || value === null || 'kind' in value) {\n throw new TypeError(`role ${name} must be an engine seat`);\n }\n const seat = value as TeamSeat;\n seatIdentity(seat);\n return seat;\n}\n\n/**\n * The family a recorded answer belongs to, read through the one derivation\n * every harness that runs other providers' models shares. A model string the\n * derivation refuses (no family, or the `unknown` placeholder) is unreadable\n * here, and an unreadable family refuses the review rather than passing it.\n */\nfunction recordedFamilyOf(model: string): string | undefined {\n try {\n return modelIdentity(model).modelFamily;\n } catch {\n return undefined;\n }\n}\n\nfunction recordedUsage(ctx: JobContext): readonly RecordedEngineUsage[] {\n const value = ctx.state[RECORDED_ENGINE_USAGE];\n return Array.isArray(value) ? value as readonly RecordedEngineUsage[] : [];\n}\n\n/** Refuse a panel when a recorded answer contradicts the distinct-family\n * requirement: an answer whose recorded family equals a family it must\n * differ from, or an answer whose family cannot be read at all. Every\n * recorded answer up to the panel is read, never the first per seat. The\n * refusal names the seats, their declared families and the answers, so a\n * reader can act on it without reading source. Fail closed on identity,\n * never pass in silence. */\nfunction assertRecordedFamilies(\n records: readonly RecordedEngineUsage[],\n opposing: readonly { readonly label: string; readonly family: string }[],\n): void {\n const declared = opposing.map((seat) => `${seat.label} declares ${seat.family}`).join('; ');\n for (const record of records) {\n const family = recordedFamilyOf(record.model);\n if (family === undefined) {\n throw new LoopError({\n code: 'BODY',\n phase: 'review',\n message: `recorded model family is unknown: the answer ${record.model} carries no readable family, and ${declared}; a panel that requires distinct families refuses an unreadable answer`,\n });\n }\n const collision = opposing.find((seat) => seat.family === family);\n if (collision !== undefined) {\n throw new LoopError({\n code: 'BODY',\n phase: 'review',\n message: `recorded model family collision: the answer ${record.model} belongs to the family ${family}, and ${collision.label} declares ${collision.family}; the panel requires the recorded answers to differ from it (${declared})`,\n });\n }\n }\n}\n\n/** The gate around a panel stage: before the reviewers run, every recorded\n * answer from the stages this panel must differ from is compared against\n * the reviewers' declared families; after the reviewers run, their own\n * recorded answers are compared against the families they must differ\n * from. Tagged writer and reviewer answers are checked; untagged advisor\n * and agentCheck answers are outside this gate. An unreadable family on\n * either tagged side is a refusal, never a pass. */\nfunction recordedFamilyGate(\n panel: Job,\n reviewers: readonly TeamSeat[],\n writerStageNames: readonly string[],\n writerFamilies: readonly string[],\n writerRunsInsidePanel: boolean,\n): Job {\n const reviewerDeclarations = reviewers.map((seat) => ({\n label: `reviewer seat ${seatIdentity(seat).model}`,\n family: seatIdentity(seat).modelFamily,\n }));\n const writerDeclarations = writerStageNames.map((name, index) => ({\n label: `writer stage ${name}`,\n family: writerFamilies[index] ?? '',\n })).filter((entry) => entry.family !== '');\n return async (ctx) => {\n try {\n const all = recordedUsage(ctx);\n const beforeLength = all.length;\n const writerSide = (records: readonly RecordedEngineUsage[]) => records.filter(\n (record) => record.role === 'writer'\n && record.stage !== undefined\n && writerStageNames.includes(record.stage),\n );\n const panelStage = ctx.graph?.node ?? ctx.path.at(-1) ?? 'panel';\n // Every recorded writer answer up to the panel keeps the reviewers'\n // declared difference. Records are compared by role and stage, never\n // by path.\n const beforeWriters = writerSide(all.slice(0, beforeLength));\n assertRecordedFamilies(beforeWriters, reviewerDeclarations);\n const outcome = await panel(ctx);\n if (outcome.status !== 'pass') return outcome;\n const current = recordedUsage(ctx);\n const after = current.slice(beforeLength);\n const afterWriters = writerSide(after);\n if (writerRunsInsidePanel && afterWriters.length === 0) {\n throw new LoopError({\n code: 'BODY',\n phase: 'review',\n message: `recorded model family missing: writer stage ${writerStageNames.join(', ')} has no recorded answer in stage ${panelStage}`,\n });\n }\n assertRecordedFamilies(afterWriters, reviewerDeclarations);\n const reviewerSide = after.filter((record) => record.role === 'reviewer');\n if (reviewerSide.length === 0) {\n throw new LoopError({\n code: 'BODY',\n phase: 'review',\n message: `recorded model family missing: reviewer stage ${panelStage} has no recorded answer`,\n });\n }\n assertRecordedFamilies(reviewerSide, writerDeclarations);\n // The two recorded sides themselves must be disjoint: two declared\n // differences mean nothing when one family answered both.\n const writerAnswerFamilies = new Set(\n writerSide(current).map((record) => recordedFamilyOf(record.model)).filter(\n (family): family is string => family !== undefined,\n ),\n );\n for (const record of reviewerSide) {\n const family = recordedFamilyOf(record.model);\n if (family === undefined) {\n throw new LoopError({\n code: 'BODY',\n phase: 'review',\n message: `recorded model family is unknown: the answer ${record.model} carries no readable family, and the panel requires the two recorded sides to differ`,\n });\n }\n if (writerAnswerFamilies.has(family)) {\n throw new LoopError({\n code: 'BODY',\n phase: 'review',\n message: `recorded model family collision: the answer ${record.model} belongs to the family ${family}, and a writer stage's recorded answer belongs to the same family; the panel requires the two recorded sides to be disjoint`,\n });\n }\n }\n return outcome;\n } catch (error) {\n if (error instanceof LoopError && error.message.startsWith('recorded model family')) {\n return { status: 'fail' as const, summary: error.message, error };\n }\n throw error;\n }\n };\n}\n\nfunction panelRole(roles: WorkflowConfig['roles'], name: string): readonly TeamSeat[] {\n const value = role(roles, name);\n if (!Array.isArray(value) || !value.length) throw new TypeError(`role ${name} must be a non-empty reviewer panel`);\n value.forEach((seat) => {\n if (seatIdentity(seat).tools.length === 0) {\n throw new TypeError(`reviewer role ${name} must declare read tools`);\n }\n });\n return value;\n}\n\nfunction inputRole(roles: WorkflowConfig['roles'], name: string): PersonRole {\n const value = role(roles, name);\n if (Array.isArray(value) || !('kind' in value) || value.kind !== 'person') {\n throw new TypeError(`role ${name} must be a person seat`);\n }\n return value;\n}\n\nfunction stageFiles(brief: BriefSource, stages: readonly NamedStage[], through: number): string[] {\n const fromBrief = brief.files === undefined ? [] : pathList(brief.files, 'files');\n const fromStages = stages.slice(0, through + 1).flatMap(({ config }) => writesOf(config));\n return [...new Set([...fromBrief, ...fromStages])];\n}\n\nfunction workflowFiles(brief: BriefSource, stages: readonly NamedStage[]): string[] {\n const fromBrief = brief.files === undefined ? [] : pathList(brief.files, 'files');\n const fromStages = stages.flatMap(({ config }) => writesOf(config));\n return [...new Set([...fromBrief, ...fromStages])];\n}\n\nfunction agentPrompt(\n brief: BriefSource,\n named: NamedStage,\n files: readonly string[],\n writes: readonly string[],\n): (ctx: JobContext) => string {\n return (ctx) => [\n `Work brief:\\n${brief.brief}`,\n `Stage: ${named.name}`,\n named.config.desc ? `Task: ${named.config.desc}` : undefined,\n named.config.gate ? `Gate: ${named.config.gate}` : undefined,\n `Workflow files: ${files.join(', ') || 'none'}`,\n `This stage may write only: ${writes.join(', ') || 'no files'}. Do not write any other declared workflow file.`,\n ctx.lastReview ? `Previous review:\\n${ctx.lastReview.summary ?? ctx.lastReview.status}` : undefined,\n 'Return one JSON object: {\"status\":\"pass\"|\"revise\",\"summary\":\"...\",\"findings\":[{\"evidence\":\"...\"}]}',\n ].filter((line): line is string => line !== undefined).join('\\n\\n');\n}\n\nfunction guardedAgent(\n brief: BriefSource,\n named: NamedStage,\n seat: TeamSeat,\n files: readonly string[],\n declaredFiles: readonly string[],\n): Job {\n const writes = writesOf(named.config);\n if (!writes.length) throw new TypeError(`agent stage ${named.name} must declare writes`);\n const target = named.config.sendsBackTo;\n const reviewedBy = 'reviewedBy' in named.config ? named.config.reviewedBy : undefined;\n const identity = seatIdentity(seat);\n const agent = agentJob({\n label: named.name,\n engine: seat.engine,\n model: identity.model,\n tools: [...identity.tools],\n allowedTools: [...identity.tools],\n workspaceMode: 'write',\n consumeFeedback: target !== undefined || reviewedBy !== undefined,\n prompt: agentPrompt(brief, named, files, writes),\n outcome: (textValue) => outcomeFromAgentText(textValue, target),\n recordAs: { role: 'writer', stage: named.name },\n });\n return async (ctx) => {\n const required = requireNonEmptyFiles(named.name, agent, ctx.workspace.dir, writes);\n const forbidden = declaredFiles.filter((file) => !writes.includes(file));\n return requireNoFiles(named.name, required, ctx.workspace.dir, forbidden, 'body')(ctx);\n };\n}\n\nfunction unchangedNoteGuard(\n label: string,\n job: Job,\n writes: readonly string[],\n): Job {\n const previousHashKey = `declarativePreviousHash:${label}`;\n return async (ctx) => {\n const outcome = await job(ctx);\n if (outcome.status !== 'pass') return outcome;\n let currentHash: string | undefined;\n try {\n const contents = await Promise.all(\n writes.map((file) => readFile(join(ctx.workspace.dir, file))),\n );\n const hash = createHash('sha256');\n contents.forEach((content) => hash.update(content));\n currentHash = hash.digest('hex');\n } catch {\n return outcome;\n }\n const previousHash = ctx.state[previousHashKey];\n if (ctx.lastReview && typeof previousHash === 'string' && previousHash === currentHash) {\n const summary = `${label} returned the rejected note unchanged`;\n return {\n status: 'fail',\n summary,\n error: new LoopError({ code: 'VALIDATION', phase: 'body', message: summary }),\n };\n }\n ctx.state[previousHashKey] = currentHash;\n return outcome;\n };\n}\n\nfunction stageJob(\n brief: BriefSource,\n named: NamedStage,\n roles: WorkflowConfig['roles'],\n files: readonly string[],\n declaredFiles: readonly string[],\n targetFiles: readonly string[] | undefined,\n familyTargetStageNames: readonly string[],\n familyTargetFamilies: readonly string[],\n): Job {\n const config = named.config;\n if ('agent' in config && config.agent !== undefined) {\n const writes = writesOf(config);\n const guarded = guardedAgent(brief, named, seatRole(roles, config.agent), files, declaredFiles);\n const job = config.reviewedBy === undefined\n ? guarded\n : unchangedNoteGuard(named.name, guarded, writes);\n if (config.reviewedBy === undefined) return job;\n const reviewers = panelRole(roles, config.reviewedBy);\n const panel = reviewerPanel(brief, named, reviewers, files, declaredFiles, undefined);\n const retry = retryOf(config);\n const reviewLoop = loop({\n name: `${named.name}-review`,\n body: job,\n until: predicate(async (ctx) => {\n const writes = writesOf(config);\n for (const file of writes) {\n try {\n const details = await stat(join(ctx.workspace.dir, file));\n if (!details.isFile() || details.size === 0) return false;\n } catch {\n return false;\n }\n }\n return true;\n }, `${named.name} writes`),\n // Review events use a child path. The jobs' role tags, not their\n // paths, separate the recorded sides. The outcome passes through.\n review: async (ctx) => panel({\n ...ctx,\n depth: ctx.depth + 1,\n path: [...ctx.path, 'review-panel'],\n }),\n max: retry + 1,\n maxReviewRestarts: retry,\n noProgress: { window: 2, gate: true },\n });\n return copyJobMeta(\n recordedFamilyGate(\n reviewLoop,\n reviewers,\n [named.name],\n [seatIdentity(seatRole(roles, config.agent)).modelFamily],\n true,\n ),\n reviewLoop,\n );\n }\n if ('run' in config && config.run !== undefined) {\n const command = commandJob(named.name, config.run, { target: config.sendsBackTo });\n const writes = writesOf(config);\n const forbidden = declaredFiles.filter((file) => !writes.includes(file));\n const guarded: Job = async (ctx) => requireNoFiles(\n named.name,\n command,\n ctx.workspace.dir,\n forbidden,\n 'body',\n )(ctx);\n return copyJobMeta(guarded, command);\n }\n if ('panel' in config && config.panel !== undefined) {\n const reviewers = panelRole(roles, config.panel);\n const panel = reviewerPanel(brief, named, reviewers, files, declaredFiles, targetFiles, config.sendsBackTo, config.agree);\n return copyJobMeta(recordedFamilyGate(panel, reviewers, familyTargetStageNames, familyTargetFamilies, false), panel);\n }\n if ('input' in config && config.input !== undefined) {\n const personRole = inputRole(roles, config.input);\n return approval(named.name, { question: personRole.question, target: config.sendsBackTo });\n }\n throw new TypeError(`stage ${named.name} must declare agent, run, panel or input`);\n}\n\nfunction workflowRecord(outcome: Outcome): WorkflowRecord {\n return {\n outcome,\n summary: () => outcome.summary ?? outcome.status,\n };\n}\n\nfunction precedingAgent(stages: readonly NamedStage[], index: number): NamedStage | undefined {\n return [...stages.slice(0, index)]\n .reverse()\n .find((candidate) => 'agent' in candidate.config && candidate.config.agent !== undefined);\n}\n\nfunction panelTarget(stages: readonly NamedStage[], index: number): NamedStage | undefined {\n const config = stages[index]!.config;\n if (!('panel' in config) || config.panel === undefined) return undefined;\n if (config.sendsBackTo !== undefined) {\n return stages.find((candidate) => candidate.name === config.sendsBackTo);\n }\n return precedingAgent(stages, index);\n}\n\nfunction panelReviewFiles(stages: readonly NamedStage[], index: number): string[] {\n const target = panelTarget(stages, index);\n const preceding = precedingAgent(stages, index);\n const targetWrites = target === undefined ? [] : writesOf(target.config);\n return targetWrites.length\n ? targetWrites\n : preceding === undefined\n ? []\n : writesOf(preceding.config);\n}\n\n/** A canonical, digestable view of a declared value: primitives pass\n * through, plain objects sort their keys, functions serialize as their\n * source, so a changed predicate changes the digest. */\nfunction canonicalForDigest(value: unknown): unknown {\n if (typeof value === 'function') return `fn:${value.toString()}`;\n if (Array.isArray(value)) return value.map(canonicalForDigest);\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(\n Object.keys(value as Record<string, unknown>).sort().map((key) => [\n key,\n canonicalForDigest((value as Record<string, unknown>)[key]),\n ]),\n );\n }\n return value;\n}\n\n/** The workflow's resume identity: one digest over everything a change to\n * which means the recorded completions no longer describe this workflow.\n * Restart-from-the-top on any change is the honest default. The digest\n * covers only the DECLARED shape: the brief, the stage list with each\n * stage's declared fields, and each role's declared identity. Engine\n * instances are excluded because they carry mutable call state, and a\n * digest that changes between two runs of the same workflow cannot match\n * anything. */\nfunction resumeIdentity(name: string, config: WorkflowConfig): string {\n const declared = {\n name,\n brief: config.brief,\n stages: config.stages.map((named) => ({\n name: named.name,\n config: canonicalForDigest(named.config),\n })),\n roles: Object.fromEntries(Object.entries(config.roles).map(([key, value]) => [\n key,\n Array.isArray(value)\n ? value.map((seat) => seatIdentity(seat))\n : typeof value === 'object' && value !== null && 'kind' in value\n ? value\n : seatIdentity(value as TeamSeat),\n ])),\n };\n return createHash('sha256').update(JSON.stringify(declared)).digest('hex');\n}\n\nfunction restoreRecordedUsage(ctx: JobContext): void {\n const priorUsage = (ctx.state[RESUME_RECORDED_USAGE] as ReadonlyMap<string, readonly RecordedEngineUsage[]> | undefined)\n ?.get(ctx.path.join('/'));\n if (priorUsage?.length) {\n const current = recordedUsage(ctx);\n const key = (record: RecordedEngineUsage) => JSON.stringify([record.path, record.role, record.model]);\n const present = new Map<string, number>();\n for (const record of current) {\n const identity = key(record);\n present.set(identity, (present.get(identity) ?? 0) + 1);\n }\n const missing = priorUsage.filter((record) => {\n const identity = key(record);\n const count = present.get(identity) ?? 0;\n if (count === 0) return true;\n present.set(identity, count - 1);\n return false;\n });\n if (missing.length) ctx.state[RECORDED_ENGINE_USAGE] = [...current, ...missing];\n }\n}\n\n/** Reuse a completed first attempt, or reconcile an unsafe interrupted one. */\nfunction resumeGuard(job: Job, identity: string, label: string, retrySafe: boolean): Job {\n const guarded: Job = async (ctx) => {\n const resumed = ctx.state[RESUME_STAGE_OUTCOMES] as ResumedStageRecords | undefined;\n const parentPath = ctx.path.slice(0, -1).join('/');\n const anchor = resumed?.anchors.get(parentPath);\n const recorded = anchor?.identity === identity && anchor.workspace === ctx.workspace.dir\n ? resumed?.stages.get(ctx.path.join('/'))\n : undefined;\n if (ctx.graph?.attempt === 1 && recorded !== undefined) {\n if (recorded.kind === 'interrupted') {\n if (!retrySafe) {\n restoreRecordedUsage(ctx);\n return reconcileInterrupted(ctx, guarded, job, label, identity, anchor!.recordId, recorded.startLine);\n }\n } else if (recorded.outcome.status === 'pass'\n && (recorded.outcome.data as { skipped?: boolean } | undefined)?.skipped !== true) {\n restoreRecordedUsage(ctx);\n return recorded.outcome;\n } else if (recorded.outcome.status === 'paused') {\n const request = recorded.outcome.data as {\n requestId?: string;\n resumeReconciliation?: boolean;\n input?: { startLine?: number };\n } | undefined;\n const pending = ctx.callbacks === undefined\n ? []\n : await ctx.callbacks.listPending();\n if (ctx.onCallback !== 'wait' && request?.requestId !== undefined\n && pending.some((candidate) => candidate.requestId === request.requestId)) {\n return recorded.outcome;\n }\n if (request?.resumeReconciliation === true && request.input?.startLine !== undefined) {\n restoreRecordedUsage(ctx);\n return reconcileInterrupted(ctx, guarded, job, label, identity, anchor!.recordId, request.input.startLine);\n }\n }\n }\n return delegateNodeJob(ctx, guarded, job, ctx);\n };\n return guarded;\n}\n\nasync function reconcileInterrupted(\n ctx: JobContext,\n owner: Job,\n job: Job,\n label: string,\n identity: string,\n recordId: string,\n startLine: number,\n): Promise<Outcome> {\n const question = approval(`reconcile ${label}`, {\n question: `Did stage \"${label}\" finish? Approve to continue without running it again; refuse if it did not finish.`,\n input: { identity, workspace: ctx.workspace.dir, stage: label, recordId, startLine },\n });\n const outcome = await delegateNodeJob(ctx, owner, question, {\n ...ctx,\n emit(event) {\n // A crash during the wait must keep the recovery question, not rerun the stage.\n ctx.emit(event.kind === 'dag:node' && event.outcome?.status === 'paused'\n ? { ...event, outcome: {\n ...event.outcome,\n data: { ...(event.outcome.data ?? {}), resumeReconciliation: true },\n } }\n : event);\n },\n });\n if (outcome.status === 'fail' && (outcome.data as { approved?: boolean } | undefined)?.approved === false) {\n // A crash during this new attempt must not reuse the answer about the old one.\n ctx.emit({\n kind: 'dag:node', ts: Date.now(), path: ctx.path.slice(0, -1), node: label,\n phase: 'start', attempt: (ctx.graph?.attempt ?? 1) + 1,\n });\n return delegateNodeJob(ctx, owner, job, ctx);\n }\n return { ...outcome, data: { ...(outcome.data ?? {}), resumeReconciliation: true } };\n}\n\nexport function workflow(name: string, config: WorkflowConfig): Job {\n const workflowName = text(name, 'workflow name');\n const brief = briefValue(config.brief);\n if (!Array.isArray(config.stages) || !config.stages.length) throw new TypeError('workflow needs at least one stage');\n const names = new Set<string>();\n const incomingTargets = new Set<string>();\n for (const named of config.stages) {\n if (named.config.sendsBackTo !== undefined) incomingTargets.add(named.config.sendsBackTo);\n }\n for (const named of config.stages) {\n const stageName = text(named.name, 'stage name');\n if (names.has(stageName)) throw new TypeError(`workflow stage is duplicated: ${stageName}`);\n names.add(stageName);\n const stageConfig = named.config;\n const sendsBackTo = stageConfig.sendsBackTo;\n if (sendsBackTo === stageName) {\n throw new TypeError(`stage ${stageName} cannot send back to itself; use reviewedBy`);\n }\n if (sendsBackTo !== undefined) {\n const targetIndex = config.stages.findIndex((item) => item.name === sendsBackTo);\n if (targetIndex < 0) throw new TypeError(`stage ${stageName} sends back to unknown stage ${sendsBackTo}`);\n if (targetIndex >= config.stages.indexOf(named)) {\n throw new TypeError(`stage ${stageName} sends back to ${sendsBackTo}, which is not an earlier stage`);\n }\n }\n const reviewedBy = 'reviewedBy' in stageConfig ? stageConfig.reviewedBy : undefined;\n if (reviewedBy !== undefined && !('agent' in stageConfig)) {\n throw new TypeError(`reviewedBy is for agent stages: ${stageName}`);\n }\n if (reviewedBy !== undefined && stageConfig.sendsBackTo !== undefined) {\n throw new TypeError(`stage ${stageName} cannot use both reviewedBy and sendsBackTo`);\n }\n retryForStage(stageConfig, incomingTargets.has(stageName));\n optionalFlag(stageConfig.optional);\n if (stageConfig.retrySafe !== undefined && typeof stageConfig.retrySafe !== 'boolean') {\n throw new TypeError('retrySafe must be a boolean');\n }\n writesOf(stageConfig);\n }\n for (const [index, named] of config.stages.entries()) {\n const stageConfig = named.config;\n if ('agent' in stageConfig && stageConfig.agent !== undefined && stageConfig.reviewedBy !== undefined) {\n assertDistinctSeats([\n seatRole(config.roles, stageConfig.agent),\n ...panelRole(config.roles, stageConfig.reviewedBy),\n ]);\n }\n if ('panel' in stageConfig && stageConfig.panel !== undefined) {\n const preceding = precedingAgent(config.stages, index);\n const target = panelTarget(config.stages, index);\n const familyTargets = [preceding, target]\n .filter((candidate): candidate is NamedStage => candidate !== undefined)\n .filter((candidate, targetIndex, candidates) =>\n candidates.findIndex((other) => other.name === candidate.name) === targetIndex,\n );\n const targetSeats = familyTargets.filter(\n (candidate): candidate is NamedStage & { config: { agent: string } } =>\n 'agent' in candidate.config && candidate.config.agent !== undefined,\n );\n if (targetSeats.length) {\n const reviewers = panelRole(config.roles, stageConfig.panel);\n for (const targetSeat of targetSeats) {\n assertDistinctSeats([\n seatRole(config.roles, targetSeat.config.agent),\n ...reviewers,\n ]);\n }\n }\n }\n }\n const timeoutMs = duration(config.options?.timeout);\n const maxKickbacks: Record<string, number> = {};\n for (const named of config.stages) {\n if (named.config.sendsBackTo !== undefined) {\n const target = config.stages.find((candidate) => candidate.name === named.config.sendsBackTo)!;\n maxKickbacks[named.config.sendsBackTo] = Math.max(\n maxKickbacks[named.config.sendsBackTo] ?? 0,\n retryOf(target.config),\n );\n }\n }\n const stageJobIdentity = resumeIdentity(workflowName, config);\n const declaredFiles = workflowFiles(brief, config.stages);\n const nodes = Object.fromEntries(config.stages.map((named, index) => {\n const files = stageFiles(brief, config.stages, index);\n const stageConfig = named.config;\n const targetFiles =\n 'panel' in stageConfig && stageConfig.panel !== undefined\n ? panelReviewFiles(config.stages, index)\n : undefined;\n const panelFamilyTargets = ('panel' in stageConfig && stageConfig.panel !== undefined)\n ? (() => {\n const preceding = precedingAgent(config.stages, index);\n const target = panelTarget(config.stages, index);\n return [preceding, target]\n .filter((candidate): candidate is NamedStage => candidate !== undefined)\n .filter((candidate, targetIndex, candidates) =>\n candidates.findIndex((other) => other.name === candidate.name) === targetIndex,\n )\n .filter((candidate): candidate is NamedStage & { config: { agent: string } } =>\n 'agent' in candidate.config && candidate.config.agent !== undefined,\n );\n })()\n : [];\n const innerStage = stageJob(\n brief,\n named,\n config.roles,\n files,\n declaredFiles,\n targetFiles,\n panelFamilyTargets.map((candidate) => candidate.name),\n panelFamilyTargets.map((candidate) => seatIdentity(seatRole(config.roles, candidate.config.agent)).modelFamily),\n );\n return [named.name, {\n job: copyJobMeta(resumeGuard(innerStage, stageJobIdentity, named.name, stageConfig.retrySafe === true), innerStage),\n needs: stageDependencies(config.stages, index),\n ...(named.config.desc === undefined ? {} : { desc: named.config.desc }),\n ...(named.config.gate === undefined ? {} : { gate: named.config.gate }),\n ...(named.config.when === undefined ? {} : { when: named.config.when }),\n ...(named.config.optional === undefined ? {} : { optional: named.config.optional }),\n ...(timeoutMs === undefined ? {} : { timeoutMs }),\n }];\n }));\n const graph = dag({\n name: workflowName,\n nodes,\n ...(Object.keys(maxKickbacks).length ? { maxKickbacks } : {}),\n });\n const resumeGraph = copyJobMeta(async (ctx: JobContext) => {\n const prior = (ctx.state[RESUME_STAGE_OUTCOMES] as ResumedStageRecords | undefined)\n ?.anchors.get([...ctx.path, workflowName].join('/'));\n ctx.emit({\n kind: 'workflow:start',\n ts: Date.now(),\n path: [...ctx.path, workflowName],\n identity: stageJobIdentity,\n workspace: ctx.workspace.dir,\n recordId: prior?.identity === stageJobIdentity && prior.workspace === ctx.workspace.dir\n ? prior.recordId ?? randomUUID()\n : randomUUID(),\n });\n return graph(ctx);\n }, graph);\n const always = config.post?.always;\n if (!always) return resumeGraph;\n return loop({\n name: `${workflowName}-post`,\n body: resumeGraph,\n until: predicate(() => true, 'workflow complete'),\n max: 1,\n onComplete: async (outcome, ctx) => {\n try {\n await always({ record: workflowRecord(outcome) });\n } catch (error) {\n ctx.log(`workflow post.always failed: ${error instanceof Error ? error.message : String(error)}`, 'warn');\n }\n },\n });\n}\n","/**\n * The DAG graph type (roadmap D6): dependency graphs, sequences, parallel\n * work, and readable pipelines on the common graph contract.\n *\n * One node is one DAG node; edges are dependencies (source must finish\n * before target runs). Required, optional, and finalizer kinds carry the\n * legacy failure policy: a required node failing blocks its dependents and\n * fails the run; an optional failure neither fails the run nor blocks\n * dependents; a completed node whose result carries `skipped: true` counts\n * as an expected skip, which is neutral and never blocks (the legacy unmet\n * `when` gate). With `stopOnError`, the first required failure stops\n * scheduling anything not already in flight; independent branches continue\n * without it. Finalizers run after everything else settles, on failure as\n * on success, and can never turn a failed run green.\n *\n * This is the pure form only: definition validation (including cycle\n * detection through the pinned `toposort`), state reduction, decisions,\n * bounds, and the plan description. Job execution, isolation, kickbacks,\n * and the sequence/parallel/pipeline authoring helpers are the runtime\n * owner's; this file only folds the standard node events and decides what\n * can run next.\n *\n * Event vocabulary (all JSON, the executor's standard node events, recorded\n * into the durable `graph:` namespace):\n * - `node-dispatched` — a node attempt started at a position\n * - `node-completed` — a node attempt finished; a result carrying\n * `skipped: true` is an expected skip\n * - `node-failed` — a node attempt failed with a typed code\n * - `node-paused` — a node attempt paused; the DAG waits\n * - `node-resumed` — a paused node continues its attempt\n *\n * A dispatch, completion, or failure counts only for the node's attempt\n * currently in flight at that exact position; a stale event from an earlier\n * attempt is ignored. Positions are minted as `dag/${node}/${attempt}` where\n * the attempt number is the count of recorded dispatches for that node, so\n * every retry takes a fresh position. Retry is graph policy, declared as a\n * per-node cap: decide offers a fresh dispatch for a failed required node\n * while the cap allows, stopOnError suppresses retries as it stops\n * scheduling, and the DAG fails a node only once its cap is exhausted. A\n * late result for a superseded attempt is ignored.\n *\n * A paused node pauses the whole DAG, as the legacy scheduler does. The form\n * first waits for every other attempt in the recorded batch to settle, then\n * returns the pause command. A resumed node continues the same attempt.\n *\n * Each decision waits for every recorded attempt to settle, then dispatches\n * one ready batch that fits the global and keyed limits in declaration order.\n * Positions stay unique across the run; the form never re-emits a dispatch\n * for an attempt already recorded in the folded event history. Each dispatch\n * carries the named results of its direct predecessors. Completion returns\n * every completed node result by node name.\n */\n\nimport { isDeepStrictEqual } from 'node:util';\n\nimport toposort from 'toposort';\n\nimport type { GraphCommand } from '../graph/commands.js';\nimport type { GraphDefinition, NodeId } from '../graph/kernel.js';\nimport type { GraphDescriptionInput } from '../graph/plan.js';\nimport type { GraphEvent, GraphType } from '../graph/type.js';\nimport { GraphValidationError, type GraphValidationIssue, type JsonObject, type JsonValue } from '../graph/value.js';\n\nexport type DagNodeKind = 'required' | 'optional' | 'finalizer';\n\ntype DagExecutionTargetData = {\n readonly adapter: string;\n readonly provider: string;\n readonly modelFamily: string;\n readonly model: string;\n readonly tools: readonly string[];\n};\n\ntype DagExecutionLaneData = {\n readonly id: string;\n readonly requested: DagExecutionTargetData;\n readonly knownSubstitutions: readonly DagExecutionTargetData[];\n};\n\nexport type DagNodeData = JsonObject & {\n readonly kind: DagNodeKind;\n /** Concurrency key; nodes sharing a key share its declared limit. */\n readonly key: string | null;\n /** Engine lane for this node; omit it for a data-only node. */\n readonly lane?: DagExecutionLaneData;\n};\n\nexport interface DagEdgeData extends JsonObject {}\n\nexport interface DagData extends JsonObject {\n /** Max node attempts running at once. The legacy default is 4. */\n readonly globalConcurrency: number;\n /** Per-key attempt caps; every node key must appear here. */\n readonly keyedConcurrency: Readonly<Record<string, number>>;\n /** When true, the first required failure stops scheduling anything not in flight. */\n readonly stopOnError: boolean;\n /** Retries offered per failed required node before the DAG fails. */\n readonly retryCapPerNode: number;\n}\n\nexport type DagDefinition = GraphDefinition<DagNodeData, DagEdgeData, DagData>;\n\nexport interface NodeDispatchedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n}\n\nexport interface NodeCompletedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n readonly result: JsonValue;\n}\n\nexport interface NodeFailedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n readonly code: string;\n}\n\nexport interface NodePausedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n readonly reason: string;\n readonly request: JsonValue;\n}\n\nexport interface NodeResumedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n}\n\nexport type DagEvent =\n | GraphEvent<'node-dispatched', NodeDispatchedPayload>\n | GraphEvent<'node-completed', NodeCompletedPayload>\n | GraphEvent<'node-failed', NodeFailedPayload>\n | GraphEvent<'node-paused', NodePausedPayload>\n | GraphEvent<'node-resumed', NodeResumedPayload>;\n\nexport type DagNodeStatus =\n | 'pending'\n | 'in-flight'\n | 'paused'\n | 'passed'\n | 'skipped'\n | 'failed';\n\nexport interface DagNodeState extends JsonObject {\n readonly status: DagNodeStatus;\n /** Recorded dispatch count; the source of fresh attempt positions. */\n readonly attempts: number;\n /** The in-flight attempt position, or null. */\n readonly inFlight: string | null;\n /** The reason supplied by a paused attempt, or null. */\n readonly pauseReason: string | null;\n /** The completed payload, or null before a successful completion. */\n readonly result: JsonValue;\n}\n\nexport interface DagStatus extends JsonObject {\n readonly nodes: Readonly<Record<NodeId, DagNodeState>>;\n}\n\nexport type DagRequirements = { readonly memory: 'unused' };\n\nfunction issue(code: string, path: string, message: string): GraphValidationIssue {\n return { code, path, message };\n}\n\nconst NODE_KINDS = new Set<DagNodeKind>(['required', 'optional', 'finalizer']);\n\n/** Form-level validation on top of the kernel's structural checks. */\nfunction validateDag(definition: DagDefinition): void {\n const issues: GraphValidationIssue[] = [];\n const finalizers = new Set<NodeId>();\n const keys = new Set<string>();\n const lanes = new Map<string, DagExecutionLaneData>();\n\n for (const node of definition.nodes) {\n if (!NODE_KINDS.has(node.data.kind)) {\n issues.push(issue(\n 'INVALID_NODE_KIND',\n `/nodes/${node.id}/data/kind`,\n `Node kind must be required, optional, or finalizer; received ${JSON.stringify(node.data.kind)}.`,\n ));\n }\n if (node.data.kind === 'finalizer') finalizers.add(node.id);\n if (node.data.key !== null) keys.add(node.data.key);\n const lane = node.data.lane;\n if (lane !== undefined) {\n const declared = lanes.get(lane.id);\n if (declared !== undefined && !isDeepStrictEqual(declared, lane)) {\n issues.push(issue(\n 'CONFLICTING_LANE',\n `/nodes/${node.id}/data/lane`,\n `Lane \"${lane.id}\" must have the same declaration on every node that uses it.`,\n ));\n } else {\n lanes.set(lane.id, lane);\n }\n }\n }\n\n if (\n !Number.isSafeInteger(definition.data.globalConcurrency)\n || definition.data.globalConcurrency < 1\n ) {\n issues.push(issue(\n 'INVALID_LIMIT',\n '/data/globalConcurrency',\n 'globalConcurrency must be a safe integer of at least 1.',\n ));\n }\n\n for (const [key, limit] of Object.entries(definition.data.keyedConcurrency)) {\n if (!Number.isSafeInteger(limit) || limit < 1) {\n issues.push(issue(\n 'INVALID_LIMIT',\n `/data/keyedConcurrency/${key}`,\n `The limit for key \"${key}\" must be a safe integer of at least 1.`,\n ));\n }\n }\n for (const key of keys) {\n if (!Object.hasOwn(definition.data.keyedConcurrency, key)) {\n issues.push(issue(\n 'MISSING_KEY_LIMIT',\n `/data/keyedConcurrency`,\n `Nodes with key \"${key}\" need a limit in keyedConcurrency.`,\n ));\n }\n }\n\n if (typeof definition.data.stopOnError !== 'boolean') {\n issues.push(issue(\n 'INVALID_STOP_ON_ERROR',\n '/data/stopOnError',\n 'stopOnError must be a boolean.',\n ));\n }\n\n if (\n !Number.isSafeInteger(definition.data.retryCapPerNode)\n || definition.data.retryCapPerNode < 0\n ) {\n issues.push(issue(\n 'INVALID_LIMIT',\n '/data/retryCapPerNode',\n 'retryCapPerNode must be a safe integer of at least 0.',\n ));\n }\n\n for (const edge of definition.edges) {\n if (finalizers.has(edge.source) || finalizers.has(edge.target)) {\n issues.push(issue(\n 'FINALIZER_HAS_EDGES',\n `/edges/${edge.id}`,\n `Edge \"${edge.id}\" touches finalizer node \"${finalizers.has(edge.source) ? edge.source : edge.target}\"; finalizers are edge-free.`,\n ));\n }\n }\n\n try {\n toposort(definition.edges.map((edge) => [edge.source, edge.target] as [string, string]));\n } catch {\n issues.push(issue(\n 'DAG_CYCLE',\n '/edges',\n 'The dependency edges contain a cycle.',\n ));\n }\n\n if (issues.length > 0) {\n throw new GraphValidationError('Invalid dag definition.', issues);\n }\n}\n\nfunction isSkipped(result: JsonValue): boolean {\n return typeof result === 'object'\n && result !== null\n && !Array.isArray(result)\n && (result as { skipped?: unknown }).skipped === true;\n}\n\nfunction greenFor(\n nodeId: NodeId,\n nodes: Readonly<Record<NodeId, DagNodeState>>,\n kindOf: ReadonlyMap<NodeId, DagNodeKind>,\n): boolean {\n const state = nodes[nodeId]!;\n if (state.status === 'passed' || state.status === 'skipped') return true;\n if (state.status === 'failed') return kindOf.get(nodeId) === 'optional';\n return false;\n}\n\n/**\n * The DAG graph type. Pure data operations only: no file, model, process,\n * clock, or storage services (the D2 contract).\n */\nexport const dag: GraphType<DagDefinition, DagStatus, DagEvent, DagRequirements> = {\n kind: 'dag',\n version: 1,\n compile(definition) {\n validateDag(definition);\n const kindOf = new Map(definition.nodes.map((node) => [node.id, node.data.kind]));\n const finalizers = definition.nodes.filter((node) => node.data.kind === 'finalizer');\n const workers = definition.nodes.filter((node) => node.data.kind !== 'finalizer');\n const executionLanes = new Map<string, DagExecutionLaneData>();\n for (const node of definition.nodes) {\n if (node.data.lane !== undefined) executionLanes.set(node.data.lane.id, node.data.lane);\n }\n const predecessors = new Map<NodeId, readonly NodeId[]>(\n definition.nodes.map((node) => [node.id, definition.edges\n .filter((edge) => edge.target === node.id)\n .map((edge) => edge.source)]),\n );\n\n const inFlightCount = (state: DagStatus): number =>\n Object.values(state.nodes).filter((node) => node.status === 'in-flight').length;\n\n const claimable = (\n state: DagStatus,\n nodeId: NodeId,\n stopOnFailure: boolean,\n ): boolean => {\n const node = state.nodes[nodeId]!;\n if (node.status === 'failed') {\n return !definition.data.stopOnError\n && kindOf.get(nodeId) === 'required'\n && node.attempts <= definition.data.retryCapPerNode;\n }\n if (node.status !== 'pending') return false;\n if (stopOnFailure\n && definition.data.stopOnError\n && workers.some((worker) => state.nodes[worker.id]!.status === 'failed'\n && kindOf.get(worker.id) !== 'optional')) {\n return false;\n }\n return predecessors.get(nodeId)!.every((dep) => greenFor(dep, state.nodes, kindOf));\n };\n\n const anyInFlight = (state: DagStatus): boolean => inFlightCount(state) > 0;\n\n return {\n requirements: { memory: 'unused' },\n initialState: () => ({\n nodes: Object.fromEntries(definition.nodes.map((node) => [\n node.id,\n { status: 'pending', attempts: 0, inFlight: null, pauseReason: null, result: null },\n ])),\n }),\n reduce(state, event) {\n const node = state.nodes[event.payload.nodeId];\n if (node === undefined) return state;\n switch (event.type) {\n case 'node-dispatched': {\n const fresh = event.payload.position\n === `dag/${event.payload.nodeId}/${node.attempts + 1}`;\n if (!fresh) return state;\n if (node.status !== 'pending' && node.status !== 'failed') return state;\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: {\n status: 'in-flight',\n attempts: node.attempts + 1,\n inFlight: event.payload.position,\n pauseReason: null,\n result: null,\n },\n },\n };\n }\n case 'node-completed': {\n if (node.status !== 'in-flight' || node.inFlight !== event.payload.position) {\n return state;\n }\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: {\n status: isSkipped(event.payload.result) ? 'skipped' : 'passed',\n attempts: node.attempts,\n inFlight: null,\n pauseReason: null,\n result: event.payload.result,\n },\n },\n };\n }\n case 'node-failed': {\n if (node.status !== 'in-flight' || node.inFlight !== event.payload.position) {\n return state;\n }\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: {\n status: 'failed',\n attempts: node.attempts,\n inFlight: null,\n pauseReason: null,\n result: null,\n },\n },\n };\n }\n case 'node-paused': {\n if (node.status !== 'in-flight' || node.inFlight !== event.payload.position) {\n return state;\n }\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: {\n ...node,\n status: 'paused',\n pauseReason: event.payload.reason,\n },\n },\n };\n }\n case 'node-resumed': {\n if (node.status !== 'paused' || node.inFlight !== event.payload.position) {\n return state;\n }\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: {\n ...node,\n status: 'in-flight',\n pauseReason: null,\n },\n },\n };\n }\n default:\n return state;\n }\n },\n decide(state) {\n if (anyInFlight(state)) return [];\n\n const resultsFor = (nodeIds: readonly NodeId[]): JsonObject =>\n Object.fromEntries(nodeIds.flatMap((nodeId) => {\n const node = state.nodes[nodeId]!;\n return node.status === 'passed' || node.status === 'skipped'\n ? [[nodeId, node.result]]\n : [];\n }));\n const dispatch = (nodeId: NodeId): GraphCommand => {\n const node = state.nodes[nodeId]!;\n const results = resultsFor(predecessors.get(nodeId)!);\n return {\n kind: 'dispatch',\n nodeId,\n input: {\n positionSummary: `node ${nodeId}, attempt ${node.attempts + 1}`,\n ...(Object.keys(results).length === 0 ? {} : { results }),\n },\n position: `dag/${nodeId}/${node.attempts + 1}`,\n };\n };\n\n const paused = definition.nodes.find(\n (node) => state.nodes[node.id]!.status === 'paused',\n );\n if (paused !== undefined) {\n return [{\n kind: 'pause',\n reason: state.nodes[paused.id]!.pauseReason!,\n }];\n }\n\n const keyOf = (nodeId: NodeId): string | null =>\n definition.nodes.find((node) => node.id === nodeId)!.data.key;\n\n const collect = (\n candidates: readonly { id: NodeId }[],\n stopOnFailure: boolean,\n ): GraphCommand[] => {\n const commands: GraphCommand[] = [];\n let freeGlobal = definition.data.globalConcurrency;\n const keyFree = new Map<string, number>(\n Object.entries(definition.data.keyedConcurrency),\n );\n for (const candidate of candidates) {\n if (freeGlobal <= 0) break;\n if (!claimable(state, candidate.id, stopOnFailure)) continue;\n const key = keyOf(candidate.id);\n if (key !== null && (keyFree.get(key) ?? 0) <= 0) continue;\n commands.push(dispatch(candidate.id));\n freeGlobal -= 1;\n if (key !== null) keyFree.set(key, (keyFree.get(key) ?? 0) - 1);\n }\n return commands;\n };\n\n const workerCommands = collect(workers, true);\n if (workerCommands.length > 0) return workerCommands;\n\n const finalizerCommands = collect(finalizers, false);\n if (finalizerCommands.length > 0) return finalizerCommands;\n\n const failedRequired = workers.filter(\n (worker) => state.nodes[worker.id]!.status === 'failed'\n && kindOf.get(worker.id) === 'required',\n );\n if (failedRequired.length > 0) {\n return [{\n kind: 'fail',\n code: 'DAG_NODE_FAILED',\n message: `Failed required nodes: ${failedRequired.map((node) => node.id).join(', ')}.`,\n }];\n }\n const failedFinalizers = finalizers.filter(\n (finalizer) => state.nodes[finalizer.id]!.status === 'failed',\n );\n if (failedFinalizers.length > 0) {\n return [{\n kind: 'fail',\n code: 'DAG_NODE_FAILED',\n message: `Failed finalizer nodes: ${failedFinalizers.map((node) => node.id).join(', ')}.`,\n }];\n }\n return [{\n kind: 'complete',\n output: {\n nodes: resultsFor(definition.nodes.map((node) => node.id)),\n },\n }];\n },\n describe(): GraphDescriptionInput {\n return {\n inputContract: { brief: 'json' },\n outputContract: { nodes: 'object' },\n phases: [{\n id: 'graph',\n name: 'Graph',\n nodeIds: definition.nodes.map((node) => node.id),\n }],\n nodes: definition.nodes.map((node) => ({\n id: node.id,\n phaseId: 'graph',\n inputContract: { brief: 'json' },\n outputContract: 'json',\n laneId: node.data.lane?.id ?? null,\n })),\n policies: {\n retry: null,\n stop: null,\n concurrency: {\n global: definition.data.globalConcurrency,\n keyed: definition.data.keyedConcurrency,\n },\n write: null,\n budget: null,\n action: null,\n },\n executionLanes: [...executionLanes.values()],\n requestedPermissions: [],\n bounds: {\n dispatches: {\n min: { kind: 'known', value: definition.nodes.length },\n max: {\n kind: 'known',\n value: definition.nodes.length\n + workers.filter((worker) => worker.data.kind === 'required').length\n * definition.data.retryCapPerNode,\n },\n },\n maxConcurrency: { kind: 'known', value: definition.data.globalConcurrency },\n maxFanOut: { kind: 'known', value: definition.data.globalConcurrency },\n },\n };\n },\n };\n },\n};\n","import { isDeepStrictEqual } from 'node:util';\n\nimport type { GraphCommand } from '../graph/commands.js';\nimport type { GraphDefinition } from '../graph/kernel.js';\nimport type { ExecutionLaneDescription, GraphDescriptionInput } from '../graph/plan.js';\nimport type { GraphEvent, GraphType } from '../graph/type.js';\nimport { GraphValidationError, type GraphValidationIssue, type JsonObject, type JsonValue } from '../graph/value.js';\n\nexport type TeamNodeData = JsonObject & {\n role: string;\n brief: string;\n initialTurn?: boolean;\n lane?: ExecutionLaneDescription;\n};\n\nexport interface TeamRoom extends JsonObject {\n id: string;\n members: readonly string[];\n}\n\nexport interface TeamCommunication extends JsonObject {\n rooms: readonly TeamRoom[];\n tailMessages: number;\n}\n\nexport type TeamGraphData = JsonObject & {\n task: string;\n globalConcurrency: number;\n maxTurnsPerMember: number;\n communication?: TeamCommunication;\n};\n\nexport type TeamDefinition = GraphDefinition<TeamNodeData, JsonObject, TeamGraphData>;\n\nexport interface TeamPost extends JsonObject {\n roomId: string;\n text: string;\n mentions: readonly string[];\n}\n\nexport type TeamTurnResult = JsonObject & {\n summary: string;\n data?: JsonValue;\n posts?: readonly TeamPost[];\n};\n\nexport interface TeamMessage extends TeamPost {\n id: string;\n sender: string;\n position: string;\n}\n\nexport interface TeamGraphResult extends JsonObject {\n task: string;\n agents: readonly { name: string; role: string; result: TeamTurnResult | null }[];\n}\n\ninterface TeamMemberState extends JsonObject {\n readonly status: 'idle' | 'in-flight' | 'paused' | 'failed';\n readonly turns: number;\n readonly inFlight: string | null;\n readonly pauseReason: string | null;\n readonly failureCode: string | null;\n readonly result: TeamTurnResult | null;\n readonly queued: boolean;\n readonly triggers: readonly string[];\n}\n\n/** Saved messages are the accepted record for host room projections. */\nexport interface TeamGraphState extends JsonObject {\n readonly nodes: Readonly<Record<string, TeamMemberState>>;\n readonly messages: readonly TeamMessage[];\n}\n\nfunction fail(path: string, message: string): never {\n throw new GraphValidationError('Invalid team graph.', [{ code: 'INVALID_TEAM', path, message }]);\n}\n\nfunction record(value: unknown, path: string): asserts value is JsonObject {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n fail(path, 'Expected an object.');\n }\n}\n\nfunction text(value: unknown, path: string): asserts value is string {\n if (typeof value !== 'string') fail(path, 'Expected text.');\n}\n\nfunction identifier(value: unknown, path: string): asserts value is string {\n text(value, path);\n if (!value.length || value !== value.trim() || /[\\u0000-\\u001f\\u007f]/.test(value)) {\n fail(path, 'Expected a nonempty trimmed name without control characters.');\n }\n}\n\nfunction limit(value: unknown, path: string): void {\n if (!Number.isSafeInteger(value) || (value as number) < 1) {\n fail(path, 'Expected a positive safe integer.');\n }\n}\n\nfunction validateTeam(definition: TeamDefinition): void {\n record(definition.data, '/data');\n text(definition.data.task, '/data/task');\n limit(definition.data.globalConcurrency, '/data/globalConcurrency');\n limit(definition.data.maxTurnsPerMember, '/data/maxTurnsPerMember');\n if (!Number.isSafeInteger(definition.nodes.length * definition.data.maxTurnsPerMember)) {\n fail('/data/maxTurnsPerMember', 'The total dispatch bound must be a safe integer.');\n }\n if (definition.edges.length) fail('/edges', 'Team turns are requested by messages; edges must be empty.');\n const members = new Set(definition.nodes.map((node) => node.id));\n const lanes = new Map<string, ExecutionLaneDescription>();\n for (const node of definition.nodes) {\n const path = `/nodes/${node.id}/data`;\n record(node.data, path);\n text(node.data.role, `${path}/role`);\n text(node.data.brief, `${path}/brief`);\n if (node.data.initialTurn !== undefined && typeof node.data.initialTurn !== 'boolean') {\n fail(`${path}/initialTurn`, 'Expected a boolean.');\n }\n if (node.data.lane !== undefined) {\n record(node.data.lane, `${path}/lane`);\n const declared = lanes.get(node.data.lane.id);\n if (declared !== undefined && !isDeepStrictEqual(declared, node.data.lane)) {\n fail(`${path}/lane`, 'Members sharing a lane must use the same declaration.');\n }\n lanes.set(node.data.lane.id, node.data.lane);\n }\n }\n const communication = definition.data.communication;\n if (communication === undefined) return;\n record(communication, '/data/communication');\n limit(communication.tailMessages, '/data/communication/tailMessages');\n if (!Array.isArray(communication.rooms)) fail('/data/communication/rooms', 'Expected a room list.');\n const rooms = new Set<string>();\n for (const [index, room] of communication.rooms.entries()) {\n const path = `/data/communication/rooms/${index}`;\n record(room, path);\n identifier(room.id, `${path}/id`);\n if (rooms.has(room.id)) fail(`${path}/id`, 'Room IDs must be unique.');\n rooms.add(room.id);\n if (!Array.isArray(room.members)) fail(`${path}/members`, 'Expected a member list.');\n const seen = new Set<string>();\n for (const member of room.members) {\n identifier(member, `${path}/members`);\n if (!members.has(member) || seen.has(member)) {\n fail(`${path}/members`, 'Room members must be distinct declared node IDs.');\n }\n seen.add(member);\n }\n }\n}\n\nfunction resultIssue(\n value: unknown,\n sender: string,\n rooms: ReadonlyMap<string, TeamRoom>,\n communication: boolean,\n): GraphValidationIssue | null {\n const path = '/event/payload/result';\n const issue = (path: string, message: string): GraphValidationIssue => ({ code: 'INVALID_TEAM', path, message });\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return issue(path, 'Expected an object.');\n }\n const result = value as JsonObject;\n if (typeof result.summary !== 'string') return issue(`${path}/summary`, 'Expected text.');\n if (result.posts === undefined) return null;\n if (!communication || !Array.isArray(result.posts)) {\n return issue(`${path}/posts`, 'Posts require communication and a post list.');\n }\n for (const [index, value] of result.posts.entries()) {\n const postPath = `${path}/posts/${index}`;\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return issue(postPath, 'Expected an object.');\n }\n const post = value as JsonObject;\n if (typeof post.roomId !== 'string') return issue(`${postPath}/roomId`, 'Expected a room name.');\n if (typeof post.text !== 'string') return issue(`${postPath}/text`, 'Expected text.');\n const room = rooms.get(post.roomId);\n if (!room?.members.includes(sender)) return issue(postPath, 'The sender must belong to the declared room.');\n if (!Array.isArray(post.mentions)) return issue(`${postPath}/mentions`, 'Expected a mention list.');\n for (const mention of post.mentions) {\n if (typeof mention !== 'string' || !room.members.includes(mention)) {\n return issue(`${postPath}/mentions`, 'Every mention must name a member of the room.');\n }\n }\n }\n return null;\n}\n\n/** Pure member turns; only matching saved completions deliver posts. */\nexport const teamGraphType: GraphType<\n TeamDefinition,\n TeamGraphState,\n GraphEvent,\n { readonly memory: 'unused' }\n> = {\n kind: 'team',\n version: 1,\n compile(definition) {\n validateTeam(definition);\n const { task, globalConcurrency, maxTurnsPerMember, communication } = definition.data;\n const rooms = new Map((communication?.rooms ?? []).map((room) => [room.id, room]));\n const positionFor = (id: string, node: TeamMemberState): string => `team/${id}/${node.turns + 1}`;\n return {\n requirements: { memory: 'unused' },\n validateNodeResult: (nodeId, result) => resultIssue(result, nodeId, rooms, communication !== undefined),\n initialState: () => ({\n nodes: Object.fromEntries(definition.nodes.map((node) => [node.id, {\n status: 'idle', turns: 0, inFlight: null, pauseReason: null, failureCode: null, result: null,\n queued: node.data.initialTurn !== false, triggers: [],\n }])),\n messages: [],\n }),\n reduce(state, event) {\n const payload = event.payload;\n if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return state;\n const { nodeId, position } = payload as JsonObject;\n if (typeof nodeId !== 'string' || !Object.hasOwn(state.nodes, nodeId)) return state;\n const node = state.nodes[nodeId]!;\n const update = (next: TeamMemberState): TeamGraphState => ({\n ...state,\n nodes: { ...state.nodes, [nodeId]: next },\n });\n if (event.type === 'node-dispatched') {\n if (node.status !== 'idle' || !node.queued\n || node.turns >= maxTurnsPerMember\n || position !== positionFor(nodeId, node)) return state;\n return update({\n ...node,\n status: 'in-flight',\n turns: node.turns + 1,\n inFlight: position,\n queued: false,\n triggers: [],\n pauseReason: null,\n });\n }\n if (node.inFlight !== position) return state;\n if (event.type === 'node-resumed' && node.status === 'paused') {\n return update({ ...node, status: 'in-flight', pauseReason: null });\n }\n if (node.status !== 'in-flight') return state;\n if (event.type === 'node-paused') {\n text((payload as JsonObject).reason, '/event/payload/reason');\n return update({\n ...node,\n status: 'paused',\n pauseReason: (payload as JsonObject).reason as string,\n });\n }\n if (event.type === 'node-failed') {\n text((payload as JsonObject).code, '/event/payload/code');\n return update({\n ...node, status: 'failed', inFlight: null, pauseReason: null,\n failureCode: (payload as JsonObject).code as string,\n });\n }\n if (event.type !== 'node-completed') return state;\n const value = (payload as JsonObject).result;\n if (resultIssue(value, nodeId, rooms, communication !== undefined) !== null) {\n return update({\n ...node, status: 'failed', inFlight: null, pauseReason: null, failureCode: 'RESULT_INVALID',\n });\n }\n const result = value as TeamTurnResult;\n const messages: TeamMessage[] = (result.posts ?? []).map((post, index) => ({\n roomId: post.roomId, text: post.text, mentions: post.mentions,\n id: `${position}/${index}`, sender: nodeId, position: position as string,\n }));\n const nodes = {\n ...state.nodes,\n [nodeId]: { ...node, status: 'idle' as const, inFlight: null, pauseReason: null, result },\n };\n for (const message of messages) {\n for (const recipient of new Set(message.mentions)) {\n const member = nodes[recipient]!;\n nodes[recipient] = { ...member, queued: true, triggers: [...member.triggers, message.id] };\n }\n }\n return { nodes, messages: [...state.messages, ...messages] };\n },\n decide(state) {\n if (Object.values(state.nodes).some((node) => node.status === 'in-flight')) return [];\n const failed = definition.nodes.filter((node) => state.nodes[node.id]!.status === 'failed');\n if (failed.length) return [{\n kind: 'fail',\n code: 'TEAM_NODE_FAILED',\n message: `Failed team members: ${failed.map((node) => node.id).join(', ')}.`,\n }];\n const paused = definition.nodes.find((node) => state.nodes[node.id]!.status === 'paused');\n if (paused) return [{ kind: 'pause', reason: state.nodes[paused.id]!.pauseReason! }];\n const queued = definition.nodes.filter((node) => state.nodes[node.id]!.queued);\n const exhausted = queued.find((node) => state.nodes[node.id]!.turns >= maxTurnsPerMember);\n if (exhausted) return [{\n kind: 'fail',\n code: 'TEAM_TURN_LIMIT',\n message: `Member \"${exhausted.id}\" reached maxTurnsPerMember.`,\n }];\n if (queued.length) return queued.slice(0, globalConcurrency).map((member): GraphCommand => {\n const node = state.nodes[member.id]!;\n const visible = new Set(node.triggers);\n for (const room of rooms.values()) {\n if (!room.members.includes(member.id)) continue;\n for (const message of state.messages.filter((message) => message.roomId === room.id).slice(-communication!.tailMessages)) {\n visible.add(message.id);\n }\n }\n return {\n kind: 'dispatch',\n nodeId: member.id,\n position: positionFor(member.id, node),\n input: {\n task,\n role: member.data.role,\n brief: member.data.brief,\n result: node.result,\n messages: state.messages.filter((message) => visible.has(message.id)),\n },\n };\n });\n const output: TeamGraphResult = {\n task,\n agents: definition.nodes.map((node) => ({\n name: node.id, role: node.data.role, result: state.nodes[node.id]!.result,\n })),\n };\n return [{ kind: 'complete', output }];\n },\n describe(): GraphDescriptionInput {\n return {\n inputContract: { task: 'string' },\n outputContract: { task: 'string', agents: 'array' },\n phases: [{ id: 'team', name: 'Team', nodeIds: definition.nodes.map((node) => node.id) }],\n nodes: definition.nodes.map((node) => ({\n id: node.id,\n phaseId: 'team',\n inputContract: { task: 'string', role: 'string', brief: 'string', result: 'json', messages: 'array' },\n outputContract: { summary: 'string', data: 'json?', posts: 'array?' },\n laneId: node.data.lane?.id ?? null,\n })),\n policies: {\n retry: null,\n stop: { maxTurnsPerMember },\n concurrency: { global: globalConcurrency },\n write: null,\n budget: null,\n action: null,\n },\n executionLanes: [...new Map(definition.nodes.flatMap((node) =>\n node.data.lane ? [[node.data.lane.id, node.data.lane] as const] : [],\n )).values()],\n requestedPermissions: [],\n bounds: {\n dispatches: {\n min: { kind: 'known', value: definition.nodes.filter((node) => node.data.initialTurn !== false).length },\n max: { kind: 'known', value: definition.nodes.length * maxTurnsPerMember },\n },\n maxConcurrency: { kind: 'known', value: globalConcurrency },\n maxFanOut: { kind: 'known', value: globalConcurrency },\n },\n };\n },\n };\n },\n};\n","/**\n * The convergence graph type (roadmap D7): fresh-context convergence with\n * real done checks, narrow repair rounds, and no repeated reviews whose\n * evidence is still valid.\n *\n * Nodes: `generator` (the body), `evaluator` (a data-only done gate), one\n * node per review seat — seats are separate nodes, one node bound to one\n * lane — and `repair` (the fixer). The convergence cycle is legal: repair\n * re-enters the body.\n *\n * Terminal mapping (decided with the runtime owner): pass → `complete`;\n * iterations, review restarts, or a recurring finding exhausted → `fail`\n * with a typed exhaustion code; `ABORTED` → `pause` with a reason; and\n * `ENGINE_UNAVAILABLE` skips a declared skippable seat or pauses a required\n * seat. Other executor failures are not review verdicts: a seat that fails\n * consumes no repair attempt, reruns within the declared retry cap, then\n * pauses as unresolved. A skipped seat never weakens the remaining quorum\n * and provider-diversity rules.\n *\n * This is the pure form only: definition validation, state reduction,\n * decisions, bounds, and the plan description. Panel policy helpers,\n * review acceptance records, and the source of evaluator fingerprints are\n * the runtime owner's.\n *\n * Event vocabulary (all JSON, recorded into the durable `graph:`\n * namespace):\n * - `node-dispatched` / `node-completed` / `node-failed` /\n * `node-paused` / `node-resumed` — the standard node events; a seat's\n * completed result carries the verdict record: verdict (`pass` |\n * `findings` | `low-confidence`), confidence, the reviewed input hashes,\n * the workspace fingerprint, and any findings; provider and model-family\n * diversity comes from recorded engine reports. The evaluator's\n * completed result carries `gateMet` with the same evidence identity; the\n * generator's and repair's results carry the work summaries.\n * - `engine-attempt-recorded` — one reported engine identity per call, or\n * unknown. Writer history excludes matching reviewer providers or model\n * families, including cached passes. Unknown writer fields count as all\n * declared targets for that field. Data-only nodes have no engine identity.\n * - `seat-invalidated` — a seat's recorded verdict is no longer current\n * (watched paths or fingerprints changed): the seat reruns.\n *\n * A dispatch, completion, or failure counts only for the node's attempt\n * currently in flight at that exact position; a stale event from an\n * earlier attempt is ignored. Positions are minted per recorded dispatch:\n * `convergence/${iteration}/${node}` for the loop nodes and\n * `review/${round}/${seat}` for seats, so a retry or a rerun always takes\n * a fresh position. Retry is graph policy, declared as a per-node cap:\n * decide offers a fresh dispatch for a failed node while the cap allows,\n * then a failed body node ends the run while an unresolved seat pauses it.\n *\n * Each review decision dispatches every seat that is pending or invalid\n * and fits the declared seat concurrency, in declaration order. Seats\n * whose recorded verdicts are still valid are never re-emitted — the D2\n * rule that a graph does not re-emit an occurrence already recorded in\n * the folded event history.\n */\n\nimport { isDeepStrictEqual } from 'node:util';\n\nimport type { GraphCommand } from '../graph/commands.js';\nimport type { GraphDefinition, NodeId } from '../graph/kernel.js';\nimport type { ExecutionLaneDescription, GraphDescriptionInput } from '../graph/plan.js';\nimport type { EngineAttemptRecordedPayload, GraphEvent, GraphType } from '../graph/type.js';\nimport {\n GraphValidationError,\n type GraphValidationIssue,\n type JsonObject,\n type JsonValue,\n type Sha256Digest,\n} from '../graph/value.js';\n\ntype ConvergenceExecutionTargetData = {\n readonly adapter: string;\n readonly provider: string;\n readonly modelFamily: string;\n readonly model: string;\n readonly tools: readonly string[];\n};\n\ntype ConvergenceExecutionLaneData = {\n readonly id: string;\n readonly requested: ConvergenceExecutionTargetData;\n readonly knownSubstitutions: readonly ConvergenceExecutionTargetData[];\n};\n\nexport type ConvergenceNodeData = JsonObject & {\n /** `generator`, `evaluator`, `repair`, or `seat`. */\n readonly role: 'generator' | 'evaluator' | 'repair' | 'seat';\n /** Engine lane for this node; omit it for a data-only node. */\n readonly lane?: ConvergenceExecutionLaneData;\n /** Input-hash keys reviewed by this seat; omit to review every key. */\n readonly evidencePaths?: readonly string[];\n};\n\nexport interface ConvergenceEdgeData extends JsonObject {}\n\nexport interface ConvergenceFinding extends JsonObject {\n readonly id: string;\n readonly kind: 'patch' | 'decision';\n readonly evidence: string;\n}\n\nexport interface ConvergenceData extends JsonObject {\n /** Body iterations bound. */\n readonly maxIterations: number;\n /** Repair rounds bound. */\n readonly maxReviewRestarts: number;\n /** Valid passing seats required to accept. */\n readonly quorum: number;\n /** Require distinct providers and model families among accepted seats. */\n readonly requireDiversity: boolean;\n /** Seat node ids that may be skipped for exhausted credit. */\n readonly skippableSeats: readonly string[];\n /** Review seats dispatchable at once. */\n readonly seatConcurrency: number;\n /** Retries offered per failed node before a body failure or unresolved-seat pause. */\n readonly retryCapPerNode: number;\n}\n\nexport type ConvergenceDefinition = GraphDefinition<\n ConvergenceNodeData,\n ConvergenceEdgeData,\n ConvergenceData\n>;\n\nexport interface NodeDispatchedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n}\n\nexport interface NodeCompletedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n readonly result: JsonValue;\n}\n\nexport interface NodeFailedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n readonly code: string;\n}\n\nexport interface NodePausedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n readonly reason: string;\n readonly request: JsonValue;\n}\n\nexport interface NodeResumedPayload extends JsonObject {\n readonly nodeId: NodeId;\n readonly position: string;\n}\n\nexport interface LimitPausedPayload extends JsonObject {\n readonly reason: string;\n}\n\nexport interface SeatInvalidatedPayload extends JsonObject {\n readonly seatId: NodeId;\n readonly reason: string;\n}\n\nexport type ConvergenceEvent =\n | GraphEvent<'node-dispatched', NodeDispatchedPayload>\n | GraphEvent<'engine-attempt-recorded', EngineAttemptRecordedPayload>\n | GraphEvent<'node-completed', NodeCompletedPayload>\n | GraphEvent<'node-failed', NodeFailedPayload>\n | GraphEvent<'node-paused', NodePausedPayload>\n | GraphEvent<'node-resumed', NodeResumedPayload>\n | GraphEvent<'seat-invalidated', SeatInvalidatedPayload>\n | GraphEvent<'limit-paused', LimitPausedPayload>;\n\nexport type LoopNodeStatus =\n | 'pending'\n | 'in-flight'\n | 'paused'\n | 'passed'\n | 'failed';\n\nexport interface LoopNodeState extends JsonObject {\n readonly status: LoopNodeStatus;\n readonly attempts: number;\n readonly inFlight: string | null;\n}\n\nexport type SeatOutcome =\n | 'valid'\n | 'invalid'\n | 'skipped'\n | 'non-verdict'\n | null;\n\nexport interface SeatRecord extends JsonObject {\n readonly outcome: SeatOutcome;\n readonly verdict: 'pass' | 'findings' | 'low-confidence' | null;\n readonly confidence: number | null;\n readonly provider: string | null;\n readonly modelFamily: string | null;\n readonly inputHashes: JsonObject | null;\n readonly workspaceFingerprint: string | null;\n readonly proofArtifactDigest: Sha256Digest | null;\n readonly findings: readonly ConvergenceFinding[];\n /** Set when the seat was invalidated while its attempt was in flight; the late verdict is discarded. */\n readonly stale: boolean;\n}\n\nexport interface EngineReceiptRejection extends JsonObject {\n readonly code: 'INVALID_ENGINE_RECEIPT';\n readonly nodeId: NodeId;\n readonly position: string;\n readonly sequence: number;\n readonly reason: 'unsupported-version' | 'no-engine-lane' | 'not-in-flight'\n | 'position-mismatch' | 'sequence-mismatch';\n}\n\nexport type ConvergenceStatus = JsonObject & {\n readonly phase: 'body' | 'review' | 'settled';\n readonly iteration: number;\n readonly restarts: number;\n readonly nodes: Readonly<Record<NodeId, LoopNodeState>>;\n readonly seats: Readonly<Record<NodeId, SeatRecord>>;\n /** Latest engine call at each recorded position. */\n readonly engineAttempts: Readonly<Record<string, EngineAttemptRecordedPayload>>;\n /** Scripted engine receipts refused by the reducer; absent until the first rejection. */\n readonly engineReceiptRejections?: readonly EngineReceiptRejection[];\n /** All reported writer identities, with declared targets for unknown fields. */\n readonly writerProviders: readonly string[];\n readonly writerModelFamilies: readonly string[];\n readonly reviewEvidence: ConvergenceReviewEvidence | null;\n /** Times each finding id has been reported across review rounds. */\n readonly findingRounds: Readonly<Record<string, number>>;\n /** A typed pause reason set by a limit or credit failure, or null. */\n readonly pauseReason: string | null;\n};\n\nexport interface ConvergenceReviewEvidence extends JsonObject {\n readonly inputHashes: JsonObject;\n readonly workspaceFingerprint: string;\n readonly proofArtifactDigest: Sha256Digest;\n}\n\nexport type ConvergenceRequirements = { readonly memory: 'unused' };\n\nconst ROLES = new Set(['generator', 'evaluator', 'repair', 'seat']);\nconst SHA256_DIGEST = /^sha256:[0-9a-f]{64}$/u;\n\nfunction issue(code: string, path: string, message: string): GraphValidationIssue {\n return { code, path, message };\n}\n\nfunction validateConvergence(definition: ConvergenceDefinition): Readonly<{\n seats: readonly NodeId[];\n executionLanes: ReadonlyMap<string, ExecutionLaneDescription>;\n}> {\n const issues: GraphValidationIssue[] = [];\n const byRole = new Map<string, NodeId[]>();\n const executionLanes = new Map<string, ExecutionLaneDescription>();\n for (const node of definition.nodes) {\n if (!ROLES.has(node.data.role)) {\n issues.push(issue(\n 'INVALID_ROLE',\n `/nodes/${node.id}/data/role`,\n `Node role must be generator, evaluator, repair, or seat; received ${JSON.stringify(node.data.role)}.`,\n ));\n continue;\n }\n const list = byRole.get(node.data.role) ?? [];\n list.push(node.id);\n byRole.set(node.data.role, list);\n const lane = node.data.lane;\n if (lane !== undefined) {\n const declared = executionLanes.get(lane.id);\n if (declared !== undefined && !isDeepStrictEqual(declared, lane)) {\n issues.push(issue(\n 'CONFLICTING_LANE',\n `/nodes/${node.id}/data/lane`,\n `Lane \"${lane.id}\" must have the same declaration on every node that uses it.`,\n ));\n } else {\n executionLanes.set(lane.id, lane);\n }\n }\n const evidencePaths = node.data.evidencePaths;\n if (evidencePaths !== undefined && (\n node.data.role !== 'seat'\n || !Array.isArray(evidencePaths)\n || evidencePaths.length === 0\n || evidencePaths.some((path) => typeof path !== 'string' || path.trim().length === 0)\n || new Set(evidencePaths).size !== evidencePaths.length\n )) {\n issues.push(issue(\n 'INVALID_EVIDENCE_PATHS',\n `/nodes/${node.id}/data/evidencePaths`,\n 'evidencePaths must be a non-empty list of unique input-hash keys on a review seat.',\n ));\n }\n }\n\n for (const role of ['generator', 'evaluator', 'repair'] as const) {\n if ((byRole.get(role) ?? []).length !== 1) {\n issues.push(issue(\n 'ROLE_COUNT',\n '/nodes',\n `Exactly one ${role} node is required.`,\n ));\n }\n }\n const seats = byRole.get('seat') ?? [];\n if (seats.length === 0) {\n issues.push(issue('ROLE_COUNT', '/nodes', 'At least one seat node is required.'));\n }\n\n const writers = definition.nodes.filter((node) =>\n node.data.role === 'generator' || node.data.role === 'repair');\n for (const seat of definition.nodes.filter((node) => node.data.role === 'seat')) {\n const reviewerLane = seat.data.lane;\n if (reviewerLane === undefined) continue;\n const reviewerTargets = [reviewerLane.requested,\n ...(Array.isArray(reviewerLane.knownSubstitutions) ? reviewerLane.knownSubstitutions : [])];\n for (const writer of writers) {\n const writerLane = writer.data.lane;\n if (writerLane === undefined) continue;\n if (writerLane.id === reviewerLane.id) {\n issues.push(issue(\n 'SELF_REVIEW_LANE',\n `/nodes/${seat.id}/data/lane`,\n `Review seat \"${seat.id}\" cannot use the ${writer.data.role} lane \"${reviewerLane.id}\".`,\n ));\n continue;\n }\n const writerTargets = [writerLane.requested,\n ...(Array.isArray(writerLane.knownSubstitutions) ? writerLane.knownSubstitutions : [])];\n for (const field of ['provider', 'modelFamily'] as const) {\n const overlap = writerTargets.find((target) => typeof target?.[field] === 'string'\n && reviewerTargets.some((reviewer) => reviewer?.[field] === target[field]));\n if (overlap !== undefined) {\n issues.push(issue(\n 'SELF_REVIEW_LANE',\n `/nodes/${seat.id}/data/lane`,\n `Review seat \"${seat.id}\" cannot share ${field} \"${overlap[field]}\" with the ${writer.data.role} lane \"${writerLane.id}\".`,\n ));\n break;\n }\n }\n }\n }\n\n for (const [field, minimum] of [\n ['maxIterations', 1],\n ['maxReviewRestarts', 0],\n ['quorum', 1],\n ['seatConcurrency', 1],\n ['retryCapPerNode', 0],\n ] as const) {\n const value = (definition.data as Record<string, unknown>)[field];\n if (!Number.isSafeInteger(value) || (value as number) < minimum) {\n issues.push(issue(\n 'INVALID_LIMIT',\n `/data/${field}`,\n `${field} must be a safe integer of at least ${minimum}.`,\n ));\n }\n }\n\n if (Number.isSafeInteger(definition.data.quorum)\n && definition.data.quorum > seats.length) {\n issues.push(issue(\n 'INVALID_QUORUM',\n '/data/quorum',\n `quorum cannot exceed the seat count (${seats.length}).`,\n ));\n }\n\n if (typeof definition.data.requireDiversity !== 'boolean') {\n issues.push(issue(\n 'INVALID_DIVERSITY',\n '/data/requireDiversity',\n 'requireDiversity must be a boolean.',\n ));\n }\n\n const seatIds = new Set(seats);\n if (Array.isArray(definition.data.skippableSeats)) {\n for (const [index, id] of definition.data.skippableSeats.entries()) {\n if (!seatIds.has(id)) {\n issues.push(issue(\n 'UNKNOWN_SEAT',\n `/data/skippableSeats/${index}`,\n `Skippable seat \"${String(id)}\" is not a declared seat node.`,\n ));\n }\n }\n } else {\n issues.push(issue(\n 'INVALID_SKIPPABLE',\n '/data/skippableSeats',\n 'skippableSeats must be an array of seat node ids.',\n ));\n }\n\n if (issues.length > 0) {\n throw new GraphValidationError('Invalid convergence definition.', issues);\n }\n return { seats, executionLanes };\n}\n\nfunction asRecord(value: JsonValue): Record<string, unknown> | null {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\n/**\n * The convergence graph type. Pure data operations only (the D2 contract).\n */\nexport const convergence: GraphType<\n ConvergenceDefinition,\n ConvergenceStatus,\n ConvergenceEvent,\n ConvergenceRequirements\n> = {\n kind: 'convergence',\n version: 3,\n compile(definition) {\n const { seats, executionLanes } = validateConvergence(definition);\n const seatSet = new Set(seats);\n const generator = definition.nodes.find((node) => node.data.role === 'generator')!.id;\n const evaluator = definition.nodes.find((node) => node.data.role === 'evaluator')!.id;\n const repair = definition.nodes.find((node) => node.data.role === 'repair')!.id;\n const skippable = new Set(definition.data.skippableSeats);\n const nodeLanes = new Map(definition.nodes.map((node) => [node.id, node.data.lane] as const));\n const seatEvidencePaths = new Map<NodeId, readonly string[] | null>(definition.nodes\n .filter((node) => node.data.role === 'seat')\n .map((node) => [node.id, node.data.evidencePaths ?? null] as const));\n\n const initialNodes = (): Record<NodeId, LoopNodeState> =>\n Object.fromEntries(definition.nodes.map((node) => [\n node.id,\n { status: 'pending', attempts: 0, inFlight: null },\n ]));\n const initialSeats = (): Record<NodeId, SeatRecord> =>\n Object.fromEntries(seats.map((id) => [\n id,\n {\n outcome: null,\n verdict: null,\n confidence: null,\n provider: null,\n modelFamily: null,\n inputHashes: null,\n workspaceFingerprint: null,\n proofArtifactDigest: null,\n findings: [],\n stale: false,\n },\n ]));\n\n const seatOf = (nodeId: NodeId): boolean => seatSet.has(nodeId);\n\n const nodeState = (\n status: LoopNodeStatus,\n attempts: number,\n inFlight: string | null,\n ): LoopNodeState => ({ status, attempts, inFlight });\n\n const readReviewEvidence = (result: JsonValue): ConvergenceReviewEvidence | null => {\n const record = asRecord(result);\n const inputHashes = asRecord(record?.inputHashes as JsonValue);\n if (\n inputHashes === null\n || Object.values(inputHashes).some((value) => typeof value !== 'string')\n || typeof record?.workspaceFingerprint !== 'string'\n || typeof record.proofArtifactDigest !== 'string'\n || !SHA256_DIGEST.test(record.proofArtifactDigest)\n ) return null;\n return {\n inputHashes: inputHashes as JsonObject,\n workspaceFingerprint: record.workspaceFingerprint,\n proofArtifactDigest: record.proofArtifactDigest as Sha256Digest,\n };\n };\n\n const sameReviewEvidence = (\n left: ConvergenceReviewEvidence | null,\n right: ConvergenceReviewEvidence | null,\n ): boolean => left !== null && right !== null && isDeepStrictEqual(left, right);\n\n const reviewEvidenceForSeat = (\n seatId: NodeId,\n evidence: ConvergenceReviewEvidence | null,\n ): ConvergenceReviewEvidence | null => {\n if (evidence === null) return null;\n const paths = seatEvidencePaths.get(seatId) ?? null;\n if (paths === null) return evidence;\n if (paths.some((path) => typeof evidence.inputHashes[path] !== 'string')) return null;\n return {\n inputHashes: Object.fromEntries(paths.map((path) => [path, evidence.inputHashes[path]!])),\n workspaceFingerprint: evidence.workspaceFingerprint,\n proofArtifactDigest: evidence.proofArtifactDigest,\n };\n };\n\n const readVerdict = (\n seatId: NodeId,\n result: JsonValue,\n currentEvidence: ConvergenceReviewEvidence | null,\n attempt: EngineAttemptRecordedPayload | undefined,\n ): SeatRecord => {\n const record = asRecord(result) ?? {};\n const evidence = reviewEvidenceForSeat(seatId, readReviewEvidence(result));\n const expectedEvidence = reviewEvidenceForSeat(seatId, currentEvidence);\n const verdict = record.verdict === 'pass' || record.verdict === 'findings'\n || record.verdict === 'low-confidence'\n ? record.verdict\n : null;\n const findings = sameReviewEvidence(evidence, expectedEvidence) && Array.isArray(record.findings)\n ? record.findings.filter((finding): finding is ConvergenceFinding => {\n const candidate = asRecord(finding);\n return candidate !== null\n && typeof candidate.id === 'string'\n && (candidate.kind === 'patch' || candidate.kind === 'decision')\n && typeof candidate.evidence === 'string';\n })\n : [];\n // Only an accepted pass is reusable evidence, and never a pass with\n // missing confidence; a findings verdict must re-verify after a\n // repair, like the roadmap's repair fixture reruns the seat that\n // reported the finding.\n const trusted = verdict === 'pass'\n && typeof record.confidence === 'number'\n && sameReviewEvidence(evidence, expectedEvidence);\n return {\n outcome: trusted ? 'valid' : verdict === null ? null : 'invalid',\n verdict,\n confidence: typeof record.confidence === 'number' ? record.confidence : null,\n provider: attempt?.effective?.provider ?? null,\n modelFamily: attempt?.effective?.modelFamily ?? null,\n inputHashes: evidence?.inputHashes ?? null,\n workspaceFingerprint: evidence?.workspaceFingerprint ?? null,\n proofArtifactDigest: evidence?.proofArtifactDigest ?? null,\n findings,\n stale: false,\n };\n };\n\n const gateMet = (result: JsonValue): boolean => {\n const record = asRecord(result);\n return record !== null && record.gateMet === true;\n };\n\n const validSeats = (state: ConvergenceStatus): readonly NodeId[] =>\n seats.filter((id) => state.seats[id]!.outcome === 'valid');\n\n const acceptedPasses = (state: ConvergenceStatus): readonly NodeId[] =>\n validSeats(state).filter((id) => {\n const seat = state.seats[id]!;\n if (seat.verdict !== 'pass') return false;\n if (nodeLanes.get(id) === undefined) return true;\n return seat.provider !== null && seat.modelFamily !== null\n && !state.writerProviders.includes(seat.provider)\n && !state.writerModelFamilies.includes(seat.modelFamily);\n });\n\n const diversityHolds = (state: ConvergenceStatus): boolean => {\n if (!definition.data.requireDiversity) return true;\n const familiesByProvider = new Map<string, Set<string>>();\n for (const id of acceptedPasses(state)) {\n const seat = state.seats[id]!;\n if (seat.provider === null || seat.modelFamily === null) continue;\n const families = familiesByProvider.get(seat.provider) ?? new Set<string>();\n families.add(seat.modelFamily);\n familiesByProvider.set(seat.provider, families);\n }\n const providerByFamily = new Map<string, string>();\n const match = (provider: string, visited: Set<string>): boolean => {\n for (const family of familiesByProvider.get(provider) ?? []) {\n if (visited.has(family)) continue;\n visited.add(family);\n const owner = providerByFamily.get(family);\n if (owner === undefined || match(owner, visited)) {\n providerByFamily.set(family, provider);\n return true;\n }\n }\n return false;\n };\n let diverse = 0;\n for (const provider of familiesByProvider.keys()) {\n if (match(provider, new Set())) diverse += 1;\n }\n return diverse >= definition.data.quorum;\n };\n\n const quorumHolds = (state: ConvergenceStatus): boolean =>\n acceptedPasses(state).length >= definition.data.quorum && diversityHolds(state);\n\n const blockingFindings = (state: ConvergenceStatus): readonly ConvergenceFinding[] =>\n seats.flatMap((id) => state.seats[id]!.verdict === 'findings'\n ? state.seats[id]!.findings\n : []);\n\n return {\n requirements: { memory: 'unused' },\n initialState: () => ({\n phase: 'body',\n iteration: 1,\n restarts: 0,\n nodes: initialNodes(),\n seats: initialSeats(),\n engineAttempts: {},\n writerProviders: [],\n writerModelFamilies: [],\n reviewEvidence: null,\n findingRounds: {},\n pauseReason: null,\n }),\n reduce(state, event) {\n const node = state.nodes[event.payload.nodeId as NodeId];\n switch (event.type) {\n case 'engine-attempt-recorded': {\n const attempt = event.payload;\n const lane = nodeLanes.get(attempt.nodeId);\n const rejectReceipt = (reason: EngineReceiptRejection['reason']): ConvergenceStatus => ({\n ...state,\n engineReceiptRejections: [...(state.engineReceiptRejections ?? []), {\n code: 'INVALID_ENGINE_RECEIPT',\n nodeId: attempt.nodeId,\n position: attempt.position,\n sequence: attempt.sequence,\n reason,\n }],\n });\n if (event.version !== 1) return rejectReceipt('unsupported-version');\n if (lane === undefined) return rejectReceipt('no-engine-lane');\n if (node?.status !== 'in-flight') return rejectReceipt('not-in-flight');\n if (node.inFlight !== attempt.position) return rejectReceipt('position-mismatch');\n if (attempt.sequence !== (state.engineAttempts[attempt.position]?.sequence ?? 0) + 1) {\n return rejectReceipt('sequence-mismatch');\n }\n const engineAttempts = { ...state.engineAttempts, [attempt.position]: attempt };\n if (attempt.nodeId !== generator && attempt.nodeId !== repair) return { ...state, engineAttempts };\n const declared = [lane.requested, ...lane.knownSubstitutions];\n const providers = attempt.effective?.provider == null\n ? declared.map((target) => target.provider) : [attempt.effective.provider];\n const families = attempt.effective?.modelFamily == null\n ? declared.map((target) => target.modelFamily) : [attempt.effective.modelFamily];\n return {\n ...state,\n engineAttempts,\n writerProviders: [...new Set([...state.writerProviders, ...providers])],\n writerModelFamilies: [...new Set([...state.writerModelFamilies, ...families])],\n };\n }\n case 'node-dispatched': {\n if (node === undefined) return state;\n if (!event.payload.position.endsWith(`/${node.attempts + 1}`)) return state;\n if (node.status !== 'pending' && node.status !== 'failed') return state;\n return {\n ...state,\n pauseReason: null,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: nodeState(\n 'in-flight',\n node.attempts + 1,\n event.payload.position,\n ),\n },\n };\n }\n case 'node-completed': {\n if (node === undefined || node.status !== 'in-flight') return state;\n if (node.inFlight !== event.payload.position) return state;\n const resetForNextRound = (nodes: Record<NodeId, LoopNodeState>): Record<NodeId, LoopNodeState> => {\n const next = { ...nodes };\n for (const id of [generator, evaluator, repair]) {\n next[id] = nodeState('pending', next[id]!.attempts, null);\n }\n for (const id of seats) {\n if (state.seats[id]!.outcome !== 'valid') {\n next[id] = nodeState('pending', next[id]!.attempts, null);\n }\n }\n return next;\n };\n const nodes = {\n ...state.nodes,\n [event.payload.nodeId]: nodeState('passed', node.attempts, null),\n };\n if (seatOf(event.payload.nodeId)) {\n const current = state.seats[event.payload.nodeId]!;\n // A verdict that arrives after the seat was invalidated while\n // in flight is discarded: the evidence it covered is gone.\n const verdict = current.stale\n ? {\n outcome: 'invalid' as const,\n verdict: null,\n confidence: null,\n provider: null,\n modelFamily: null,\n inputHashes: null,\n workspaceFingerprint: null,\n proofArtifactDigest: null,\n findings: [] as readonly ConvergenceFinding[],\n stale: false,\n }\n : readVerdict(event.payload.nodeId, event.payload.result, state.reviewEvidence,\n state.engineAttempts[event.payload.position]);\n const untrustedPass = verdict.verdict === 'pass' && verdict.outcome !== 'valid';\n const exhaustedUntrustedPass = untrustedPass\n && node.attempts > definition.data.retryCapPerNode;\n const recordedVerdict: SeatRecord = exhaustedUntrustedPass\n ? { ...verdict, outcome: 'non-verdict' }\n : verdict;\n const findingRounds = { ...state.findingRounds };\n for (const finding of recordedVerdict.findings) {\n findingRounds[finding.id] = (findingRounds[finding.id] ?? 0) + 1;\n }\n return {\n ...state,\n nodes: current.stale || (untrustedPass && !exhaustedUntrustedPass)\n ? {\n ...nodes,\n [event.payload.nodeId]: nodeState('pending', node.attempts, null),\n }\n : nodes,\n seats: {\n ...state.seats,\n [event.payload.nodeId]: recordedVerdict,\n },\n findingRounds,\n };\n }\n if (event.payload.nodeId === evaluator) {\n const reviewEvidence = readReviewEvidence(event.payload.result);\n if (gateMet(event.payload.result)) {\n const nextNodes = { ...nodes };\n const nextSeats = { ...state.seats };\n for (const id of seats) {\n const seat = state.seats[id]!;\n const recordedEvidence = seat.inputHashes === null\n || seat.workspaceFingerprint === null\n || seat.proofArtifactDigest === null\n ? null\n : {\n inputHashes: seat.inputHashes,\n workspaceFingerprint: seat.workspaceFingerprint,\n proofArtifactDigest: seat.proofArtifactDigest,\n };\n const currentEvidence = reviewEvidenceForSeat(id, reviewEvidence);\n if (seat.outcome === 'valid'\n && (recordedEvidence === null\n || currentEvidence === null\n || !isDeepStrictEqual(\n recordedEvidence.inputHashes,\n currentEvidence.inputHashes,\n )\n || recordedEvidence.proofArtifactDigest\n !== currentEvidence.proofArtifactDigest)) {\n nextNodes[id] = nodeState('pending', nextNodes[id]!.attempts, null);\n nextSeats[id] = {\n ...seat,\n outcome: 'invalid',\n verdict: null,\n confidence: null,\n inputHashes: null,\n workspaceFingerprint: null,\n proofArtifactDigest: null,\n findings: [],\n };\n }\n }\n return {\n ...state,\n nodes: nextNodes,\n seats: nextSeats,\n reviewEvidence,\n phase: 'review',\n };\n }\n if (state.iteration >= definition.data.maxIterations) {\n return { ...state, nodes, phase: 'settled' };\n }\n const next = { ...nodes };\n next[generator] = nodeState('pending', next[generator]!.attempts, null);\n next[evaluator] = nodeState('pending', next[evaluator]!.attempts, null);\n return {\n ...state,\n nodes: next,\n reviewEvidence,\n iteration: state.iteration + 1,\n phase: 'body',\n };\n }\n if (event.payload.nodeId === repair) {\n if (state.restarts >= definition.data.maxReviewRestarts) {\n return { ...state, nodes, phase: 'settled' };\n }\n return {\n ...state,\n nodes: resetForNextRound(nodes),\n restarts: state.restarts + 1,\n iteration: state.iteration + 1 > definition.data.maxIterations\n ? state.iteration\n : state.iteration + 1,\n phase: 'body',\n };\n }\n return { ...state, nodes };\n }\n case 'node-failed': {\n if (node === undefined || node.status !== 'in-flight') return state;\n if (node.inFlight !== event.payload.position) return state;\n const nodes = {\n ...state.nodes,\n [event.payload.nodeId]: nodeState('failed', node.attempts, null),\n };\n if (event.payload.code === 'ABORTED') {\n return {\n ...state,\n nodes,\n pauseReason: `Node \"${event.payload.nodeId}\" was aborted; the run pauses.`,\n };\n }\n if (seatOf(event.payload.nodeId)) {\n if (event.payload.code === 'ENGINE_UNAVAILABLE') {\n if (skippable.has(event.payload.nodeId)) {\n return {\n ...state,\n nodes,\n seats: {\n ...state.seats,\n [event.payload.nodeId]: {\n ...state.seats[event.payload.nodeId]!,\n outcome: 'skipped',\n verdict: null,\n findings: [],\n },\n },\n };\n }\n return {\n ...state,\n nodes,\n seats: {\n ...state.seats,\n [event.payload.nodeId]: {\n ...state.seats[event.payload.nodeId]!,\n outcome: 'non-verdict',\n },\n },\n pauseReason: `Seat \"${event.payload.nodeId}\" has no available engine; the run pauses.`,\n };\n }\n return {\n ...state,\n nodes,\n seats: {\n ...state.seats,\n [event.payload.nodeId]: { ...state.seats[event.payload.nodeId]!, outcome: 'non-verdict' },\n },\n };\n }\n return { ...state, nodes };\n }\n case 'node-paused': {\n if (node === undefined || node.status !== 'in-flight') return state;\n if (node.inFlight !== event.payload.position) return state;\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: nodeState('paused', node.attempts, node.inFlight),\n },\n };\n }\n case 'node-resumed': {\n if (\n node === undefined\n || node.status !== 'paused'\n || node.inFlight !== event.payload.position\n ) {\n return state;\n }\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.nodeId]: nodeState('in-flight', node.attempts, node.inFlight),\n },\n };\n }\n case 'seat-invalidated': {\n const seat = state.seats[event.payload.seatId];\n if (seat === undefined) return state;\n const nodeHere = state.nodes[event.payload.seatId]!;\n if (nodeHere.status === 'in-flight') {\n return {\n ...state,\n seats: {\n ...state.seats,\n [event.payload.seatId]: { ...seat, outcome: 'invalid', stale: true },\n },\n };\n }\n if (seat.outcome !== 'valid') return state;\n return {\n ...state,\n nodes: {\n ...state.nodes,\n [event.payload.seatId]: nodeState('pending', nodeHere.attempts, null),\n },\n seats: {\n ...state.seats,\n [event.payload.seatId]: {\n ...seat,\n outcome: 'invalid',\n verdict: null,\n confidence: null,\n inputHashes: null,\n workspaceFingerprint: null,\n proofArtifactDigest: null,\n findings: [],\n },\n },\n };\n }\n case 'limit-paused': {\n return { ...state, pauseReason: event.payload.reason };\n }\n default:\n return state;\n }\n },\n decide(state) {\n const inFlightCount = Object.values(state.nodes)\n .filter((node) => node.status === 'in-flight').length;\n if (inFlightCount > 0) return [];\n\n if (state.pauseReason !== null) {\n return [{ kind: 'pause', reason: state.pauseReason }];\n }\n if (state.phase === 'settled') {\n const failed = definition.nodes.filter((node) =>\n state.nodes[node.id]!.status === 'failed' && !seatOf(node.id));\n if (failed.length > 0) {\n return [{\n kind: 'fail',\n code: 'CONVERGENCE_NODE_FAILED',\n message: `Failed nodes: ${failed.map((node) => node.id).join(', ')}.`,\n }];\n }\n return [{\n kind: 'fail',\n code: 'CONVERGENCE_EXHAUSTED',\n message: `Exhausted after ${state.iteration} iterations and ${state.restarts} repair rounds.`,\n }];\n }\n\n const dispatch = (\n nodeId: NodeId,\n prefix: string,\n extraInput: JsonObject = {},\n ): GraphCommand => {\n const node = state.nodes[nodeId]!;\n return {\n kind: 'dispatch',\n nodeId,\n input: {\n positionSummary: `${prefix}, node ${nodeId}, attempt ${node.attempts + 1}`,\n ...extraInput,\n },\n position: `${prefix}/${nodeId}/${node.attempts + 1}`,\n };\n };\n\n const pausedNode = definition.nodes.find(\n (node) => state.nodes[node.id]!.status === 'paused',\n );\n if (pausedNode !== undefined) {\n return [{\n kind: 'pause',\n reason: `Node \"${pausedNode.id}\" is paused; the run waits.`,\n }];\n }\n\n const failedLoopNode = [generator, evaluator, repair].find((id) => {\n const nodeStateHere = state.nodes[id]!;\n return nodeStateHere.status === 'failed'\n && nodeStateHere.attempts > definition.data.retryCapPerNode;\n });\n if (failedLoopNode !== undefined) {\n return [{\n kind: 'fail',\n code: 'CONVERGENCE_NODE_FAILED',\n message: `Failed nodes: ${failedLoopNode}.`,\n }];\n }\n\n if (state.phase === 'body') {\n const generatorState = state.nodes[generator]!;\n if (generatorState.status === 'in-flight') return [];\n if (generatorState.status === 'pending' || generatorState.status === 'failed') {\n return [dispatch(generator, `convergence/${state.iteration}`)];\n }\n const evaluatorState = state.nodes[evaluator]!;\n if (evaluatorState.status === 'in-flight') return [];\n if (evaluatorState.status === 'pending' || evaluatorState.status === 'failed') {\n return [dispatch(evaluator, `convergence/${state.iteration}`)];\n }\n }\n\n if (state.phase === 'review') {\n if (state.reviewEvidence === null) {\n return [{\n kind: 'fail',\n code: 'CONVERGENCE_REVIEW_EVIDENCE_INVALID',\n message: 'The evaluator completed without valid review evidence.',\n }];\n }\n const fitting = seats.filter((id) => {\n const nodeState = state.nodes[id]!;\n if (nodeState.status !== 'pending' && nodeState.status !== 'failed') return false;\n if (nodeState.status === 'failed'\n && nodeState.attempts > definition.data.retryCapPerNode) return false;\n return state.seats[id]!.outcome === null\n || state.seats[id]!.outcome === 'invalid'\n || state.seats[id]!.outcome === 'non-verdict';\n });\n if (fitting.length > 0) {\n let free = definition.data.seatConcurrency\n - seats.filter((id) => state.nodes[id]!.status === 'in-flight').length;\n const commands: GraphCommand[] = [];\n for (const id of fitting) {\n if (free <= 0) break;\n commands.push(dispatch(id, `review/${state.iteration}`, {\n proofArtifactDigest: state.reviewEvidence.proofArtifactDigest,\n }));\n free -= 1;\n }\n if (commands.length > 0) return commands;\n }\n if (quorumHolds(state)) {\n const accepted = new Set(acceptedPasses(state));\n return [{\n kind: 'complete',\n output: {\n iterations: state.iteration,\n restarts: state.restarts,\n seats: Object.fromEntries(seats.map((id) => [\n id,\n state.seats[id]!.outcome === 'valid' && state.seats[id]!.verdict === 'pass'\n ? accepted.has(id) ? 'accepted' : 'invalid'\n : state.seats[id]!.outcome ?? 'pending',\n ])),\n findings: blockingFindings(state),\n },\n }];\n }\n const findings = blockingFindings(state);\n if (findings.length > 0) {\n const escalated = findings.filter((finding) =>\n (state.findingRounds[finding.id] ?? 0) >= 3);\n if (escalated.length > 0) {\n return [{\n kind: 'fail',\n code: 'FINDING_ESCALATED',\n message: `Recurring findings: ${escalated.map((finding) => finding.id).join(', ')}.`,\n }];\n }\n if (state.restarts >= definition.data.maxReviewRestarts) {\n return [{\n kind: 'fail',\n code: 'CONVERGENCE_EXHAUSTED',\n message: `Exhausted after ${state.iteration} iterations and ${state.restarts} repair rounds.`,\n }];\n }\n const repairState = state.nodes[repair]!;\n if (repairState.status === 'pending' || repairState.status === 'failed') {\n return [{\n kind: 'dispatch',\n nodeId: repair,\n input: {\n positionSummary: `repair round ${state.restarts + 1}`,\n findings,\n },\n position: `convergence/repair/${state.restarts + 1}/${repairState.attempts + 1}`,\n }];\n }\n }\n const unresolved = seats.filter((id) => {\n const outcome = state.seats[id]!.outcome;\n return outcome === null || outcome === 'non-verdict';\n });\n if (unresolved.length > 0) {\n return [{\n kind: 'pause',\n reason: `Seats unresolved after retries: ${unresolved.join(', ')}.`,\n }];\n }\n return [{\n kind: 'fail',\n code: 'QUORUM_UNREACHABLE',\n message: `Only ${acceptedPasses(state).length} accepted passes; quorum is ${definition.data.quorum}.`,\n }];\n }\n\n return [];\n },\n describe(): GraphDescriptionInput {\n return {\n inputContract: { brief: 'json' },\n outputContract: { iterations: 'number', seats: 'object', findings: 'array' },\n phases: [{\n id: 'convergence',\n name: 'Convergence',\n nodeIds: definition.nodes.map((node) => node.id),\n }],\n nodes: definition.nodes.map((node) => {\n const inputContract: JsonObject = node.data.role === 'seat'\n ? { draft: 'json', proofArtifactDigest: 'string' }\n : node.data.role === 'evaluator'\n ? { gate: 'json' }\n : { brief: 'json', critique: 'json?' };\n const outputContract: JsonObject = node.data.role === 'seat'\n ? {\n verdict: 'string',\n confidence: 'number',\n inputHashes: 'object',\n workspaceFingerprint: 'string',\n proofArtifactDigest: 'string',\n findings: 'array?',\n }\n : { result: 'json' };\n return {\n id: node.id,\n phaseId: 'convergence',\n inputContract,\n outputContract,\n laneId: node.data.lane?.id ?? null,\n };\n }),\n policies: {\n retry: { capPerNode: definition.data.retryCapPerNode },\n stop: null,\n concurrency: { seats: definition.data.seatConcurrency },\n write: null,\n budget: null,\n action: null,\n },\n executionLanes: [...executionLanes.values()],\n requestedPermissions: [],\n bounds: {\n dispatches: {\n min: { kind: 'known', value: 2 + seats.length },\n max: {\n kind: 'known',\n value: (2 * (definition.data.maxIterations + definition.data.maxReviewRestarts)\n + (definition.data.maxReviewRestarts + 1) * seats.length\n + definition.data.maxReviewRestarts)\n * (1 + definition.data.retryCapPerNode),\n },\n },\n maxConcurrency: { kind: 'known', value: definition.data.seatConcurrency },\n maxFanOut: { kind: 'known', value: definition.data.seatConcurrency },\n },\n };\n },\n };\n },\n};\n","import type {\n UsageReceipt,\n TokenAllowance,\n AttemptBudgetPolicy,\n TokenBudgetSnapshot,\n BudgetReservation,\n TokenBudget,\n} from '@obversa/api';\nimport { cloneFrozenJson, digestJson } from '../graph/value.js';\n\nexport type {\n TokenLimitMode,\n TokenAllowance,\n AttemptBudgetPolicy,\n TokenBudgetSnapshot,\n BudgetReservation,\n TokenBudget,\n} from '@obversa/api';\n\nconst MAX_TIMER_MS = 2_147_483_647;\n\nfunction positiveSafeInteger(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 1) {\n throw new TypeError(`${field} must be a positive safe integer`);\n }\n return value as number;\n}\n\nfunction nonNegativeSafeInteger(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0) {\n throw new TypeError(`${field} must be a non-negative safe integer`);\n }\n return value as number;\n}\n\nfunction safeAdd(left: number, right: number, field: string): number {\n const value = left + right;\n if (!Number.isSafeInteger(value)) {\n throw new TypeError(`${field} must remain a safe integer`);\n }\n return value;\n}\n\nfunction validateAllowance(value: TokenAllowance): TokenAllowance {\n if (value.mode !== 'hard' && value.mode !== 'observed') {\n throw new TypeError('callTokens.mode must be hard or observed');\n }\n return cloneFrozenJson({\n mode: value.mode,\n tokens: positiveSafeInteger(value.tokens, 'callTokens.tokens'),\n });\n}\n\nfunction reportedTokens(usage: UsageReceipt): number | null {\n if (usage.kind === 'unknown') return null;\n if (usage.kind !== 'reported') {\n throw new TypeError('usage.kind must be unknown or reported');\n }\n return safeAdd(\n nonNegativeSafeInteger(usage.inputTokens, 'usage.inputTokens'),\n nonNegativeSafeInteger(usage.outputTokens, 'usage.outputTokens'),\n 'reported token usage',\n );\n}\n\nclass TokenBudgetState implements TokenBudget {\n readonly limit: number;\n readonly parent: TokenBudgetState | undefined;\n private spent = 0;\n private reserved = 0;\n private unknownUsageCalls = 0;\n private nextReservation = 1;\n\n constructor(limit: number, parent?: TokenBudgetState) {\n this.limit = positiveSafeInteger(limit, 'token budget limit');\n this.parent = parent;\n }\n\n child(limit: number): TokenBudget {\n return new TokenBudgetState(limit, this);\n }\n\n reserve(\n rawAllowance: TokenAllowance,\n capabilities: { readonly hardLimitEnforceable: boolean },\n ): BudgetReservation {\n const allowance = validateAllowance(rawAllowance);\n if (typeof capabilities.hardLimitEnforceable !== 'boolean') {\n throw new TypeError('hardLimitEnforceable must be a boolean');\n }\n if (allowance.mode === 'hard' && !capabilities.hardLimitEnforceable) {\n throw new TypeError('engine cannot enforce a hard token allowance');\n }\n\n const lineage = this.lineage();\n for (const budget of lineage) {\n if (budget.unknownUsageCalls > 0) {\n throw new TypeError('token budget cannot continue because usage is unknown');\n }\n const committedAndHeld = safeAdd(\n budget.spent,\n budget.reserved,\n 'token budget accounting',\n );\n if (committedAndHeld > budget.limit - allowance.tokens) {\n throw new TypeError('token budget does not have enough remaining tokens');\n }\n }\n\n const root = lineage.at(-1)!;\n const sequence = root.nextReservation;\n const nextSequence = safeAdd(\n root.nextReservation,\n 1,\n 'token reservation sequence',\n );\n\n for (const budget of lineage) {\n budget.reserved = safeAdd(\n budget.reserved,\n allowance.tokens,\n 'token budget reservations',\n );\n }\n root.nextReservation = nextSequence;\n const reservationId = digestJson({\n schemaVersion: 1,\n sequence,\n lineage: lineage.map((budget) => budget.limit),\n allowance,\n });\n\n let settled = false;\n const assertUnsettled = (): void => {\n if (settled) throw new TypeError('token reservation is already settled');\n };\n const releaseReservation = (): void => {\n for (const budget of lineage) {\n budget.reserved -= allowance.tokens;\n }\n };\n\n return Object.freeze({\n reservationId,\n amount: allowance.tokens,\n commit: (usage: UsageReceipt): void => {\n assertUnsettled();\n const tokens = reportedTokens(usage);\n const nextSpent =\n tokens === null\n ? undefined\n : lineage.map((budget) =>\n safeAdd(budget.spent, tokens, 'token budget spent'),\n );\n const nextUnknown =\n tokens === null\n ? lineage.map((budget) =>\n safeAdd(\n budget.unknownUsageCalls,\n 1,\n 'unknown usage call count',\n ),\n )\n : undefined;\n\n releaseReservation();\n if (tokens === null) {\n for (const [index, budget] of lineage.entries()) {\n budget.unknownUsageCalls = nextUnknown![index]!;\n }\n } else {\n for (const [index, budget] of lineage.entries()) {\n budget.spent = nextSpent![index]!;\n }\n }\n settled = true;\n\n if (\n tokens !== null &&\n allowance.mode === 'hard' &&\n tokens > allowance.tokens\n ) {\n throw new TypeError('reported usage exceeded the enforced hard token allowance');\n }\n },\n release: (): void => {\n assertUnsettled();\n releaseReservation();\n settled = true;\n },\n });\n }\n\n snapshot(): TokenBudgetSnapshot {\n return Object.freeze({\n limit: this.limit,\n spent: this.spent,\n reserved: this.reserved,\n unknownUsageCalls: this.unknownUsageCalls,\n });\n }\n\n private lineage(): TokenBudgetState[] {\n const lineage: TokenBudgetState[] = [];\n let budget: TokenBudgetState | undefined = this;\n while (budget) {\n lineage.push(budget);\n budget = budget.parent;\n }\n return lineage;\n }\n}\n\nexport function createTokenBudget(limit: number): TokenBudget {\n return new TokenBudgetState(limit);\n}\n\nexport function validateAttemptBudgetPolicy(\n value: AttemptBudgetPolicy,\n): AttemptBudgetPolicy {\n const timeoutMs = positiveSafeInteger(value.timeoutMs, 'timeoutMs');\n const teardownGraceMs = nonNegativeSafeInteger(\n value.teardownGraceMs,\n 'teardownGraceMs',\n );\n if (timeoutMs > MAX_TIMER_MS) {\n throw new TypeError(`timeoutMs must be at most ${MAX_TIMER_MS}`);\n }\n if (teardownGraceMs > MAX_TIMER_MS - timeoutMs) {\n throw new TypeError(\n `timeoutMs + teardownGraceMs must be at most ${MAX_TIMER_MS}`,\n );\n }\n return cloneFrozenJson({\n inputBytes: nonNegativeSafeInteger(value.inputBytes, 'inputBytes'),\n outputBytes: nonNegativeSafeInteger(value.outputBytes, 'outputBytes'),\n timeoutMs,\n teardownGraceMs,\n memoryBytes: positiveSafeInteger(value.memoryBytes, 'memoryBytes'),\n filesChanged: nonNegativeSafeInteger(value.filesChanged, 'filesChanged'),\n linesChanged: nonNegativeSafeInteger(value.linesChanged, 'linesChanged'),\n callTokens:\n value.callTokens === null ? null : validateAllowance(value.callTokens),\n });\n}\n","import type { EngineSelectionRecord } from '../engines/engine.js';\nimport type { EngineFailureKind } from '../engines/failure.js';\nimport type { ExecutionTarget } from '../graph/plan.js';\nimport { canonicalJson, cloneFrozenJson, type JsonValue } from '../graph/value.js';\n\nexport type EngineExclusionKey =\n | `adapter:${string}`\n | `adapter-provider:${string}`\n | `provider-model:${string}`;\n\nexport interface EngineFailureIdentity {\n readonly selection: EngineSelectionRecord;\n readonly effective: EngineSelectionRecord;\n readonly failure: EngineFailureKind;\n readonly target?: ExecutionTarget;\n}\n\nexport class EngineIdentityUnresolvedError extends Error {\n readonly code = 'ENGINE_IDENTITY_UNRESOLVED' as const;\n\n constructor(message: string) {\n super(message);\n this.name = 'EngineIdentityUnresolvedError';\n }\n}\n\nexport function validateExecutionTarget(value: ExecutionTarget): ExecutionTarget {\n const raw = cloneFrozenJson(value as unknown as JsonValue);\n if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {\n throw new TypeError('An execution target must be an object.');\n }\n const object = raw as Readonly<Record<string, JsonValue>>;\n const fields = ['adapter', 'provider', 'modelFamily', 'model', 'tools'];\n if (canonicalJson(Object.keys(raw).sort()) !== canonicalJson(fields.sort())) {\n throw new TypeError('An execution target must have exactly its five routing fields.');\n }\n for (const field of ['adapter', 'provider', 'modelFamily', 'model']) {\n const text = object[field];\n if (typeof text !== 'string' || text.trim().length === 0 || /[\\u0000-\\u001f\\u007f]/u.test(text)) {\n throw new TypeError(`Execution target ${field} must be a non-empty string without control characters.`);\n }\n }\n if (!Array.isArray(object.tools)\n || object.tools.some((tool: JsonValue) => typeof tool !== 'string' || tool.trim().length === 0\n || /[\\u0000-\\u001f\\u007f]/u.test(tool))\n || new Set(object.tools).size !== object.tools.length) {\n throw new TypeError('Execution target tools must be unique non-empty strings.');\n }\n return raw as unknown as ExecutionTarget;\n}\n\nexport function matchesEngineTarget(\n target: ExecutionTarget,\n selection: EngineSelectionRecord,\n): boolean {\n return target.adapter === selection.adapter\n && (selection.provider === null || target.provider === selection.provider)\n && (selection.modelFamily === null || target.modelFamily === selection.modelFamily)\n && target.model === selection.model\n && canonicalJson(target.tools) === canonicalJson(selection.capabilities);\n}\n\nfunction adapterKey(adapter: string): EngineExclusionKey {\n return `adapter:${canonicalJson([adapter])}`;\n}\n\nfunction adapterProviderKey(adapter: string, provider: string): EngineExclusionKey {\n return `adapter-provider:${canonicalJson([adapter, provider])}`;\n}\n\nfunction hasAdapterProviderKey(\n unavailable: ReadonlySet<EngineExclusionKey>,\n adapter: string,\n): boolean {\n const prefix = `adapter-provider:${canonicalJson([adapter]).slice(0, -1)},`;\n return [...unavailable].some((key) => key.startsWith(prefix));\n}\n\nfunction providerModelKey(provider: string, model: string): EngineExclusionKey {\n return `provider-model:${canonicalJson([provider, model])}`;\n}\n\nfunction resolveAdapterProvider(\n selection: EngineSelectionRecord,\n declaredTargets: readonly ExecutionTarget[],\n): EngineExclusionKey {\n if (selection.provider !== null) {\n return adapterProviderKey(selection.adapter, selection.provider);\n }\n const keys = new Set(declaredTargets\n .filter((target) => matchesEngineTarget(target, selection))\n .map((target) => adapterProviderKey(target.adapter, target.provider)));\n if (keys.size !== 1) {\n throw new EngineIdentityUnresolvedError(\n `Cannot resolve ${selection.adapter}/${selection.model ?? '(unknown model)'} to one declared adapter/provider; matches: ${canonicalJson([...keys].sort())}.`,\n );\n }\n return keys.values().next().value!;\n}\n\nfunction resolveProviderModel(\n selection: EngineSelectionRecord,\n declaredTargets: readonly ExecutionTarget[],\n): EngineExclusionKey {\n if (selection.provider !== null && selection.model !== null) {\n return providerModelKey(selection.provider, selection.model);\n }\n const keys = new Set(declaredTargets\n .filter((target) => matchesEngineTarget(target, selection))\n .map((target) => providerModelKey(target.provider, target.model)));\n if (keys.size !== 1) {\n throw new EngineIdentityUnresolvedError(\n `Cannot resolve ${selection.adapter}/${selection.model ?? '(unknown model)'} to one declared provider/model; matches: ${canonicalJson([...keys].sort())}.`,\n );\n }\n return keys.values().next().value!;\n}\n\nfunction effectiveMatchesSelectedRoute(\n selected: EngineSelectionRecord,\n effective: EngineSelectionRecord,\n target: ExecutionTarget | undefined,\n): boolean {\n if (target !== undefined) return matchesEngineTarget(target, effective);\n return effective.adapter === selected.adapter\n && effective.model === selected.model\n && (effective.provider === null || effective.provider === selected.provider)\n && (effective.modelFamily === null || effective.modelFamily === selected.modelFamily)\n && canonicalJson(effective.capabilities) === canonicalJson(selected.capabilities);\n}\n\nexport function engineFailureExclusionKeys(\n fact: EngineFailureIdentity,\n declaredTargets: readonly ExecutionTarget[],\n): readonly EngineExclusionKey[] {\n switch (fact.failure) {\n case 'missing-cli':\n case 'invalid-config':\n return [adapterKey(fact.selection.adapter)];\n case 'auth':\n return [fact.target === undefined\n ? resolveAdapterProvider(fact.selection, declaredTargets)\n : adapterProviderKey(fact.target.adapter, fact.target.provider)];\n case 'model-unavailable':\n case 'billing':\n case 'quota': {\n const selected = fact.target === undefined\n ? resolveProviderModel(fact.selection, declaredTargets)\n : providerModelKey(fact.target.provider, fact.target.model);\n const effective = effectiveMatchesSelectedRoute(fact.selection, fact.effective, fact.target)\n ? selected\n : resolveProviderModel(fact.effective, declaredTargets);\n return [...new Set([selected, effective])];\n }\n default:\n return [];\n }\n}\n\nexport function isEngineExcluded(\n unavailable: ReadonlySet<EngineExclusionKey>,\n selection: EngineSelectionRecord,\n target: ExecutionTarget | undefined,\n declaredTargets: readonly ExecutionTarget[],\n): boolean {\n if (unavailable.has(adapterKey(selection.adapter))) return true;\n const authKey = target !== undefined\n ? adapterProviderKey(target.adapter, target.provider)\n : selection.provider !== null\n ? adapterProviderKey(selection.adapter, selection.provider)\n : hasAdapterProviderKey(unavailable, selection.adapter)\n ? resolveAdapterProvider(selection, declaredTargets)\n : null;\n if (authKey !== null && unavailable.has(authKey)) return true;\n if (![...unavailable].some((key) => key.startsWith('provider-model:'))) return false;\n const key = target === undefined\n ? resolveProviderModel(selection, declaredTargets)\n : providerModelKey(target.provider, target.model);\n return unavailable.has(key);\n}\n","/**\n * Hardening gates that keep a convergence loop honest without spending a\n * model call — deterministic conditions in the supervisor-orchestrator\n * tradition, adapted to the Obversa runtime:\n *\n * - `ratchet`: a measured metric may only hold or improve against a\n * runtime-owned baseline that is written **only in the improving\n * direction**, so the agent can never loosen its own bar.\n * - `writeScope`: every pending workspace change introduced since loop entry\n * must match a declared glob, so pre-existing dirt cannot wedge a scoped job.\n * - `sampled`: run an expensive condition on a deterministic bucket of\n * iterations (a sha256 cut, so re-runs land on the same side), treating the\n * unsampled rest as met — how a costly judge stays affordable on a\n * high-iteration loop.\n */\n\nimport { createHash } from 'node:crypto';\nimport {\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n} from 'node:fs';\nimport { homedir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport type { Condition, ConditionInput, JobContext } from './types.js';\nimport {\n prepareCondition,\n toCondition,\n withConditionPreparation,\n} from './condition.js';\nimport { resolveEnv } from './env-overlay.js';\nimport { setLabel } from './describe.js';\nimport { workspaceFingerprint } from './git.js';\nimport { scrubCapture } from './redact.js';\nimport { processText, runRuntimeProcess } from './process.js';\n\n// ── ratchet ────────────────────────────────────────────────────────────────\n\nexport interface RatchetOptions {\n /** The metric key to read from the command's JSON output. */\n metric: string;\n /** Which way is better: `down` (default; the value must not rise — lint\n * errors, bundle bytes, TODO count) or `up` (must not fall — coverage). */\n direction?: 'down' | 'up';\n /** Where baselines live. Default `<OBVERSA_HOME|~/.obversa>/ratchets` — outside\n * the workspace, so the baseline is never edited or committed by the loop\n * it constrains. */\n baselineDir?: string;\n cwd?: string;\n timeoutMs?: number;\n env?: Record<string, string>;\n}\n\ninterface Baseline {\n value: number;\n updatedAt: number;\n}\n\nfunction baselineHome(opts: RatchetOptions): string {\n return (\n opts.baselineDir ??\n join(process.env.OBVERSA_HOME ?? join(homedir(), '.obversa'), 'ratchets')\n );\n}\n\n/** One baseline per (workspace, command, metric): the same recipe ratchets the\n * same file across runs, and two workspaces never share a bar. */\nfunction baselinePath(\n opts: RatchetOptions,\n dir: string,\n command: string,\n args: string[],\n): string {\n const key = createHash('sha256')\n .update([dir, command, ...args, opts.metric].join('\\u0000'))\n .digest('hex')\n .slice(0, 16);\n return join(baselineHome(opts), `${key}.json`);\n}\n\nfunction readBaseline(path: string): Baseline | undefined {\n try {\n if (!existsSync(path)) return undefined;\n const raw = JSON.parse(readFileSync(path, 'utf8')) as Baseline;\n return typeof raw.value === 'number' ? raw : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writeBaseline(path: string, value: number): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, JSON.stringify({ value, updatedAt: Date.now() }));\n}\n\n/** The last parseable JSON object in the output: metric emitters print the\n * JSON last, after any human-readable noise. */\nfunction metricsFrom(stdout: string): Record<string, unknown> | undefined {\n const lines = stdout.trim().split('\\n');\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]!.trim();\n if (!line.startsWith('{')) continue;\n try {\n const parsed = JSON.parse(line) as { metrics?: Record<string, unknown> };\n if (parsed && typeof parsed === 'object') {\n return (parsed.metrics ?? parsed) as Record<string, unknown>;\n }\n } catch {\n /* keep scanning upward */\n }\n }\n try {\n const parsed = JSON.parse(stdout) as { metrics?: Record<string, unknown> };\n return (parsed.metrics ?? parsed) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Deterministic gate over a **measured, monotone** signal. Runs `command`,\n * reads `metric` from its JSON output (`{\"metrics\": {\"<name>\": n}}`, or a\n * bare object), and is met only when the value holds or improves on the\n * stored baseline. The baseline is runtime-owned and written only in the\n * improving direction — the first run seeds it — so the constrained loop can\n * neither loosen nor forget its own bar. Everything else fails closed: a\n * command failure, missing metric, or unparsable output is \"not met\".\n */\nexport function ratchet(\n command: string,\n args: string[] = [],\n opts: RatchetOptions,\n): Condition {\n const direction = opts.direction ?? 'down';\n return setLabel(async (ctx) => {\n const dir = opts.cwd ?? ctx.workspace.dir;\n const env = resolveEnv(ctx, opts.env);\n let stdout: string;\n try {\n const r = await runRuntimeProcess({\n executable: command,\n args,\n cwd: dir,\n timeoutMs: opts.timeoutMs,\n signal: ctx.signal,\n env,\n });\n const stdoutText = processText(r.stdout);\n const stderrText = processText(r.stderr);\n if (r.exitCode !== 0 || r.timedOut) {\n return {\n met: false,\n reason: r.timedOut\n ? `ratchet command \\`${command}\\` timed out after ${opts.timeoutMs} ms`\n : `ratchet command \\`${command}\\` exited ${r.exitCode ?? '?'}`,\n output: scrubCapture(`${stdoutText}\\n${stderrText}`, env, 4000),\n };\n }\n stdout = stdoutText;\n } catch (e) {\n return {\n met: false,\n reason: `ratchet command \\`${command}\\` failed to run: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n const metrics = metricsFrom(stdout);\n const value = metrics?.[opts.metric];\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n return {\n met: false,\n reason: `ratchet metric \"${opts.metric}\" missing from \\`${command}\\` output (fail-closed)`,\n output: scrubCapture(stdout, env, 2000),\n };\n }\n const path = baselinePath(opts, dir, command, args);\n const baseline = readBaseline(path);\n if (!baseline) {\n writeBaseline(path, value);\n return {\n met: true,\n reason: `ratchet \"${opts.metric}\" baseline seeded at ${value}`,\n };\n }\n const improvedOrHeld =\n direction === 'down' ? value <= baseline.value : value >= baseline.value;\n if (!improvedOrHeld) {\n return {\n met: false,\n reason: `ratchet \"${opts.metric}\" regressed: ${value} vs baseline ${baseline.value} (must go ${direction})`,\n };\n }\n // Written only in the improving direction: a held bar stays put.\n if (value !== baseline.value) writeBaseline(path, value);\n return {\n met: true,\n reason: `ratchet \"${opts.metric}\" ${value === baseline.value ? 'held at' : 'improved to'} ${value} (baseline ${baseline.value})`,\n };\n }, `ratchet ${opts.metric} via ${command}`);\n}\n\n// ── writeScope ─────────────────────────────────────────────────────────────\n\n/** Minimal glob → RegExp: `**` crosses directories, `*` stays inside one,\n * `?` is a single char. Enough for scope declarations without a dependency. */\nexport function globToRegExp(glob: string): RegExp {\n let out = '^';\n for (let i = 0; i < glob.length; i++) {\n const ch = glob[i]!;\n if (ch === '*') {\n if (glob[i + 1] === '*') {\n // `**/` also matches nothing (so `src/**/x` covers `src/x`).\n out += glob[i + 2] === '/' ? '(?:.*/)?' : '.*';\n i += glob[i + 2] === '/' ? 2 : 1;\n } else {\n out += '[^/]*';\n }\n } else if (ch === '?') {\n out += '[^/]';\n } else {\n out += /[a-zA-Z0-9_/-]/.test(ch) ? ch : `\\\\${ch}`;\n }\n }\n return new RegExp(`${out}$`);\n}\n\nexport interface WriteScopeOptions {\n cwd?: string;\n /** Compare pending changes with loop entry, or require the whole tree to fit. */\n mode?: 'delta' | 'absolute';\n}\n\ninterface WorkspaceChanges {\n entries: Map<string, string>;\n error?: string;\n}\n\ninterface StatusEntry {\n status: string;\n path: string;\n}\n\ninterface DirtyPath extends StatusEntry {\n kind: 'file' | 'directory' | 'missing';\n mode: number;\n}\n\ninterface PathProbe {\n values: Map<string, string>;\n error?: string;\n}\n\nconst PATH_PROBE_CHUNK = 200;\n\nfunction statusEntries(stdout: string): StatusEntry[] {\n const records = stdout.split('\\0');\n const entries: StatusEntry[] = [];\n for (let index = 0; index < records.length; index += 1) {\n const record = records[index];\n if (!record) continue;\n const status = record.slice(0, 2);\n entries.push({ status, path: record.slice(3) });\n // Porcelain v1 -z emits a second path record for renames and copies.\n if (status.includes('R') || status.includes('C')) index += 1;\n }\n return entries;\n}\n\nfunction dirtyPath(dir: string, entry: StatusEntry): DirtyPath {\n try {\n const stat = lstatSync(join(dir, entry.path));\n return {\n ...entry,\n kind: stat.isDirectory() ? 'directory' : 'file',\n mode: stat.mode,\n };\n } catch {\n return { ...entry, kind: 'missing', mode: 0 };\n }\n}\n\nfunction pathChunks(paths: string[]): string[][] {\n const chunks: string[][] = [];\n for (let index = 0; index < paths.length; index += PATH_PROBE_CHUNK) {\n chunks.push(paths.slice(index, index + PATH_PROBE_CHUNK));\n }\n return chunks;\n}\n\nasync function worktreeHashes(\n dir: string,\n paths: string[],\n signal: AbortSignal,\n): Promise<PathProbe> {\n const values = new Map<string, string>();\n for (const chunk of pathChunks(paths)) {\n const result = await runRuntimeProcess({\n executable: 'git',\n args: ['hash-object', '--no-filters', '--', ...chunk],\n cwd: dir,\n signal,\n });\n const hashes = processText(result.stdout).split('\\n').filter(Boolean);\n if (result.exitCode !== 0 || hashes.length !== chunk.length) {\n return {\n values,\n error: 'writeScope: file hashing failed (fail-closed)',\n };\n }\n chunk.forEach((path, index) => values.set(path, hashes[index]!));\n }\n return { values };\n}\n\nasync function indexEntries(\n dir: string,\n paths: string[],\n signal: AbortSignal,\n): Promise<PathProbe> {\n const values = new Map<string, string>();\n for (const chunk of pathChunks(paths)) {\n const result = await runRuntimeProcess({\n executable: 'git',\n args: [\n '--literal-pathspecs',\n 'ls-files',\n '--stage',\n '-z',\n '--',\n ...chunk,\n ],\n cwd: dir,\n signal,\n });\n if (result.exitCode !== 0) {\n return {\n values,\n error: 'writeScope: index inspection failed (fail-closed)',\n };\n }\n for (const record of processText(result.stdout).split('\\0')) {\n const tab = record.indexOf('\\t');\n if (tab === -1) continue;\n const path = record.slice(tab + 1);\n const state = record.slice(0, tab);\n values.set(path, [values.get(path), state].filter(Boolean).join('\\n'));\n }\n }\n return { values };\n}\n\nasync function nestedFingerprints(\n dir: string,\n paths: string[],\n signal: AbortSignal,\n): Promise<PathProbe> {\n const values = new Map<string, string>();\n const fingerprints = await Promise.all(\n paths.map(async (path) => [\n path,\n await workspaceFingerprint({ cwd: join(dir, path), signal }),\n ] as const),\n );\n for (const [path, fingerprint] of fingerprints) {\n if (!fingerprint) {\n return {\n values,\n error: `writeScope: cannot fingerprint directory \"${path}\" (fail-closed)`,\n };\n }\n values.set(path, fingerprint);\n }\n return { values };\n}\n\nasync function workspaceChanges(\n dir: string,\n signal: AbortSignal,\n): Promise<WorkspaceChanges> {\n try {\n const status = await runRuntimeProcess({\n executable: 'git',\n args: ['status', '--porcelain=v1', '-z', '--untracked-files=all'],\n cwd: dir,\n signal,\n });\n if (status.exitCode !== 0) {\n return {\n entries: new Map(),\n error: 'writeScope: not a git repository (fail-closed)',\n };\n }\n\n const dirty = statusEntries(processText(status.stdout)).map((entry) =>\n dirtyPath(dir, entry),\n );\n const filePaths = dirty\n .filter((entry) => entry.kind === 'file')\n .map((entry) => entry.path);\n const directoryPaths = dirty\n .filter((entry) => entry.kind === 'directory')\n .map((entry) => entry.path);\n const allPaths = dirty.map((entry) => entry.path);\n const [worktree, index, nested] = await Promise.all([\n worktreeHashes(dir, filePaths, signal),\n indexEntries(dir, allPaths, signal),\n nestedFingerprints(dir, directoryPaths, signal),\n ]);\n const probeError = worktree.error ?? index.error ?? nested.error;\n if (probeError) return { entries: new Map(), error: probeError };\n\n const entries = new Map<string, string>();\n for (const entry of dirty) {\n const signature = createHash('sha256')\n .update(entry.status)\n .update('\\0')\n .update(String(entry.mode))\n .update('\\0')\n .update(\n entry.kind === 'file'\n ? worktree.values.get(entry.path)!\n : entry.kind === 'directory'\n ? nested.values.get(entry.path)!\n : '[missing]',\n )\n .update('\\0')\n .update(index.values.get(entry.path) ?? '[not-indexed]')\n .digest('hex');\n entries.set(entry.path, signature);\n }\n return { entries };\n } catch (error) {\n return {\n entries: new Map(),\n error: `writeScope: git status failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n}\n\nfunction changedSince(\n before: Map<string, string>,\n after: Map<string, string>,\n): string[] {\n const paths = new Set([...before.keys(), ...after.keys()]);\n return [...paths].filter((path) => before.get(path) !== after.get(path));\n}\n\n/**\n * Met only when every staged, unstaged, or untracked change introduced since\n * the enclosing loop started matches a declared glob. This ignores untouched\n * pre-existing dirt without hiding a body edit to an already-dirty file. Use\n * `mode: 'absolute'` when the complete pending state must fit the scope.\n * Outside a loop, evaluation is absolute. A workspace that is not a git\n * repository fails closed.\n */\nexport function writeScope(\n globs: string[],\n opts: WriteScopeOptions = {},\n): Condition {\n const patterns = globs.map(globToRegExp);\n const label = `writeScope ${globs.join(', ')}`;\n const condition = (baseline?: WorkspaceChanges): Condition =>\n setLabel(async (ctx) => {\n if (baseline?.error) return { met: false, reason: baseline.error };\n const current = await workspaceChanges(\n opts.cwd ?? ctx.workspace.dir,\n ctx.signal,\n );\n if (current.error) return { met: false, reason: current.error };\n const changed = baseline\n ? changedSince(baseline.entries, current.entries)\n : [...current.entries.keys()];\n const out = changed.filter((file) =>\n !patterns.some((pattern) => pattern.test(file)),\n );\n if (!out.length) {\n return {\n met: true,\n reason: changed.length\n ? `all ${changed.length} changed file(s) inside scope`\n : baseline\n ? 'no workspace changes since loop entry'\n : 'clean tree',\n };\n }\n const shown = out.slice(0, 3);\n const omitted = out.length - shown.length;\n return {\n met: false,\n reason:\n `${out.length} file(s) outside the declared write scope: ` +\n `${shown.join(', ')}${omitted ? ` (+${omitted} more)` : ''}`,\n output: `declared scope:\\n${globs.map((g) => ` ${g}`).join('\\n')}\\n\\nout of scope:\\n${out\n .slice(0, 50)\n .map((file) => ` ${file}`)\n .join('\\n')}`,\n };\n }, label);\n\n const base = condition();\n if (opts.mode === 'absolute') return base;\n return withConditionPreparation(base, async (ctx) =>\n condition(\n await workspaceChanges(opts.cwd ?? ctx.workspace.dir, ctx.signal),\n ),\n );\n}\n\n// ── sampled ────────────────────────────────────────────────────────────────\n\nexport interface SampledOptions {\n /** Stable sampling key; default `<path>:<iteration>`, so a re-run of the\n * same iteration lands on the same side of the cut. */\n key?: string | ((ctx: JobContext) => string);\n}\n\n/**\n * Run `condition` on a deterministic fraction of evaluations and treat the\n * rest as met. The bucket is a sha256 cut of a stable key (not `Math.random`),\n * so the same iteration always samples the same way — an expensive judge on\n * `rate: 0.25` really runs every ~4th iteration, reproducibly. Deterministic\n * gates cost nothing; sample only what spends.\n */\nexport function sampled(\n rate: number,\n condition: ConditionInput,\n opts: SampledOptions = {},\n): Condition {\n if (!(rate >= 0 && rate <= 1)) {\n throw new RangeError(`sampled rate must be within [0, 1], got ${rate}`);\n }\n const inner = toCondition(condition);\n const sampledCondition: Condition = setLabel(async (ctx, last) => {\n const key =\n typeof opts.key === 'function'\n ? opts.key(ctx)\n : (opts.key ?? `${ctx.path.join('/')}:${ctx.iteration}`);\n const bucket =\n createHash('sha256').update(key).digest().readUInt32BE(0) / 0xffffffff;\n if (bucket >= rate) {\n return {\n met: true,\n reason: `sampled out (rate ${rate}, key \"${key}\")`,\n };\n }\n const result = await inner(ctx, last);\n return {\n ...result,\n reason: `sampled in (rate ${rate}): ${result.reason}`,\n };\n }, `sampled ${rate}`);\n return withConditionPreparation(sampledCondition, async (ctx) =>\n sampled(rate, await prepareCondition(condition, ctx), opts),\n );\n}\n","import { realpath } from 'node:fs/promises';\nimport { isAbsolute } from 'node:path';\n\nimport { globToRegExp } from '../core/guards.js';\nimport {\n captureGitWorkspaceSnapshot,\n compareGitWorkspaceSnapshots,\n isRepo,\n type GitWorkspaceSnapshot,\n} from '../core/git.js';\nimport { cloneFrozenJson, type JsonObject } from '../graph/value.js';\n\nconst CONTROL_CHARACTER = /[\\u0000-\\u001f\\u007f]/u;\n\nimport type { NodeWorkspacePolicy } from '@obversa/api';\nexport { type WorkspaceMode, type NodeWorkspacePolicy } from '@obversa/api';\n\nexport interface WorkspaceEntry {\n readonly policy: NodeWorkspacePolicy;\n readonly snapshot: GitWorkspaceSnapshot | null;\n}\n\nexport interface WorkspaceAttemptEvidence extends JsonObject {\n readonly entryHead: string | null;\n readonly exitHead: string | null;\n readonly headChanged: boolean;\n readonly changedPaths: readonly string[];\n readonly foreignPaths: readonly string[];\n readonly filesChanged: number;\n readonly linesChanged: number;\n}\n\nexport type WorkspacePolicyErrorCode =\n | 'INVALID_WORKSPACE_POLICY'\n | 'NOT_GIT_REPOSITORY'\n | 'GIT_INSPECTION_FAILED'\n | 'ABORTED';\n\nexport class WorkspacePolicyError extends Error {\n readonly code: WorkspacePolicyErrorCode;\n\n constructor(code: WorkspacePolicyErrorCode, message: string) {\n super(message);\n this.name = 'WorkspacePolicyError';\n this.code = code;\n }\n}\n\nfunction validPathPattern(value: unknown, index: number): string {\n if (\n typeof value !== 'string' ||\n value.length === 0 ||\n value !== value.trim() ||\n isAbsolute(value) ||\n value.includes('\\\\') ||\n value.split('/').includes('..') ||\n CONTROL_CHARACTER.test(value)\n ) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n `allowedPaths[${index}] must be a safe relative glob`,\n );\n }\n return value;\n}\n\nexport function validateWorkspacePolicy(\n value: NodeWorkspacePolicy,\n): NodeWorkspacePolicy {\n if (value.mode !== 'none' && value.mode !== 'read' && value.mode !== 'write') {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'workspace mode must be none, read, or write',\n );\n }\n if (!Array.isArray(value.allowedPaths)) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'allowedPaths must be an array',\n );\n }\n const allowedPaths = value.allowedPaths.map(validPathPattern);\n if (new Set(allowedPaths).size !== allowedPaths.length) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'allowedPaths must be unique',\n );\n }\n\n if (value.mode === 'none') {\n if (value.directory !== null || allowedPaths.length > 0) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'workspace mode none requires a null directory and no allowedPaths',\n );\n }\n } else {\n if (\n typeof value.directory !== 'string' ||\n !isAbsolute(value.directory) ||\n value.directory.length === 0\n ) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'workspace directory must be an absolute path',\n );\n }\n if (value.mode === 'read' && allowedPaths.length > 0) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'workspace read mode does not accept allowedPaths',\n );\n }\n }\n\n return cloneFrozenJson({\n mode: value.mode,\n directory: value.directory,\n allowedPaths,\n });\n}\n\nfunction samePolicy(left: NodeWorkspacePolicy, right: NodeWorkspacePolicy): boolean {\n return (\n left.mode === right.mode &&\n left.directory === right.directory &&\n left.allowedPaths.length === right.allowedPaths.length &&\n left.allowedPaths.every((path, index) => path === right.allowedPaths[index])\n );\n}\n\nasync function normalizedPolicy(\n value: NodeWorkspacePolicy,\n signal: AbortSignal,\n): Promise<NodeWorkspacePolicy> {\n const policy = validateWorkspacePolicy(value);\n if (signal.aborted) {\n throw new WorkspacePolicyError('ABORTED', 'workspace inspection was aborted');\n }\n if (policy.mode === 'none') return policy;\n let directory: string;\n try {\n directory = await realpath(policy.directory!);\n } catch (error) {\n throw new WorkspacePolicyError(\n 'GIT_INSPECTION_FAILED',\n `workspace directory cannot be resolved: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n return cloneFrozenJson({ ...policy, directory });\n}\n\nexport async function captureWorkspaceEntry(\n value: NodeWorkspacePolicy,\n signal: AbortSignal,\n): Promise<WorkspaceEntry> {\n const policy = await normalizedPolicy(value, signal);\n if (policy.mode === 'none') {\n return Object.freeze({ policy, snapshot: null });\n }\n if (!(await isRepo({ cwd: policy.directory!, signal }))) {\n if (signal.aborted) {\n throw new WorkspacePolicyError('ABORTED', 'workspace inspection was aborted');\n }\n throw new WorkspacePolicyError(\n 'NOT_GIT_REPOSITORY',\n 'workspace directory is not a Git repository',\n );\n }\n try {\n const snapshot = await captureGitWorkspaceSnapshot({\n cwd: policy.directory!,\n signal,\n });\n if (snapshot.root !== policy.directory) {\n throw new Error('workspace directory must be the Git worktree root');\n }\n return Object.freeze({ policy, snapshot });\n } catch (error) {\n if (signal.aborted) {\n throw new WorkspacePolicyError('ABORTED', 'workspace inspection was aborted');\n }\n throw new WorkspacePolicyError(\n 'GIT_INSPECTION_FAILED',\n `workspace entry inspection failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n}\n\nexport async function inspectWorkspaceExit(\n value: NodeWorkspacePolicy,\n entry: WorkspaceEntry,\n signal: AbortSignal,\n): Promise<WorkspaceAttemptEvidence> {\n const policy = await normalizedPolicy(value, signal);\n if (!samePolicy(policy, entry.policy)) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'workspace policy changed during the attempt',\n );\n }\n if (policy.mode === 'none') {\n if (entry.snapshot !== null) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'workspace mode none cannot carry a Git entry snapshot',\n );\n }\n return cloneFrozenJson({\n entryHead: null,\n exitHead: null,\n headChanged: false,\n changedPaths: [],\n foreignPaths: [],\n filesChanged: 0,\n linesChanged: 0,\n });\n }\n if (entry.snapshot === null) {\n throw new WorkspacePolicyError(\n 'INVALID_WORKSPACE_POLICY',\n 'workspace entry snapshot is missing',\n );\n }\n\n try {\n const exit = await captureGitWorkspaceSnapshot({\n cwd: policy.directory!,\n signal,\n });\n const delta = await compareGitWorkspaceSnapshots(\n entry.snapshot,\n exit,\n signal,\n );\n const patterns = policy.allowedPaths.map(globToRegExp);\n const foreignPaths = policy.mode === 'read'\n ? [...delta.changedPaths]\n : delta.changedPaths.filter(\n (path) => !patterns.some((pattern) => pattern.test(path)),\n );\n if (delta.headChanged) foreignPaths.push('@git/HEAD');\n return cloneFrozenJson({\n entryHead: entry.snapshot.head,\n exitHead: exit.head,\n headChanged: delta.headChanged,\n changedPaths: delta.changedPaths,\n foreignPaths,\n filesChanged: delta.filesChanged,\n linesChanged: delta.linesChanged,\n });\n } catch (error) {\n if (signal.aborted) {\n throw new WorkspacePolicyError('ABORTED', 'workspace inspection was aborted');\n }\n throw new WorkspacePolicyError(\n 'GIT_INSPECTION_FAILED',\n `workspace exit inspection failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n}\n","import { lstat, realpath } from 'node:fs/promises';\nimport { isAbsolute } from 'node:path';\n\nimport type { Memory } from '@obversa/api';\n\nimport {\n EngineError,\n EngineIncompleteResultError,\n SUBAGENT_TOOLS,\n type AgentRequest,\n type AgentResult,\n type AgentResultPart,\n type Engine,\n type EngineSelectionRecord,\n type EngineTransportFailure,\n type UsageReceipt,\n} from '../engines/engine.js';\nimport {\n classifyEngineFailure,\n LANE_DEAD_FAILURES,\n type EngineFailureKind,\n} from '../engines/failure.js';\nimport { scrubCapture } from '../core/redact.js';\nimport {\n canonicalJson,\n cloneFrozenJson,\n type JsonObject,\n type JsonValue,\n} from '../graph/value.js';\nimport type { AttemptIdentity } from './attempt.js';\nimport type { GraphEngineIdentity } from '../graph/type.js';\nimport {\n validateAttemptBudgetPolicy,\n type AttemptBudgetPolicy,\n type BudgetReservation,\n type TokenBudget,\n} from './budget.js';\nimport type { ResultContract } from './result-contract.js';\nimport type { ExecutionTarget } from '../graph/plan.js';\nimport {\n EngineIdentityUnresolvedError,\n engineFailureExclusionKeys,\n isEngineExcluded,\n matchesEngineTarget,\n validateExecutionTarget,\n type EngineExclusionKey,\n} from './engine-availability.js';\nimport {\n engineSelection,\n validateAgentResult,\n validateIncompleteResultEvidence,\n} from './result-parts.js';\nimport {\n captureWorkspaceEntry,\n inspectWorkspaceExit,\n validateWorkspacePolicy,\n type NodeWorkspacePolicy,\n type WorkspaceAttemptEvidence,\n} from './workspace-policy.js';\n\nconst CONTROL_CHARACTER = /[\\u0000-\\u001f\\u007f]/u;\nconst EMPTY_USAGE = Object.freeze({ kind: 'unknown' as const });\n// This wait does not extend the final-result deadline. It only lets an engine\n// finish cleanup and return captured evidence after the runtime aborts it.\nconst ENGINE_SETTLE_MS = 7_000;\nconst EMPTY_WORKSPACE = cloneFrozenJson({\n entryHead: null,\n exitHead: null,\n headChanged: false,\n changedPaths: [],\n foreignPaths: [],\n filesChanged: 0,\n linesChanged: 0,\n} satisfies WorkspaceAttemptEvidence);\n\nimport { validateActionDecision, type ActionDecision } from '@obversa/api';\nexport { validateActionDecision, type ActionDecision, type AllowActionDecision, type WaitActionDecision, type DenyActionDecision } from '@obversa/api';\n\nexport interface PreparedEngineLane {\n readonly engine: Engine;\n readonly selection: EngineSelectionRecord;\n readonly hardTokenLimitEnforceable: boolean;\n readonly target?: ExecutionTarget;\n}\n\nimport { type NodeDataContext } from '@obversa/api';\nexport { type NodeDataContext } from '@obversa/api';\n\nexport interface ModelUnavailableFact {\n readonly schemaVersion: 1;\n readonly identity: AttemptIdentity;\n readonly selection: EngineSelectionRecord;\n readonly effective: EngineSelectionRecord;\n readonly failure: EngineFailureKind;\n readonly target?: ExecutionTarget;\n}\n\nexport interface PreparedNodeAttempt {\n readonly identity: AttemptIdentity;\n readonly nodeId: string;\n readonly input: JsonValue;\n readonly memory: Memory | null;\n readonly prompt: string | null;\n readonly scratchDirectory: string;\n readonly workspace: NodeWorkspacePolicy;\n readonly trustedCaller: JsonObject;\n readonly permissions: readonly string[];\n readonly policy: AttemptBudgetPolicy;\n readonly resultContract: ResultContract | null;\n readonly engineRoute:\n | readonly [PreparedEngineLane]\n | readonly [PreparedEngineLane, PreparedEngineLane]\n | null;\n readonly declaredTargets?: readonly ExecutionTarget[];\n readonly runData:\n | ((context: NodeDataContext) => Promise<JsonValue>)\n | null;\n readonly parseResult:\n | ((\n part: AgentResultPart,\n parts: readonly AgentResultPart[],\n ) => JsonValue)\n | null;\n readonly tokenBudget: TokenBudget | null;\n readonly recordModelUnavailable: (\n fact: ModelUnavailableFact,\n ) => Promise<void>;\n readonly recordEngineAttempt?: (fact: Readonly<{\n requested: GraphEngineIdentity;\n effective: GraphEngineIdentity | null;\n }>) => Promise<void>;\n decideAction(): Promise<ActionDecision>;\n}\n\nexport type NodeAttemptFailureCode =\n | 'INVALID_ATTEMPT'\n | 'ABORTED'\n | 'INPUT_LIMIT'\n | 'ACTION_POLICY'\n | 'TOKEN_BUDGET'\n | 'TIMEOUT'\n | 'EFFECT_FAILED'\n | 'ENGINE_UNAVAILABLE'\n | 'MODEL_UNAVAILABLE_RECORD'\n | 'ENGINE_IDENTITY_UNRESOLVED'\n | 'RESULT_INVALID'\n | 'OUTPUT_LIMIT'\n | 'WORKSPACE_INSPECTION'\n | 'WORKSPACE_VIOLATION'\n | 'WORKSPACE_LIMIT';\n\nexport interface NodeAttemptFailure extends JsonObject {\n readonly code: NodeAttemptFailureCode;\n readonly message: string;\n}\n\nexport interface NodeAttemptRecord {\n readonly schemaVersion: 1;\n readonly identity: AttemptIdentity;\n readonly status: 'completed' | 'failed' | 'paused' | 'denied';\n readonly decision: ActionDecision | null;\n readonly failure: NodeAttemptFailure | null;\n readonly result: JsonValue | null;\n readonly parts: readonly AgentResultPart[];\n readonly usage: UsageReceipt;\n readonly requestedEngine: EngineSelectionRecord | null;\n readonly effectiveEngine: EngineSelectionRecord | null;\n readonly unavailableModels: readonly EngineSelectionRecord[];\n readonly transportFailure: EngineTransportFailure | null;\n readonly inputBytes: number;\n readonly outputBytes: number;\n readonly changedPaths: readonly string[];\n readonly foreignPaths: readonly string[];\n readonly filesChanged: number;\n readonly linesChanged: number;\n readonly entryHead: string | null;\n readonly exitHead: string | null;\n readonly headChanged: boolean;\n readonly trustedCaller: JsonObject;\n readonly permissions: readonly string[];\n}\n\ninterface MutableAttemptFacts {\n status: NodeAttemptRecord['status'];\n decision: ActionDecision | null;\n failure: NodeAttemptFailure | null;\n result: JsonValue | null;\n parts: readonly AgentResultPart[];\n usage: UsageReceipt;\n requestedEngine: EngineSelectionRecord | null;\n effectiveEngine: EngineSelectionRecord | null;\n unavailableModels: EngineSelectionRecord[];\n transportFailure: EngineTransportFailure | null;\n outputBytes: number;\n workspace: WorkspaceAttemptEvidence;\n}\n\nclass AttemptStopError extends Error {\n readonly kind: 'aborted' | 'timeout';\n\n constructor(kind: 'aborted' | 'timeout', cause?: unknown) {\n super(\n kind === 'timeout'\n ? 'node attempt exceeded its time limit'\n : 'node attempt was aborted',\n cause === undefined ? undefined : { cause },\n );\n this.name = 'AttemptStopError';\n this.kind = kind;\n }\n}\n\nclass TimedOutIncompleteResultError extends EngineIncompleteResultError {}\n\ninterface AttemptDeadline {\n readonly soft: number;\n readonly hard: number;\n}\n\nfunction attemptDeadline(policy: AttemptBudgetPolicy): AttemptDeadline {\n const startedAt = performance.now();\n return Object.freeze({\n soft: startedAt + policy.timeoutMs,\n hard: startedAt + policy.timeoutMs + policy.teardownGraceMs,\n });\n}\n\nfunction timerDelay(deadline: number): number {\n return Math.max(0, Math.ceil(deadline - performance.now()));\n}\n\nasync function runWithTimePolicy<T>(\n signal: AbortSignal,\n time: AttemptDeadline,\n run: (signal: AbortSignal) => Promise<T>,\n options: {\n readonly abortAtSoftTimeout: boolean;\n },\n): Promise<{\n readonly value: T;\n readonly timedOut: boolean;\n readonly finalDeadlineExceeded: boolean;\n}> {\n if (signal.aborted) throw new AttemptStopError('aborted');\n\n const controller = new AbortController();\n let timedOut = false;\n let stop: AttemptStopError['kind'] | null = null;\n let abortTimer: ReturnType<typeof setTimeout> | undefined;\n let finishDeadline!: () => void;\n const deadline = new Promise<void>((resolve) => {\n finishDeadline = resolve;\n });\n const waitAfterAbort = (): void => {\n controller.abort();\n abortTimer = setTimeout(finishDeadline, ENGINE_SETTLE_MS);\n };\n const onAbort = (): void => {\n if (stop !== null) return;\n stop = 'aborted';\n waitAfterAbort();\n };\n signal.addEventListener('abort', onAbort, { once: true });\n\n const softTimer = setTimeout(() => {\n if (stop !== null) return;\n timedOut = true;\n if (options.abortAtSoftTimeout) controller.abort();\n }, timerDelay(time.soft));\n const hardTimer = setTimeout(() => {\n if (stop !== null) return;\n timedOut = true;\n stop = 'timeout';\n if (options.abortAtSoftTimeout) {\n finishDeadline();\n return;\n }\n waitAfterAbort();\n }, timerDelay(time.hard));\n\n let pending: Promise<T>;\n try {\n pending = Promise.resolve(run(controller.signal));\n } catch (error) {\n pending = Promise.reject(error);\n }\n const operation = pending.then(\n (value) => ({ kind: 'value' as const, value }),\n (error: unknown) => ({ kind: 'error' as const, error }),\n );\n try {\n const outcome = await Promise.race([\n operation,\n deadline.then(() => ({ kind: 'deadline' as const })),\n ]);\n if (outcome.kind === 'deadline') {\n throw new AttemptStopError(stop ?? 'timeout');\n }\n if (stop === 'aborted') throw new AttemptStopError('aborted');\n const hardDeadlinePassed = stop === 'timeout' || performance.now() >= time.hard;\n const softDeadlinePassed = timedOut || performance.now() >= time.soft;\n if (hardDeadlinePassed) {\n if (\n outcome.kind === 'error'\n && outcome.error instanceof EngineIncompleteResultError\n ) {\n throw new TimedOutIncompleteResultError(\n outcome.error.message,\n outcome.error.evidence.transportFailure === undefined\n ? {\n ...outcome.error.evidence,\n transportFailure: timeoutTransportFailure(),\n }\n : outcome.error.evidence,\n );\n }\n if (outcome.kind === 'value') {\n return Object.freeze({\n value: outcome.value,\n timedOut: true,\n finalDeadlineExceeded: true,\n });\n }\n throw new AttemptStopError(\n 'timeout',\n outcome.error,\n );\n }\n if (outcome.kind === 'error') {\n if (softDeadlinePassed && options.abortAtSoftTimeout) {\n if (outcome.error instanceof EngineIncompleteResultError) {\n throw new TimedOutIncompleteResultError(\n outcome.error.message,\n outcome.error.evidence.transportFailure === undefined\n ? {\n ...outcome.error.evidence,\n transportFailure: timeoutTransportFailure(),\n }\n : outcome.error.evidence,\n );\n }\n throw new AttemptStopError('timeout', outcome.error);\n }\n throw outcome.error;\n }\n return Object.freeze({\n value: outcome.value,\n timedOut: softDeadlinePassed,\n finalDeadlineExceeded: false,\n });\n } finally {\n clearTimeout(softTimer);\n clearTimeout(hardTimer);\n if (abortTimer !== undefined) clearTimeout(abortTimer);\n signal.removeEventListener('abort', onAbort);\n }\n}\n\nfunction timeoutTransportFailure(): EngineTransportFailure {\n return Object.freeze({\n kind: 'timeout',\n message: 'attempt result arrived during timeout cleanup',\n exitCode: null,\n });\n}\n\nfunction failure(\n code: NodeAttemptFailureCode,\n error: unknown,\n): NodeAttemptFailure {\n const text = error instanceof Error ? error.message : String(error);\n return cloneFrozenJson({\n code,\n message: scrubCapture(text, undefined, 1_000) || code,\n });\n}\n\nfunction text(value: unknown, field: string): string {\n if (\n typeof value !== 'string' ||\n value.length === 0 ||\n value !== value.trim() ||\n CONTROL_CHARACTER.test(value)\n ) {\n throw new TypeError(\n `${field} must be a non-empty trimmed string without control characters`,\n );\n }\n cloneFrozenJson(value);\n return value;\n}\n\nfunction permissions(value: readonly string[]): readonly string[] {\n if (!Array.isArray(value)) throw new TypeError('permissions must be an array');\n const checked = value.map((permission, index) =>\n text(permission, `permissions[${index}]`),\n );\n if (new Set(checked).size !== checked.length) {\n throw new TypeError('permissions must be unique');\n }\n return Object.freeze(checked);\n}\n\nfunction selection(value: EngineSelectionRecord): EngineSelectionRecord {\n return engineSelection(value);\n}\n\nfunction graphIdentity(value: EngineSelectionRecord): GraphEngineIdentity {\n const checked = selection(value);\n return cloneFrozenJson({\n adapter: checked.adapter,\n provider: checked.provider,\n modelFamily: checked.modelFamily,\n model: checked.model,\n });\n}\n\nfunction sameSelection(\n left: EngineSelectionRecord,\n right: EngineSelectionRecord,\n): boolean {\n return canonicalJson(left as unknown as JsonValue) ===\n canonicalJson(right as unknown as JsonValue);\n}\n\nfunction validateLane(value: PreparedEngineLane, index: number): PreparedEngineLane {\n if (typeof value.engine !== 'object' || value.engine === null\n || typeof value.engine.run !== 'function') {\n throw new TypeError(`engineRoute[${index}].engine must be an Engine`);\n }\n if (typeof value.hardTokenLimitEnforceable !== 'boolean') {\n throw new TypeError(`engineRoute[${index}].hardTokenLimitEnforceable must be a boolean`);\n }\n const selected = selection(value.selection);\n const target = value.target === undefined ? undefined : validateExecutionTarget(value.target);\n if (target !== undefined && !matchesEngineTarget(target, selected)) {\n throw new TypeError(`engineRoute[${index}].target must match its selection`);\n }\n return Object.freeze({\n engine: value.engine,\n selection: selected,\n hardTokenLimitEnforceable: value.hardTokenLimitEnforceable,\n ...(target === undefined ? {} : { target }),\n });\n}\n\n\nexport async function validateScratchDirectory(value: string): Promise<string> {\n if (typeof value !== 'string' || !isAbsolute(value)) {\n throw new TypeError('scratchDirectory must be an absolute path');\n }\n const stat = await lstat(value);\n if (!stat.isDirectory() || stat.isSymbolicLink()) {\n throw new TypeError('scratchDirectory must be a real directory');\n }\n const resolved = await realpath(value);\n if (resolved !== value) {\n throw new TypeError('scratchDirectory must already be normalized');\n }\n return resolved;\n}\n\nfunction partBytes(part: AgentResultPart): number {\n return Buffer.byteLength(\n part.kind === 'assistant' ? part.text : canonicalJson(part.value),\n 'utf8',\n );\n}\n\nfunction outputBytes(parts: readonly AgentResultPart[]): number {\n let total = 0;\n for (const part of parts) {\n total += partBytes(part);\n if (!Number.isSafeInteger(total)) {\n throw new TypeError('result output size exceeded the safe integer range');\n }\n }\n return total;\n}\n\nfunction initialFacts(): MutableAttemptFacts {\n return {\n status: 'failed',\n decision: null,\n failure: null,\n result: null,\n parts: Object.freeze([]),\n usage: EMPTY_USAGE,\n requestedEngine: null,\n effectiveEngine: null,\n unavailableModels: [],\n transportFailure: null,\n outputBytes: 0,\n workspace: EMPTY_WORKSPACE,\n };\n}\n\nfunction record(\n identity: AttemptIdentity,\n trustedCaller: JsonObject,\n grantedPermissions: readonly string[],\n inputBytes: number,\n facts: MutableAttemptFacts,\n): NodeAttemptRecord {\n return cloneFrozenJson({\n schemaVersion: 1,\n identity,\n status: facts.status,\n decision: facts.decision,\n failure: facts.failure,\n result: facts.result,\n parts: facts.parts,\n usage: facts.usage,\n requestedEngine: facts.requestedEngine,\n effectiveEngine: facts.effectiveEngine,\n unavailableModels: facts.unavailableModels,\n transportFailure: facts.transportFailure,\n inputBytes,\n outputBytes: facts.outputBytes,\n changedPaths: facts.workspace.changedPaths,\n foreignPaths: facts.workspace.foreignPaths,\n filesChanged: facts.workspace.filesChanged,\n linesChanged: facts.workspace.linesChanged,\n entryHead: facts.workspace.entryHead,\n exitHead: facts.workspace.exitHead,\n headChanged: facts.workspace.headChanged,\n trustedCaller,\n permissions: grantedPermissions,\n } as unknown as JsonValue) as unknown as NodeAttemptRecord;\n}\n\nfunction reserveCalls(\n route: readonly PreparedEngineLane[],\n policy: AttemptBudgetPolicy,\n budget: TokenBudget | null,\n): BudgetReservation[] {\n if (policy.callTokens === null) return [];\n if (budget === null) {\n throw new TypeError('a call token policy requires a token budget');\n }\n const reservations: BudgetReservation[] = [];\n try {\n for (const lane of route) {\n reservations.push(\n budget.reserve(policy.callTokens, {\n hardLimitEnforceable: lane.hardTokenLimitEnforceable,\n }),\n );\n }\n return reservations;\n } catch (error) {\n for (const reservation of reservations) reservation.release();\n throw error;\n }\n}\n\nfunction requestFor(\n identity: AttemptIdentity,\n nodeId: string,\n prompt: string,\n lane: PreparedEngineLane,\n policy: AttemptBudgetPolicy,\n workspace: NodeWorkspacePolicy,\n scratchDirectory: string,\n grantedPermissions: readonly string[],\n resultContract: ResultContract | null,\n): AgentRequest {\n const leaf = !lane.selection.capabilities.some((capability) =>\n SUBAGENT_TOOLS.includes(capability),\n );\n return {\n prompt,\n ...(lane.selection.model === null ? {} : { model: lane.selection.model }),\n ...(policy.callTokens === null ? {} : { maxTokens: policy.callTokens.tokens }),\n tools: [...lane.selection.capabilities],\n allowedTools: [...grantedPermissions],\n ...(resultContract === null ? {} : { jsonSchema: resultContract.schema }),\n cwd: workspace.directory ?? scratchDirectory,\n workspaceMode: workspace.mode,\n timeoutMs: policy.timeoutMs,\n timeoutGraceMs: policy.teardownGraceMs,\n maxOutputBytes: policy.outputBytes,\n maxMemoryBytes: policy.memoryBytes,\n leaf,\n attempt: {\n leaf,\n runId: identity.streamId,\n attemptId: identity.attemptId,\n leafId: nodeId,\n path: [identity.position],\n label: nodeId,\n iteration: 0,\n },\n };\n}\n\nasync function unavailable(\n identity: AttemptIdentity,\n recordModelUnavailable: PreparedNodeAttempt['recordModelUnavailable'],\n lane: PreparedEngineLane,\n effective: EngineSelectionRecord,\n failureKind: EngineFailureKind,\n): Promise<ModelUnavailableFact> {\n const fact = cloneFrozenJson({\n schemaVersion: 1,\n identity,\n selection: lane.selection,\n effective,\n failure: failureKind,\n ...(lane.target === undefined ? {} : { target: lane.target }),\n } as unknown as JsonValue) as unknown as ModelUnavailableFact;\n await recordModelUnavailable(fact);\n return fact;\n}\n\nfunction validatedResult(\n resultContract: ResultContract | null,\n parseResult: PreparedNodeAttempt['parseResult'],\n parts: readonly AgentResultPart[],\n): JsonValue | null {\n const final = parts.find((part) => part.final);\n if (!final) throw new TypeError('attempt result has no final part');\n if (resultContract === null) {\n return final.kind === 'structured' ? cloneFrozenJson(final.value) : null;\n }\n const candidate = final.kind === 'structured'\n ? final.value\n : parseResult?.(final, parts);\n if (candidate === undefined) {\n throw new TypeError(\n 'assistant text needs an explicit parser for this result contract',\n );\n }\n return resultContract.validate(candidate);\n}\n\nfunction applyWorkspacePolicy(\n facts: MutableAttemptFacts,\n policy: AttemptBudgetPolicy,\n): void {\n if (facts.workspace.foreignPaths.length > 0) {\n facts.status = 'failed';\n facts.failure = failure(\n 'WORKSPACE_VIOLATION',\n `workspace changed outside the attempt scope: ${facts.workspace.foreignPaths.join(', ')}`,\n );\n return;\n }\n if (\n facts.workspace.filesChanged > policy.filesChanged ||\n facts.workspace.linesChanged > policy.linesChanged\n ) {\n facts.status = 'failed';\n facts.failure = failure(\n 'WORKSPACE_LIMIT',\n `workspace delta ${facts.workspace.filesChanged} file(s), ${facts.workspace.linesChanged} line(s) exceeds limits ${policy.filesChanged} file(s), ${policy.linesChanged} line(s): ${facts.workspace.changedPaths.join(', ')}`,\n );\n }\n}\n\nexport async function executeNodeAttempt(\n prepared: PreparedNodeAttempt,\n signal: AbortSignal,\n): Promise<NodeAttemptRecord> {\n const facts = initialFacts();\n let trustedCaller = Object.freeze({}) as JsonObject;\n let grantedPermissions: readonly string[] = Object.freeze([]);\n let inputBytes = 0;\n let policy: AttemptBudgetPolicy | undefined;\n let workspace: NodeWorkspacePolicy | undefined;\n let workspaceEntry: Awaited<ReturnType<typeof captureWorkspaceEntry>> | undefined;\n let identity = prepared.identity;\n let reservations: BudgetReservation[] = [];\n const settled = new Set<number>();\n let recorderError: { readonly error: unknown } | undefined;\n\n try {\n identity = cloneFrozenJson(prepared.identity);\n const nodeId = text(prepared.nodeId, 'nodeId');\n if (nodeId !== identity.nodeId) {\n throw new TypeError('nodeId must match identity.nodeId');\n }\n const input = cloneFrozenJson(prepared.input);\n const memory = prepared.memory;\n trustedCaller = cloneFrozenJson(prepared.trustedCaller);\n grantedPermissions = permissions(prepared.permissions);\n const attemptPolicy = validateAttemptBudgetPolicy(prepared.policy);\n policy = attemptPolicy;\n let attemptWorkspace = validateWorkspacePolicy(prepared.workspace);\n workspace = attemptWorkspace;\n const route = prepared.engineRoute?.map(validateLane) ?? null;\n let declaredTargets: readonly ExecutionTarget[] | undefined;\n if (prepared.declaredTargets !== undefined) {\n if (!Array.isArray(prepared.declaredTargets)) {\n throw new TypeError('declaredTargets must be an array');\n }\n declaredTargets = [...prepared.declaredTargets].map(validateExecutionTarget);\n }\n const runData = prepared.runData;\n const resultContract = prepared.resultContract;\n const parseResult = prepared.parseResult;\n const tokenBudget = prepared.tokenBudget;\n const recordModelUnavailable = prepared.recordModelUnavailable;\n const recordEngineAttempt = prepared.recordEngineAttempt;\n const decideAction = prepared.decideAction;\n const scratchPath = prepared.scratchDirectory;\n const prompt = prepared.prompt;\n if (route !== null && (route.length < 1 || route.length > 2)) {\n throw new TypeError('engineRoute must contain one primary and at most one fallback');\n }\n if ((route === null) === (runData === null)) {\n throw new TypeError('attempt must declare exactly one engine or data effect');\n }\n if (route !== null) {\n if (\n typeof prompt !== 'string' ||\n prompt.trim().length === 0\n ) {\n throw new TypeError('an engine attempt requires a prompt');\n }\n cloneFrozenJson(prompt);\n if (typeof recordModelUnavailable !== 'function') {\n throw new TypeError('engine attempt needs a model-unavailable recorder');\n }\n } else if (prompt !== null) {\n throw new TypeError('a data-only attempt must not have a model prompt');\n }\n if (runData !== null && typeof runData !== 'function') {\n throw new TypeError('runData must be a function or null');\n }\n if (parseResult !== null && typeof parseResult !== 'function') {\n throw new TypeError('parseResult must be a function or null');\n }\n if (typeof decideAction !== 'function') {\n throw new TypeError('decideAction must be a function');\n }\n if (recordEngineAttempt !== undefined && typeof recordEngineAttempt !== 'function') {\n throw new TypeError('recordEngineAttempt must be a function');\n }\n\n inputBytes = Buffer.byteLength(canonicalJson(input), 'utf8') +\n (prompt === null\n ? 0\n : Buffer.byteLength(prompt, 'utf8'));\n if (inputBytes > attemptPolicy.inputBytes) {\n facts.failure = failure(\n 'INPUT_LIMIT',\n `attempt input is ${inputBytes} bytes; limit is ${attemptPolicy.inputBytes}`,\n );\n return record(identity, trustedCaller, grantedPermissions, inputBytes, facts);\n }\n if (signal.aborted) {\n facts.failure = failure('ABORTED', 'node attempt was aborted before dispatch');\n return record(identity, trustedCaller, grantedPermissions, inputBytes, facts);\n }\n const scratchDirectory = await validateScratchDirectory(scratchPath);\n\n try {\n workspaceEntry = await captureWorkspaceEntry(attemptWorkspace, signal);\n attemptWorkspace = workspaceEntry.policy;\n workspace = attemptWorkspace;\n } catch (error) {\n facts.failure = failure('WORKSPACE_INSPECTION', error);\n }\n let decision: ActionDecision | null = null;\n if (facts.failure === null) {\n try {\n decision = validateActionDecision(await decideAction());\n } catch (error) {\n facts.failure = failure('ACTION_POLICY', error);\n }\n }\n facts.decision = decision;\n if (facts.failure !== null) {\n facts.status = 'failed';\n } else if (decision?.kind === 'wait') {\n facts.status = 'paused';\n } else if (decision?.kind === 'deny') {\n facts.status = 'denied';\n } else if (signal.aborted) {\n facts.status = 'failed';\n facts.failure = failure('ABORTED', 'node attempt was aborted before dispatch');\n } else if (route === null) {\n let effectResult: JsonValue | undefined;\n try {\n const completed = await runWithTimePolicy(\n signal,\n attemptDeadline(attemptPolicy),\n async (effectSignal) => await runData!({\n input,\n memory,\n scratchDirectory,\n workspaceDirectory: attemptWorkspace.directory,\n trustedCaller,\n permissions: grantedPermissions,\n signal: effectSignal,\n }),\n { abortAtSoftTimeout: true },\n );\n if (completed.finalDeadlineExceeded) {\n throw new AttemptStopError('timeout');\n }\n effectResult = cloneFrozenJson(completed.value);\n if (completed.timedOut) {\n facts.transportFailure = timeoutTransportFailure();\n }\n } catch (error) {\n facts.failure = error instanceof AttemptStopError\n ? failure(error.kind === 'timeout' ? 'TIMEOUT' : 'ABORTED', error)\n : failure('EFFECT_FAILED', error);\n }\n if (effectResult !== undefined) {\n const result = effectResult;\n facts.parts = Object.freeze([\n Object.freeze({ kind: 'structured', value: result, final: true }),\n ]);\n facts.outputBytes = outputBytes(facts.parts);\n if (facts.outputBytes > attemptPolicy.outputBytes) {\n facts.failure = failure(\n 'OUTPUT_LIMIT',\n `attempt output is ${facts.outputBytes} bytes; limit is ${attemptPolicy.outputBytes}`,\n );\n } else {\n try {\n facts.result = resultContract === null\n ? result\n : resultContract.validate(result);\n facts.status = 'completed';\n } catch (error) {\n facts.failure = failure('RESULT_INVALID', error);\n }\n }\n }\n } else {\n facts.requestedEngine = route[0]!.selection;\n const excluded = new Set<EngineExclusionKey>();\n const settle = (index: number, usage: UsageReceipt): void => {\n if (!reservations[index] || settled.has(index)) return;\n try {\n reservations[index]!.commit(usage);\n } finally {\n settled.add(index);\n }\n };\n const release = (index: number): void => {\n if (!reservations[index] || settled.has(index)) return;\n reservations[index]!.release();\n settled.add(index);\n };\n try {\n reservations = reserveCalls(route, attemptPolicy, tokenBudget);\n } catch (error) {\n facts.failure = failure('TOKEN_BUDGET', error);\n }\n\n if (facts.failure === null) {\n let successful = false;\n const time = attemptDeadline(attemptPolicy);\n for (let index = 0; index < route.length; index += 1) {\n const selected = route[index]!;\n try {\n if (declaredTargets !== undefined\n && isEngineExcluded(excluded, selected.selection, selected.target, declaredTargets)) {\n release(index);\n continue;\n }\n } catch (error) {\n facts.failure = failure(\n error instanceof EngineIdentityUnresolvedError ? 'ENGINE_IDENTITY_UNRESOLVED' : 'INVALID_ATTEMPT',\n error,\n );\n for (let unused = index; unused < route.length; unused += 1) release(unused);\n break;\n }\n const now = performance.now();\n const remainingTimeoutMs = Math.ceil(time.soft - now);\n if (remainingTimeoutMs < 1) {\n facts.failure = failure(\n 'TIMEOUT',\n 'node attempt exceeded its time limit',\n );\n for (let unused = index; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n const remainingHardMs = Math.max(\n remainingTimeoutMs,\n Math.ceil(time.hard - now),\n );\n const lanePolicy = Object.freeze({\n ...attemptPolicy,\n timeoutMs: remainingTimeoutMs,\n teardownGraceMs: remainingHardMs - remainingTimeoutMs,\n });\n let invoked = false;\n let effective: GraphEngineIdentity | null = null;\n let receiptUsage: UsageReceipt = EMPTY_USAGE;\n const capture = (result: AgentResult): void => {\n try {\n effective = graphIdentity(result.effective);\n } catch {\n // An invalid identity is unknown, even if other result fields are valid.\n }\n try {\n receiptUsage = validateIncompleteResultEvidence(result).usage;\n } catch {\n // Keep usage unknown when the returned evidence does not validate.\n }\n };\n try {\n let completed: Awaited<ReturnType<typeof runWithTimePolicy<AgentResult>>>;\n try {\n completed = await runWithTimePolicy(\n signal,\n time,\n async (engineSignal): Promise<AgentResult> => {\n const request = requestFor(\n identity,\n nodeId,\n prompt!,\n selected,\n lanePolicy,\n attemptWorkspace,\n scratchDirectory,\n grantedPermissions,\n resultContract,\n );\n invoked = true;\n try {\n const result = await selected.engine.run(request, () => {}, engineSignal);\n capture(result);\n return result;\n } catch (error) {\n if (error instanceof EngineIncompleteResultError) {\n capture(error.evidence);\n } else if (error instanceof EngineError && error.effective !== undefined) {\n effective = graphIdentity(error.effective);\n }\n throw error;\n }\n },\n { abortAtSoftTimeout: false },\n );\n } finally {\n if (invoked && recordEngineAttempt !== undefined) {\n const receipt = cloneFrozenJson({ requested: graphIdentity(selected.selection), effective });\n try {\n await recordEngineAttempt(receipt);\n } catch (error) {\n recorderError = { error };\n try {\n settle(index, receiptUsage);\n } finally {\n throw error;\n }\n }\n }\n }\n const result = validateAgentResult(\n completed.timedOut && completed.value.transportFailure === undefined\n ? {\n ...completed.value,\n transportFailure: timeoutTransportFailure(),\n }\n : completed.value,\n );\n facts.parts = result.parts;\n facts.usage = result.usage;\n facts.effectiveEngine = result.effective;\n facts.transportFailure = result.transportFailure ?? null;\n facts.outputBytes = outputBytes(result.parts);\n try {\n settle(index, result.usage);\n } catch (error) {\n facts.failure = failure('TOKEN_BUDGET', error);\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n if (!sameSelection(result.requested, selected.selection)) {\n facts.failure = failure(\n 'RESULT_INVALID',\n 'engine requested identity does not match its prepared lane',\n );\n } else if (facts.outputBytes > attemptPolicy.outputBytes) {\n facts.failure = failure(\n 'OUTPUT_LIMIT',\n `attempt output is ${facts.outputBytes} bytes; limit is ${attemptPolicy.outputBytes}`,\n );\n } else if (completed.finalDeadlineExceeded) {\n facts.failure = failure(\n 'TIMEOUT',\n 'node attempt exceeded its time limit',\n );\n } else {\n try {\n facts.result = validatedResult(\n resultContract,\n parseResult,\n result.parts,\n );\n facts.status = 'completed';\n successful = true;\n } catch (error) {\n facts.failure = failure('RESULT_INVALID', error);\n }\n }\n break;\n } catch (error) {\n if (recorderError !== undefined) throw recorderError.error;\n if (error instanceof EngineIncompleteResultError) {\n let evidence;\n try {\n evidence = validateIncompleteResultEvidence(error.evidence);\n facts.parts = evidence.parts;\n facts.usage = evidence.usage;\n facts.effectiveEngine = evidence.effective;\n facts.transportFailure = evidence.transportFailure ?? null;\n facts.outputBytes = outputBytes(evidence.parts);\n } catch (evidenceError) {\n settle(index, EMPTY_USAGE);\n facts.failure = failure('RESULT_INVALID', evidenceError);\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n try {\n settle(index, evidence.usage);\n } catch (budgetError) {\n facts.failure = failure('TOKEN_BUDGET', budgetError);\n }\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n if (facts.failure !== null) break;\n if (!sameSelection(evidence.requested, selected.selection)) {\n facts.failure = failure(\n 'RESULT_INVALID',\n 'engine evidence identity does not match its prepared lane',\n );\n } else if (facts.outputBytes > attemptPolicy.outputBytes) {\n facts.failure = failure(\n 'OUTPUT_LIMIT',\n `attempt output is ${facts.outputBytes} bytes; limit is ${attemptPolicy.outputBytes}`,\n );\n } else {\n facts.failure = failure(\n error instanceof TimedOutIncompleteResultError\n ? 'TIMEOUT'\n : 'EFFECT_FAILED',\n error,\n );\n }\n break;\n }\n settle(index, EMPTY_USAGE);\n if (error instanceof AttemptStopError) {\n facts.failure = failure(\n error.kind === 'timeout' ? 'TIMEOUT' : 'ABORTED',\n error,\n );\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n const failureKind = classifyEngineFailure(error);\n if (failureKind === 'timeout') {\n facts.failure = failure('TIMEOUT', error);\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n if (failureKind === 'aborted') {\n facts.failure = failure('ABORTED', error);\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n if (!LANE_DEAD_FAILURES.has(failureKind)) {\n facts.failure = failure('EFFECT_FAILED', error);\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n const effective = error instanceof EngineError && error.effective !== undefined\n ? selection(error.effective)\n : selected.selection;\n facts.unavailableModels.push(effective);\n let fact: ModelUnavailableFact;\n try {\n fact = await unavailable(\n identity,\n recordModelUnavailable,\n selected,\n effective,\n failureKind,\n );\n } catch (recordError) {\n facts.failure = failure('MODEL_UNAVAILABLE_RECORD', recordError);\n for (let unused = index + 1; unused < route.length; unused += 1) {\n release(unused);\n }\n break;\n }\n try {\n if (declaredTargets !== undefined) {\n for (const key of engineFailureExclusionKeys(fact, declaredTargets)) excluded.add(key);\n }\n } catch (error) {\n facts.failure = failure(\n error instanceof EngineIdentityUnresolvedError ? 'ENGINE_IDENTITY_UNRESOLVED' : 'INVALID_ATTEMPT',\n error,\n );\n for (let unused = index + 1; unused < route.length; unused += 1) release(unused);\n break;\n }\n if (index === route.length - 1) {\n facts.failure = failure('ENGINE_UNAVAILABLE', error);\n }\n }\n }\n if (!successful && facts.failure === null) {\n facts.failure = failure(\n 'ENGINE_UNAVAILABLE',\n 'no declared engine lane completed the attempt',\n );\n }\n }\n }\n } catch (error) {\n if (recorderError !== undefined) throw recorderError.error;\n facts.failure = failure('INVALID_ATTEMPT', error);\n } finally {\n for (const [index, reservation] of reservations.entries()) {\n if (!settled.has(index)) reservation.release();\n }\n if (workspace && workspaceEntry) {\n try {\n facts.workspace = await inspectWorkspaceExit(\n workspace,\n workspaceEntry,\n new AbortController().signal,\n );\n if (policy) applyWorkspacePolicy(facts, policy);\n } catch (error) {\n facts.status = 'failed';\n facts.failure = failure('WORKSPACE_INSPECTION', error);\n }\n }\n }\n\n return record(\n identity,\n trustedCaller,\n grantedPermissions,\n inputBytes,\n facts,\n );\n}\n","import {\n validateNewDomainEvent,\n type DomainEventEnvelope,\n type EventStreamRef,\n type NewDomainEvent,\n} from '../events/envelope.js';\nimport type { DomainEventBatch } from '../events/store.js';\nimport { StorageError } from '../storage/error.js';\nimport {\n loadRunDefinition,\n type RunStorageBinding,\n} from './run-definition.js';\n\nexport interface LoadedRunEvents {\n readonly stream: EventStreamRef;\n readonly events: readonly DomainEventEnvelope[];\n}\n\nexport type RunEventAppendCheck = (\n events: readonly DomainEventEnvelope[],\n) => 'append' | 'already-stored';\n\nexport async function readRunEvents(\n storage: RunStorageBinding,\n runId: string,\n): Promise<LoadedRunEvents> {\n await loadRunDefinition(storage, runId);\n const stream = { namespace: storage.record.namespace, streamId: runId };\n const events: DomainEventEnvelope[] = [];\n for await (const event of storage.eventStore.read(stream)) events.push(event);\n return Object.freeze({ stream, events: Object.freeze(events) });\n}\n\nexport async function appendRunEvent(\n storage: RunStorageBinding,\n runId: string,\n event: NewDomainEvent,\n check?: RunEventAppendCheck,\n): Promise<void> {\n const safe = validateNewDomainEvent(event);\n for (;;) {\n const loaded = await readRunEvents(storage, runId);\n if (check?.(loaded.events) === 'already-stored') return;\n const revision = loaded.events.at(-1)?.revision ?? 0;\n try {\n await storage.eventStore.append(\n loaded.stream,\n revision,\n [safe] as DomainEventBatch,\n );\n return;\n } catch (error) {\n if (error instanceof StorageError && error.code === 'REVISION_CONFLICT') continue;\n throw error;\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { validateApprovalRecord, snapshotApprovalSubject, assertApprovalPermissionsAdmitted, validateActionDecision, type ApprovalRecord, type ApprovalSubject, type ApprovalResolutionInput, type PrepareApprovalRecordInput, type NewApprovalEvent, type ActionDecision, type JsonObject, type Sha256Digest, type AcceptedResultGraph, cloneFrozenJson, digestJson } from '@obversa/api';\nimport { bindingFromSubject, hasExactFields, isObject } from '@obversa/api/approval-support';\nimport type { DomainEventEnvelope } from '../events/envelope.js';\nimport { readRunEvents } from '../runtime/run-event.js';\nimport { loadRunDefinition, type RunStorageBinding } from '../runtime/run-definition.js';\nimport { validateCallbackRequest, validateCallbackResponse, type CallbackRequest } from './gate.js';\nexport { ApprovalSubjectError, approvalSubjectDigest, createApprovalCallbackGate, validateApprovalRecord, validateApprovalSubject, snapshotApprovalSubject, assertApprovalPermissionsAdmitted, type ApprovalSubmission, type ApprovalSubjectInput, type ApprovalResolutionInput, type ApprovalSubject, type ApprovalBinding, type ApprovalRecord, type ApprovalEventPayload, type NewApprovalEvent, type PrepareApprovalRecordInput } from '@obversa/api';\n\nfunction approvalPayloadFor(\n events: readonly DomainEventEnvelope[],\n requestId: string,\n): JsonObject | null | undefined {\n let payload: JsonObject | undefined;\n for (const event of events) {\n if (event.type !== 'callback:approval-recorded' || event.version !== 1) continue;\n if (!isObject(event.payload) || event.payload.requestId !== requestId) continue;\n if (payload !== undefined) return null;\n payload = event.payload;\n }\n return payload;\n}\n\n\nexport function prepareApprovalRecord(\n runId: string,\n input: PrepareApprovalRecordInput,\n): Readonly<{ readonly record: ApprovalRecord; readonly event: NewApprovalEvent }> {\n if (input.submission.requestId !== input.request.requestId\n || input.submission.requestDigest !== input.request.digest\n || input.submission.routerId !== input.responsePath) {\n throw new TypeError('callback submission does not match the approval subject');\n }\n const structured = validateCallbackResponse(\n input.submission.response,\n input.request.responseSchema,\n );\n if (!structured.ok) throw new TypeError(structured.reason);\n const decision = validateActionDecision(input.submission.response as ActionDecision);\n const binding = bindingFromSubject(input, decision);\n const record = validateApprovalRecord({\n schemaVersion: 1,\n binding,\n bindingDigest: digestJson(binding),\n });\n const event: NewApprovalEvent = {\n eventId: randomUUID(),\n type: 'callback:approval-recorded',\n version: 1,\n timestamp: new Date().toISOString(),\n correlationId: runId,\n causationId: null,\n payload: { requestId: input.request.requestId, record },\n };\n return Object.freeze({ record, event });\n}\n\nfunction staleApproval(request: CallbackRequest): ActionDecision {\n return cloneFrozenJson({\n kind: 'wait',\n reason: 'approval no longer matches the bytes to apply',\n request: {\n requestId: request.requestId,\n requestDigest: request.digest,\n },\n });\n}\n\nfunction resolveApprovalRecord(\n record: ApprovalRecord,\n request: CallbackRequest,\n subject: ApprovalSubject,\n planDigest: Sha256Digest,\n graph: AcceptedResultGraph,\n): ActionDecision {\n try {\n const stored = validateApprovalRecord(record);\n const { binding: storedBinding } = stored;\n const binding = bindingFromSubject({\n request,\n planDigest,\n graph,\n subject,\n actor: storedBinding.actor,\n responsePath: storedBinding.responsePath,\n }, storedBinding.decision);\n if (stored.bindingDigest !== digestJson(binding)) return staleApproval(request);\n return storedBinding.decision;\n } catch {\n return staleApproval(request);\n }\n}\n\nexport async function resolveApproval(\n storage: RunStorageBinding,\n runId: string,\n current: ApprovalResolutionInput,\n): Promise<ActionDecision> {\n const request = validateCallbackRequest(current.request);\n const subject = snapshotApprovalSubject(current);\n const run = await loadRunDefinition(storage, runId);\n try {\n assertApprovalPermissionsAdmitted(subject, run.resolvedPlan.plan.permissions.admitted);\n } catch {\n return staleApproval(request);\n }\n const loaded = await readRunEvents(storage, runId);\n const payload = approvalPayloadFor(loaded.events, request.requestId);\n if (payload === undefined\n || payload === null\n || !hasExactFields(payload, ['requestId', 'record'])\n || !isObject(payload.record)) {\n return staleApproval(request);\n }\n return resolveApprovalRecord(\n payload.record as ApprovalRecord,\n request,\n subject,\n run.resolvedPlan.digest,\n {\n definitionDigest: run.resolvedPlan.plan.graph.definitionDigest,\n typeVersion: run.resolvedPlan.plan.graph.typeVersion,\n },\n );\n}\n","import { randomUUID } from 'node:crypto';\n\nimport type { NewCallbackHistoryEvent, StoredCallbackClient } from '@obversa/api';\nimport {\n validateNewDomainEvent,\n type NewDomainEvent,\n} from '../events/envelope.js';\nimport type { DomainEventBatch } from '../events/store.js';\nimport {\n cloneFrozenJson,\n digestJson,\n type JsonObject,\n type JsonValue,\n} from '../graph/value.js';\nimport {\n loadRunDefinition,\n type RunStorageBinding,\n} from '../runtime/run-definition.js';\nimport {\n validateActionDecision,\n type ActionDecision,\n} from '../runtime/node-lifecycle.js';\nimport { StorageError } from '../storage/error.js';\nimport {\n ApprovalSubjectError,\n assertApprovalPermissionsAdmitted,\n prepareApprovalRecord,\n snapshotApprovalSubject,\n validateApprovalRecord,\n validateApprovalSubject,\n type ApprovalRecord,\n type ApprovalSubject,\n} from './approval.js';\nimport {\n createCallbackClient,\n validateCallbackEvent,\n type CallbackClient,\n type CallbackEvent,\n type SubmitResult,\n} from './client.js';\nimport {\n validateCallbackRequest,\n type CallbackRequest,\n} from './gate.js';\n\nconst CALLBACK_EVENT_TYPE = 'callback:history-recorded';\n\nexport type { NewCallbackHistoryEvent, StoredCallbackClient } from '@obversa/api';\n\ninterface StoredState {\n readonly revision: number;\n readonly events: readonly CallbackEvent[];\n readonly client: CallbackClient;\n readonly approvalSubjects: ReadonlyMap<string, ApprovalSubject>;\n readonly approvalRecords: ReadonlyMap<string, ApprovalRecord | null>;\n}\n\nfunction historyEvent(\n runId: string,\n event: CallbackEvent,\n approvalSubject?: ApprovalSubject,\n): NewCallbackHistoryEvent {\n const payload = approvalSubject === undefined\n ? { event: cloneFrozenJson(event as unknown as JsonValue) }\n : {\n event: cloneFrozenJson(event as unknown as JsonValue),\n approvalSubject,\n };\n return validateNewDomainEvent({\n eventId: randomUUID(),\n type: CALLBACK_EVENT_TYPE,\n version: 1,\n timestamp: new Date().toISOString(),\n correlationId: runId,\n causationId: null,\n payload,\n }) as NewCallbackHistoryEvent;\n}\n\nfunction object(value: unknown, message: string): JsonObject {\n const stored = cloneFrozenJson(value as JsonValue);\n if (stored === null || typeof stored !== 'object' || Array.isArray(stored)) {\n throw new TypeError(message);\n }\n return stored as JsonObject;\n}\n\nfunction isObject(value: unknown): value is JsonObject {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction requestApprovalSubjectDigest(request: CallbackRequest): string | undefined {\n if (!isObject(request.input)) return undefined;\n const value = request.input.approvalSubjectDigest;\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction assertSubjectMatchesRequest(\n request: CallbackRequest,\n subject: ApprovalSubject,\n): void {\n if (requestApprovalSubjectDigest(request) !== digestJson(subject)) {\n throw new ApprovalSubjectError(\n 'The approval subject does not match the digest in the callback request input.',\n );\n }\n}\n\n/** Open an awaited callback writer over the run's own event stream. */\nexport async function createStoredCallbackClient(\n storage: RunStorageBinding,\n runId: string,\n): Promise<Readonly<StoredCallbackClient>> {\n const run = await loadRunDefinition(storage, runId);\n const stream = { namespace: storage.record.namespace, streamId: runId };\n\n const read = async (): Promise<StoredState> => {\n let revision = 0;\n const events: CallbackEvent[] = [];\n const approvalSubjects = new Map<string, ApprovalSubject>();\n const approvalRecords = new Map<string, ApprovalRecord | null>();\n for await (const envelope of storage.eventStore.read(stream)) {\n revision = envelope.revision;\n if (envelope.type === 'callback:approval-recorded') {\n const payload = envelope.payload;\n if (envelope.version !== 1\n || !isObject(payload)\n || typeof payload.requestId !== 'string') {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'Stored callback approval event is invalid.',\n { eventId: envelope.eventId },\n );\n }\n if (approvalRecords.has(payload.requestId)) {\n approvalRecords.set(payload.requestId, null);\n continue;\n }\n try {\n if (Object.keys(payload).sort().join(',') !== 'record,requestId') {\n throw new TypeError('approval event has unknown fields');\n }\n const record = validateApprovalRecord(payload.record);\n approvalRecords.set(\n payload.requestId,\n record.binding.requestId === payload.requestId ? record : null,\n );\n } catch {\n approvalRecords.set(payload.requestId, null);\n }\n continue;\n }\n if (envelope.type !== CALLBACK_EVENT_TYPE) continue;\n const payload = envelope.payload;\n const fields = isObject(payload)\n ? Object.keys(payload).sort()\n : [];\n if (envelope.version !== 1\n || !isObject(payload)\n || (fields.length !== 1 && fields.length !== 2)\n || (fields.length === 1 && fields[0] !== 'event')\n || (fields.length === 2\n && (fields[0] !== 'approvalSubject' || fields[1] !== 'event'))) {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'Stored callback history event is invalid.',\n { eventId: envelope.eventId },\n );\n }\n const event = validateCallbackEvent(payload.event);\n if (Object.hasOwn(payload, 'approvalSubject')) {\n if (event.kind !== 'callback-requested') {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'Stored approval subject is not attached to a callback request.',\n { eventId: envelope.eventId },\n );\n }\n const subject = validateApprovalSubject(payload.approvalSubject);\n try {\n assertSubjectMatchesRequest(event.request, subject);\n } catch (error) {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n error instanceof Error ? error.message : String(error),\n { eventId: envelope.eventId },\n );\n }\n if (approvalSubjects.has(event.request.requestId)) {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'Stored callback request has more than one approval subject.',\n { requestId: event.request.requestId },\n );\n }\n approvalSubjects.set(event.request.requestId, subject);\n }\n events.push(event);\n }\n return Object.freeze({\n revision,\n events: Object.freeze(events),\n client: createCallbackClient(events),\n approvalSubjects,\n approvalRecords,\n });\n };\n\n interface Change<Result> {\n readonly result: Result;\n readonly approvalSubject?: ApprovalSubject;\n readonly additionalEvents?: readonly NewDomainEvent[];\n }\n\n const change = async <Result>(\n apply: (state: StoredState) => Change<Result>,\n ): Promise<Result> => {\n for (;;) {\n const state = await read();\n const mutation = apply(state);\n const added = state.client.history().slice(state.events.length);\n const batch = [\n ...added.map((event) => historyEvent(\n runId,\n event,\n event.kind === 'callback-requested' ? mutation.approvalSubject : undefined,\n )),\n ...(mutation.additionalEvents ?? []),\n ];\n const first = batch[0];\n if (first === undefined) return mutation.result;\n try {\n await storage.eventStore.append(\n stream,\n state.revision,\n [first, ...batch.slice(1)],\n );\n return mutation.result;\n } catch (error) {\n if (error instanceof StorageError && error.code === 'REVISION_CONFLICT') continue;\n throw error;\n }\n }\n };\n\n const client: StoredCallbackClient = {\n post: async (request, approvalSubjectInput) => {\n const storedRequest = validateCallbackRequest(request);\n const approvalSubject = approvalSubjectInput === undefined\n ? undefined\n : snapshotApprovalSubject(approvalSubjectInput);\n if (approvalSubject === undefined\n && requestApprovalSubjectDigest(storedRequest) !== undefined) {\n throw new ApprovalSubjectError(\n 'The approval subject named by the callback request input is missing.',\n );\n }\n if (approvalSubject !== undefined) {\n assertSubjectMatchesRequest(storedRequest, approvalSubject);\n assertApprovalPermissionsAdmitted(approvalSubject, run.resolvedPlan.plan.permissions.admitted);\n }\n await change((state) => {\n const existing = state.client.history(storedRequest.requestId).some((event) => (\n event.kind === 'callback-requested'\n ));\n const storedSubject = state.approvalSubjects.get(storedRequest.requestId);\n if (existing && approvalSubject !== undefined) {\n if (storedSubject === undefined\n || digestJson(storedSubject) !== digestJson(approvalSubject)) {\n throw new StorageError(\n 'REVISION_CONFLICT',\n `A different callback request is already stored for \"${storedRequest.requestId}\".`,\n { requestId: storedRequest.requestId },\n );\n }\n }\n state.client.post(storedRequest);\n // A request the store already knows keeps its one subject: a post\n // that re-opens a superseded request records the request again and\n // the subject never, so the history stays readable.\n return { result: undefined, approvalSubject: storedSubject === undefined ? approvalSubject : undefined };\n });\n },\n listPending: async () => (await read()).client.listPending(),\n claim: async (requestId, routerId) => change((state) => ({\n result: state.client.claim(requestId, routerId),\n })),\n submit: async (requestId, claimToken, routerId, requestDigest, response, actor) => {\n const storedResponse = cloneFrozenJson(response);\n const storedActor = actor === undefined\n ? undefined\n : object(actor, 'an approval submit actor must be an object');\n return change((state) => {\n const subject = state.approvalSubjects.get(requestId);\n if (subject !== undefined && storedActor === undefined) {\n return {\n result: {\n ok: false,\n kind: 'invalid',\n reason: 'a subject-backed callback submit needs an actor',\n } satisfies SubmitResult,\n };\n }\n if (subject !== undefined) {\n try {\n assertApprovalPermissionsAdmitted(subject, run.resolvedPlan.plan.permissions.admitted);\n validateActionDecision(storedResponse as ActionDecision);\n } catch (error) {\n return {\n result: {\n ok: false,\n kind: 'invalid',\n reason: error instanceof Error ? error.message : String(error),\n } satisfies SubmitResult,\n };\n }\n }\n const history = state.client.history(requestId);\n const requested = history.find((event) => event.kind === 'callback-requested');\n const existingSubmission = [...history].reverse().find((event) => (\n event.kind === 'callback-submitted'\n ));\n if (subject !== undefined\n && storedActor !== undefined\n && requested?.kind === 'callback-requested'\n && existingSubmission?.kind === 'callback-submitted') {\n const claim = [...history].reverse().find((event) => (\n event.kind === 'callback-claimed'\n ));\n if (claim?.kind !== 'callback-claimed'\n || claim.claimToken !== claimToken\n || claim.routerId !== routerId) {\n return {\n result: {\n ok: false,\n kind: 'not-owner',\n reason: 'the claim belongs to another router',\n } satisfies SubmitResult,\n };\n }\n if (requestDigest !== requested.request.digest) {\n return {\n result: {\n ok: false,\n kind: 'stale',\n reason: 'the submit digest does not match the posted request',\n } satisfies SubmitResult,\n };\n }\n const prepared = prepareApprovalRecord(runId, {\n request: requested.request,\n planDigest: run.resolvedPlan.digest,\n graph: {\n definitionDigest: run.resolvedPlan.plan.graph.definitionDigest,\n typeVersion: run.resolvedPlan.plan.graph.typeVersion,\n },\n subject,\n actor: storedActor,\n responsePath: routerId,\n submission: {\n kind: 'callback-submitted',\n requestId,\n requestDigest,\n routerId,\n response: storedResponse,\n },\n });\n const existingApproval = state.approvalRecords.get(requestId);\n if (existingApproval === undefined) {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'Stored callback submission has no matching approval.',\n { requestId },\n );\n }\n if (digestJson(existingApproval) === digestJson(prepared.record)) {\n return { result: { ok: true, response: storedResponse } };\n }\n throw new StorageError(\n 'REVISION_CONFLICT',\n `A different approval is already stored for request \"${requestId}\".`,\n { requestId },\n );\n }\n if (subject !== undefined && state.approvalRecords.has(requestId)) {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'Stored callback approval has no matching submission.',\n { requestId },\n );\n }\n const result = state.client.submit(\n requestId,\n claimToken,\n routerId,\n requestDigest,\n storedResponse,\n );\n if (!result.ok || subject === undefined || storedActor === undefined) {\n return { result };\n }\n const submission = [...state.client.history(requestId)].reverse().find((event) => (\n event.kind === 'callback-submitted'\n ));\n const posted = state.client.history(requestId).find((event) => (\n event.kind === 'callback-requested'\n ));\n if (submission?.kind !== 'callback-submitted'\n || posted?.kind !== 'callback-requested') {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'Callback approval is missing its request or submission.',\n { requestId },\n );\n }\n const prepared = prepareApprovalRecord(runId, {\n request: posted.request,\n planDigest: run.resolvedPlan.digest,\n graph: {\n definitionDigest: run.resolvedPlan.plan.graph.definitionDigest,\n typeVersion: run.resolvedPlan.plan.graph.typeVersion,\n },\n subject,\n actor: storedActor,\n responsePath: routerId,\n submission,\n });\n return { result, additionalEvents: [prepared.event] };\n });\n },\n release: async (requestId, claimToken) => change((state) => ({\n result: state.client.release(requestId, claimToken),\n })),\n supersede: async (requestId, supersededBy) => {\n await change((state) => {\n state.client.supersede(requestId, supersededBy);\n return { result: undefined };\n });\n },\n history: async (requestId) => (await read()).client.history(requestId),\n };\n return Object.freeze(client);\n}\n","import { randomUUID } from 'node:crypto';\n\nimport {\n validateAcceptedResultRecord,\n type AcceptedResultBindingInput,\n type AcceptedResultRecord,\n type AcceptedResultResolution,\n type CreateAcceptedResultRecordInput,\n type NewAcceptedResultEvent,\n} from '@obversa/api';\nimport { acceptedResultSupport } from '@obversa/api/accepted-result-support';\nimport type { DomainEventEnvelope } from '../events/envelope.js';\nimport { digestJson, type JsonObject, type Sha256Digest } from '../graph/value.js';\nimport { appendRunEvent, readRunEvents } from '../runtime/run-event.js';\nimport { loadRunDefinition, type RunStorageBinding } from '../runtime/run-definition.js';\nimport { StorageError } from '../storage/error.js';\n\nexport {\n acceptedResultMatches,\n validateAcceptedResultRecord,\n type AcceptedResultGraph,\n type AcceptedResultBindingInput,\n type AcceptedResultBinding,\n type AcceptedResultRecord,\n type AcceptedResultEventPayload,\n type NewAcceptedResultEvent,\n type CreateAcceptedResultRecordInput,\n type AcceptedResultResolution,\n} from '@obversa/api';\n\nconst CONTROL_CHARACTER = /[\\u0000-\\u001f\\u007f]/u;\nconst { isObject, hasExactFields, bindingFrom, acceptedResultMatchesBinding } = acceptedResultSupport;\n\nfunction acceptedPayloadAt(\n events: readonly DomainEventEnvelope[],\n position: string,\n): JsonObject | null | undefined {\n let payload: JsonObject | undefined;\n for (const event of events) {\n if (event.type !== 'proof:result-accepted' || event.version !== 1) continue;\n if (!isObject(event.payload) || event.payload.position !== position) continue;\n if (payload !== undefined) return null;\n payload = event.payload;\n }\n return payload;\n}\n\nfunction matchesStoredCompletion(\n events: readonly DomainEventEnvelope[],\n position: string,\n nodeIds: ReadonlySet<string>,\n resultDigest: Sha256Digest,\n): boolean {\n const matching = events.filter((event) => (\n event.type === 'graph:node-dispatched'\n && isObject(event.payload)\n && event.payload.position === position\n ));\n if (matching.length !== 1) return false;\n const [event] = matching;\n const payload = event?.payload;\n if (!(event?.version === 1\n && isObject(payload)\n && hasExactFields(payload, ['nodeId', 'position'])\n && typeof payload.nodeId === 'string'\n && nodeIds.has(payload.nodeId))) return false;\n const terminals = events.filter((candidate) => (\n (candidate.type === 'graph:node-completed' || candidate.type === 'graph:node-failed')\n && isObject(candidate.payload)\n && candidate.payload.position === position\n ));\n if (terminals.length !== 1) return false;\n const [completed] = terminals;\n const result = completed?.payload;\n return completed?.type === 'graph:node-completed'\n && completed.version === 1\n && completed.revision > event.revision\n && isObject(result)\n && hasExactFields(result, ['nodeId', 'position', 'result'])\n && result.nodeId === payload.nodeId\n && result.result !== undefined\n && digestJson(result.result) === resultDigest;\n}\n\nexport async function createAcceptedResultRecord(\n storage: RunStorageBinding,\n runId: string,\n position: string,\n input: CreateAcceptedResultRecordInput,\n): Promise<AcceptedResultRecord> {\n if (typeof position !== 'string'\n || position.length === 0\n || position !== position.trim()\n || CONTROL_CHARACTER.test(position)) {\n throw new TypeError(\n 'accepted-result position must be a non-empty trimmed string without control characters',\n );\n }\n const binding = bindingFrom(input);\n const record = validateAcceptedResultRecord({\n schemaVersion: 1,\n result: input.result,\n resultDigest: digestJson(input.result),\n binding,\n bindingDigest: digestJson(binding),\n });\n const stored = await loadRunDefinition(storage, runId);\n const storedGraph = stored.resolvedPlan.plan.graph;\n if (binding.graph.definitionDigest !== storedGraph.definitionDigest\n || binding.graph.typeVersion !== storedGraph.typeVersion) {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n 'The accepted result graph does not match the run plan.',\n { position },\n );\n }\n const nodeIds = new Set(stored.resolvedPlan.plan.nodes.map((node) => node.id));\n const event: NewAcceptedResultEvent = {\n eventId: randomUUID(),\n type: 'proof:result-accepted',\n version: 1,\n timestamp: new Date().toISOString(),\n correlationId: runId,\n causationId: null,\n payload: { position, record },\n };\n await appendRunEvent(storage, runId, event, (events) => {\n if (!matchesStoredCompletion(events, position, nodeIds, record.resultDigest)) {\n throw new StorageError(\n 'INVALID_STORED_VALUE',\n `Accepted result position \"${position}\" needs one stored dispatch and a matching completed result.`,\n { position },\n );\n }\n const payload = acceptedPayloadAt(events, position);\n if (payload === undefined) return 'append';\n try {\n if (payload !== null\n && hasExactFields(payload, ['position', 'record'])\n && digestJson(validateAcceptedResultRecord(payload.record)) === digestJson(record)) {\n return 'already-stored';\n }\n } catch {\n // A corrupt record at this position still owns the key.\n }\n throw new StorageError(\n 'REVISION_CONFLICT',\n `A different accepted result is already stored at position \"${position}\".`,\n { position },\n );\n });\n return record;\n}\n\nexport async function resolveAcceptedResult(\n storage: RunStorageBinding,\n runId: string,\n position: string,\n current: AcceptedResultBindingInput,\n): Promise<AcceptedResultResolution> {\n const currentBinding = bindingFrom(current);\n const stored = await loadRunDefinition(storage, runId);\n const loaded = await readRunEvents(storage, runId);\n const storedGraph = stored.resolvedPlan.plan.graph;\n const nodeIds = new Set(stored.resolvedPlan.plan.nodes.map((node) => node.id));\n const payload = acceptedPayloadAt(loaded.events, position);\n if (currentBinding.graph.definitionDigest === storedGraph.definitionDigest\n && currentBinding.graph.typeVersion === storedGraph.typeVersion\n && payload !== undefined\n && payload !== null\n && hasExactFields(payload, ['position', 'record'])\n && acceptedResultMatchesBinding(\n payload.record as AcceptedResultRecord,\n currentBinding,\n )\n && matchesStoredCompletion(\n loaded.events,\n position,\n nodeIds,\n (payload.record as AcceptedResultRecord).resultDigest,\n )) {\n return Object.freeze({\n kind: 'accepted',\n record: validateAcceptedResultRecord(payload.record),\n });\n }\n return Object.freeze({\n kind: 'wait',\n reason: 'accepted result no longer matches the bytes under review',\n });\n}\n","import { isDeepStrictEqual } from 'node:util';\nimport type { ProofArtifactReference } from '@obversa/api';\n\nimport type {\n ArtifactReference,\n ArtifactScope,\n ArtifactStore,\n NewArtifact,\n} from '../artifacts/store.js';\nimport { canonicalJson, digestJson, type JsonObject } from '../graph/value.js';\nimport { StorageError } from '../storage/error.js';\n\nexport type { ProofArtifactReference } from '@obversa/api';\n\n/** Write one stable proof packet and refuse a store that reports another identity. */\nexport async function writeProofArtifact(\n store: ArtifactStore,\n scope: ArtifactScope,\n packet: JsonObject,\n): Promise<ProofArtifactReference> {\n const bytes = new TextEncoder().encode(canonicalJson(packet));\n const artifact: NewArtifact = {\n bytes,\n mediaType: 'application/json',\n purpose: 'proof-packet',\n contentMode: 'state',\n };\n const expected: ProofArtifactReference = {\n schemaVersion: 1,\n digest: digestJson(packet),\n byteLength: bytes.byteLength,\n mediaType: artifact.mediaType,\n purpose: 'proof-packet',\n };\n const predicted = await store.preflightWrite(scope, [artifact]);\n if (predicted.length !== 1 || !isDeepStrictEqual(predicted[0], expected)) {\n throw new StorageError(\n 'ARTIFACT_INTEGRITY',\n 'Artifact store predicted the wrong proof reference.',\n { expected, actual: predicted[0] ?? null },\n );\n }\n const written = await store.write(scope, artifact);\n if (!isDeepStrictEqual(written, expected)) {\n throw new StorageError(\n 'ARTIFACT_INTEGRITY',\n 'Artifact store returned the wrong proof reference.',\n { expected, actual: written },\n );\n }\n return written as ProofArtifactReference;\n}\n","import {\n canonicalJson,\n cloneFrozenJson,\n digestJson,\n} from '../graph/value.js';\nimport type {\n AcceptedResultResolution,\n CachedProofPacket,\n ProofCache,\n ProofCacheCurrentBinding,\n ProofCacheOptions,\n ProofJob,\n ProofPacket,\n ProofPacketSource,\n ProofSource,\n} from '@obversa/api';\nimport { writeProofArtifact } from './artifact.js';\nimport { resolveAcceptedResult } from './acceptance.js';\n\nexport type {\n CachedProofPacket,\n ProofCache,\n ProofCacheCurrentBinding,\n ProofCacheOptions,\n ProofJob,\n ProofPacket,\n ProofPacketSource,\n ProofSource,\n} from '@obversa/api';\n\nfunction identifier(value: string): void {\n if (typeof value !== 'string' || value.length === 0 || value !== value.trim()\n || /[\\u0000-\\u001f\\u007f]/u.test(value)) {\n throw new TypeError('proof cache identifiers must be non-empty trimmed strings without control characters');\n }\n}\n\n/** One host process and stored run; source adapters own revision authority and read-only behavior. */\nexport function createProofCache(options: ProofCacheOptions): ProofCache {\n const { storage, runId, maxPacketBytes } = options;\n identifier(runId);\n if (!Number.isSafeInteger(maxPacketBytes) || maxPacketBytes < 1) {\n throw new TypeError('maxPacketBytes must be a positive safe integer');\n }\n const sources = new Map<string, ProofSource>();\n for (const source of options.sources) {\n identifier(source.id);\n if (sources.has(source.id)) throw new TypeError(`duplicate source: ${source.id}`);\n sources.set(source.id, Object.freeze({\n id: source.id, revision: source.revision.bind(source), read: source.read.bind(source),\n }));\n }\n const jobs = new Map<string, ProofJob>();\n for (const job of options.proofJobs) {\n identifier(job.id);\n if (jobs.has(job.id)) throw new TypeError(`duplicate proof job: ${job.id}`);\n if (job.mode !== 'read-only' && job.mode !== 'effectful') throw new TypeError('invalid proof job mode');\n if (new Set(job.sourceIds).size !== job.sourceIds.length) throw new TypeError(`duplicate source in proof job: ${job.id}`);\n for (const id of job.sourceIds) {\n if (!sources.has(id)) throw new TypeError(`unknown source: ${id}`);\n }\n if (job.proofScope === null || typeof job.proofScope !== 'object' || Array.isArray(job.proofScope)) {\n throw new TypeError('proofScope must be an object');\n }\n jobs.set(job.id, cloneFrozenJson({\n id: job.id, mode: job.mode, sourceIds: [...job.sourceIds].sort(), proofScope: job.proofScope,\n }) as unknown as ProofJob);\n }\n\n const captured = new Map<string, { revision: string; value: Promise<ProofPacketSource> }>();\n const packets = new Map<string, { key: string; value: Promise<CachedProofPacket> }>();\n const scope = Object.freeze({ namespace: storage.record.namespace, runId });\n\n async function revision(source: ProofSource): Promise<string> {\n const value = await source.revision();\n if (typeof value !== 'string' || value.length === 0) throw new TypeError(`invalid source revision: ${source.id}`);\n return value;\n }\n\n function capture(source: ProofSource, expected: string): Promise<ProofPacketSource> {\n const previous = captured.get(source.id);\n if (previous?.revision === expected) return previous.value;\n const entry = {\n revision: expected,\n value: Promise.resolve().then(async () => {\n const content = cloneFrozenJson(await source.read(expected, maxPacketBytes));\n if (Buffer.byteLength(canonicalJson(content), 'utf8') > maxPacketBytes) {\n throw new RangeError('proof source exceeds maxPacketBytes');\n }\n if (await revision(source) !== expected || captured.get(source.id) !== entry) {\n throw new Error(`proof source revision changed: ${source.id}`);\n }\n return cloneFrozenJson({ id: source.id, revision: expected, digest: digestJson(content), content }) as ProofPacketSource;\n }).catch((error: unknown) => {\n if (captured.get(source.id) === entry) captured.delete(source.id);\n throw error;\n }),\n };\n captured.set(source.id, entry);\n return entry.value;\n }\n\n async function packet(jobId: string): Promise<CachedProofPacket> {\n const job = jobs.get(jobId);\n if (job === undefined) throw new TypeError(`unknown proof job: ${jobId}`);\n if (job.mode !== 'read-only') throw new TypeError(`proof job must be read-only: ${jobId}`);\n const selected = job.sourceIds.map((id) => sources.get(id)!);\n const observed = selected.map((source) => captured.get(source.id));\n const revisions = await Promise.all(selected.map(revision));\n if (selected.some((source, index) => {\n const current = captured.get(source.id);\n return current !== observed[index] && current !== undefined && current.revision !== revisions[index];\n })) throw new Error(`proof source revision changed during revision lookup: ${jobId}`);\n const key = canonicalJson(revisions);\n const previous = packets.get(jobId);\n if (previous?.key === key) return previous.value;\n const entry = {\n key,\n value: Promise.resolve().then(async () => {\n const values = await Promise.all(selected.map((source, index) => capture(source, revisions[index]!)));\n const proof = cloneFrozenJson({ schemaVersion: 1, sources: values }) as ProofPacket;\n if (Buffer.byteLength(canonicalJson(proof), 'utf8') > maxPacketBytes) {\n throw new RangeError('proof packet exceeds maxPacketBytes');\n }\n const proofArtifact = await writeProofArtifact(storage.artifactStore, scope, proof);\n if (canonicalJson(await Promise.all(selected.map(revision))) !== key || packets.get(jobId) !== entry) {\n throw new Error(`proof source revision changed during packet capture: ${jobId}`);\n }\n return cloneFrozenJson({\n packet: proof, inputHashes: Object.fromEntries(values.map((value) => [value.id, value.digest])),\n proofArtifact, proofScope: job.proofScope,\n }) as unknown as CachedProofPacket;\n }).catch((error: unknown) => {\n if (packets.get(jobId) === entry) packets.delete(jobId);\n throw error;\n }),\n };\n packets.set(jobId, entry);\n return entry.value;\n }\n\n async function resolveAccepted(\n jobId: string,\n position: string,\n current: ProofCacheCurrentBinding,\n ): Promise<AcceptedResultResolution> {\n const binding = cloneFrozenJson({\n graph: current.graph,\n workspaceAnchor: current.workspaceAnchor,\n reviewerIdentity: current.reviewerIdentity,\n }) as unknown as ProofCacheCurrentBinding;\n const evidence = await packet(jobId);\n return resolveAcceptedResult(storage, runId, position, {\n ...binding,\n inputHashes: evidence.inputHashes,\n proofScope: evidence.proofScope,\n proofArtifact: evidence.proofArtifact,\n });\n }\n\n return Object.freeze({ packet, resolveAccepted });\n}\n","/** One bounded live call through the selected engine, with validated evidence. */\n\nimport {\n EngineError, EngineIncompleteResultError,\n type AgentResult, type AttemptMetadata, type Engine,\n type EngineIncompleteResultEvidence, type EngineSelectionRecord,\n type UsageReceipt,\n} from './engine.js';\nimport { classifyEngineFailure, type EngineFailureKind } from './failure.js';\nimport {\n engineSelection, reportedUsage, requireFinalResultText,\n validateAgentResult, validateIncompleteResultEvidence,\n} from '../runtime/result-parts.js';\n\nexport interface PreflightResult {\n engine: string;\n model?: string;\n ok: boolean;\n /** Set when the probe failed, using the live engine-failure vocabulary. */\n failure?: EngineFailureKind;\n /** One line of evidence: the reply, or the error message. */\n detail: string;\n latencyMs: number;\n usage?: UsageReceipt;\n effective?: EngineSelectionRecord;\n evidence?:\n | { readonly kind: 'complete'; readonly result: Omit<AgentResult, 'raw'> }\n | { readonly kind: 'incomplete'; readonly result: Omit<EngineIncompleteResultEvidence, 'raw'> };\n}\n\nexport interface PreflightOptions {\n model?: string;\n /** Hard limit on waiting for the probe. Default 60s. */\n timeoutMs?: number;\n signal?: AbortSignal;\n cwd?: string;\n attempt?: AttemptMetadata;\n}\n\nconst PROBE_PROMPT = 'Reply with the single word: ok';\nconst UNKNOWN_USAGE: UsageReceipt = Object.freeze({ kind: 'unknown' });\n\n/** Probe one engine with a tiny live turn. Failures are returned, not thrown. */\nexport async function preflightEngine(\n engine: Engine,\n opts: PreflightOptions = {},\n): Promise<PreflightResult> {\n const name = engine.name;\n const started = performance.now();\n const timeoutMs = opts.timeoutMs ?? 60_000;\n const deadline = started + timeoutMs;\n let usage: UsageReceipt = UNKNOWN_USAGE;\n const latency = () => Math.max(0, Math.round(performance.now() - started));\n const failed = (\n failure: EngineFailureKind,\n detail: string,\n extra: Pick<PreflightResult, 'evidence' | 'effective'> = {},\n ): PreflightResult => ({\n engine: name, model: opts.model, ok: false, failure, detail,\n latencyMs: latency(), usage, ...extra,\n });\n if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 2_147_483_647) {\n return failed('invalid-config', 'preflight timeoutMs must be a positive safe integer at most 2147483647');\n }\n if (opts.signal?.aborted) return failed('aborted', 'preflight was aborted');\n\n const controller = new AbortController();\n let closed = false;\n let stopped: 'timeout' | 'aborted' | undefined;\n let resolveStop!: () => void;\n const interruption = new Promise<void>((resolve) => { resolveStop = resolve; });\n const stop = (kind: 'timeout' | 'aborted'): void => {\n if (stopped !== undefined) return;\n stopped = kind;\n closed = true;\n resolveStop();\n controller.abort();\n };\n const onAbort = (): void => stop('aborted');\n const timer = setTimeout(() => stop('timeout'), Math.max(0, Math.ceil(deadline - performance.now())));\n opts.signal?.addEventListener('abort', onAbort, { once: true });\n const stoppedResult = (\n extra: Pick<PreflightResult, 'evidence' | 'effective'> = {},\n ): PreflightResult | undefined => {\n if (stopped === undefined && performance.now() >= deadline) stop('timeout');\n return stopped === undefined ? undefined : failed(stopped,\n stopped === 'aborted' ? 'preflight was aborted' : 'preflight exceeded its time limit', extra);\n };\n\n try {\n if (opts.signal?.aborted) {\n stop('aborted');\n return failed('aborted', 'preflight was aborted');\n }\n let pending: Promise<AgentResult>;\n try {\n pending = Promise.resolve(engine.run({\n prompt: PROBE_PROMPT, model: opts.model,\n purpose: 'preflight', tools: [], allowedTools: [], workspaceMode: 'none',\n maxTokens: 16, timeoutMs, leaf: true,\n ...(opts.cwd === undefined ? {} : { cwd: opts.cwd }),\n ...(opts.attempt === undefined ? {} : {\n attempt: { ...opts.attempt, path: [...opts.attempt.path], leaf: true },\n }),\n }, (event) => {\n if (closed || performance.now() >= deadline || event.type !== 'usage') return;\n try {\n if (event.usage.kind === 'unknown') usage = UNKNOWN_USAGE;\n else if (event.usage.kind === 'reported') usage = reportedUsage(event.usage);\n } catch {\n // A malformed stream receipt cannot replace a validated receipt.\n }\n }, controller.signal));\n } catch (error) {\n pending = Promise.reject(error);\n }\n let settled: { kind: 'value'; value: AgentResult } | { kind: 'error'; error: unknown } | undefined;\n const operation = pending.then(\n (value) => { settled = { kind: 'value', value }; return settled; },\n (error: unknown) => { settled = { kind: 'error', error }; return settled; },\n );\n const first = await Promise.race([\n operation,\n interruption.then(() => ({ kind: 'stopped' as const })),\n ]);\n const outcome = first.kind === 'stopped' ? settled : first;\n if (outcome === undefined) return stoppedResult()!;\n\n if (outcome.kind === 'error') {\n const error = outcome.error;\n if (error instanceof EngineIncompleteResultError) {\n let result: Omit<EngineIncompleteResultEvidence, 'raw'>;\n try {\n const { raw: _raw, ...safe } = validateIncompleteResultEvidence(error.evidence);\n result = Object.freeze(safe);\n } catch {\n return stoppedResult() ?? failed('unknown', 'engine returned malformed incomplete evidence');\n }\n usage = result.usage;\n const extra = {\n effective: result.effective,\n evidence: Object.freeze({ kind: 'incomplete' as const, result }),\n };\n return stoppedResult(extra) ?? failed('unknown', error.message, extra);\n }\n let effective: EngineSelectionRecord | undefined;\n try {\n if (error instanceof EngineError && error.effective !== undefined) {\n effective = engineSelection(error.effective);\n }\n } catch {\n return stoppedResult() ?? failed('unknown', 'engine returned malformed failure identity');\n }\n const extra = effective === undefined ? {} : { effective };\n return stoppedResult(extra) ?? failed(classifyEngineFailure(error),\n error instanceof Error ? error.message : String(error), extra);\n }\n\n let result: Omit<AgentResult, 'raw'>;\n try {\n const { raw: _raw, ...safe } = validateAgentResult(outcome.value);\n result = Object.freeze(safe);\n } catch {\n return stoppedResult() ?? failed('unknown', 'engine returned a malformed result');\n }\n usage = result.usage;\n const evidence = Object.freeze({ kind: 'complete' as const, result });\n const extra = { evidence, effective: result.effective };\n const interrupted = stoppedResult(extra);\n if (interrupted !== undefined) return interrupted;\n let reply: string;\n try { reply = requireFinalResultText(result).trim(); }\n catch {\n return stoppedResult(extra) ?? failed('unknown', 'engine result must end with assistant text', extra);\n }\n return stoppedResult(extra) ?? {\n engine: name,\n model: opts.model ?? result.effective.model ?? undefined,\n ok: true,\n detail: reply ? `replied: ${reply.slice(0, 60)}` : 'replied (empty text)',\n latencyMs: latency(), usage, effective: result.effective, evidence,\n };\n } finally {\n closed = true;\n clearTimeout(timer);\n opts.signal?.removeEventListener('abort', onAbort);\n }\n}\n\n/** Probe several engines concurrently (they are independent lanes). */\nexport async function preflight(\n engines: readonly Engine[],\n opts: PreflightOptions = {},\n): Promise<PreflightResult[]> {\n return Promise.all(engines.map((engine) => preflightEngine(engine, opts)));\n}\n\n/** One line per lane, for terminals and logs. */\nexport function formatPreflight(result: PreflightResult): string {\n const head = result.ok ? '✓' : '✗';\n const lane = result.model ? `${result.engine} (${result.model})` : result.engine;\n const verdict = result.ok\n ? result.detail\n : `${result.failure}: ${result.detail}`;\n return `${head} ${lane} ${verdict} [${result.latencyMs}ms]`;\n}\n","import {\n cloneFrozenJson,\n digestJson,\n type JsonObject,\n type Sha256Digest,\n} from '../graph/value.js';\nimport { validateStorageId } from '../storage/id.js';\n\nconst CONTROL_CHARACTER = /[\\u0000-\\u001f\\u007f]/u;\nconst SHA256_DIGEST = /^sha256:[0-9a-f]{64}$/u;\n\nexport type AttemptId = Sha256Digest;\nexport type RepeatKey = Sha256Digest;\n\nexport interface AttemptIdentityInput {\n readonly namespace: string;\n readonly streamId: string;\n readonly nodeId: string;\n readonly position: string;\n}\n\nexport interface AttemptIdentity extends JsonObject {\n readonly schemaVersion: 1;\n readonly namespace: string;\n readonly streamId: string;\n readonly nodeId: string;\n readonly position: string;\n readonly attemptId: AttemptId;\n}\n\nfunction identityText(value: unknown, field: string): string {\n if (\n typeof value !== 'string' ||\n value.length === 0 ||\n value !== value.trim() ||\n CONTROL_CHARACTER.test(value)\n ) {\n throw new TypeError(\n `${field} must be a non-empty trimmed string without control characters`,\n );\n }\n cloneFrozenJson(value);\n return value;\n}\n\nfunction attemptId(value: unknown): AttemptId {\n if (typeof value !== 'string' || !SHA256_DIGEST.test(value)) {\n throw new TypeError('attemptId must be a lowercase SHA-256 digest');\n }\n return value as AttemptId;\n}\n\nexport function createAttemptIdentity(\n input: AttemptIdentityInput,\n): AttemptIdentity {\n const identity = cloneFrozenJson({\n schemaVersion: 1,\n namespace: validateStorageId(input.namespace, '/namespace'),\n streamId: validateStorageId(input.streamId, '/streamId'),\n nodeId: identityText(input.nodeId, 'nodeId'),\n position: identityText(input.position, 'position'),\n } as const);\n\n return cloneFrozenJson({\n ...identity,\n attemptId: digestJson(identity),\n });\n}\n\nexport function createRepeatKey(\n ownerAttemptId: AttemptId,\n effectId: string,\n): RepeatKey {\n return digestJson({\n schemaVersion: 1,\n attemptId: attemptId(ownerAttemptId),\n effectId: identityText(effectId, 'effectId'),\n });\n}\n","import { createHash, randomUUID } from 'node:crypto';\nimport { validateArtifactReference, type ArtifactReference } from '../artifacts/store.js';\nimport { validateDomainEventEnvelope, type DomainEventEnvelope, type EventStreamRef, type StreamRevision } from '../events/envelope.js';\nimport { validateDomainEventBatch } from '../events/store.js';\nimport type { AgentResult, EngineFailureKind, EngineIncompleteResultEvidence, EngineSelectionRecord, UsageReceipt } from '../engines/engine.js';\nimport { LANE_DEAD_FAILURES } from '../engines/failure.js';\nimport type { ExecutionTarget, ResolvedExecutionLane, ResolvedPlan } from '../graph/plan.js';\nimport { canonicalJson, cloneFrozenJson, type JsonValue } from '../graph/value.js';\nimport { StorageError, type StorageErrorCode } from '../storage/error.js';\nimport { engineFailureExclusionKeys, isEngineExcluded, matchesEngineTarget, validateExecutionTarget, type EngineExclusionKey } from './engine-availability.js';\nimport { engineSelection, reportedUsage, validateAgentResult, validateIncompleteResultEvidence } from './result-parts.js';\nimport { loadRunDefinition, type RunStorageBinding } from './run-definition.js';\n\nimport { type PreflightPauseResult, type PreflightFailureResult } from '@obversa/api';\nexport { type PreflightPauseResult, type PreflightFailureResult } from '@obversa/api';\nimport type { RunPreflightState } from '@obversa/api';\nexport type { RunPreflightState } from '@obversa/api';\nexport type ProbeStartPayload = {\n readonly laneId: string;\n readonly target: ExecutionTarget;\n readonly selection: EngineSelectionRecord;\n} & (\n | { readonly stage: 'static'; readonly contextNodeId: string | null; readonly expectedSelection: EngineSelectionRecord | null }\n | { readonly stage: 'live' }\n);\nexport type ProbeEvidence =\n | { readonly kind: 'complete'; readonly result: Omit<AgentResult, 'raw'> }\n | { readonly kind: 'incomplete'; readonly result: Omit<EngineIncompleteResultEvidence, 'raw'> };\nexport interface ProbeEvidenceDocument {\n readonly schemaVersion: 1;\n readonly runId: string;\n readonly probeEventId: string;\n readonly evidence: ProbeEvidence;\n}\nexport interface ProbeDiagnosticDocument {\n readonly schemaVersion: 1;\n readonly runId: string;\n readonly probeEventId: string;\n readonly detail: string;\n}\ntype EvidenceReference = ArtifactReference<'preflight-evidence'>;\ntype DiagnosticReference = ArtifactReference<'preflight-diagnostic'>;\nexport type StaticOutcome =\n | { readonly kind: 'admitted'; readonly selection: EngineSelectionRecord }\n | { readonly kind: 'unsupported' }\n | { readonly kind: 'failed'; readonly failure: EngineFailureKind; readonly effective: EngineSelectionRecord | null; readonly diagnostic: DiagnosticReference }\n | { readonly kind: 'interrupted' }\n | { readonly kind: 'recording-failed'; readonly storageCode: StorageErrorCode };\nexport type LiveOutcome = { readonly usage: UsageReceipt; readonly effective: EngineSelectionRecord | null } & (\n | { readonly kind: 'succeeded'; readonly evidence: EvidenceReference; readonly diagnostic: DiagnosticReference }\n | { readonly kind: 'failed'; readonly failure: EngineFailureKind; readonly evidence: EvidenceReference | null; readonly diagnostic: DiagnosticReference }\n | { readonly kind: 'interrupted'; readonly evidence: null; readonly diagnostic: null }\n | { readonly kind: 'recording-failed'; readonly storageCode: StorageErrorCode; readonly evidence: null; readonly diagnostic: null }\n);\nexport type ProbeFinishPayload = { readonly probeEventId: string } & (\n | { readonly stage: 'static'; readonly outcome: StaticOutcome }\n | { readonly stage: 'live'; readonly outcome: LiveOutcome }\n);\ntype PauseReason = 'engine-failure' | 'interrupted' | 'recording-failure';\nexport interface PreflightPausedPayload {\n readonly finishedProbeEventId: string;\n readonly reason: PauseReason;\n}\nexport interface PreflightResumedPayload { readonly preflightEventId: string }\nexport interface PreflightFailedPayload {\n readonly laneId: string;\n readonly code: 'PREFLIGHT_FAILED';\n readonly reason: 'no-admissible-target';\n}\nexport interface ProbeModelUnavailableFact {\n readonly schemaVersion: 1;\n readonly source: { readonly kind: 'preflight'; readonly probeEventId: string; readonly laneId: string };\n readonly target: ExecutionTarget;\n readonly selection: EngineSelectionRecord;\n readonly effective: EngineSelectionRecord;\n readonly failure: EngineFailureKind;\n}\nexport interface RecordedProbeStart {\n readonly envelope: DomainEventEnvelope;\n readonly payload: ProbeStartPayload;\n}\nexport interface CompletedProbe {\n readonly start: RecordedProbeStart;\n readonly finish: DomainEventEnvelope;\n readonly payload: ProbeFinishPayload;\n readonly evidence: ProbeEvidence | null;\n}\nexport interface ValidatedProbeFailure {\n readonly envelope: DomainEventEnvelope;\n readonly fact: ProbeModelUnavailableFact;\n readonly exclusionKeys: readonly EngineExclusionKey[];\n}\nexport interface LoadedRunPreflight {\n readonly stream: EventStreamRef;\n readonly revision: StreamRevision;\n readonly events: readonly DomainEventEnvelope[];\n readonly state: RunPreflightState;\n readonly probes: readonly CompletedProbe[];\n readonly openProbe: RecordedProbeStart | null;\n readonly admissionCompletedAtRevision: StreamRevision | null;\n readonly probeFailures: ReadonlyMap<string, ValidatedProbeFailure>;\n}\n\nconst failureKinds: ReadonlySet<string> = new Set<EngineFailureKind>([\n 'auth', 'billing', 'missing-cli', 'model-unavailable', 'invalid-config', 'rate-limit',\n 'quota', 'transient', 'timeout', 'aborted', 'unknown',\n]);\nconst storageCodes: ReadonlySet<string> = new Set<StorageErrorCode>([\n 'INVALID_STORED_VALUE', 'UNSUPPORTED_ENVELOPE_VERSION', 'REVISION_CONFLICT',\n 'DUPLICATE_EVENT_ID', 'CORRUPT_EVENT_STREAM', 'ARTIFACT_NOT_FOUND', 'ARTIFACT_NOT_ADMITTED',\n 'ARTIFACT_INTEGRITY', 'STORAGE_LIMIT_EXCEEDED', 'SENSITIVE_CONTENT', 'KNOWN_SECRET', 'UNSAFE_STORAGE_PATH',\n]);\nfunction invalid(path: string, message: string): never {\n throw new StorageError('INVALID_STORED_VALUE', message, { path });\n}\nfunction checked<T>(path: string, operation: () => T): T {\n try { return operation(); } catch { return invalid(path, 'Stored preflight value is invalid.'); }\n}\nfunction object(value: unknown, path: string): Record<string, unknown> {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) invalid(path, 'Expected a preflight object.');\n return value as Record<string, unknown>;\n}\nfunction exact(value: Record<string, unknown>, fields: readonly string[], path: string, optional: readonly string[] = []): void {\n for (const field of fields) if (!Object.hasOwn(value, field)) invalid(`${path}/${field}`, 'Required preflight field is missing.');\n for (const field of Object.keys(value)) if (!fields.includes(field) && !optional.includes(field)) invalid(`${path}/${field}`, 'Unknown preflight field.');\n}\nfunction text(value: unknown, path: string): string {\n if (typeof value !== 'string' || value.length === 0 || value !== value.trim()\n || /[\\u0000-\\u001f\\u007f]/u.test(value)) invalid(path, 'Invalid preflight identifier.');\n return value;\n}\nfunction frozen<T>(value: T): T {\n return cloneFrozenJson(value as unknown as JsonValue) as unknown as T;\n}\nfunction same(left: unknown, right: unknown): boolean {\n return canonicalJson(left as JsonValue) === canonicalJson(right as JsonValue);\n}\nfunction selection(value: unknown, path: string): EngineSelectionRecord {\n const item = object(value, path);\n exact(item, ['adapter', 'adapterVersion', 'provider', 'modelFamily', 'model', 'executable', 'capabilities'], path);\n const result = checked(path, () => engineSelection(item as unknown as EngineSelectionRecord));\n if (!same(item, result)) invalid(path, 'Selection normalization would change stored identity.');\n return result;\n}\nfunction usage(value: unknown, path: string): UsageReceipt {\n const item = object(value, path);\n if (item.kind === 'unknown') {\n exact(item, ['kind'], path);\n return Object.freeze({ kind: 'unknown' });\n }\n if (item.kind !== 'reported') invalid(path, 'Invalid usage receipt kind.');\n exact(item, ['kind', 'inputTokens', 'outputTokens'], path, ['cacheCreationInputTokens', 'cacheReadInputTokens']);\n return checked(path, () => reportedUsage(item as unknown as Parameters<typeof reportedUsage>[0]));\n}\nfunction failure(value: unknown, path: string): EngineFailureKind {\n if (typeof value !== 'string' || !failureKinds.has(value)) invalid(path, 'Invalid engine failure kind.');\n return value as EngineFailureKind;\n}\nfunction storageCode(value: unknown, path: string): StorageErrorCode {\n if (typeof value !== 'string' || !storageCodes.has(value)) invalid(path, 'Invalid storage error code.');\n return value as StorageErrorCode;\n}\nfunction resultEvidence(value: unknown, path: string): ProbeEvidence {\n const item = object(value, path);\n exact(item, ['kind', 'result'], path);\n if (item.kind !== 'complete' && item.kind !== 'incomplete') invalid(`${path}/kind`, 'Invalid evidence kind.');\n const result = object(item.result, `${path}/result`);\n exact(result, ['parts', 'usage', 'requested', 'effective'], `${path}/result`, ['stopReason', 'transportFailure']);\n if (!Array.isArray(result.parts)) invalid(`${path}/result/parts`, 'Result parts must be an array.');\n result.parts.forEach((value, index) => {\n const partPath = `${path}/result/parts/${index}`;\n const part = object(value, partPath);\n if (part.kind === 'assistant') exact(part, ['kind', 'text', 'final'], partPath);\n else if (part.kind === 'structured') exact(part, ['kind', 'value', 'final'], partPath);\n else invalid(partPath, 'Invalid result part kind.');\n });\n usage(result.usage, `${path}/result/usage`);\n selection(result.requested, `${path}/result/requested`);\n selection(result.effective, `${path}/result/effective`);\n if (Object.hasOwn(result, 'transportFailure')) {\n exact(object(result.transportFailure, `${path}/result/transportFailure`), ['kind', 'message', 'exitCode'], `${path}/result/transportFailure`);\n }\n const validated = checked(`${path}/result`, () => item.kind === 'complete'\n ? validateAgentResult(result as unknown as AgentResult)\n : validateIncompleteResultEvidence(result as unknown as EngineIncompleteResultEvidence));\n return frozen({ kind: item.kind, result: validated }) as ProbeEvidence;\n}\nfunction reference<Purpose extends string>(value: unknown, purpose: Purpose, path: string): ArtifactReference<Purpose> {\n const result = validateArtifactReference(value);\n if (result.purpose !== purpose || result.mediaType !== 'application/json') invalid(path, 'Preflight artifact has the wrong purpose or media type.');\n return result as ArtifactReference<Purpose>;\n}\nasync function document(\n storage: RunStorageBinding, runId: string, probeEventId: string,\n reference: ArtifactReference, field: 'evidence' | 'detail',\n): Promise<unknown> {\n const path = `/events/${probeEventId}/${field}`;\n const bytes = await storage.artifactStore.read({ namespace: storage.record.namespace, runId }, reference);\n if (bytes.byteLength !== reference.byteLength\n || `sha256:${createHash('sha256').update(bytes).digest('hex')}` !== reference.digest) {\n throw new StorageError('ARTIFACT_INTEGRITY', 'Preflight artifact bytes do not match their reference.', { path });\n }\n const parsed = checked(path, () => cloneFrozenJson(JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)) as JsonValue));\n const item = object(parsed, path);\n exact(item, ['schemaVersion', 'runId', 'probeEventId', field], path);\n if (item.schemaVersion !== 1 || item.runId !== runId || item.probeEventId !== probeEventId) invalid(path, 'Preflight artifact belongs to a different call, run or version.');\n if (field === 'detail' && typeof item.detail !== 'string') invalid(path, 'Preflight diagnostic detail must be a string.');\n return item[field];\n}\nfunction routeKey(laneId: string, target: ExecutionTarget): string {\n return canonicalJson([laneId, target] as unknown as JsonValue);\n}\nfunction checkKey(start: ProbeStartPayload): string {\n return canonicalJson([start.laneId, start.target, start.stage, start.stage === 'static' ? start.contextNodeId : null] as unknown as JsonValue);\n}\nfunction contexts(plan: ResolvedPlan, laneId: string): readonly (string | null)[] {\n const ids = plan.nodes.filter((node) => node.laneId === laneId).map((node) => node.id);\n return ids.length === 0 ? [null] : ids;\n}\nfunction targets(lane: ResolvedExecutionLane): readonly ExecutionTarget[] {\n return [lane.effective, ...lane.fallbacks];\n}\nfunction startPayload(value: unknown, plan: ResolvedPlan, path: string): ProbeStartPayload {\n const item = object(value, path);\n if (item.stage !== 'static' && item.stage !== 'live') invalid(`${path}/stage`, 'Invalid probe stage.');\n exact(item, ['laneId', 'target', 'selection', 'stage', ...(item.stage === 'static' ? ['contextNodeId', 'expectedSelection'] : [])], path);\n const laneId = text(item.laneId, `${path}/laneId`);\n const lane = plan.executionLanes.find((candidate) => candidate.id === laneId);\n if (lane === undefined) invalid(`${path}/laneId`, 'Unknown preflight lane.');\n const target = checked(`${path}/target`, () => validateExecutionTarget(item.target as ExecutionTarget));\n if (!targets(lane).some((candidate) => same(candidate, target))) invalid(`${path}/target`, 'Probe target is outside its declared lane.');\n const selected = selection(item.selection, `${path}/selection`);\n if (!matchesEngineTarget(target, selected)) invalid(`${path}/selection`, 'Normal selection does not match its declared target.');\n if (item.stage === 'static') {\n const contextNodeId = item.contextNodeId === null ? null : text(item.contextNodeId, `${path}/contextNodeId`);\n if (!contexts(plan, laneId).includes(contextNodeId)) invalid(`${path}/contextNodeId`, 'Static context is not a real node of this lane.');\n return frozen({ laneId, target, selection: selected, stage: 'static', contextNodeId,\n expectedSelection: item.expectedSelection === null ? null : selection(item.expectedSelection, `${path}/expectedSelection`) });\n }\n return frozen({ laneId, target, selection: selected, stage: 'live' });\n}\nasync function completeProbe(\n storage: RunStorageBinding, runId: string, start: RecordedProbeStart, envelope: DomainEventEnvelope,\n admittedSelection: EngineSelectionRecord | null,\n): Promise<CompletedProbe> {\n const path = `/events/${envelope.eventId}`;\n const item = object(envelope.payload, path);\n exact(item, ['probeEventId', 'stage', 'outcome'], path);\n if (item.probeEventId !== start.envelope.eventId || item.stage !== start.payload.stage\n || envelope.causationId !== start.envelope.eventId) invalid(path, 'Finish must close its one matching start.');\n const outcome = object(item.outcome, `${path}/outcome`);\n let evidence: ProbeEvidence | null = null;\n if (item.stage === 'static') {\n if (outcome.kind === 'admitted') {\n exact(outcome, ['kind', 'selection'], path);\n const admitted = selection(outcome.selection, path);\n if (!matchesEngineTarget(start.payload.target, admitted)) invalid(path, 'Admitted identity does not match the normal target.');\n const expected = start.payload.stage === 'static' ? start.payload.expectedSelection : null;\n if (expected !== null && !same(expected, admitted)) invalid(path, 'Restoration changed the saved admitted identity.');\n } else if (outcome.kind === 'unsupported' || outcome.kind === 'interrupted') {\n exact(outcome, ['kind'], path);\n } else if (outcome.kind === 'recording-failed') {\n exact(outcome, ['kind', 'storageCode'], path);\n storageCode(outcome.storageCode, path);\n } else if (outcome.kind === 'failed') {\n exact(outcome, ['kind', 'failure', 'effective', 'diagnostic'], path);\n failure(outcome.failure, path);\n if (outcome.effective !== null) selection(outcome.effective, path);\n await document(storage, runId, start.envelope.eventId, reference(outcome.diagnostic, 'preflight-diagnostic', path), 'detail');\n } else invalid(path, 'Invalid static outcome.');\n } else {\n const base = ['kind', 'usage', 'effective', 'evidence', 'diagnostic'];\n if (outcome.kind === 'succeeded' || outcome.kind === 'interrupted') exact(outcome, base, path);\n else if (outcome.kind === 'failed') { exact(outcome, [...base, 'failure'], path); failure(outcome.failure, path); }\n else if (outcome.kind === 'recording-failed') { exact(outcome, [...base, 'storageCode'], path); storageCode(outcome.storageCode, path); }\n else invalid(path, 'Invalid live outcome.');\n const receipt = usage(outcome.usage, path);\n const effective = outcome.effective === null ? null : selection(outcome.effective, path);\n if (outcome.kind === 'interrupted' || outcome.kind === 'recording-failed') {\n if (outcome.evidence !== null || outcome.diagnostic !== null) invalid(path, 'Interrupted or unrecordable evidence cannot carry artifact references.');\n if (outcome.kind === 'interrupted' && (receipt.kind !== 'unknown' || effective !== null)) invalid(path, 'Interrupted live usage and effective identity must be unknown.');\n } else {\n await document(storage, runId, start.envelope.eventId, reference(outcome.diagnostic, 'preflight-diagnostic', path), 'detail');\n if (outcome.evidence !== null) {\n const raw = await document(storage, runId, start.envelope.eventId, reference(outcome.evidence, 'preflight-evidence', path), 'evidence');\n evidence = resultEvidence(raw, `${path}/evidence`);\n if (!same(receipt, evidence.result.usage) || !same(effective, evidence.result.effective)) invalid(path, 'Event metadata must retain terminal evidence usage and identity.');\n }\n if (outcome.kind === 'succeeded') {\n if (evidence?.kind !== 'complete' || !evidence.result.parts.some((part) => part.kind === 'assistant' && part.final)) invalid(path, 'Live success needs complete final assistant evidence.');\n const requestedMatches = evidence.result.requested.capabilities.length === 0 && (admittedSelection === null\n ? evidence.result.requested.adapter === start.payload.selection.adapter\n && evidence.result.requested.provider === start.payload.selection.provider\n && evidence.result.requested.modelFamily === start.payload.selection.modelFamily\n && evidence.result.requested.model === start.payload.selection.model\n : same(evidence.result.requested, engineSelection({ ...admittedSelection, capabilities: [] })));\n if (!requestedMatches) invalid(path, 'Live requested identity does not match the tool-free admitted selection.');\n } else if (evidence !== null && !['unknown', 'timeout', 'aborted'].includes(outcome.failure as string)) {\n invalid(path, 'Complete or incomplete failed evidence cannot justify a lasting exclusion.');\n }\n }\n }\n return Object.freeze({ start, finish: envelope, payload: frozen(item) as unknown as ProbeFinishPayload, evidence });\n}\nfunction claimsProbeFailure(envelope: DomainEventEnvelope): boolean {\n if (envelope.type !== 'graph:model-unavailable') return false;\n const payload = envelope.payload;\n if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return false;\n const source = (payload as Record<string, JsonValue>).source;\n return source !== null && typeof source === 'object' && !Array.isArray(source)\n && (source as Record<string, JsonValue>).kind === 'preflight';\n}\nfunction probeFailure(\n envelope: DomainEventEnvelope, completed: CompletedProbe, declaredTargets: readonly ExecutionTarget[],\n): ValidatedProbeFailure {\n const path = `/events/${envelope.eventId}`;\n const item = object(envelope.payload, path);\n exact(item, ['schemaVersion', 'source', 'target', 'selection', 'effective', 'failure'], path);\n const source = object(item.source, `${path}/source`);\n exact(source, ['kind', 'probeEventId', 'laneId'], `${path}/source`);\n const start = completed.start.payload;\n const outcome = completed.payload.outcome;\n if (item.schemaVersion !== 1 || source.kind !== 'preflight' || source.probeEventId !== completed.start.envelope.eventId\n || source.laneId !== start.laneId || envelope.causationId !== completed.finish.eventId\n || outcome.kind !== 'failed' || item.failure !== outcome.failure) invalid(path, 'Probe exclusion does not match its failed check.');\n const selected = selection(item.selection, path);\n const effective = selection(item.effective, path);\n const target = checked(path, () => validateExecutionTarget(item.target as ExecutionTarget));\n if (!same(target, start.target) || !same(selected, start.selection)\n || !same(effective, outcome.effective ?? start.selection)) invalid(path, 'Probe exclusion changed its declared or observed identity.');\n const isLive = completed.payload.stage === 'live';\n const temporarySelected = isLive ? engineSelection({ ...selected, capabilities: [] }) : selected;\n const keys = engineFailureExclusionKeys({\n selection: temporarySelected,\n effective: outcome.effective ?? temporarySelected,\n failure: outcome.failure,\n target: isLive ? { ...target, tools: [] } : target,\n }, isLive ? declaredTargets.map((value) => ({ ...value, tools: [] })) : declaredTargets);\n if (keys.length === 0) invalid(path, 'A nonlasting failure cannot have an exclusion fact.');\n return Object.freeze({ envelope, fact: frozen(item) as unknown as ProbeModelUnavailableFact, exclusionKeys: Object.freeze([...keys]) });\n}\nfunction pauseResult(eventId: string, reason: PauseReason): PreflightPauseResult {\n const message = reason === 'interrupted' ? 'Preflight was interrupted; resume this pause explicitly.'\n : reason === 'recording-failure' ? 'Preflight evidence could not be stored; resume this pause explicitly.'\n : 'Preflight did not complete; resume this pause explicitly.';\n return Object.freeze({ kind: 'pause', code: 'PREFLIGHT_PAUSED', reason: message, preflightEventId: eventId });\n}\n\n/** Private package surface: the executor replays these captured envelopes. */\nexport async function loadRunPreflight(storage: RunStorageBinding, runId: string): Promise<LoadedRunPreflight> {\n const definition = await loadRunDefinition(storage, runId);\n const stream = Object.freeze({ namespace: storage.record.namespace, streamId: runId });\n const events: DomainEventEnvelope[] = [];\n const eventIds = new Set<string>();\n for await (const value of storage.eventStore.read(stream)) {\n const envelope = validateDomainEventEnvelope(value);\n if (envelope.streamId !== runId || envelope.revision !== events.length + 1 || eventIds.has(envelope.eventId)) invalid('/events', 'Run stream identity, revision or event ID changed.');\n events.push(envelope);\n eventIds.add(envelope.eventId);\n }\n if (events.length === 0 || !same(events[0], definition.record)) invalid('/events/0', 'Captured run start differs from the loaded definition.');\n const plan = definition.resolvedPlan.plan;\n const policy = plan.preflight;\n const probes: CompletedProbe[] = [];\n const latest = new Map<string, CompletedProbe>();\n const saved = new Map<string, EngineSelectionRecord>();\n const probeFailures = new Map<string, ValidatedProbeFailure>();\n const excluded = new Set<EngineExclusionKey>();\n let openProbe: RecordedProbeStart | null = null;\n let pause: PreflightPauseResult | null = null;\n let resumedPreflightEventId: string | null = null;\n let resumedEvent: DomainEventEnvelope | null = null;\n let admissionCompletedAtRevision: number | null = null;\n let failed = false;\n let requiredNext: { kind: 'pause' | 'exclusion'; probe: CompletedProbe; reason: PauseReason } | null = null;\n const lanePolicy = (laneId: string) => policy!.lanes.find((lane) => lane.laneId === laneId)!;\n const normalSelection = (target: ExecutionTarget) => engineSelection({\n adapter: target.adapter, provider: target.provider, modelFamily: target.modelFamily,\n model: target.model, capabilities: target.tools,\n });\n const staticChecks = (laneId: string, target: ExecutionTarget) => contexts(plan, laneId).map((contextNodeId) => latest.get(checkKey({\n laneId, target, selection: normalSelection(target), stage: 'static', contextNodeId, expectedSelection: null,\n })));\n const unavailable = (lane: ResolvedExecutionLane, target: ExecutionTarget) => isEngineExcluded(excluded, normalSelection(target), target, targets(lane));\n const staticallyEligible = (lane: ResolvedExecutionLane, target: ExecutionTarget) => !unavailable(lane, target)\n && staticChecks(lane.id, target).every((probe) => probe !== undefined && (probe.payload.outcome.kind === 'admitted'\n || (probe.payload.outcome.kind === 'unsupported' && lanePolicy(lane.id).unsupportedStatic === 'allow')));\n const covered = () => plan.executionLanes.every((lane) => targets(lane).every((target) => staticChecks(lane.id, target).every((probe) => probe !== undefined)));\n const ready = () => covered() && plan.executionLanes.every((lane) => targets(lane).some((target) =>\n staticallyEligible(lane, target) && (lanePolicy(lane.id).live === 'skip' || probes.some((probe) =>\n probe.start.payload.laneId === lane.id && same(probe.start.payload.target, target)\n && probe.payload.stage === 'live' && probe.payload.outcome.kind === 'succeeded'))));\n const allDead = (lane: ResolvedExecutionLane) => targets(lane).every((target) => unavailable(lane, target)\n || (lanePolicy(lane.id).unsupportedStatic === 'block' && staticChecks(lane.id, target).some((probe) => probe?.payload.outcome.kind === 'unsupported')));\n if (policy !== undefined && ready()) admissionCompletedAtRevision = 1;\n\n for (const envelope of events.slice(1)) {\n const isProbeFact = claimsProbeFailure(envelope);\n const isPreflight = envelope.type.startsWith('preflight:');\n if (requiredNext !== null && envelope.type !== (requiredNext.kind === 'pause' ? 'preflight:paused' : 'graph:model-unavailable')) invalid(`/events/${envelope.eventId}`, 'A failed finish must be followed by its atomic pause or exclusion.');\n if (!isPreflight && !isProbeFact) {\n if (requiredNext !== null) invalid(`/events/${envelope.eventId}`, 'A probe exclusion source is missing.');\n continue;\n }\n const path = `/events/${envelope.eventId}`;\n if (policy === undefined || failed) invalid(path, 'Preflight records are not allowed without policy or after terminal failure.');\n if (envelope.version !== 1 || envelope.correlationId !== runId) invalid(path, 'Preflight version or run identity is invalid.');\n if (isProbeFact) {\n if (requiredNext?.kind !== 'exclusion') invalid(path, 'Probe exclusion has no unmatched failed finish.');\n const lane = plan.executionLanes.find((candidate) => candidate.id === requiredNext!.probe.start.payload.laneId)!;\n const validated = probeFailure(envelope, requiredNext.probe, targets(lane));\n probeFailures.set(envelope.eventId, validated);\n for (const key of validated.exclusionKeys) excluded.add(key);\n requiredNext = null;\n } else if (envelope.type === 'preflight:probe-started') {\n if (openProbe !== null || pause !== null || requiredNext !== null) invalid(path, 'A probe cannot start while another check or pause is open.');\n if (envelope.causationId !== (resumedEvent?.eventId ?? null)) invalid(path, 'A new probe must name its consumed resume event, or have no cause.');\n const payload = startPayload(envelope.payload, plan, path);\n const key = checkKey(payload);\n const previous = latest.get(key);\n if (previous !== undefined && ['failed', 'interrupted', 'recording-failed'].includes(previous.payload.outcome.kind)\n && (resumedEvent === null || resumedEvent.revision <= previous.finish.revision)) invalid(path, 'Retrying failed or interrupted work requires a new explicit resume.');\n const prior = saved.get(routeKey(payload.laneId, payload.target));\n if (payload.stage === 'static') {\n if (!same(payload.expectedSelection, prior ?? null)) invalid(path, 'Static restoration must use the saved identity exactly.');\n } else {\n const lane = plan.executionLanes.find((candidate) => candidate.id === payload.laneId)!;\n const successes = probes.filter((probe) => probe.start.payload.laneId === payload.laneId\n && probe.payload.stage === 'live' && probe.payload.outcome.kind === 'succeeded');\n const targetAlreadyAnswered = successes.some((probe) => same(probe.start.payload.target, payload.target));\n const laneHasEligibleAnswer = successes.some((probe) => staticallyEligible(lane, probe.start.payload.target));\n if (admissionCompletedAtRevision !== null || targetAlreadyAnswered || laneHasEligibleAnswer || !covered()\n || lanePolicy(payload.laneId).live !== 'required'\n || !staticallyEligible(lane, payload.target)) invalid(path, 'This live probe is not permitted by its static records and policy.');\n if (prior !== undefined && !same(payload.selection, prior)) invalid(path, 'Live start must retain its admitted normal identity.');\n }\n openProbe = Object.freeze({ envelope, payload });\n } else if (envelope.type === 'preflight:probe-finished') {\n if (openProbe === null || pause !== null || requiredNext !== null) invalid(path, 'Probe finish has no unmatched start.');\n const completed = await completeProbe(\n storage,\n runId,\n openProbe,\n envelope,\n saved.get(routeKey(openProbe.payload.laneId, openProbe.payload.target)) ?? null,\n );\n probes.push(completed);\n latest.set(checkKey(openProbe.payload), completed);\n const outcome = completed.payload.outcome;\n if (outcome.kind === 'admitted') saved.set(routeKey(openProbe.payload.laneId, openProbe.payload.target), outcome.selection);\n if (outcome.kind === 'failed') requiredNext = { kind: LANE_DEAD_FAILURES.has(outcome.failure) ? 'exclusion' : 'pause', probe: completed, reason: 'engine-failure' };\n if (outcome.kind === 'interrupted' || outcome.kind === 'recording-failed') requiredNext = { kind: 'pause', probe: completed, reason: outcome.kind === 'interrupted' ? 'interrupted' : 'recording-failure' };\n openProbe = null;\n } else if (envelope.type === 'preflight:paused') {\n const item = object(envelope.payload, path);\n exact(item, ['finishedProbeEventId', 'reason'], path);\n if (pause !== null || openProbe !== null || requiredNext?.kind !== 'pause'\n || item.finishedProbeEventId !== requiredNext.probe.finish.eventId\n || item.reason !== requiredNext.reason || envelope.causationId !== requiredNext.probe.finish.eventId) invalid(path, 'Pause does not match its just-finished failed check.');\n pause = pauseResult(envelope.eventId, requiredNext.reason);\n requiredNext = null;\n } else if (envelope.type === 'preflight:resumed') {\n const item = object(envelope.payload, path);\n exact(item, ['preflightEventId'], path);\n if (pause === null || openProbe !== null || requiredNext !== null\n || item.preflightEventId !== pause.preflightEventId || envelope.causationId !== pause.preflightEventId) invalid(path, 'Resume must consume the exact current pause once.');\n resumedPreflightEventId = pause.preflightEventId;\n resumedEvent = envelope;\n pause = null;\n } else if (envelope.type === 'preflight:failed') {\n const item = object(envelope.payload, path);\n exact(item, ['laneId', 'code', 'reason'], path);\n const lane = plan.executionLanes.find((candidate) => candidate.id === item.laneId);\n if (pause !== null || openProbe !== null || requiredNext !== null || lane === undefined\n || item.code !== 'PREFLIGHT_FAILED' || item.reason !== 'no-admissible-target' || !allDead(lane)) invalid(path, 'Terminal preflight failure needs a lane with no admissible target.');\n if (envelope.causationId !== null && !probes.some((probe) => probe.finish.eventId === envelope.causationId && probe.start.payload.laneId === lane.id)) invalid(path, 'Terminal failure cause is not a completed check in its lane.');\n failed = true;\n } else invalid(path, 'Unknown preflight event type.');\n if (admissionCompletedAtRevision === null && !failed && openProbe === null && pause === null && requiredNext === null && ready()) admissionCompletedAtRevision = envelope.revision;\n }\n if (requiredNext !== null) invalid('/events', 'A failed finish is missing its atomic pause or exclusion.');\n const state: RunPreflightState = Object.freeze({\n phase: policy === undefined ? 'disabled' : failed ? 'failed' : pause !== null ? 'paused'\n : openProbe !== null || admissionCompletedAtRevision === null ? 'pending' : 'admitted',\n pause, resumedPreflightEventId, unfinishedProbeEventId: openProbe?.envelope.eventId ?? null,\n });\n return Object.freeze({ stream, revision: events.at(-1)!.revision, events: Object.freeze(events), state,\n probes: Object.freeze(probes), openProbe, admissionCompletedAtRevision, probeFailures });\n}\n\n/** Read admission state without calling engines, loading a host, or appending events. */\nexport async function readRunPreflight(storage: RunStorageBinding, runId: string): Promise<RunPreflightState> {\n return (await loadRunPreflight(storage, runId)).state;\n}\n\n/**\n * The caller must own this run and verify worker cleanup before calling.\n * Close one uncertain check using one expected-revision append; never retry.\n */\nexport async function interruptRunPreflight(storage: RunStorageBinding, runId: string): Promise<PreflightPauseResult | null> {\n const loaded = await loadRunPreflight(storage, runId);\n if (loaded.state.pause !== null) return loaded.state.pause;\n if (loaded.openProbe === null) return null;\n const probe = loaded.openProbe;\n const finishId = randomUUID();\n const pauseId = randomUUID();\n const timestamp = new Date().toISOString();\n const outcome: StaticOutcome | LiveOutcome = probe.payload.stage === 'static' ? { kind: 'interrupted' } : {\n kind: 'interrupted', usage: { kind: 'unknown' }, effective: null, evidence: null, diagnostic: null,\n };\n const events = validateDomainEventBatch([\n { eventId: finishId, type: 'preflight:probe-finished', version: 1, timestamp, correlationId: runId,\n causationId: probe.envelope.eventId, payload: { probeEventId: probe.envelope.eventId, stage: probe.payload.stage, outcome } },\n { eventId: pauseId, type: 'preflight:paused', version: 1, timestamp, correlationId: runId,\n causationId: finishId, payload: { finishedProbeEventId: finishId, reason: 'interrupted' } },\n ]);\n await storage.eventStore.append(loaded.stream, loaded.revision, events);\n return pauseResult(pauseId, 'interrupted');\n}\n","import { randomUUID } from 'node:crypto';\nimport { realpath } from 'node:fs/promises';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport type { Memory } from '@obversa/api';\n\nimport type { GraphCommand } from '../graph/commands.js';\nimport type {\n EngineAttemptRecordedPayload,\n GraphEngineIdentity,\n GraphEvent,\n} from '../graph/type.js';\nimport {\n canonicalJson,\n cloneFrozenJson,\n digestJson,\n type JsonObject,\n type JsonValue,\n} from '../graph/value.js';\nimport type { ExecutionTarget, ResolvedExecutionLane } from '../graph/plan.js';\nimport {\n validateDomainEventBatch,\n type DomainEventBatch,\n} from '../events/store.js';\nimport {\n validateDomainEventId,\n validateNewDomainEvent,\n type DomainEventEnvelope,\n type NewDomainEvent,\n} from '../events/envelope.js';\nimport {\n EngineError,\n type AgentRequest,\n type AttemptMetadata,\n type Engine,\n type EngineSelectionRecord,\n} from '../engines/engine.js';\nimport {\n classifyEngineFailure,\n LANE_DEAD_FAILURES,\n type EngineFailureKind,\n} from '../engines/failure.js';\nimport type { ArtifactReference } from '../artifacts/store.js';\nimport { preflightEngine, type PreflightResult } from '../engines/preflight.js';\nimport { StorageError } from '../storage/error.js';\nimport { createAttemptIdentity, type AttemptIdentity } from './attempt.js';\nimport {\n validateAttemptBudgetPolicy,\n} from './budget.js';\nimport {\n executeNodeAttempt,\n validateScratchDirectory,\n type ActionDecision,\n type ModelUnavailableFact,\n type PreparedEngineLane,\n} from './node-lifecycle.js';\nimport { engineSelection } from './result-parts.js';\nimport {\n loadRunDefinition,\n type RunStorageBinding,\n} from './run-definition.js';\nimport {\n validateWorkspacePolicy,\n} from './workspace-policy.js';\nimport {\n EngineIdentityUnresolvedError,\n engineFailureExclusionKeys,\n isEngineExcluded,\n matchesEngineTarget,\n type EngineExclusionKey,\n} from './engine-availability.js';\nimport {\n loadRunPreflight,\n type CompletedProbe,\n type LiveOutcome,\n type LoadedRunPreflight,\n type PreflightFailureResult,\n type PreflightPauseResult,\n type ProbeFinishPayload,\n type ProbeStartPayload,\n type StaticOutcome,\n} from './preflight-record.js';\n\nimport { type GraphExecutionErrorCode, GraphExecutionError, type GraphNodeBinding, type GraphEngineBinding, type GraphExecutorOptions, type GraphExecutorResult, type GraphExecutor } from '@obversa/api';\nexport { type GraphExecutionErrorCode, GraphExecutionError, type GraphNodeBinding, type GraphEngineBinding, type GraphExecutorOptions, type GraphExecutorResult, type GraphExecutor } from '@obversa/api';\n\ninterface FoldedAttempt {\n readonly command: Extract<GraphCommand, { readonly kind: 'dispatch' }>;\n readonly started: Readonly<{\n readonly identity: AttemptIdentity;\n readonly retrySafe: boolean;\n }> | null;\n readonly status: 'in-flight' | 'paused' | 'settled';\n readonly engineSequence: number;\n}\n\ninterface FoldedRun {\n readonly revision: number;\n readonly preflight: LoadedRunPreflight;\n readonly state: JsonValue;\n readonly dispatched: ReadonlySet<string>;\n readonly inFlight: readonly string[];\n readonly unavailable: ReadonlySet<EngineExclusionKey>;\n readonly attempts: ReadonlyMap<string, FoldedAttempt>;\n}\n\ninterface PreparedDispatch {\n readonly command: Extract<GraphCommand, { readonly kind: 'dispatch' }>;\n readonly binding: GraphNodeBinding;\n readonly prompt: string | null;\n readonly route: readonly [PreparedEngineLane] | readonly [PreparedEngineLane, PreparedEngineLane] | null;\n readonly allEnginesUnavailable: boolean;\n}\n\ntype StoredRecord = Readonly<Record<string, JsonValue>>;\n\nconst GRAPH_PREFIX = 'graph:';\n\nfunction fail(code: GraphExecutionErrorCode, message: string, cause?: unknown): never {\n throw new GraphExecutionError(\n code,\n message,\n cause === undefined ? undefined : { cause },\n );\n}\n\nfunction record(value: unknown, label: string): StoredRecord {\n let safe: JsonValue;\n try {\n safe = cloneFrozenJson(value as JsonValue);\n } catch (error) {\n fail('INVALID_EVENT', `${label} must be valid JSON.`, error);\n }\n if (safe === null || typeof safe !== 'object' || Array.isArray(safe)) {\n fail('INVALID_EVENT', `${label} must be an object.`);\n }\n return safe as StoredRecord;\n}\n\nfunction exactFields(value: StoredRecord, fields: readonly string[], label: string): void {\n const actual = Object.keys(value).sort();\n const expected = [...fields].sort();\n if (\n actual.length !== expected.length\n || actual.some((field, index) => field !== expected[index])\n ) {\n fail('INVALID_EVENT', `${label} must contain exactly ${expected.join(', ')}.`);\n }\n}\n\nfunction text(value: unknown, label: string): string {\n if (\n typeof value !== 'string'\n || value.trim().length === 0\n || /[\\u0000-\\u001f\\u007f]/u.test(value)\n ) {\n fail('INVALID_EVENT', `${label} must be a non-empty string without control characters.`);\n }\n return value;\n}\n\nfunction validateEngineIdentity(value: JsonValue, label: string): GraphEngineIdentity {\n const identity = record(value, label);\n exactFields(identity, ['adapter', 'provider', 'modelFamily', 'model'], label);\n const nullable = (field: string): string | null => identity[field] === null\n ? null\n : text(identity[field], `${label}.${field}`);\n return Object.freeze({\n adapter: text(identity.adapter, `${label}.adapter`),\n provider: nullable('provider'),\n modelFamily: nullable('modelFamily'),\n model: nullable('model'),\n });\n}\n\nfunction validateEngineAttemptRecorded(envelope: DomainEventEnvelope): EngineAttemptRecordedPayload {\n if (envelope.version !== 1) fail('INVALID_EVENT', 'Unsupported engine-attempt-recorded version.');\n const payload = record(envelope.payload, envelope.type);\n exactFields(payload, ['nodeId', 'position', 'sequence', 'requested', 'effective'], envelope.type);\n if (!Number.isSafeInteger(payload.sequence) || (payload.sequence as number) < 1) {\n fail('INVALID_EVENT', 'An engine attempt sequence must be a positive safe integer.');\n }\n const requested = payload.requested === null ? null : validateEngineIdentity(payload.requested!, 'requested');\n const effective = payload.effective === null ? null : validateEngineIdentity(payload.effective!, 'effective');\n if (requested === null && effective !== null) {\n fail('INVALID_EVENT', 'A recovered unknown engine attempt cannot report an effective identity.');\n }\n return Object.freeze({\n nodeId: text(payload.nodeId, 'nodeId'),\n position: text(payload.position, 'position'),\n sequence: payload.sequence as number,\n requested,\n effective,\n });\n}\n\nfunction targetKey(target: ExecutionTarget): string {\n return canonicalJson(target as unknown as JsonValue);\n}\n\nfunction assertTargetSelection(\n target: ExecutionTarget,\n selection: EngineSelectionRecord,\n): void {\n if (\n target.adapter !== selection.adapter\n || (selection.provider !== null && target.provider !== selection.provider)\n || (selection.modelFamily !== null && target.modelFamily !== selection.modelFamily)\n || target.model !== selection.model\n || !isDeepStrictEqual(target.tools, selection.capabilities)\n ) {\n fail(\n 'MISSING_ENGINE_BINDING',\n `The engine identity for ${target.adapter}/${target.provider}/${target.model} does not match its exact plan target.`,\n );\n }\n}\n\nfunction validMemory(value: unknown): value is Memory {\n return (\n value !== null\n && typeof value === 'object'\n && typeof (value as { readonly scope?: unknown }).scope === 'string'\n && (value as { readonly scope: string }).scope.trim().length > 0\n && typeof (value as { readonly execute?: unknown }).execute === 'function'\n );\n}\n\nfunction validateAttemptIdentity(\n value: unknown,\n label: string,\n runId: string,\n namespace: string,\n): AttemptIdentity {\n const identityRecord = record(value, label);\n const identity = createAttemptIdentity({\n namespace: text(identityRecord.namespace, `${label}.namespace`),\n streamId: text(identityRecord.streamId, `${label}.streamId`),\n nodeId: text(identityRecord.nodeId, `${label}.nodeId`),\n position: text(identityRecord.position, `${label}.position`),\n });\n if (\n canonicalJson(identity) !== canonicalJson(identityRecord)\n || identity.namespace !== namespace\n || identity.streamId !== runId\n ) {\n fail('INVALID_EVENT', `${label} must belong to this stored run.`);\n }\n return identity;\n}\n\nfunction validateFact(\n envelope: DomainEventEnvelope,\n runId: string,\n namespace: string,\n targetsForNode: (nodeId: string) => readonly ExecutionTarget[],\n): ModelUnavailableFact {\n if (envelope.version !== 1) {\n fail('INVALID_EVENT', 'A model-unavailable event must use version 1.');\n }\n const payload = record(envelope.payload, 'A model-unavailable payload');\n const hasTarget = Object.hasOwn(payload, 'target');\n exactFields(payload, [\n 'schemaVersion', 'identity', 'selection', 'effective', 'failure',\n ...(hasTarget ? ['target'] : []),\n ], 'A model-unavailable payload');\n if (payload.schemaVersion !== 1) {\n fail('INVALID_EVENT', 'A model-unavailable payload must use schemaVersion 1.');\n }\n const identity = validateAttemptIdentity(\n payload.identity,\n 'A model-unavailable identity',\n runId,\n namespace,\n );\n const targets = targetsForNode(identity.nodeId);\n let selected: EngineSelectionRecord;\n let effective: EngineSelectionRecord;\n try {\n selected = engineSelection(payload.selection as unknown as EngineSelectionRecord);\n effective = engineSelection(payload.effective as unknown as EngineSelectionRecord);\n } catch (error) {\n fail('INVALID_EVENT', 'A model-unavailable engine identity is invalid.', error);\n }\n const compatible = targets.filter((target) => matchesEngineTarget(target, selected));\n if (compatible.length === 0) {\n if (!hasTarget && selected.provider === null && payload.failure === 'auth') {\n fail(\n 'ENGINE_IDENTITY_UNRESOLVED',\n `Model availability for node \"${identity.nodeId}\" cannot resolve its legacy auth provider.`,\n );\n }\n fail('INVALID_EVENT', 'A model-unavailable selection is outside its recorded node lane.');\n }\n let target: ExecutionTarget | undefined;\n if (hasTarget) {\n target = compatible.find((candidate) => targetKey(candidate) === canonicalJson(payload.target!));\n if (target === undefined) {\n fail('INVALID_EVENT', 'A model-unavailable target must exactly match its selected route in the recorded node lane.');\n }\n }\n if (\n typeof payload.failure !== 'string'\n || !LANE_DEAD_FAILURES.has(payload.failure as EngineFailureKind)\n ) {\n fail('INVALID_EVENT', 'A model-unavailable event must record a lane-dead failure.');\n }\n return Object.freeze({\n schemaVersion: 1,\n identity,\n selection: selected,\n effective,\n failure: payload.failure as EngineFailureKind,\n ...(target === undefined ? {} : { target }),\n });\n}\n\nexport function validateStandardEvent(\n envelope: DomainEventEnvelope,\n type: string,\n nodeIds: ReadonlySet<string>,\n): GraphEvent {\n if (envelope.version !== 1) {\n fail('INVALID_EVENT', `${envelope.type} must use version 1.`);\n }\n const payload = record(envelope.payload, `${envelope.type} payload`);\n if (type === 'node-dispatched' || type === 'node-resumed') {\n exactFields(payload, ['nodeId', 'position'], `${envelope.type} payload`);\n } else if (type === 'node-completed') {\n exactFields(payload, ['nodeId', 'position', 'result'], `${envelope.type} payload`);\n } else if (type === 'node-paused') {\n exactFields(\n payload,\n ['nodeId', 'position', 'reason', 'request'],\n `${envelope.type} payload`,\n );\n text(payload.reason, `${envelope.type}.reason`);\n } else {\n exactFields(payload, ['nodeId', 'position', 'code'], `${envelope.type} payload`);\n text(payload.code, `${envelope.type}.code`);\n }\n const nodeId = text(payload.nodeId, `${envelope.type}.nodeId`);\n text(payload.position, `${envelope.type}.position`);\n if (!nodeIds.has(nodeId)) {\n fail('INVALID_EVENT', `${envelope.type} refers to an unknown node.`);\n }\n return Object.freeze({ type, version: 1, payload });\n}\n\nfunction validateAttemptStarted(\n envelope: DomainEventEnvelope,\n runId: string,\n namespace: string,\n nodeIds: ReadonlySet<string>,\n): Readonly<{ readonly identity: AttemptIdentity; readonly retrySafe: boolean }> {\n if (envelope.version !== 1) {\n fail('INVALID_EVENT', 'graph:node-attempt-started must use version 1.');\n }\n const payload = record(envelope.payload, 'graph:node-attempt-started payload');\n exactFields(\n payload,\n ['identity', 'retrySafe'],\n 'graph:node-attempt-started payload',\n );\n const identity = validateAttemptIdentity(\n payload.identity,\n 'A node-attempt-started identity',\n runId,\n namespace,\n );\n if (!nodeIds.has(identity.nodeId)) {\n fail('INVALID_EVENT', 'A node-attempt-started identity refers to an unknown node.');\n }\n if (typeof payload.retrySafe !== 'boolean') {\n fail('INVALID_EVENT', 'graph:node-attempt-started.retrySafe must be a boolean.');\n }\n return Object.freeze({ identity, retrySafe: payload.retrySafe });\n}\n\nfunction newEvent(\n runId: string,\n type: string,\n payload: JsonObject,\n): NewDomainEvent {\n return {\n eventId: randomUUID(),\n type: `${GRAPH_PREFIX}${type}`,\n version: 1,\n timestamp: new Date().toISOString(),\n correlationId: runId,\n causationId: null,\n payload: cloneFrozenJson(payload),\n };\n}\n\ntype StaticObservation =\n | { readonly kind: 'admitted'; readonly selection: EngineSelectionRecord }\n | { readonly kind: 'unsupported' }\n | { readonly kind: 'failed'; readonly failure: EngineFailureKind; readonly effective: EngineSelectionRecord | null; readonly detail: string };\n\nfunction preflightEvent(runId: string, type: string, payload: unknown, causationId: string | null = null): NewDomainEvent {\n return validateNewDomainEvent({\n eventId: randomUUID(), type, version: 1, timestamp: new Date().toISOString(),\n correlationId: runId, causationId, payload: cloneFrozenJson(payload as JsonValue),\n });\n}\nfunction probeContextKey(laneId: string, target: ExecutionTarget, contextNodeId: string | null): string {\n return canonicalJson([laneId, target, contextNodeId] as unknown as JsonValue);\n}\nasync function preflightScratch(value: unknown): Promise<string> {\n try {\n if (typeof value !== 'string') throw new TypeError('Scratch must be an absolute path.');\n return await validateScratchDirectory(value);\n } catch (error) {\n fail('INVALID_PREFLIGHT_CONFIG', 'Preflight requires an absolute, real, normalized scratch directory.', error);\n }\n}\nfunction probeAttempt(namespace: string, runId: string, eventId: string): AttemptMetadata {\n return {\n runId, attemptId: digestJson({ namespace, runId, preflightEventId: eventId }),\n leafId: eventId, path: ['preflight', eventId], label: 'preflight', iteration: 0, leaf: true,\n };\n}\nfunction unknownStatic(): StaticObservation {\n return { kind: 'failed', failure: 'unknown', effective: null, detail: 'Static admission returned an invalid or incompatible engine identity.' };\n}\nasync function observeStatic(\n engine: Engine,\n request: Omit<AgentRequest, 'prompt'>,\n expected: EngineSelectionRecord | null,\n target: ExecutionTarget,\n timeoutMs: number,\n signal: AbortSignal,\n): Promise<StaticObservation> {\n if (typeof engine.admit !== 'function') return { kind: 'unsupported' };\n const deadline = performance.now() + timeoutMs;\n const controller = new AbortController();\n let reason: 'timeout' | 'aborted' | undefined;\n let resolveStop!: () => void;\n const stopped = new Promise<void>((resolve) => { resolveStop = resolve; });\n const stop = (kind: 'timeout' | 'aborted') => {\n if (reason !== undefined) return;\n reason = kind;\n resolveStop();\n controller.abort();\n };\n const onAbort = () => stop('aborted');\n const timer = setTimeout(() => stop('timeout'), timeoutMs);\n signal.addEventListener('abort', onAbort, { once: true });\n const interruption = (): StaticObservation | undefined => {\n if (reason === undefined && performance.now() >= deadline) stop('timeout');\n return reason === undefined ? undefined : {\n kind: 'failed', failure: reason, effective: null,\n detail: reason === 'timeout' ? 'Static admission exceeded its time limit.' : 'Static admission was aborted.',\n };\n };\n try {\n if (signal.aborted) stop('aborted');\n const alreadyStopped = interruption();\n if (alreadyStopped) return alreadyStopped;\n let pending: Promise<EngineSelectionRecord>;\n try { pending = Promise.resolve(engine.admit(request, controller.signal, expected ?? undefined)); }\n catch (error) { pending = Promise.reject(error); }\n const operation = pending.then(\n (value) => ({ kind: 'value' as const, value }),\n (error: unknown) => ({ kind: 'error' as const, error }),\n );\n const outcome = await Promise.race([operation, stopped.then(() => ({ kind: 'stopped' as const }))]);\n const interrupted = interruption();\n if (interrupted) return interrupted;\n if (outcome.kind === 'stopped') return unknownStatic();\n if (outcome.kind === 'error') {\n let effective: EngineSelectionRecord | null = null;\n try {\n if (outcome.error instanceof EngineError && outcome.error.effective !== undefined) effective = engineSelection(outcome.error.effective);\n } catch { return unknownStatic(); }\n return {\n kind: 'failed', failure: classifyEngineFailure(outcome.error), effective,\n detail: outcome.error instanceof Error ? outcome.error.message : String(outcome.error),\n };\n }\n // Do not classify a return-value validation error as an adapter failure.\n try {\n const selection = engineSelection(outcome.value);\n if (!isDeepStrictEqual(selection, outcome.value) || !matchesEngineTarget(target, selection)\n || (expected !== null && !isDeepStrictEqual(selection, expected))) return unknownStatic();\n return interruption() ?? { kind: 'admitted', selection };\n } catch { return unknownStatic(); }\n } finally {\n clearTimeout(timer);\n signal.removeEventListener('abort', onAbort);\n }\n}\n\n/** Build one executor from the stored definition and frozen execution plan. */\nexport async function createGraphExecutor(\n options: GraphExecutorOptions,\n): Promise<Readonly<GraphExecutor>> {\n const loaded = await loadRunDefinition(options.storage, options.runId);\n const storedDefinition = loaded.record.payload.definition.graphDefinition;\n if (\n storedDefinition.digest !== options.graph.definition.digest\n || storedDefinition.canonicalJson !== options.graph.definition.canonicalJson\n || !isDeepStrictEqual(loaded.resolvedPlan.plan.graph, options.graph.describe().graph)\n ) {\n fail('STORED_GRAPH_MISMATCH', 'The compiled graph does not match this run\\'s stored definition and plan.');\n }\n if (\n loaded.resolvedPlan.plan.requirements.memory === 'required'\n && !validMemory(options.bindings?.memory)\n ) {\n fail('MISSING_MEMORY', 'This stored graph requires a live Memory binding.');\n }\n const memory = loaded.resolvedPlan.plan.requirements.memory === 'required'\n ? options.bindings!.memory!\n : null;\n\n const nodeIds = new Set(loaded.resolvedPlan.plan.nodes.map((node) => node.id));\n const nodesById = new Map(loaded.resolvedPlan.plan.nodes.map((node) => [node.id, node]));\n const lanesById = new Map(loaded.resolvedPlan.plan.executionLanes.map((lane) => [lane.id, lane]));\n const targetsForNode = (nodeId: string): readonly ExecutionTarget[] => {\n const node = nodesById.get(nodeId);\n const lane = node?.laneId == null ? undefined : lanesById.get(node.laneId);\n if (lane === undefined) {\n fail('INVALID_EVENT', `Model availability for node \"${nodeId}\" needs its recorded engine lane.`);\n }\n return [lane.effective, ...lane.fallbacks];\n };\n const plannedTargets = new Set<string>();\n for (const lane of loaded.resolvedPlan.plan.executionLanes) {\n for (const target of [lane.effective, ...lane.fallbacks]) {\n plannedTargets.add(targetKey(target));\n }\n }\n\n const enginesByTarget = new Map<string, GraphEngineBinding>();\n for (const rawBinding of options.engines) {\n let selection: EngineSelectionRecord;\n try {\n selection = engineSelection(rawBinding.selection);\n } catch (error) {\n fail('MISSING_ENGINE_BINDING', 'An engine binding has an invalid identity.', error);\n }\n assertTargetSelection(rawBinding.target, selection);\n const key = targetKey(rawBinding.target);\n if (!plannedTargets.has(key)) {\n fail('MISSING_ENGINE_BINDING', 'An engine binding target is outside the stored plan.');\n }\n if (\n enginesByTarget.has(key)\n || typeof rawBinding.engine?.run !== 'function'\n || typeof rawBinding.hardTokenLimitEnforceable !== 'boolean'\n ) {\n fail('MISSING_ENGINE_BINDING', 'Engine bindings must be valid and unique.');\n }\n const binding = Object.freeze({ ...rawBinding, selection });\n enginesByTarget.set(key, binding);\n }\n for (const target of plannedTargets) {\n if (!enginesByTarget.has(target)) {\n fail('MISSING_ENGINE_BINDING', 'Every target in the stored route needs an exact engine binding.');\n }\n }\n\n const plan = loaded.resolvedPlan.plan;\n const preflightPolicy = plan.preflight;\n const scratch = preflightPolicy === undefined ? undefined : await preflightScratch(options.preflightScratchDirectory);\n const restoredContexts = new Set<string>();\n const blockedRoutes = new Set<string>();\n\n const stream = {\n namespace: options.storage.record.namespace,\n streamId: options.runId,\n };\n let appendRevision = loaded.record.revision;\n let appendTail: Promise<void> = Promise.resolve();\n let running = false;\n\n const readFolded = async (): Promise<FoldedRun> => {\n let preflight: LoadedRunPreflight;\n try { preflight = await loadRunPreflight(options.storage, options.runId); }\n catch (error) {\n if (error instanceof EngineIdentityUnresolvedError) {\n fail('ENGINE_IDENTITY_UNRESOLVED', error.message, error);\n }\n throw error;\n }\n let state = options.graph.initialState();\n let revision = 0;\n const attempts = new Map<string, FoldedAttempt>();\n const pendingDispatches = new Map<\n string,\n Extract<GraphCommand, { readonly kind: 'dispatch' }>\n >();\n const unavailable = new Set<EngineExclusionKey>();\n for (const envelope of preflight.events) {\n revision = envelope.revision;\n if (!envelope.type.startsWith(GRAPH_PREFIX)) continue;\n const type = envelope.type.slice(GRAPH_PREFIX.length);\n if (type === 'run-started') continue;\n if (type === 'model-unavailable') {\n pendingDispatches.clear();\n const probeFailure = preflight.probeFailures.get(envelope.eventId);\n if (probeFailure !== undefined) {\n for (const key of probeFailure.exclusionKeys) unavailable.add(key);\n continue;\n }\n const fact = validateFact(\n envelope,\n options.runId,\n stream.namespace,\n targetsForNode,\n );\n try {\n for (const key of engineFailureExclusionKeys(fact, targetsForNode(fact.identity.nodeId))) {\n unavailable.add(key);\n }\n } catch (error) {\n if (error instanceof EngineIdentityUnresolvedError) {\n fail('ENGINE_IDENTITY_UNRESOLVED',\n `Model availability for node \"${fact.identity.nodeId}\" cannot be resolved: ${error.message}`, error);\n }\n throw error;\n }\n continue;\n }\n if (type === 'node-attempt-started') {\n pendingDispatches.clear();\n const started = validateAttemptStarted(\n envelope,\n options.runId,\n stream.namespace,\n nodeIds,\n );\n const attempt = attempts.get(started.identity.position);\n if (\n !attempt\n || attempt.command.nodeId !== started.identity.nodeId\n || attempt.status !== 'in-flight'\n || attempt.started !== null\n ) {\n fail(\n 'INVALID_EVENT',\n `The start for position \"${started.identity.position}\" has no single unfinished dispatch.`,\n );\n }\n attempts.set(started.identity.position, Object.freeze({\n ...attempt,\n started,\n }));\n continue;\n }\n let graphEvent: GraphEvent;\n if (type === 'engine-attempt-recorded') {\n pendingDispatches.clear();\n const payload = validateEngineAttemptRecorded(envelope);\n const attempt = attempts.get(payload.position);\n const node = nodesById.get(payload.nodeId);\n const lane = node?.laneId === null || node?.laneId === undefined\n ? undefined\n : lanesById.get(node.laneId);\n if (\n !attempt\n || attempt.command.nodeId !== payload.nodeId\n || attempt.status !== 'in-flight'\n || attempt.started === null\n || payload.sequence !== attempt.engineSequence + 1\n || lane === undefined\n ) {\n fail('INVALID_EVENT', 'An engine receipt must follow its started engine position in sequence.');\n }\n const requested = payload.requested;\n if (requested !== null && ![lane.effective, ...lane.fallbacks].some((target) => (\n target.adapter === requested.adapter\n && target.model === requested.model\n && (requested.provider === null || target.provider === requested.provider)\n && (requested.modelFamily === null || target.modelFamily === requested.modelFamily)\n ))) {\n fail('INVALID_EVENT', 'An engine receipt requested a target outside its stored route.');\n }\n attempts.set(payload.position, Object.freeze({ ...attempt, engineSequence: payload.sequence }));\n graphEvent = Object.freeze({ type, version: 1, payload });\n } else if (\n type === 'node-dispatched'\n || type === 'node-completed'\n || type === 'node-failed'\n || type === 'node-paused'\n || type === 'node-resumed'\n ) {\n graphEvent = validateStandardEvent(envelope, type, nodeIds);\n const position = (graphEvent.payload as JsonObject).position as string;\n if (type === 'node-dispatched') {\n if (attempts.has(position)) {\n fail('INVALID_EVENT', `Dispatch position \"${position}\" is recorded more than once.`);\n }\n if (pendingDispatches.size === 0) {\n const decision = options.graph.decide(state);\n if (decision.some((command) => command.kind !== 'dispatch')) {\n fail('INVALID_EVENT', 'A recorded dispatch does not match the graph decision at its event prefix.');\n }\n for (const command of decision as readonly Extract<\n GraphCommand,\n { readonly kind: 'dispatch' }\n >[]) {\n pendingDispatches.set(command.position, command);\n }\n }\n const command = pendingDispatches.get(position);\n if (\n !command\n || command.nodeId !== (graphEvent.payload as JsonObject).nodeId\n ) {\n fail('INVALID_EVENT', `Dispatch position \"${position}\" does not match the graph decision at its event prefix.`);\n }\n pendingDispatches.delete(position);\n attempts.set(position, Object.freeze({\n command,\n started: null,\n status: 'in-flight',\n engineSequence: 0,\n }));\n } else if (type === 'node-resumed') {\n pendingDispatches.clear();\n const attempt = attempts.get(position);\n if (\n !attempt\n || attempt.command.nodeId !== (graphEvent.payload as JsonObject).nodeId\n || attempt.status === 'settled'\n || (attempt.status === 'in-flight' && attempt.started === null)\n ) {\n fail('INVALID_EVENT', `Resume position \"${position}\" has no matching unfinished attempt.`);\n }\n attempts.set(position, Object.freeze({\n ...attempt,\n status: 'in-flight',\n }));\n } else {\n pendingDispatches.clear();\n const attempt = attempts.get(position);\n if (\n !attempt\n || attempt.command.nodeId !== (graphEvent.payload as JsonObject).nodeId\n || attempt.status !== 'in-flight'\n ) {\n fail('INVALID_EVENT', `The result for position \"${position}\" has no single recorded dispatch.`);\n }\n attempts.set(position, Object.freeze({\n ...attempt,\n status: type === 'node-paused' ? 'paused' : 'settled',\n }));\n }\n } else {\n pendingDispatches.clear();\n graphEvent = Object.freeze({\n type,\n version: envelope.version,\n payload: cloneFrozenJson(envelope.payload),\n });\n }\n state = options.graph.reduce(state, graphEvent);\n }\n const dispatched = new Set(attempts.keys());\n const inFlight = [...attempts]\n .filter(([, attempt]) => attempt.status === 'in-flight')\n .map(([position]) => position);\n appendRevision = revision;\n return Object.freeze({\n revision,\n preflight,\n state,\n dispatched,\n inFlight: Object.freeze(inFlight),\n unavailable,\n attempts,\n });\n };\n\n const appendBatch = async (\n expectedRevision: number,\n events: readonly NewDomainEvent[],\n ): Promise<void> => {\n const batch = validateDomainEventBatch(events) as DomainEventBatch;\n appendRevision = await options.storage.eventStore.append(stream, expectedRevision, batch);\n };\n\n const enqueueBatch = (events: readonly NewDomainEvent[]): Promise<void> => {\n const current = appendTail.catch(() => undefined)\n .then(async () => appendBatch(appendRevision, events));\n appendTail = current.then(() => undefined, () => undefined);\n return current;\n };\n const enqueueAppend = (event: NewDomainEvent): Promise<void> => enqueueBatch([event]);\n\n const laneTargets = (lane: ResolvedExecutionLane): readonly ExecutionTarget[] => [lane.effective, ...lane.fallbacks];\n const lanePolicy = (lane: ResolvedExecutionLane) => preflightPolicy!.lanes.find((value) => value.laneId === lane.id)!;\n const routeId = (lane: ResolvedExecutionLane, target: ExecutionTarget) => canonicalJson([lane.id, target] as unknown as JsonValue);\n const contexts = (lane: ResolvedExecutionLane): readonly (string | null)[] => {\n const ids = plan.nodes.filter((node) => node.laneId === lane.id).map((node) => node.id);\n return ids.length === 0 ? [null] : ids;\n };\n const forTarget = (probe: CompletedProbe, lane: ResolvedExecutionLane, target: ExecutionTarget) =>\n probe.start.payload.laneId === lane.id && targetKey(probe.start.payload.target) === targetKey(target);\n const latestStatic = (folded: FoldedRun, lane: ResolvedExecutionLane, target: ExecutionTarget, contextNodeId: string | null) =>\n [...folded.preflight.probes].reverse().find((probe) => forTarget(probe, lane, target)\n && probe.start.payload.stage === 'static' && probe.start.payload.contextNodeId === contextNodeId);\n const savedSelection = (folded: FoldedRun, lane: ResolvedExecutionLane, target: ExecutionTarget): EngineSelectionRecord | null => {\n for (const probe of [...folded.preflight.probes].reverse()) {\n if (forTarget(probe, lane, target) && probe.payload.outcome.kind === 'admitted') return probe.payload.outcome.selection;\n }\n return null;\n };\n const staticBlocked = (folded: FoldedRun, lane: ResolvedExecutionLane, target: ExecutionTarget) =>\n lanePolicy(lane).unsupportedStatic === 'block' && contexts(lane).some((id) => latestStatic(folded, lane, target, id)?.payload.outcome.kind === 'unsupported');\n const excluded = (keys: ReadonlySet<EngineExclusionKey>, lane: ResolvedExecutionLane, target: ExecutionTarget) =>\n isEngineExcluded(keys, enginesByTarget.get(targetKey(target))!.selection, target, laneTargets(lane));\n const eligible = (folded: FoldedRun, lane: ResolvedExecutionLane, target: ExecutionTarget) =>\n !excluded(folded.unavailable, lane, target) && contexts(lane).every((id) => {\n const outcome = latestStatic(folded, lane, target, id)?.payload.outcome;\n return outcome?.kind === 'admitted' || (outcome?.kind === 'unsupported' && lanePolicy(lane).unsupportedStatic === 'allow');\n });\n const answered = (folded: FoldedRun, lane: ResolvedExecutionLane, target: ExecutionTarget) =>\n folded.preflight.probes.some((probe) => forTarget(probe, lane, target)\n && probe.payload.stage === 'live' && probe.payload.outcome.kind === 'succeeded');\n const updateBlockedRoutes = (folded: FoldedRun) => {\n blockedRoutes.clear();\n if (preflightPolicy === undefined) return;\n for (const lane of plan.executionLanes) for (const target of laneTargets(lane)) {\n if (staticBlocked(folded, lane, target)) blockedRoutes.add(routeId(lane, target));\n }\n };\n const staticRequestFor = async (\n target: ExecutionTarget, contextNodeId: string | null,\n ): Promise<Omit<AgentRequest, 'prompt' | 'attempt'>> => {\n if (contextNodeId === null) return {\n model: target.model, tools: [...target.tools], cwd: scratch!,\n timeoutMs: preflightPolicy!.timeoutMs, leaf: true,\n };\n const binding = options.nodes[contextNodeId];\n if (binding === undefined) fail('MISSING_NODE_BINDING', `No node behaviour is bound for \"${contextNodeId}\".`);\n const policy = validateAttemptBudgetPolicy(binding.policy);\n const workspace = validateWorkspacePolicy(binding.workspace);\n const nodeScratch = await preflightScratch(binding.scratchDirectory);\n if (!Array.isArray(binding.permissions) || binding.permissions.some((permission) =>\n typeof permission !== 'string' || permission.length === 0 || permission !== permission.trim()\n || /[\\u0000-\\u001f\\u007f]/u.test(permission)) || new Set(binding.permissions).size !== binding.permissions.length) {\n throw new TypeError('Static admission permissions must be unique trimmed strings without control characters.');\n }\n const permissions = cloneFrozenJson([...binding.permissions]);\n return {\n model: target.model, tools: [...target.tools], allowedTools: [...permissions],\n ...(binding.resultContract === null ? {} : { jsonSchema: cloneFrozenJson(binding.resultContract.schema) }),\n ...(policy.callTokens === null ? {} : { maxTokens: policy.callTokens.tokens }),\n cwd: workspace.directory === null ? nodeScratch : await realpath(workspace.directory),\n workspaceMode: workspace.mode, timeoutMs: policy.timeoutMs, timeoutGraceMs: policy.teardownGraceMs,\n maxOutputBytes: policy.outputBytes, maxMemoryBytes: policy.memoryBytes, leaf: true,\n };\n };\n const writeDocument = async <Purpose extends string>(purpose: Purpose, document: unknown): Promise<ArtifactReference<Purpose>> =>\n await options.storage.artifactStore.write({ namespace: stream.namespace, runId: options.runId }, {\n bytes: Buffer.from(JSON.stringify(document)), mediaType: 'application/json', purpose, contentMode: 'state',\n }) as ArtifactReference<Purpose>;\n\n const appendProbeOutcome = async (\n start: NewDomainEvent,\n payload: ProbeStartPayload,\n observation: { readonly stage: 'static'; readonly value: StaticObservation }\n | { readonly stage: 'live'; readonly value: PreflightResult },\n ): Promise<StaticOutcome | LiveOutcome> => {\n let outcome: StaticOutcome | LiveOutcome;\n const diagnostic = (detail: string) => writeDocument('preflight-diagnostic', {\n schemaVersion: 1, runId: options.runId, probeEventId: start.eventId, detail,\n });\n try {\n if (observation.stage === 'static') {\n const value = observation.value;\n outcome = value.kind === 'failed' ? {\n kind: 'failed', failure: value.failure, effective: value.effective,\n diagnostic: await diagnostic(value.detail),\n } : value;\n } else {\n const value = observation.value;\n const evidence = value.evidence === undefined ? null : await writeDocument('preflight-evidence', {\n schemaVersion: 1, runId: options.runId, probeEventId: start.eventId, evidence: value.evidence,\n });\n const common = { usage: value.usage ?? { kind: 'unknown' as const }, effective: value.effective ?? null,\n evidence, diagnostic: await diagnostic(value.detail) };\n if (value.ok) {\n if (evidence === null) throw new TypeError('Successful preflight must retain complete evidence.');\n outcome = { ...common, kind: 'succeeded', evidence };\n } else outcome = { ...common, kind: 'failed', failure: value.failure ?? 'unknown' };\n }\n } catch (error) {\n if (!(error instanceof StorageError)) throw error;\n outcome = observation.stage === 'static' ? { kind: 'recording-failed', storageCode: error.code } : {\n kind: 'recording-failed', storageCode: error.code,\n usage: observation.value.usage ?? { kind: 'unknown' }, effective: observation.value.effective ?? null,\n evidence: null, diagnostic: null,\n };\n }\n const finishPayload = { probeEventId: start.eventId, stage: observation.stage, outcome } as ProbeFinishPayload;\n const finish = preflightEvent(options.runId, 'preflight:probe-finished', finishPayload, start.eventId);\n const batch: NewDomainEvent[] = [finish];\n if (outcome.kind === 'failed' && LANE_DEAD_FAILURES.has(outcome.failure)) {\n batch.push(preflightEvent(options.runId, 'graph:model-unavailable', {\n schemaVersion: 1, source: { kind: 'preflight', probeEventId: start.eventId, laneId: payload.laneId },\n target: payload.target, selection: payload.selection, effective: outcome.effective ?? payload.selection,\n failure: outcome.failure,\n }, finish.eventId));\n } else if (outcome.kind === 'failed' || outcome.kind === 'recording-failed') {\n batch.push(preflightEvent(options.runId, 'preflight:paused', {\n finishedProbeEventId: finish.eventId,\n reason: outcome.kind === 'recording-failed' ? 'recording-failure' : 'engine-failure',\n }, finish.eventId));\n }\n await enqueueBatch(batch);\n return outcome;\n };\n\n const admitBeforeWork = async (signal: AbortSignal): Promise<\n { readonly folded: FoldedRun } | { readonly result: PreflightPauseResult | PreflightFailureResult }\n > => {\n for (;;) {\n const folded = await readFolded();\n updateBlockedRoutes(folded);\n const snapshot = folded.preflight;\n if (snapshot.state.pause !== null) return { result: snapshot.state.pause };\n if (snapshot.state.phase === 'failed') return { result: {\n kind: 'fail', code: 'PREFLIGHT_FAILED', message: 'A declared lane has no admissible engine target.',\n } };\n if (snapshot.openProbe !== null) fail('PROTOCOL', `Preflight probe \"${snapshot.openProbe.envelope.eventId}\" is unfinished; verify worker cleanup and call interruptRunPreflight before resuming.`);\n if (signal.aborted) fail('ABORTED', 'The graph run was aborted.');\n if (preflightPolicy === undefined) return { folded };\n const probeExcluded = new Set<EngineExclusionKey>();\n for (const failure of snapshot.probeFailures.values()) for (const key of failure.exclusionKeys) probeExcluded.add(key);\n const dead = plan.executionLanes.find((lane) => laneTargets(lane).every((target) =>\n excluded(probeExcluded, lane, target) || staticBlocked(folded, lane, target)));\n if (dead !== undefined) {\n await enqueueAppend(preflightEvent(options.runId, 'preflight:failed', {\n laneId: dead.id, code: 'PREFLIGHT_FAILED', reason: 'no-admissible-target',\n }));\n continue;\n }\n const completed = snapshot.admissionCompletedAtRevision !== null;\n let check: { lane: ResolvedExecutionLane; target: ExecutionTarget; contextNodeId: string | null } | undefined;\n for (const lane of plan.executionLanes) {\n for (const target of laneTargets(lane)) {\n const unavailable = excluded(folded.unavailable, lane, target) || staticBlocked(folded, lane, target);\n for (const contextNodeId of contexts(lane)) {\n const previous = latestStatic(folded, lane, target, contextNodeId);\n const contextKey = probeContextKey(lane.id, target, contextNodeId);\n // Initial unvisited contexts are still checked after a different context excluded the target.\n if (completed && unavailable) continue;\n if (previous !== undefined && unavailable) continue;\n if (restoredContexts.has(contextKey)) continue;\n check = { lane, target, contextNodeId };\n break;\n }\n if (check) break;\n }\n if (check) break;\n }\n const resumed = [...snapshot.events].reverse().find((event) => event.type === 'preflight:resumed');\n const cause = resumed?.eventId ?? null;\n if (check !== undefined) {\n const { lane, target, contextNodeId } = check;\n const binding = enginesByTarget.get(targetKey(target))!;\n const expectedSelection = savedSelection(folded, lane, target);\n const payload: ProbeStartPayload = { stage: 'static', laneId: lane.id, target,\n selection: binding.selection, contextNodeId, expectedSelection };\n const start = preflightEvent(options.runId, 'preflight:probe-started', payload, cause);\n // Validate caller configuration before recording a call that has not begun.\n const configuration = await staticRequestFor(target, contextNodeId);\n if (signal.aborted) fail('ABORTED', 'The graph run was aborted.');\n await enqueueAppend(start);\n const request = { ...configuration, attempt: probeAttempt(stream.namespace, options.runId, start.eventId) };\n const observation = await observeStatic(binding.engine, request, expectedSelection, target, preflightPolicy.timeoutMs, signal);\n const outcome = await appendProbeOutcome(start, payload, { stage: 'static', value: observation });\n const contextKey = probeContextKey(lane.id, target, contextNodeId);\n if (outcome.kind === 'admitted') {\n enginesByTarget.set(targetKey(target), Object.freeze({ ...binding, selection: outcome.selection }));\n restoredContexts.add(contextKey);\n } else if (outcome.kind === 'unsupported') restoredContexts.add(contextKey);\n else restoredContexts.delete(contextKey);\n continue;\n }\n if (completed) return { folded };\n let live: { lane: ResolvedExecutionLane; target: ExecutionTarget } | undefined;\n for (const lane of plan.executionLanes) {\n if (lanePolicy(lane).live === 'skip'\n || laneTargets(lane).some((target) => eligible(folded, lane, target) && answered(folded, lane, target))) continue;\n const target = laneTargets(lane).find((target) => eligible(folded, lane, target) && !answered(folded, lane, target));\n if (target !== undefined) { live = { lane, target }; break; }\n }\n if (live === undefined) fail('PROTOCOL', 'Preflight has no permitted unfinished check and is not admitted.');\n const binding = enginesByTarget.get(targetKey(live.target))!;\n const admitted = savedSelection(folded, live.lane, live.target);\n const normal = admitted ?? binding.selection;\n const payload: ProbeStartPayload = { stage: 'live', laneId: live.lane.id, target: live.target, selection: normal };\n const start = preflightEvent(options.runId, 'preflight:probe-started', payload, cause);\n await enqueueAppend(start);\n let observation = await preflightEngine(binding.engine, {\n model: live.target.model, timeoutMs: preflightPolicy.timeoutMs, cwd: scratch,\n attempt: probeAttempt(stream.namespace, options.runId, start.eventId), signal,\n });\n const requested = observation.evidence?.kind === 'complete' ? observation.evidence.result.requested : null;\n const compatible = requested !== null && requested.capabilities.length === 0 && (admitted !== null\n ? isDeepStrictEqual(requested, engineSelection({ ...admitted, capabilities: [] }))\n : requested.adapter === normal.adapter && requested.provider === normal.provider\n && requested.modelFamily === normal.modelFamily && requested.model === normal.model);\n if (observation.ok && !compatible) {\n observation = { ...observation, ok: false, failure: 'unknown', detail: 'Live preflight requested identity does not match its selected target.' };\n }\n await appendProbeOutcome(start, payload, { stage: 'live', value: observation });\n }\n };\n\n const routeFor = (\n lane: ResolvedExecutionLane,\n unavailable: ReadonlySet<EngineExclusionKey>,\n ): readonly [PreparedEngineLane] | readonly [PreparedEngineLane, PreparedEngineLane] | null => {\n const live: PreparedEngineLane[] = [];\n const declaredTargets = [lane.effective, ...lane.fallbacks];\n for (const target of declaredTargets) {\n const binding = enginesByTarget.get(targetKey(target))!;\n if (blockedRoutes.has(routeId(lane, target))) continue;\n if (isEngineExcluded(unavailable, binding.selection, target, declaredTargets)) continue;\n live.push({\n engine: binding.engine,\n selection: binding.selection,\n hardTokenLimitEnforceable: binding.hardTokenLimitEnforceable,\n target,\n });\n if (live.length === 2) break;\n }\n if (live.length === 0) return null;\n if (live.length === 1) return [live[0]!];\n return [live[0]!, live[1]!];\n };\n\n const prepareDispatch = (\n command: Extract<GraphCommand, { readonly kind: 'dispatch' }>,\n unavailable: ReadonlySet<EngineExclusionKey>,\n ): PreparedDispatch => {\n const node = nodesById.get(command.nodeId);\n const binding = options.nodes[command.nodeId];\n if (!node || !binding) {\n fail('MISSING_NODE_BINDING', `No node behaviour is bound for \"${command.nodeId}\".`);\n }\n if (binding.retrySafe !== undefined && typeof binding.retrySafe !== 'boolean') {\n fail('MISSING_NODE_BINDING', `Node \"${command.nodeId}\" has an invalid retrySafe policy.`);\n }\n const prompt = binding.prompt?.(command.input) ?? null;\n if (node.laneId === null) {\n return { command, binding, prompt, route: null, allEnginesUnavailable: false };\n }\n const lane = lanesById.get(node.laneId);\n if (!lane) {\n fail('STORED_GRAPH_MISMATCH', `The stored lane for \"${command.nodeId}\" is missing.`);\n }\n const route = routeFor(lane, unavailable);\n return { command, binding, prompt, route, allEnginesUnavailable: route === null };\n };\n\n const appendOutcome = async (\n prepared: PreparedDispatch,\n signal: AbortSignal,\n alreadyStarted = false,\n engineSequence = 0,\n ): Promise<void> => {\n const { command, binding, prompt, route } = prepared;\n const identity: AttemptIdentity = createAttemptIdentity({\n namespace: stream.namespace,\n streamId: stream.streamId,\n nodeId: command.nodeId,\n position: command.position,\n });\n if (!alreadyStarted) {\n await enqueueAppend(newEvent(options.runId, 'node-attempt-started', {\n identity,\n retrySafe: binding.retrySafe ?? false,\n }));\n }\n const appendResult = async (event: NewDomainEvent): Promise<void> => {\n try {\n await enqueueAppend(event);\n } catch (error) {\n if (!(error instanceof StorageError) || error.code !== 'STORAGE_LIMIT_EXCEEDED') {\n throw error;\n }\n await enqueueAppend(newEvent(options.runId, 'node-failed', {\n nodeId: command.nodeId,\n position: command.position,\n code: 'RESULT_TOO_LARGE',\n }));\n }\n };\n if (prepared.allEnginesUnavailable) {\n await appendResult(newEvent(options.runId, 'node-failed', {\n nodeId: command.nodeId,\n position: command.position,\n code: 'ENGINE_UNAVAILABLE',\n }));\n return;\n }\n const result = await executeNodeAttempt({\n identity,\n nodeId: command.nodeId,\n input: command.input,\n memory,\n prompt,\n scratchDirectory: binding.scratchDirectory,\n workspace: binding.workspace,\n trustedCaller: binding.trustedCaller,\n permissions: binding.permissions,\n policy: binding.policy,\n resultContract: binding.resultContract,\n engineRoute: route,\n runData: binding.runData,\n parseResult: binding.parseResult,\n tokenBudget: binding.tokenBudget,\n declaredTargets: route === null ? [] : targetsForNode(command.nodeId),\n recordModelUnavailable: async (fact) => {\n await enqueueAppend(newEvent(\n options.runId,\n 'model-unavailable',\n fact as unknown as JsonObject,\n ));\n },\n recordEngineAttempt: async (fact) => {\n await enqueueAppend(newEvent(options.runId, 'engine-attempt-recorded', {\n nodeId: command.nodeId,\n position: command.position,\n sequence: engineSequence + 1,\n ...fact,\n }));\n engineSequence += 1;\n },\n decideAction: binding.decideAction,\n }, signal);\n if (result.status === 'completed') {\n const issue = options.graph.validateNodeResult?.(command.nodeId, result.result) ?? null;\n if (issue !== null) {\n await appendResult(newEvent(options.runId, 'node-failed', {\n nodeId: command.nodeId,\n position: command.position,\n code: 'RESULT_INVALID',\n }));\n return;\n }\n await appendResult(newEvent(options.runId, 'node-completed', {\n nodeId: command.nodeId,\n position: command.position,\n result: result.result,\n }));\n return;\n }\n if (result.status === 'paused' && result.decision?.kind === 'wait') {\n await appendResult(newEvent(options.runId, 'node-paused', {\n nodeId: command.nodeId,\n position: command.position,\n reason: result.decision.reason,\n request: result.decision.request,\n }));\n return;\n }\n await appendResult(newEvent(options.runId, 'node-failed', {\n nodeId: command.nodeId,\n position: command.position,\n code: result.status === 'denied'\n ? 'DENIED'\n : result.failure?.code ?? 'ACTION_POLICY',\n }));\n };\n\n const drive = async (signal: AbortSignal): Promise<GraphExecutorResult> => {\n for (;;) {\n if (signal.aborted) fail('ABORTED', 'The graph run was aborted.');\n const admission = await admitBeforeWork(signal);\n if ('result' in admission) return admission.result;\n const { folded } = admission;\n const commands = options.graph.decide(folded.state);\n if (commands.length === 0) {\n if (folded.inFlight.length === 0) {\n fail('EMPTY_DECISION', 'The graph returned an empty decision with no recorded attempt in flight.');\n }\n return Object.freeze({ kind: 'waiting', positions: Object.freeze([...folded.inFlight]) });\n }\n const terminal = commands.find((command) => command.kind !== 'dispatch');\n if (terminal) {\n if (folded.inFlight.length > 0) {\n fail('PROTOCOL', 'The graph returned a terminal result while recorded work is still in flight.');\n }\n return terminal;\n }\n if (folded.inFlight.length > 0) {\n fail('PROTOCOL', 'The graph dispatched more work while recorded work is still in flight.');\n }\n const dispatches = commands as readonly Extract<GraphCommand, { readonly kind: 'dispatch' }>[];\n for (const command of dispatches) {\n if (folded.dispatched.has(command.position)) {\n fail('DUPLICATE_POSITION', `Dispatch position \"${command.position}\" is already recorded.`);\n }\n }\n const prepared = dispatches.map((command) => prepareDispatch(command, folded.unavailable));\n try {\n await appendBatch(\n folded.revision,\n dispatches.map((command) => newEvent(options.runId, 'node-dispatched', {\n nodeId: command.nodeId,\n position: command.position,\n })),\n );\n } catch (error) {\n if (error instanceof StorageError && error.code === 'REVISION_CONFLICT') {\n continue;\n }\n throw error;\n }\n await Promise.all(prepared.map(async (attempt) => appendOutcome(attempt, signal)));\n }\n };\n\n const resumePosition = async (\n position: string,\n signal: AbortSignal,\n ): Promise<GraphExecutorResult> => {\n if (signal.aborted) fail('ABORTED', 'The graph run was aborted.');\n const admission = await admitBeforeWork(signal);\n if ('result' in admission) return admission.result;\n const { folded } = admission;\n const attempt = folded.attempts.get(position);\n if (!attempt || attempt.status === 'settled') {\n fail('PROTOCOL', `Position \"${position}\" is not an unfinished attempt.`);\n }\n const recovery: NewDomainEvent[] = [];\n if (\n attempt.status === 'in-flight'\n && attempt.started !== null\n && nodesById.get(attempt.command.nodeId)!.laneId !== null\n ) {\n recovery.push(newEvent(options.runId, 'engine-attempt-recorded', {\n nodeId: attempt.command.nodeId,\n position,\n sequence: attempt.engineSequence + 1,\n requested: null,\n effective: null,\n }));\n }\n if (\n attempt.status === 'in-flight'\n && attempt.started !== null\n && !attempt.started.retrySafe\n ) {\n await appendBatch(folded.revision, [...recovery, newEvent(options.runId, 'node-paused', {\n nodeId: attempt.command.nodeId,\n position,\n reason: 'The previous process stopped after node code started, so its outcome is uncertain.',\n request: {\n kind: 'reconcile-attempt',\n attemptId: attempt.started.identity.attemptId,\n },\n })]);\n return drive(signal);\n }\n\n const prepared = prepareDispatch(attempt.command, folded.unavailable);\n if (attempt.status === 'paused' || attempt.started !== null) {\n await appendBatch(folded.revision, [...recovery, newEvent(options.runId, 'node-resumed', {\n nodeId: attempt.command.nodeId,\n position,\n })]);\n }\n await appendOutcome(prepared, signal, attempt.started !== null, attempt.engineSequence + recovery.length);\n return drive(signal);\n };\n\n const resumePreflight = async (target: { readonly preflightEventId: string }, signal: AbortSignal): Promise<GraphExecutorResult> => {\n const value: unknown = target;\n const item = value !== null && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n if (item === undefined || Object.getOwnPropertyNames(item).length !== 1 || Object.getOwnPropertySymbols(item).length !== 0 || !Object.hasOwn(item, 'preflightEventId') || 'position' in item) {\n fail('RESUME_EVENT_MISMATCH', 'Preflight resume requires exactly one valid preflightEventId.');\n }\n let requested: string;\n try { requested = validateDomainEventId(item.preflightEventId, '/preflightEventId'); }\n catch (cause) { fail('RESUME_EVENT_MISMATCH', 'Preflight resume requires exactly one valid preflightEventId.', cause); }\n if (signal.aborted) fail('ABORTED', 'The graph run was aborted.');\n const folded = await readFolded();\n const current = folded.preflight.state.pause?.preflightEventId ?? null;\n if (current !== requested) {\n fail('RESUME_EVENT_MISMATCH', `Resume expected preflight event \"${requested}\" but found \"${current ?? '(none)'}\".`);\n }\n await enqueueAppend(preflightEvent(options.runId, 'preflight:resumed', { preflightEventId: requested }, requested));\n return drive(signal);\n };\n\n const exclusively = async (\n operation: () => Promise<GraphExecutorResult>,\n ): Promise<GraphExecutorResult> => {\n if (running) fail('PROTOCOL', 'This graph executor is already running.');\n running = true;\n try {\n return await operation();\n } finally {\n running = false;\n }\n };\n\n return Object.freeze({\n run: (signal: AbortSignal) => exclusively(() => drive(signal)),\n resume: (target: string | { readonly preflightEventId: string }, signal: AbortSignal) => exclusively(\n () => typeof target === 'string' ? resumePosition(target, signal) : resumePreflight(target, signal),\n ),\n });\n}\n","import { createHash, randomUUID } from 'node:crypto';\nimport { mkdir, open, rename, rm } from 'node:fs/promises';\nimport { isDeepStrictEqual } from 'node:util';\nimport { join, resolve } from 'node:path';\n\nimport { compileGraph } from '../graph/type.js';\nimport {\n teamGraphType,\n type TeamDefinition,\n type TeamGraphState,\n type TeamMessage,\n} from '../graph-types/team.js';\nimport { GraphExecutionError, validateStandardEvent } from './graph-executor.js';\nimport {\n loadRunDefinition,\n type RunStorageBinding,\n type RunStorageRecord,\n} from './run-definition.js';\nimport type { StreamRevision } from '../events/envelope.js';\n\nconst GRAPH_PREFIX = 'graph:';\nconst STANDARD_EVENT_TYPES = new Set([\n 'node-dispatched',\n 'node-completed',\n 'node-failed',\n 'node-paused',\n 'node-resumed',\n]);\n\nfunction mismatch(): never {\n throw new GraphExecutionError(\n 'STORED_GRAPH_MISMATCH',\n 'The stored graph is not the supported team graph.',\n );\n}\n\nfunction escapeLineValue(value: string): string {\n return value.replace(\n /[\\\\\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]/gu,\n (character) => {\n if (character === '\\\\') return '\\\\\\\\';\n if (character === '\\n') return '\\\\n';\n if (character === '\\r') return '\\\\r';\n if (character === '\\t') return '\\\\t';\n return `\\\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`;\n },\n );\n}\n\nfunction renderMessage(message: TeamMessage): string {\n const mentions = message.mentions.map((mention) => `@${escapeLineValue(mention)}`).join(' ');\n return `${escapeLineValue(message.sender)} [${escapeLineValue(message.id)}]${mentions ? ` ${mentions}` : ''}: ${escapeLineValue(message.text)}\\n`;\n}\n\nfunction roomFilename(storage: RunStorageRecord, runId: string, roomId: string): string {\n const { name, version, configDigest } = storage.eventStore;\n const identity = JSON.stringify([name, version, configDigest, storage.namespace, runId, roomId]);\n const digest = createHash('sha256').update(identity).digest('hex');\n return `obversa-team-room-${digest}.txt`;\n}\n\nasync function replaceFile(path: string, content: string): Promise<void> {\n const temporary = `${path}.${randomUUID()}.tmp`;\n const handle = await open(temporary, 'wx', 0o600);\n try {\n try {\n await handle.writeFile(content, { encoding: 'utf8' });\n } finally {\n await handle.close();\n }\n await rename(temporary, path);\n } finally {\n await rm(temporary, { force: true });\n }\n}\n\nexport async function projectTeamRooms(input: {\n readonly storage: RunStorageBinding;\n readonly runId: string;\n readonly directory: string;\n}): Promise<{\n readonly revision: StreamRevision;\n readonly files: readonly { readonly roomId: string; readonly path: string }[];\n}> {\n if (typeof input.directory !== 'string' || input.directory.trim().length === 0) {\n throw new TypeError('Projection directory must be a non-empty path.');\n }\n const directory = resolve(input.directory);\n const loaded = await loadRunDefinition(input.storage, input.runId);\n const storedGraph = loaded.resolvedPlan.plan.graph;\n if (\n storedGraph.kind !== teamGraphType.kind\n || storedGraph.typeVersion !== teamGraphType.version\n ) mismatch();\n\n const compiled = compileGraph(\n teamGraphType,\n loaded.record.payload.definition.graphDefinition.value as TeamDefinition,\n );\n if (!isDeepStrictEqual(storedGraph, compiled.describe().graph)) mismatch();\n\n const nodeIds = new Set(compiled.definition.value.nodes.map((node) => node.id));\n let state: TeamGraphState = compiled.initialState();\n let revision = 0;\n for await (const event of input.storage.eventStore.read({\n namespace: input.storage.record.namespace,\n streamId: input.runId,\n })) {\n revision = event.revision;\n if (!event.type.startsWith(GRAPH_PREFIX)) continue;\n const type = event.type.slice(GRAPH_PREFIX.length);\n if (type === 'run-started') continue;\n state = compiled.reduce(\n state,\n STANDARD_EVENT_TYPES.has(type)\n ? validateStandardEvent(event, type, nodeIds)\n : { type, version: event.version, payload: event.payload },\n );\n }\n\n const rooms = compiled.definition.value.data.communication?.rooms ?? [];\n const files = rooms.map((room) => ({\n roomId: room.id,\n path: join(directory, roomFilename(loaded.record.payload.definition.storage, input.runId, room.id)),\n content: state.messages\n .filter((message) => message.roomId === room.id)\n .map(renderMessage)\n .join(''),\n }));\n if (files.length === 0) return { revision, files: [] };\n\n await mkdir(directory, { recursive: true });\n for (const file of files) await replaceFile(file.path, file.content);\n return {\n revision,\n files: files.map(({ roomId, path }) => ({ roomId, path })),\n };\n}\n","/**\n * The single-repository Git worktree provider (roadmap D12): the one safe\n * Git default.\n *\n * Capture and verify are read-only — status, head, and content digests.\n * Fork validates the anchor first; a changed anchor fails before a branch\n * or worktree exists. A successful fork writes exactly two things into\n * the bound repository's metadata — a new ref at the anchored revision\n * and a worktree registration — plus the worktree directory itself at a\n * deterministic sibling path. The user's checkout, index, and dirty files\n * are untouched. The create order is fixed: ref first, then the worktree,\n * so a crash between the two leaves a detectable bare ref that cleanup\n * can remove or retry; a second fork of the same child id fails at the\n * existing ref or path instead of duplicating anything.\n *\n * The lease lives in private Git refs. Its complete JSON record is a Git blob.\n * Git's expected-object-id update makes publication, release, and recovery\n * change only the exact record they checked. Acquisition creates the one ref\n * with a complete blob, so a kill cannot publish a partial valid owner.\n */\n\nimport { createHash, randomUUID } from 'node:crypto';\nimport { realpath } from 'node:fs/promises';\nimport { basename, dirname, isAbsolute, join } from 'node:path';\n\nimport {\n captureGitWorkspaceSnapshot,\n gitRoot,\n workspaceFingerprint,\n} from '../core/git.js';\nimport type { JsonObject } from '../graph/value.js';\nimport {\n type AcquireResult,\n type ForkResult,\n type RecoverResult,\n type WorkspaceReleaseResult,\n type VerifyResult,\n type WorkspaceAnchor,\n type WorkspaceDrift,\n type WorkspaceProvider,\n} from './provider.js';\nimport { processText, runRuntimeProcess } from '../core/process.js';\n\ninterface LeaseFile {\n readonly owner: string;\n readonly scope: string;\n readonly anchorDigest: string;\n readonly token: string;\n readonly createdAtMs: number;\n readonly complete: boolean;\n}\n\ninterface StoredLease {\n readonly oid: string;\n readonly record: LeaseFile | 'corrupt';\n}\n\ntype LeaseRead = StoredLease | 'missing';\n\nconst MAX_INCOMPLETE_LEASE_AGE_MS = 30_000;\nconst ACTIVE_LEASE_REF = 'refs/obversa/workspace-lease/v1/active';\n\nasync function git(\n cwd: string,\n args: readonly string[],\n input?: string,\n): Promise<{ stdout: string; stderr: string; exitCode: number }> {\n const result = await runRuntimeProcess({\n executable: 'git',\n args,\n cwd,\n ...(input === undefined ? {} : { stdin: input }),\n });\n return {\n stdout: processText(result.stdout),\n stderr: processText(result.stderr),\n exitCode: result.exitCode ?? 1,\n };\n}\n\nfunction anchorDigest(anchor: WorkspaceAnchor): string {\n return createHash('sha256')\n .update(`${anchor.repositoryId}\\0${anchor.root}\\0${anchor.head}\\0${anchor.fingerprint}\\0${JSON.stringify(anchor.files)}`)\n .digest('hex');\n}\n\nasync function repositoryIdentity(root: string): Promise<string> {\n const common = await git(root, ['rev-parse', '--git-common-dir']);\n if (common.exitCode !== 0) throw new Error('git common dir unavailable');\n const path = common.stdout.trim();\n return realpath(isAbsolute(path) ? path : join(root, path));\n}\n\nfunction parseLease(text: string): LeaseFile | 'corrupt' {\n try {\n const parsed: unknown = JSON.parse(text);\n if (typeof parsed !== 'object' || parsed === null) return 'corrupt';\n const record = parsed as Record<string, unknown>;\n if (\n typeof record.owner !== 'string'\n || typeof record.scope !== 'string'\n || typeof record.anchorDigest !== 'string'\n || typeof record.token !== 'string'\n || typeof record.createdAtMs !== 'number'\n || !Number.isFinite(record.createdAtMs)\n || (record.complete !== true && record.complete !== false)\n ) {\n return 'corrupt';\n }\n return parsed as LeaseFile;\n } catch {\n return 'corrupt';\n }\n}\n\nasync function readLease(root: string): Promise<LeaseRead> {\n const resolved = await git(root, ['rev-parse', '--verify', '--quiet', ACTIVE_LEASE_REF]);\n if (resolved.exitCode === 1) return 'missing';\n if (resolved.exitCode !== 0) {\n throw new Error(`Git could not read the workspace lease ref: ${resolved.stderr.trim()}`);\n }\n const oid = resolved.stdout.trim();\n const blob = await git(root, ['cat-file', 'blob', oid]);\n return {\n oid,\n record: blob.exitCode === 0 ? parseLease(blob.stdout) : 'corrupt',\n };\n}\n\nasync function writeLeaseBlob(root: string, record: LeaseFile): Promise<string> {\n const stored = await git(\n root,\n ['hash-object', '-w', '--no-filters', '--stdin'],\n `${JSON.stringify(record)}\\n`,\n );\n const oid = stored.stdout.trim();\n if (stored.exitCode !== 0 || !/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(oid)) {\n throw new Error(`Git could not store the workspace lease: ${stored.stderr.trim()}`);\n }\n return oid;\n}\n\nasync function createLeaseRef(root: string, oid: string): Promise<boolean> {\n const updated = await git(root, [\n 'update-ref',\n '--no-deref',\n ACTIVE_LEASE_REF,\n oid,\n '0'.repeat(oid.length),\n ]);\n if (updated.exitCode === 0) return true;\n const current = await readLease(root);\n return current !== 'missing' && current.oid === oid;\n}\n\nasync function deleteLeaseRef(root: string, expectedOid: string): Promise<boolean> {\n const updated = await git(root, [\n 'update-ref',\n '--no-deref',\n '-d',\n ACTIVE_LEASE_REF,\n expectedOid,\n ]);\n if (updated.exitCode === 0) return true;\n const current = await readLease(root);\n if (current === 'missing' || current.oid !== expectedOid) return false;\n throw new Error(`Git could not remove the workspace lease ref: ${updated.stderr.trim()}`);\n}\n\nfunction filesDrift(\n before: readonly JsonObject[],\n after: readonly JsonObject[],\n): readonly string[] {\n const pathOf = (file: JsonObject): string =>\n (file as { path?: unknown }).path as string;\n const stateOf = (file: JsonObject): string => JSON.stringify(file);\n const beforeByPath = new Map(before.map((file) => [pathOf(file), file]));\n const afterByPath = new Map(after.map((file) => [pathOf(file), file]));\n const changed: string[] = [];\n for (const [path, file] of beforeByPath) {\n const current = afterByPath.get(path);\n if (current === undefined || stateOf(current) !== stateOf(file)) {\n changed.push(path);\n }\n }\n for (const path of afterByPath.keys()) {\n if (!beforeByPath.has(path)) changed.push(path);\n }\n return changed.sort();\n}\n\n/** Create the single-repository Git worktree provider for one checkout. */\nexport function createGitWorktreeProvider(\n options: { readonly repositoryPath: string; readonly signal?: AbortSignal },\n): WorkspaceProvider {\n const repositoryPath = options.repositoryPath;\n\n const capture = async (scope?: readonly string[]): Promise<WorkspaceAnchor> => {\n const root = await gitRoot({ cwd: repositoryPath });\n if (!root) throw new Error(`\"${repositoryPath}\" is not a git repository`);\n const opts = {\n cwd: repositoryPath,\n signal: options.signal,\n ...(scope === undefined ? {} : { includePaths: [...scope] }),\n };\n const [snapshot, fingerprint] = await Promise.all([\n captureGitWorkspaceSnapshot(opts),\n workspaceFingerprint(opts),\n ]);\n if (fingerprint === undefined) throw new Error('workspace fingerprint unavailable');\n return Object.freeze({\n schemaVersion: 1 as const,\n root: snapshot.root,\n repositoryId: await repositoryIdentity(root),\n head: snapshot.head ?? '',\n fingerprint,\n scope: scope === undefined ? null : [...scope],\n // Frozen plain JSON from the snapshot; typed as objects for the\n // record-shaped anchor.\n files: snapshot.files as unknown as readonly JsonObject[],\n });\n };\n\n const verify = async (anchor: WorkspaceAnchor): Promise<VerifyResult> => {\n const current = await capture(anchor.scope ?? undefined);\n const drift: WorkspaceDrift[] = [];\n if (current.repositoryId !== anchor.repositoryId) {\n drift.push({ kind: 'repository', currentRepositoryId: current.repositoryId });\n }\n if (current.head !== anchor.head) {\n drift.push({ kind: 'head', currentHead: current.head });\n }\n const changedPaths = filesDrift(anchor.files, current.files);\n if (changedPaths.length > 0) {\n drift.push({ kind: 'files', changedPaths });\n }\n if (drift.length === 0) return { ok: true };\n return { ok: false, drift: Object.freeze(drift) };\n };\n\n const worktreeParent = (root: string): string =>\n join(dirname(root), `${basename(root)}.obversa-worktrees`);\n\n const fork = async (\n anchor: WorkspaceAnchor,\n childId: string,\n leaseToken: string,\n ): Promise<ForkResult> => {\n if (childId.length > 128 || !/^[A-Za-z0-9][A-Za-z0-9_-]*$/u.test(childId)) {\n return { ok: false, kind: 'invalid-child' };\n }\n const root = await gitRoot({ cwd: repositoryPath });\n if (!root) throw new Error(`\"${repositoryPath}\" is not a git repository`);\n const storedLease = await readLease(root);\n if (\n storedLease === 'missing'\n || storedLease.record === 'corrupt'\n || storedLease.record.complete !== true\n ) {\n return {\n ok: false,\n kind: 'unleased',\n reason: 'fork requires a lease held for this anchor',\n };\n }\n if (\n storedLease.record.token !== leaseToken\n || storedLease.record.anchorDigest !== anchorDigest(anchor)\n ) {\n return {\n ok: false,\n kind: 'unleased',\n reason: 'the held lease belongs to another owner or anchor',\n };\n }\n const verification = await verify(anchor);\n if (!verification.ok) {\n return {\n ok: false,\n kind: 'anchor-changed',\n drift: verification.drift,\n };\n }\n if (anchor.head === '') return { ok: false, kind: 'no-revision' };\n const branchName = `obversa/${childId}`;\n const branchRef = `refs/heads/${branchName}`;\n const worktreePath = join(worktreeParent(root), childId);\n\n const branch = await git(root, [\n 'update-ref',\n '--no-deref',\n branchRef,\n anchor.head,\n '0'.repeat(anchor.head.length),\n ]);\n if (branch.exitCode !== 0) {\n // A bare ref from an earlier incomplete fork at the same anchored\n // revision is finished by this retry; anything else is a collision.\n const exact = await git(root, ['show-ref', '--verify', '--quiet', branchRef]);\n const existing = exact.exitCode === 0\n ? await git(root, ['show-ref', '--verify', '--hash', branchRef])\n : exact;\n if (existing.exitCode !== 0 || existing.stdout.trim() !== anchor.head) {\n return { ok: false, kind: 'exists', branchRef, worktreePath };\n }\n }\n const added = await git(root, ['worktree', 'add', worktreePath, branchName]);\n if (added.exitCode !== 0) {\n const worktreeExists = await git(root, ['worktree', 'list', '--porcelain']);\n if (worktreeExists.stdout.includes(worktreePath)) {\n return { ok: false, kind: 'exists', branchRef, worktreePath };\n }\n return { ok: false, kind: 'incomplete', branchRef, worktreePath };\n }\n const head = await git(worktreePath, ['rev-parse', 'HEAD']);\n if (head.stdout.trim() !== anchor.head) {\n throw new Error('forked worktree does not start at the anchored revision');\n }\n const child = await createGitWorktreeProvider({\n repositoryPath: worktreePath,\n signal: options.signal,\n }).capture();\n return { ok: true, branchRef, worktreePath, anchor: child };\n };\n\n const leaseRoot = async (): Promise<string> => {\n const root = await gitRoot({ cwd: repositoryPath });\n if (!root) throw new Error(`\"${repositoryPath}\" is not a git repository`);\n return root;\n };\n\n const acquireLease = async (\n owner: string,\n scope: string,\n anchor: WorkspaceAnchor,\n ): Promise<AcquireResult> => {\n const root = await leaseRoot();\n const existing = await readLease(root);\n if (existing !== 'missing') {\n const record = existing.record;\n if (record === 'corrupt') {\n return {\n ok: false,\n kind: 'incomplete',\n reason: 'the lease ref does not contain a readable record; run recoverIncompleteLease',\n };\n }\n if (record.complete !== true) {\n return {\n ok: false,\n kind: 'incomplete',\n reason: 'the previous acquisition did not finish; run recoverIncompleteLease after its age bound',\n };\n }\n return { ok: false, kind: 'held', owner: record.owner };\n }\n const token = randomUUID();\n const record: LeaseFile = {\n owner,\n scope,\n anchorDigest: anchorDigest(anchor),\n token,\n createdAtMs: Date.now(),\n complete: true,\n };\n const oid = await writeLeaseBlob(root, record);\n if (!(await createLeaseRef(root, oid))) {\n const winner = await readLease(root);\n if (winner !== 'missing' && winner.record !== 'corrupt' && winner.record.complete) {\n return { ok: false, kind: 'held', owner: winner.record.owner };\n }\n return {\n ok: false,\n kind: 'incomplete',\n reason: winner === 'missing'\n ? 'another acquisition took and released the lease; retry acquisition'\n : 'another acquisition left an incomplete lease; run recoverIncompleteLease',\n };\n }\n return { ok: true, token, owner, scope, anchorDigest: record.anchorDigest };\n };\n\n const releaseLease = async (token: string): Promise<WorkspaceReleaseResult> => {\n const root = await leaseRoot();\n const existing = await readLease(root);\n if (existing === 'missing') return { ok: false, kind: 'unknown-token' };\n if (existing.record === 'corrupt' || !existing.record.complete) {\n return { ok: false, kind: 'incomplete' };\n }\n if (existing.record.token !== token) return { ok: false, kind: 'not-owner' };\n if (await deleteLeaseRef(root, existing.oid)) return { ok: true };\n\n const winner = await readLease(root);\n if (winner === 'missing') return { ok: false, kind: 'unknown-token' };\n if (winner.record === 'corrupt' || !winner.record.complete) {\n return { ok: false, kind: 'incomplete' };\n }\n return { ok: false, kind: 'not-owner' };\n };\n\n const recoverIncompleteLease = async (): Promise<RecoverResult> => {\n const root = await leaseRoot();\n const existing = await readLease(root);\n if (existing === 'missing') return { ok: false, kind: 'none' };\n if (\n existing.record !== 'corrupt'\n && (\n existing.record.complete\n || Date.now() - existing.record.createdAtMs < MAX_INCOMPLETE_LEASE_AGE_MS\n )\n ) {\n return { ok: false, kind: 'live' };\n }\n if (await deleteLeaseRef(root, existing.oid)) return { ok: true };\n\n const winner = await readLease(root);\n if (winner === 'missing') return { ok: false, kind: 'none' };\n return { ok: false, kind: 'live' };\n };\n\n return Object.freeze({\n capture,\n verify,\n fork,\n acquireLease,\n releaseLease,\n recoverIncompleteLease,\n });\n}\n","/**\n * `pipeline(name, stages)` is declarative ordered stages as sugar over `dag()`: the\n * Job graph is the pipeline. Each stage becomes a dag node that `needs` the stage\n * before it; an explicit `needs` replaces that default, so fan-out/fan-in is still\n * just edges. All dag semantics apply unchanged: a skipped stage (unmet `when`) counts\n * green so the chain continues, and an optional stage's failure neither fails the\n * pipeline nor blocks the next stage (its consumers must tolerate its artifacts being\n * absent).\n */\n\nimport type {\n ConditionInput,\n DagConfig,\n DagNode,\n Job,\n JobMeta,\n} from './types.js';\nimport { dag } from './dag.js';\nimport { jobMeta, type NodeMeta } from './describe.js';\nimport { LoopError } from './errors.js';\n\nexport interface PipelineStage {\n name: string;\n job: Job;\n /** Gate (one or many): when unmet the stage is skipped, not failed. */\n when?: ConditionInput;\n /** A failure here does not fail the pipeline, and does not block later stages. */\n optional?: boolean;\n /**\n * Explicit dependencies, replacing the default `[previous stage]` entirely\n * (`[]` detaches the stage). This is how a linear pipeline grows fan-out\n * (two stages needing the same producer) and fan-in (one stage needing both).\n */\n needs?: string[];\n /** Per-stage isolation override (dag's per-node `isolate`). */\n isolate?: boolean;\n /** Kickback allowlist for this stage (dag's per-node `acceptsKickbackTo`). */\n acceptsKickbackTo?: string[];\n}\n\n/** Ordered named stages, auto-chained: stage i needs stage i-1. Sugar over `dag`. */\nexport function pipeline(\n name: string,\n stages: PipelineStage[],\n opts?: Omit<DagConfig, 'name' | 'nodes'>,\n): Job {\n if (stages.length === 0)\n throw new LoopError({\n code: 'CONFIG',\n message: `pipeline \"${name}\" requires at least one stage`,\n });\n // Null-prototype so every stage name lands as an own key (on a plain object\n // a name like \"__proto__\" would hit the Object.prototype accessor and the\n // stage would silently vanish into a 0-node, false-green dag), and so the\n // `in` duplicate guard sees only own keys. Own-key order is what the meta\n // and renderers replay; JS sorts integer-like keys first, so a stage named\n // \"1\" displays out of declared order (execution only reads the edges).\n const nodes: Record<string, DagNode> = Object.create(null);\n stages.forEach((stage, i) => {\n if (stage.name in nodes)\n throw new LoopError({\n code: 'CONFIG',\n message: `pipeline \"${name}\": duplicate stage name \"${stage.name}\"`,\n });\n nodes[stage.name] = {\n job: stage.job,\n needs: stage.needs ?? (i > 0 ? [stages[i - 1]!.name] : []),\n when: stage.when,\n optional: stage.optional,\n isolate: stage.isolate,\n acceptsKickbackTo: stage.acceptsKickbackTo,\n };\n });\n // A plain dag underneath: meta stays kind:'dag', so renderPlan and host views\n // read a pipeline like any other dag.\n return dag({ name, nodes, ...opts });\n}\n\n/**\n * Render a `kind:'dag'` job's stages as a GitHub-markdown table (one row per\n * node, in the meta's node order). Accepts the `Job` itself or its `JobMeta`.\n */\nexport function renderPipelineTable(source: Job | JobMeta): string {\n const meta = typeof source === 'function' ? jobMeta(source) : source;\n if (!meta || meta.kind !== 'dag')\n throw new LoopError({\n code: 'CONFIG',\n message: `renderPipelineTable requires a dag-shaped job (got ${meta ? `kind \"${meta.kind}\"` : 'no meta'})`,\n });\n const nodes = (meta.nodes as NodeMeta[] | undefined) ?? [];\n const rows = nodes.map((n, i) => {\n const needs = n.needs?.length ? n.needs.join(', ') : '—';\n const when = n.when?.length ? n.when.join(', ') : '—';\n const optional = n.optional ? 'yes' : '—';\n return `| ${i + 1} | ${n.name} | ${needs} | ${when} | ${optional} |`;\n });\n return [\n '| # | stage | needs | when | optional |',\n '| --- | --- | --- | --- | --- |',\n ...rows,\n ].join('\\n');\n}\n","/**\n * Tournament runs alternative approaches to the same task. Where a DAG fans out\n * disjoint work and lands all of it, a tournament runs N candidates, each in its own\n * isolated worktree, judges them, lands only the winner and discards the rest.\n *\n * It composes over the worktree primitives, no new machinery. Only one branch is ever\n * merged (the winner, off an unchanged HEAD), so there is no conflict to resolve.\n */\n\nimport pLimit from 'p-limit';\n\nimport type { Job, JobContext, Outcome, Workspace } from './types.js';\nimport { childContext } from './context.js';\nimport {\n isRepo,\n addWorktree,\n removeWorktree,\n deleteBranch,\n mergeBranch,\n stageAll,\n commit,\n} from './git.js';\nimport { LoopError } from './errors.js';\n\nfunction slug(s: string): string {\n return s.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/(^-+|-+$)/g, '') || 'x';\n}\n\nexport interface TournamentConfig {\n name: string;\n /** Candidates to run. */\n n: number;\n /** Build the candidate job for attempt `i` (0-based): same task, varied angle. */\n candidate: (i: number) => Job;\n /**\n * Score a finished candidate (higher wins). Run against the candidate's own\n * context, so it can read the candidate's workspace. The highest-scoring\n * passing candidate lands back; ties break to the earliest.\n */\n judge: (outcome: Outcome, ctx: JobContext) => number | Promise<number>;\n /** Max candidates running at once. Default `n`. */\n concurrency?: number;\n}\n\ninterface Attempt {\n i: number;\n branch: string;\n dir: string;\n outcome: Outcome;\n score: number;\n}\n\nexport function tournament(config: TournamentConfig): Job {\n if (!config.name)\n throw new LoopError({\n code: 'CONFIG',\n message: 'tournament() requires a non-empty name',\n });\n if (config.n < 1)\n throw new LoopError({ code: 'CONFIG', message: 'tournament() needs n >= 1' });\n\n return async (parent: JobContext): Promise<Outcome> => {\n const path = [...parent.path, config.name];\n const base = parent.workspace;\n parent.emit({\n kind: 'job:start',\n ts: Date.now(),\n path,\n label: config.name,\n timeoutMs: parent.timeoutMs,\n });\n\n if (!(await isRepo({ cwd: base.dir, signal: parent.signal }))) {\n const error = new LoopError({\n code: 'CONFIG',\n message: `tournament \"${config.name}\" requires a git repository (cwd: ${base.dir})`,\n });\n return { status: 'fail', summary: error.message, error };\n }\n\n const limit = pLimit(config.concurrency ?? config.n);\n const attempts = await Promise.all(\n Array.from({ length: config.n }, (_, i) =>\n limit(async (): Promise<Attempt> => {\n const branch = `lines/${slug(config.name)}-cand-${i}`;\n const wt = await addWorktree(base.dir, {\n branch,\n base: 'HEAD',\n signal: parent.signal,\n });\n const ws: Workspace = { dir: wt.dir, branch };\n try {\n const ctx = childContext(parent, {\n depth: parent.depth + 1,\n path: [...path, `#${i}`],\n workspace: ws,\n });\n const outcome = await config.candidate(i)(ctx);\n // Capture the candidate's work onto its branch so the winner can land.\n await stageAll({ cwd: wt.dir, signal: parent.signal });\n await commit(\n {\n subject: `${config.name}: candidate ${i}`,\n },\n { cwd: wt.dir, signal: parent.signal },\n );\n const score =\n outcome.status === 'pass' ? await config.judge(outcome, ctx) : -1;\n parent.log(`${config.name} candidate ${i}: score ${score}`);\n return { i, branch, dir: wt.dir, outcome, score };\n } catch (e) {\n const error = LoopError.from(e, { code: 'BODY', path });\n return {\n i,\n branch,\n dir: wt.dir,\n outcome: { status: 'fail', summary: error.message, error },\n score: -1,\n };\n }\n }),\n ),\n );\n\n // A paused candidate is a deliberate halt, not a loss. Mirror DAG precedence\n // and propagate the pause instead of flattening it into \"no candidate passed\".\n const paused = attempts.find((a) => a.outcome.status === 'paused');\n\n // Winner: highest score among passing candidates; ties to the earliest.\n const winner = paused\n ? undefined\n : [...attempts]\n .filter((a) => a.outcome.status === 'pass' && a.score >= 0)\n .sort((a, b) => b.score - a.score || a.i - b.i)[0];\n\n let landed = false;\n if (winner) {\n const merged = await mergeBranch(base.dir, winner.branch, {\n signal: parent.signal,\n message: `${config.name}: land candidate ${winner.i} (score ${winner.score})`,\n });\n landed = merged.ok;\n }\n\n // Tear down every worktree; delete loser branches and the merged winner.\n for (const a of attempts) {\n await removeWorktree(base.dir, a.dir, { signal: parent.signal }).catch(\n () => {},\n );\n if (a !== winner || landed)\n await deleteBranch(base.dir, a.branch, {\n signal: parent.signal,\n }).catch(() => {});\n }\n\n const outcome: Outcome = paused\n ? { ...paused.outcome }\n : winner\n ? {\n status: landed ? 'pass' : 'fail',\n confidence: winner.outcome.confidence,\n summary: landed\n ? `tournament \"${config.name}\": landed candidate ${winner.i} (score ${winner.score}) of ${config.n}`\n : `tournament \"${config.name}\": winner ${winner.i} failed to land`,\n data: {\n winner: winner.i,\n score: winner.score,\n scores: attempts.map((a) => ({ i: a.i, score: a.score })),\n },\n }\n : {\n status: 'fail',\n summary: `tournament \"${config.name}\": no candidate passed`,\n data: { scores: attempts.map((a) => ({ i: a.i, score: a.score })) },\n };\n parent.emit({ kind: 'job:end', ts: Date.now(), path, label: config.name, outcome });\n return outcome;\n };\n}\n","/**\n * `isolated(job)` runs any Job in its own git worktree on a fork branch, and lands\n * its work back into the parent branch on pass. The concurrency boundary as a Job\n * wrapper, not a node type.\n *\n * dag nodes can already fork a worktree (`isolation: 'worktree'`), but that only\n * works for predeclared nodes. A Tend loop dispatches dynamically: it discovers each\n * ticket at runtime and routes it to the right shape of sub-loop, and each dispatch\n * wants its own isolated worktree so parallel tickets never collide on files or the\n * index. `isolated()` makes that composable: wrap the dispatched Job.\n *\n * On pass: any uncommitted remainder is committed in the worktree, then the fork\n * branch merges back (`--no-ff`). Land-back merges are serialised across all\n * `isolated()` jobs in the process, so concurrent dispatch cannot race the parent\n * index/HEAD. A conflict fails, or is synthesised when asked. The worktree\n * is always removed; a cleanly-merged fork branch is deleted. A non-repo workspace\n * degrades to running in place (a warning, no isolation).\n *\n * NOTE: dag's own runNodeJob holds parallel worktree/land-back logic (plus per-team\n * environments). The two should be unified (dag delegating to `isolated()`) once\n * `isolated()` grows environment support; until then the land-back logic lives in\n * both deliberately, to avoid destabilising the dag path.\n */\n\nimport type { Job, Workspace } from './types.js';\nimport type { ReasoningRecorder } from '@obversa/api';\n\nimport { childContext } from './context.js';\nimport { LoopError } from './errors.js';\nimport {\n addWorktree,\n removeWorktree,\n deleteBranch,\n mergeBranch,\n stageAll,\n commit,\n hasStagedChanges,\n headSha,\n isRepo,\n} from './git.js';\nimport { mergeLock, mergeSynthesis } from './merge.js';\n\nconst slug = (s: string) =>\n s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'job';\n\nlet forkSeq = 0;\n\nexport interface IsolatedOptions {\n /** Label for the fork branch and the child path. Default 'isolated'. */\n label?: string;\n /** On a land-back conflict: 'fail' (default) or 'synthesize'. */\n onConflict?: 'fail' | 'synthesize';\n /**\n * A record of why this stage's change exists. It watches the stage's own\n * events and, when the stage passes with something to commit, supplies the\n * message for the commit that carries the change. A stage that changed\n * nothing produces no commit, so it is never asked for one.\n */\n record?: ReasoningRecorder;\n}\n\n/** Wrap a Job so it runs in an isolated worktree and lands back on pass. */\nexport function isolated(job: Job, opts: IsolatedOptions = {}): Job {\n const label = opts.label ?? 'isolated';\n return async (parent) => {\n const base = parent.workspace;\n if (!(await isRepo({ cwd: base.dir, signal: parent.signal }))) {\n // A stage that asked to record its reasoning cannot have it: there is\n // no commit to carry it. Running anyway would drop the opt-in in\n // silence, which is the one outcome the ruling forbids.\n if (opts.record) {\n const message = `isolated(\"${label}\") cannot record its reasoning: ${base.dir} is not a git repository`;\n return {\n status: 'fail',\n summary: message,\n error: new LoopError({ code: 'CONFIG', message, path: [...parent.path, label] }),\n };\n }\n parent.log(\n `isolated(\"${label}\") requested a worktree but ${base.dir} is not a git repo; running in the shared workspace`,\n 'warn',\n );\n return job(parent);\n }\n\n const branch = `lines/${slug(label)}-${(forkSeq += 1)}`;\n const wt = await addWorktree(base.dir, {\n branch,\n base: 'HEAD',\n signal: parent.signal,\n });\n // Where the fork started, so a job that commits its own work can be told\n // apart from one that left its changes for this wrapper to commit.\n const startSha = await headSha({ cwd: wt.dir, signal: parent.signal });\n const wtWs: Workspace = { dir: wt.dir, branch };\n try {\n const ctx = childContext(parent, {\n workspace: wtWs,\n depth: parent.depth + 1,\n path: [...parent.path, label],\n });\n const outcome = await job(ctx);\n if (outcome.status === 'pass') {\n // Capture anything the job left uncommitted, then land it back.\n await stageAll({ cwd: wt.dir, signal: parent.signal });\n // The reasoning rides the commit that carries the change: this one.\n // It is asked for only when there is something staged, so a stage\n // that changed nothing writes neither a commit nor a body.\n const staged = await hasStagedChanges({ cwd: wt.dir, signal: parent.signal });\n // A record attaches to the commit this wrapper makes, so any commit the\n // job made itself carries no reasoning and must stop the stage. The\n // question is whether HEAD moved, never whether anything is staged: a\n // job that commits one file and leaves another has both a commit of its\n // own and something staged, and reading `staged` would let that commit\n // merge back unexplained while the body landed on the leftover.\n if (opts.record) {\n const head = await headSha({ cwd: wt.dir, signal: parent.signal });\n if (head !== undefined && head !== startSha) {\n const message = `isolated(\"${label}\") cannot record its reasoning: the stage committed its own work, `\n + 'and a record attaches to the commit this wrapper makes';\n return {\n status: 'fail',\n summary: message,\n error: new LoopError({ code: 'BODY', message, path: [...parent.path, label] }),\n };\n }\n }\n const message = opts.record && staged\n ? await opts.record.message({\n status: outcome.status,\n ...(outcome.summary === undefined ? {} : { summary: outcome.summary }),\n })\n : undefined;\n const sha = await commit(\n message ?? { subject: `chore(${slug(label)}): worktree changes` },\n { cwd: wt.dir, signal: parent.signal },\n );\n const merged = await mergeLock(() =>\n mergeBranch(base.dir, branch, {\n signal: parent.signal,\n message: `merge ${branch}`,\n }),\n );\n if (!merged.ok) {\n if (opts.onConflict !== 'synthesize') {\n return {\n status: 'fail',\n summary: `isolated(\"${label}\") landed with a merge conflict; needs resolution`,\n error: new LoopError({\n code: 'BODY',\n message: `merge conflict landing isolated(\"${label}\")`,\n path: [...parent.path, label],\n }),\n };\n }\n try {\n await mergeLock(() =>\n mergeSynthesis(parent, {\n branch,\n message: `merge: ${branch} (synthesis)`,\n }),\n );\n } catch (e) {\n const error = LoopError.from(e, { code: 'BODY', path: [...parent.path, label] });\n return {\n status: 'fail',\n summary: `isolated(\"${label}\") merge synthesis failed: ${error.message}`,\n error,\n };\n }\n }\n // Told the work has landed, the recorder starts the next iteration\n // empty; never told, it keeps the turns for another attempt. This is\n // after the merge, not after the fork commit: a land-back that fails\n // leaves the change outside the parent, and a recorder cleared at the\n // fork commit would compose the retry from nothing.\n if (opts.record && message && sha !== undefined) opts.record.committed(sha);\n await deleteBranch(base.dir, branch, { signal: parent.signal }).catch(() => {});\n }\n return outcome;\n } finally {\n await removeWorktree(base.dir, wt.dir, { signal: parent.signal }).catch(() => {});\n }\n };\n}\n","import type { CallbackGateDefinition } from '../callback/gate.js';\nimport { createCallbackGate } from '../callback/gate.js';\nimport type { EngineRef } from '../engines/engine.js';\nimport { childContext } from './context.js';\nimport { setMeta } from './describe.js';\nimport { LoopError } from './errors.js';\nimport { agentJob } from './job.js';\nimport { isolated } from './isolated.js';\nimport { parallel } from './dag.js';\nimport { reviewPanel, type ReviewPanelConfig } from './feedback.js';\nimport type { Job, Outcome } from './types.js';\n\nexport interface TeamAgent {\n name: string;\n role: string;\n brief: string;\n engine: EngineRef;\n}\n\nexport type TeamReview =\n | { kind: 'panel'; config: ReviewPanelConfig }\n | { kind: 'callback'; definition: CallbackGateDefinition };\n\nexport interface TeamConfig {\n task: string;\n agents: readonly TeamAgent[];\n review?: TeamReview;\n}\n\nexport interface TeamAgentResult {\n name: string;\n role: string;\n outcome: Outcome;\n}\n\nexport interface TeamResult {\n task: string;\n agents: readonly TeamAgentResult[];\n integrated: boolean;\n review?: Outcome;\n}\n\nfunction requireText(value: unknown, field: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new LoopError({\n code: 'CONFIG',\n message: `team() requires a non-empty ${field}`,\n });\n }\n return value;\n}\n\nfunction validateConfig(config: TeamConfig): void {\n requireText(config.task, 'task');\n if (!Array.isArray(config.agents) || config.agents.length === 0) {\n throw new LoopError({\n code: 'CONFIG',\n message: 'team() requires at least one agent',\n });\n }\n const names = new Set<string>();\n for (const agent of config.agents) {\n const name = requireText(agent.name, 'agent name');\n if (names.has(name)) {\n throw new LoopError({\n code: 'CONFIG',\n message: `team() agent name is duplicated: ${name}`,\n });\n }\n names.add(name);\n requireText(agent.role, `role for ${name}`);\n requireText(agent.brief, `brief for ${name}`);\n if (agent.engine === undefined || agent.engine === null) {\n throw new LoopError({\n code: 'CONFIG',\n message: `team() requires an engine for ${name}`,\n });\n }\n }\n}\n\nfunction promptFor(task: string, agent: TeamAgent): string {\n return [\n `Task: ${task}`,\n `Role: ${agent.role}`,\n `Brief: ${agent.brief}`,\n ].join('\\n\\n');\n}\n\nfunction memberResults(\n agents: readonly TeamAgent[],\n outcome: Outcome,\n): TeamAgentResult[] {\n const results = (outcome.data ?? {}) as Record<string, Outcome>;\n return agents.map((agent, index) => ({\n name: agent.name,\n role: agent.role,\n outcome: results[`task-${index}`] ?? {\n status: 'fail',\n summary: `team member ${agent.name} returned no outcome`,\n },\n }));\n}\n\nfunction teamMeta(config: TeamConfig) {\n return {\n kind: 'team',\n name: 'team',\n agents: config.agents.map(({ name, role }) => ({ name, role })),\n ...(config.review ? { review: config.review.kind } : {}),\n };\n}\n\nexport function team(config: TeamConfig): Job {\n validateConfig(config);\n const panel = config.review?.kind === 'panel' ? reviewPanel(config.review.config) : undefined;\n const callback = config.review?.kind === 'callback' ? createCallbackGate(config.review.definition) : undefined;\n const job: Job = async (ctx) => {\n const memberJobs = config.agents.map((agent) =>\n isolated(\n agentJob({\n label: agent.name,\n engine: agent.engine,\n prompt: promptFor(config.task, agent),\n }),\n {\n label: `team-${agent.name}`,\n },\n ),\n );\n const members = await parallel('team-members', memberJobs, memberJobs.length)(ctx);\n const agents = memberResults(config.agents, members);\n const result: TeamResult = {\n task: config.task,\n agents,\n integrated: members.status === 'pass',\n };\n\n if (members.status !== 'pass') {\n return { ...members, data: result };\n }\n\n if (panel) {\n const reviewContext = childContext(ctx, {\n depth: ctx.depth + 1,\n path: [...ctx.path, 'team-review'],\n lastOutcome: { ...members, data: result },\n lastReview: ctx.lastReview,\n lastGate: ctx.lastGate,\n });\n const review = await panel(reviewContext);\n const reviewed: TeamResult = { ...result, review };\n if (review.status !== 'pass') return { ...review, data: reviewed };\n return { ...members, data: reviewed };\n }\n\n if (callback) {\n const request = callback;\n const review: Outcome = {\n status: 'paused',\n summary: `Team review \"${request.gateId}\" is waiting for a callback`,\n data: request,\n };\n return { ...review, data: { ...result, review } };\n }\n\n return { ...members, data: result };\n };\n return setMeta(job, teamMeta(config));\n}\n","/**\n * `assertGraph(job, shape)` — turn `jobMeta` introspection into test\n * assertions. The shape is a PARTIAL expectation: only asserted fields are\n * compared, and extra actual nodes are allowed unless `exactNodes: true`.\n * On mismatch it throws a plain `Error` whose message carries the JSON path\n * to the mismatch (e.g. `nodes[build].needs`) plus expected vs actual — the\n * message IS the API (vitest surfaces it verbatim).\n */\n\nimport type { Job, JobMeta } from './types.js';\nimport { jobMeta, type NodeMeta } from './describe.js';\nimport { LoopError } from './errors.js';\n\nexport interface GraphNodeShape {\n name: string;\n needs?: string | string[];\n desc?: string;\n gate?: string;\n optional?: boolean;\n /** A boolean meaning \"a `when` gate exists\" — the meta stores condition\n * labels, so this is a presence check, not label equality. */\n when?: boolean;\n isolate?: boolean;\n /** Asserted against the node's nested job meta (`node.job.kind`). */\n kind?: string;\n}\n\nexport interface GraphShape {\n kind?: string;\n name?: string;\n nodes?: GraphNodeShape[];\n /** Fail when the actual node set has names beyond `nodes`. */\n exactNodes?: boolean;\n body?: GraphShape;\n [key: string]: unknown;\n}\n\nconst show = (v: unknown) => JSON.stringify(v) ?? 'undefined';\n\nfunction fail(path: string, expected: unknown, actual: unknown): never {\n throw new Error(\n `assertGraph: ${path || '(root)'}: expected ${show(expected)}, got ${show(actual)}`,\n );\n}\n\nfunction sameSet(a: string[], b: string[]): boolean {\n // True set comparison: a duplicated entry on either side must not mask a\n // difference (a false pass is an assertion helper's worst failure mode).\n const sa = new Set(a);\n const sb = new Set(b);\n return sa.size === sb.size && [...sa].every((x) => sb.has(x));\n}\n\nfunction checkNode(node: NodeMeta, exp: GraphNodeShape, path: string): void {\n const expectedNeeds = typeof exp.needs === 'string' ? [exp.needs] : exp.needs;\n if (expectedNeeds && !sameSet(expectedNeeds, node.needs ?? []))\n fail(`${path}.needs`, exp.needs, node.needs ?? []);\n if (exp.desc !== undefined && node.desc !== exp.desc)\n fail(`${path}.desc`, exp.desc, node.desc);\n if (exp.gate !== undefined && node.gate !== exp.gate)\n fail(`${path}.gate`, exp.gate, node.gate);\n if (exp.optional !== undefined && (node.optional ?? false) !== exp.optional)\n fail(`${path}.optional`, exp.optional, node.optional ?? false);\n if (exp.isolate !== undefined && (node.isolate ?? false) !== exp.isolate)\n fail(`${path}.isolate`, exp.isolate, node.isolate ?? false);\n if (exp.when !== undefined && !!node.when?.length !== exp.when)\n fail(`${path}.when`, exp.when, node.when ?? []);\n if (exp.kind !== undefined && node.job?.kind !== exp.kind)\n fail(`${path}.kind`, exp.kind, node.job?.kind);\n}\n\nfunction check(meta: JobMeta, shape: GraphShape, path: string): void {\n const at = (field: string) => (path ? `${path}.${field}` : field);\n for (const [key, expected] of Object.entries(shape)) {\n if (key === 'nodes' || key === 'body' || key === 'exactNodes') continue;\n if (expected === undefined) continue;\n if (meta[key] !== expected) fail(at(key), expected, meta[key]);\n }\n if (shape.nodes) {\n const actual = (meta.nodes as NodeMeta[] | undefined) ?? [];\n for (const exp of shape.nodes) {\n const node = actual.find((n) => n.name === exp.name);\n if (!node)\n fail(at(`nodes[${exp.name}]`), 'a node', `missing (actual nodes: ${show(actual.map((n) => n.name))})`);\n checkNode(node, exp, at(`nodes[${exp.name}]`));\n }\n if (shape.exactNodes === true) {\n const expectedNames = shape.nodes.map((n) => n.name);\n const actualNames = actual.map((n) => n.name);\n if (!sameSet(expectedNames, actualNames))\n fail(at('nodes'), expectedNames, actualNames);\n }\n }\n if (shape.body) {\n const body = meta.body as JobMeta | undefined;\n if (!body) fail(at('body'), shape.body.kind ?? 'a job meta', undefined);\n check(body, shape.body, at('body'));\n }\n}\n\n/** Assert a job's introspected shape matches a partial expectation. Accepts the\n * `Job` itself (resolved via `jobMeta`) or a `JobMeta` directly. */\nexport function assertGraph(job: Job | JobMeta, shape: GraphShape): void {\n const meta = typeof job === 'function' ? jobMeta(job) : job;\n if (!meta)\n throw new LoopError({\n code: 'CONFIG',\n message:\n 'assertGraph: the job is not introspectable (no registered meta — only builder-made jobs carry a shape)',\n });\n check(meta, shape, '');\n}\n","/**\n * `defineAgentFromMarkdown(path)` — load a Claude Code agent `.md` file into an\n * `AgentDef`. The markdown body becomes `system`; the frontmatter maps onto the\n * def's structured fields. The runtime has no yaml dependency, so the frontmatter\n * parser is hand-rolled and deliberately scoped. The FULL supported grammar:\n *\n * - Frontmatter is an optional leading block delimited by `---` lines (the\n * first line of the file opens it; the closing `---` must be unindented,\n * so an indented `---` inside a block scalar stays block content). No\n * closing `---` ⇒ no frontmatter; the whole file is the body.\n * - Scalar: `key: value`. Surrounding single/double quotes are stripped.\n * - Block scalar: `key: |` or `key: >`, then deeper-indented lines, each\n * trimmed. The block ends at the first non-indented, non-blank line; blank\n * lines inside it (followed by more indented content) are kept by `|` as\n * paragraph breaks and folded away by `>`. `|` joins the lines with\n * newlines; `>` folds them with spaces (YAML's basic folding, nothing\n * more).\n * - Sequence: `key:` alone, then `- item` lines (quotes stripped per item).\n * - `tools` specifically: a scalar value is ALSO split on commas into a list\n * (`tools: Read, Grep, Bash` ⇒ `['Read', 'Grep', 'Bash']`).\n *\n * Anything else (nested maps, anchors, multi-line flow, comments…) is out of\n * scope BY DESIGN, not a bug: Claude Code agent files use exactly this shape.\n * Unknown frontmatter keys are ignored (forward compat with CC's evolving\n * frontmatter), not errors.\n */\n\nimport { readFileSync } from 'node:fs';\nimport { basename, extname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { defineAgent, type AgentDef } from './agent.js';\nimport { LoopError } from './errors.js';\nimport { SUBAGENT_TOOLS } from '../engines/engine.js';\n\ntype Frontmatter = Record<string, string | string[]>;\n\nfunction unquote(value: string): string {\n if (\n value.length >= 2 &&\n ((value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n (value.startsWith('\"') && value.endsWith('\"')))\n )\n return value.slice(1, -1);\n return value;\n}\n\n/** Split a file into its frontmatter fields and its body. */\nfunction splitDocument(source: string): { fm: Frontmatter; body: string } {\n const lines = source.split(/\\r?\\n/);\n if (lines[0]?.trim() !== '---') return { fm: {}, body: source };\n // Only an unindented `---` closes the frontmatter: an indented one is\n // block-scalar content (YAML document markers are column-0 only).\n const close = lines.findIndex((l, i) => i > 0 && /^---\\s*$/.test(l));\n if (close < 0) return { fm: {}, body: source };\n return {\n fm: parseFrontmatter(lines.slice(1, close)),\n body: lines.slice(close + 1).join('\\n'),\n };\n}\n\nfunction parseFrontmatter(lines: string[]): Frontmatter {\n const out: Frontmatter = {};\n let i = 0;\n while (i < lines.length) {\n const m = /^(\\S[^:]*):(.*)$/.exec(lines[i]!);\n if (!m) {\n i++; // blank or out-of-grammar line: ignored\n continue;\n }\n const key = m[1]!.trim();\n const rest = m[2]!.trim();\n i++;\n if (rest === '|' || rest === '>') {\n const block: string[] = [];\n while (i < lines.length) {\n if (/^\\s+\\S/.test(lines[i]!)) {\n block.push(lines[i]!.trim());\n i++;\n continue;\n }\n // Blank lines belong to the block only when more indented content\n // follows (a multi-paragraph description); otherwise the block ends.\n let j = i;\n while (j < lines.length && lines[j]!.trim() === '') j++;\n if (j === i || j >= lines.length || !/^\\s+\\S/.test(lines[j]!)) break;\n while (i < j) {\n block.push('');\n i++;\n }\n }\n out[key] =\n rest === '|' ? block.join('\\n') : block.filter(Boolean).join(' ');\n } else if (rest === '') {\n const items: string[] = [];\n while (i < lines.length && /^\\s*-\\s+/.test(lines[i]!)) {\n items.push(unquote(lines[i]!.replace(/^\\s*-\\s+/, '').trim()));\n i++;\n }\n if (items.length) out[key] = items;\n } else {\n out[key] = unquote(rest);\n }\n }\n return out;\n}\n\n/** Sub-agent spawn tools, dropped from a markdown agent's allowlist (case-sensitive:\n * CC tool names are case-sensitive, so `task` would be a different tool). The set is\n * the engines' own `SUBAGENT_TOOLS`, so the loader filter and the engine-side leaf\n * backstop (`--disallowedTools`) can never disagree. */\nconst SPAWN_TOOLS = new Set(SUBAGENT_TOOLS);\n\nfunction toTools(value: string | string[] | undefined): string[] | undefined {\n if (value == null) return undefined;\n const items = Array.isArray(value) ? value : [value];\n // Split every item on commas AND whitespace: the frontmatter grammar can fold\n // several names into ONE item (a `>`/`|` block scalar, a quoted \"Read Task\"),\n // and the claude CLI accepts space-separated names inside a single\n // --allowedTools value — so a multi-token item surviving the filter would\n // resurrect a spawn tool downstream. Filtering must see individual names.\n const list = items.flatMap((item) => item.split(/[\\s,]+/));\n return list.filter((t) => t && !SPAWN_TOOLS.has(t));\n}\n\n/**\n * Load a Claude Code agent `.md` into an `AgentDef` (validated through\n * `defineAgent`). The body is the `system`; `name` falls back to the file's\n * basename; `model: inherit`/`default` map to undefined (inherit the run\n * default). The result is always a leaf — a markdown-loaded agent has no\n * sub-agents by construction, and dropping Task/Agent from `tools` is the\n * same statement. `overrides` spread last, so the caller wins.\n */\nexport function defineAgentFromMarkdown(\n path: string | URL,\n overrides?: Partial<AgentDef>,\n): AgentDef {\n const filePath = typeof path === 'string' ? path : fileURLToPath(path);\n const { fm, body } = splitDocument(readFileSync(filePath, 'utf8'));\n\n const name =\n typeof fm.name === 'string' && fm.name\n ? fm.name\n : basename(filePath, extname(filePath));\n const description =\n typeof fm.description === 'string' ? fm.description : undefined;\n const model =\n typeof fm.model === 'string' && fm.model !== 'inherit' && fm.model !== 'default'\n ? fm.model\n : undefined;\n\n const def: AgentDef = {\n name,\n ...(description ? { description } : {}),\n ...(model ? { model } : {}),\n ...(fm.tools != null ? { tools: toTools(fm.tools) } : {}),\n system: body.trim(),\n leaf: true,\n ...overrides,\n };\n if (!def.system?.trim())\n throw new LoopError({\n code: 'CONFIG',\n message: `defineAgentFromMarkdown: \"${filePath}\" has an empty body — the markdown body (after any frontmatter) becomes the agent's system prompt`,\n });\n return defineAgent(def);\n}\n","import type { Condition, Job, JobContext, Outcome } from './types.js';\nimport { isInfrastructureError } from './errors.js';\n\nexport interface LastGateBriefOptions {\n maxOutputChars?: number;\n}\n\nexport interface ConfidenceConditionOptions {\n /**\n * Units used by `threshold`. `fraction` uses 0..1 (default 0.8), while\n * `percent` uses 0..100 (default 80). Reported confidence stays normalized\n * to 0..1 in both modes.\n */\n scale?: 'fraction' | 'percent';\n threshold?: number;\n token?: string;\n /** Accept an exact, case-insensitive `n/a` token when the wrapped job passes. */\n allowNa?: boolean;\n /** Use the full work output as the condition reason when it is nonempty. */\n reason?: 'concise' | 'output';\n}\n\nexport interface LastDecisionLineOptions {\n /**\n * `closing` requires the token to be the final nonblank line. `last-match`\n * permits trailing prose and selects the last line-anchored token.\n */\n mode?: 'closing' | 'last-match';\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function lastDecisionLine(\n text: string,\n token: string,\n values?: readonly string[],\n opts: LastDecisionLineOptions = {},\n): string | undefined {\n const work = text;\n const tag = escapeRegExp(token);\n // The vocabulary matches case-insensitively, but its own casing is the\n // canonical return: a gate comparing against its declared values must not\n // depend on how a chatty leaf happened to case the token.\n const allowed = values\n ? new Map(values.map((value) => [value.toLowerCase(), value]))\n : undefined;\n const lines = work\n .split(/\\r?\\n/)\n .map((item) => item.trim())\n .filter(Boolean);\n const valueFromLine = (line: string): string | undefined => {\n const xml = new RegExp(`^<${tag}>\\\\s*([^<]+?)\\\\s*</${tag}>$`, 'i').exec(line);\n const colon = new RegExp(`^${tag}\\\\s*:\\\\s*(.+?)\\\\s*$`, 'i').exec(line);\n return (xml?.[1] ?? colon?.[1])?.trim();\n };\n\n if (opts.mode === 'last-match') {\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n const value = valueFromLine(lines[index]!);\n if (!value) continue;\n return allowed ? allowed.get(value.toLowerCase()) : value;\n }\n return undefined;\n }\n\n const line = lines.at(-1);\n if (!line) return undefined;\n const value = valueFromLine(line);\n if (!value) return undefined;\n return allowed ? allowed.get(value.toLowerCase()) : value;\n}\n\nexport function confidenceFromText(\n text: string,\n token = 'confidence',\n): number | undefined {\n const raw = lastDecisionLine(text, token);\n if (!raw) return undefined;\n const match = /^(\\d+(?:\\.\\d+)?)\\s*(%)?$/.exec(raw);\n if (!match) return undefined;\n const n = Number(match[1]);\n if (!Number.isFinite(n)) return undefined;\n const value = match[2] || n > 1 ? n / 100 : n;\n if (value < 0 || value > 1) return undefined;\n return value;\n}\n\nfunction outcomeText(outcome: Outcome): string {\n const candidates = [\n typeof outcome.data === 'string' ? outcome.data : undefined,\n ].filter((value): value is string => Boolean(value));\n if (!candidates.length && outcome.summary) candidates.push(outcome.summary);\n return candidates.join('\\n');\n}\n\nexport function confidenceCondition(\n job: Job,\n opts: ConfidenceConditionOptions = {},\n): Condition {\n const scale = opts.scale ?? 'fraction';\n const threshold = opts.threshold ?? (scale === 'percent' ? 80 : 0.8);\n const normalizedThreshold = scale === 'percent' ? threshold / 100 : threshold;\n const token = opts.token ?? 'confidence';\n return async (ctx: JobContext) => {\n const outcome = await job(ctx);\n if (\n outcome.error &&\n (ctx.signal.aborted || isInfrastructureError(outcome.error))\n ) {\n throw outcome.error;\n }\n const output = outcomeText(outcome);\n const raw = lastDecisionLine(output, token);\n const acceptedNa =\n outcome.status === 'pass' && opts.allowNa === true && raw?.toLowerCase() === 'n/a';\n const confidence = acceptedNa ? 1 : confidenceFromText(output, token);\n const met =\n outcome.status === 'pass' &&\n confidence !== undefined &&\n (acceptedNa || confidence >= normalizedThreshold);\n const conciseReason = acceptedNa\n ? `${token} n/a accepted`\n : confidence === undefined\n ? `missing ${token} decision token`\n : scale === 'percent'\n ? `${token} ${(confidence * 100).toFixed(2)}% ${met ? 'meets' : 'below'} threshold ${threshold.toFixed(2)}%`\n : `${token} ${confidence.toFixed(2)} ${met ? 'meets' : 'below'} threshold ${threshold.toFixed(2)}`;\n return {\n met,\n confidence: confidence ?? 0,\n reason: opts.reason === 'output' && output ? output : conciseReason,\n output,\n };\n };\n}\n\nexport function lastGateBrief(\n ctx: Pick<JobContext, 'lastGate'>,\n opts: LastGateBriefOptions = {},\n): string {\n const gate = ctx.lastGate;\n if (!gate || gate.met) return '';\n const lines = [`Previous gate failed: ${gate.reason}`];\n if (gate.output) {\n const cap = opts.maxOutputChars ?? 2000;\n const output =\n gate.output.length <= cap\n ? gate.output\n : `${gate.output.slice(0, cap).trimEnd()}\\n[gate output truncated]`;\n lines.push('', output);\n }\n return lines.join('\\n');\n}\n","/**\n * A fallback chain over engine instances, tried in declared order.\n *\n * Default triggers are auth, billing, missing CLI, unavailable model,\n * invalid configuration and quota. An engine that reports one of these is\n * skipped for the rest of this chain's lifetime. Rate limits and transient\n * failures propagate to the caller. An explicit `on` set replaces the\n * defaults.\n *\n * Aborts never fall back. If every engine fails, the final engine error is\n * thrown. A subsequent call with every engine skipped reports no live engine.\n */\n\nimport type {\n AgentRequest,\n AgentResult,\n Engine,\n EngineEventSink,\n} from './engine.js';\nimport {\n classifyEngineFailure,\n LANE_DEAD_FAILURES,\n type EngineFailureKind,\n} from './failure.js';\n\nexport interface FallbackInfo {\n /** The lane that just died. */\n from: string;\n /** The lane the call is moving to, when one is left. */\n to?: string;\n failure: EngineFailureKind;\n error: unknown;\n}\n\nexport interface FallbackOptions {\n /** Failure kinds that trigger fallback. Default: `LANE_DEAD_FAILURES`. */\n on?: Iterable<EngineFailureKind>;\n /** Observe each reroute (log it, count it, surface it). */\n onFallback?: (info: FallbackInfo) => void;\n}\n\n/**\n * Build a fallback chain over ready-made `Engine`s, tried in order.\n *\n * ```ts\n * await run(job, { engine: fallbackEngine([claude, codex]) });\n */\nexport function fallbackEngine(\n engines: readonly [Engine, ...Engine[]],\n options: FallbackOptions = {},\n): Engine {\n if (!engines.length) throw new RangeError('fallbackEngine needs at least one engine');\n const triggers = new Set(options.on ?? LANE_DEAD_FAILURES);\n const lanes = engines.map((engine) => ({ engine, dead: false }));\n const name = `fallback(${lanes.map((lane) => lane.engine.name).join(' -> ')})`;\n return {\n name,\n async run(\n req: AgentRequest,\n onEvent: EngineEventSink,\n signal: AbortSignal,\n ): Promise<AgentResult> {\n let lastError: unknown;\n for (let i = 0; i < lanes.length; i++) {\n const lane = lanes[i]!;\n if (lane.dead) continue;\n try {\n return await lane.engine.run(req, onEvent, signal);\n } catch (error) {\n lastError = error;\n if (signal.aborted) throw error;\n const failure = classifyEngineFailure(error);\n if (!triggers.has(failure)) throw error;\n lane.dead = true; // latched: a dead lane is not retried this run\n const next = lanes.slice(i + 1).find((candidate) => !candidate.dead);\n options.onFallback?.({\n from: lane.engine.name,\n to: next?.engine.name,\n failure,\n error,\n });\n if (!next) break;\n }\n }\n throw lastError ?? new Error(`${name}: no live engine left`);\n },\n };\n}\n","/** Public programmatic API for the Obversa graph runtime. */\n\nexport {\n briefFromFile,\n person,\n stage,\n workflow,\n type BriefSource,\n type NamedStage,\n type PersonRole,\n type WorkflowConfig,\n type WorkflowOptions,\n type WorkflowPostContext,\n type WorkflowRecord,\n type WorkflowRole,\n type WorkflowStage,\n} from './workflow.js';\nexport type { TeamSeat } from '@obversa/api';\n\nexport type {\n JsonPrimitive,\n JsonObject,\n JsonValue,\n RunBrief,\n Sha256Digest,\n GraphValidationIssue,\n} from './graph/value.js';\nexport { JsonValueError } from './graph/value.js';\nexport {\n GraphValidationError,\n type GraphId,\n type NodeId,\n type EdgeId,\n type GraphNode,\n type GraphEdge,\n type GraphDefinition,\n type CompiledGraphDefinition,\n type GraphKernel,\n} from './graph/kernel.js';\nexport type {\n DispatchGraphCommand,\n PauseGraphCommand,\n CompleteGraphCommand,\n FailGraphCommand,\n GraphCommand,\n} from './graph/commands.js';\nexport {\n compileGraph,\n type GraphEvent,\n type GraphEngineIdentity,\n type EngineAttemptRecordedPayload,\n type GraphBindings,\n type GraphTypeCompilation,\n type CompiledGraphType,\n type GraphType,\n} from './graph/type.js';\nexport {\n dag as dagGraphType,\n type DagDefinition,\n} from './graph-types/dag.js';\nexport {\n teamGraphType,\n type TeamNodeData,\n type TeamRoom,\n type TeamCommunication,\n type TeamGraphData,\n type TeamDefinition,\n type TeamPost,\n type TeamTurnResult,\n type TeamMessage,\n type TeamGraphResult,\n} from './graph-types/team.js';\nexport {\n convergence,\n type ConvergenceDefinition,\n type ConvergenceEvent,\n type ConvergenceStatus,\n} from './graph-types/loop.js';\nexport {\n createCallbackGate,\n callbackRequestDigest,\n validateCallbackRequest,\n validateCallbackResponse,\n type CallbackGateDefinition,\n type CallbackRequest,\n} from './callback/gate.js';\nexport {\n createCallbackClient,\n replayCallbackClient,\n directRouter,\n validateCallbackEvent,\n type CallbackClient,\n type CallbackEvent,\n type ClaimResult,\n type SubmitResult,\n type ReleaseResult,\n type Responder,\n} from './callback/client.js';\nexport {\n createStoredCallbackClient,\n type NewCallbackHistoryEvent,\n type StoredCallbackClient,\n} from './callback/stored-client.js';\nexport {\n ApprovalSubjectError,\n approvalSubjectDigest,\n createApprovalCallbackGate,\n resolveApproval,\n validateApprovalRecord,\n type ApprovalBinding,\n type ApprovalEventPayload,\n type ApprovalRecord,\n type ApprovalResolutionInput,\n type ApprovalSubject,\n type ApprovalSubjectInput,\n type NewApprovalEvent,\n} from './callback/approval.js';\nexport {\n acceptedResultMatches,\n createAcceptedResultRecord,\n resolveAcceptedResult,\n validateAcceptedResultRecord,\n type AcceptedResultBinding,\n type AcceptedResultBindingInput,\n type AcceptedResultEventPayload,\n type AcceptedResultGraph,\n type AcceptedResultRecord,\n type AcceptedResultResolution,\n type CreateAcceptedResultRecordInput,\n type NewAcceptedResultEvent,\n} from './proof/acceptance.js';\nexport {\n writeProofArtifact,\n type ProofArtifactReference,\n} from './proof/artifact.js';\nexport {\n createProofCache,\n type CachedProofPacket,\n type ProofCache,\n type ProofCacheCurrentBinding,\n type ProofCacheOptions,\n type ProofJob,\n type ProofPacket,\n type ProofPacketSource,\n type ProofSource,\n} from './proof/cache.js';\nexport {\n createGraphExecutor,\n GraphExecutionError,\n type GraphExecutionErrorCode,\n type GraphNodeBinding,\n type GraphEngineBinding,\n type GraphExecutor,\n type GraphExecutorOptions,\n type GraphExecutorResult,\n} from './runtime/graph-executor.js';\nexport { projectTeamRooms } from './runtime/team-rooms.js';\nexport {\n resolveGraphPlan,\n validateGraphDescription,\n type PermissionDescriptor,\n type ExecutionTarget,\n type ExecutionLaneDescription,\n type GraphPhaseDescription,\n type GraphNodeDescription,\n type GraphEdgeDescription,\n type PlanBound,\n type GraphBounds,\n type GraphPolicyDescription,\n type GraphRequirements,\n type GraphDescriptionInput,\n type GraphDescription,\n type GraphPackageIdentity,\n type GraphPackageAdmission,\n type ExecutionLaneResolution,\n type RunPreflightPolicy,\n type PlanResolution,\n type ResolvedExecutionLane,\n type ResolvedPlan,\n type ResolvedPlanSnapshot,\n} from './graph/plan.js';\n\nexport {\n StorageError,\n type StorageErrorCode,\n} from './storage/error.js';\nexport {\n createGitWorktreeProvider,\n} from './workspace/git-provider.js';\nexport type {\n WorkspaceProvider,\n WorkspaceAnchor,\n WorkspaceHeadDrift,\n WorkspaceFilesDrift,\n WorkspaceRepositoryDrift,\n WorkspaceDrift,\n VerifyResult,\n ForkOk,\n ForkChangedAnchor,\n ForkExists,\n ForkIncomplete,\n ForkUnleased,\n ForkNoRevision,\n ForkInvalidChild,\n ForkResult,\n LeaseClaimed,\n LeaseHeld,\n LeaseIncomplete,\n AcquireResult,\n WorkspaceReleaseResult,\n RecoverResult,\n} from './workspace/provider.js';\nexport {\n validateDomainEventId,\n validateNewDomainEvent,\n validateDomainEventEnvelope,\n type DomainEventId,\n type EventStreamId,\n type StorageNamespace,\n type StreamRevision,\n type EventStreamRef,\n type NewDomainEvent,\n type DomainEventEnvelope,\n} from './events/envelope.js';\nexport {\n validateDomainEventBatch,\n validateEventStreamRef,\n type DomainEventBatch,\n type EventStore,\n} from './events/store.js';\nexport {\n validateArtifactReference,\n validateArtifactScope,\n validateNewArtifact,\n type ArtifactBatch,\n type ArtifactContentMode,\n type ArtifactScope,\n type NewArtifact,\n type ArtifactReference,\n type ArtifactStore,\n} from './artifacts/store.js';\nexport {\n loadRunDefinition,\n persistRunDefinition,\n validateRunDefinition,\n validateRunStartRecord,\n validateRunStoragePolicy,\n validateRunStorageRecord,\n type StorageProviderRecord,\n type SensitiveContentPolicy,\n type RunStoragePolicy,\n type RunStorageRecord,\n type RunDefinition,\n type RunStartedPayload,\n type NewRunStartedEvent,\n type RunStartRecord,\n type RunStorageBinding,\n} from './runtime/run-definition.js';\nexport {\n readRunPreflight,\n interruptRunPreflight,\n type RunPreflightState,\n type PreflightPauseResult,\n type PreflightFailureResult,\n} from './runtime/preflight-record.js';\nexport type {\n AttemptBudgetPolicy,\n TokenBudget,\n} from './runtime/budget.js';\nexport type {\n ActionDecision,\n AllowActionDecision,\n WaitActionDecision,\n DenyActionDecision,\n NodeDataContext,\n} from './runtime/node-lifecycle.js';\nexport type { ResultContract } from './runtime/result-contract.js';\nexport type { NodeWorkspacePolicy } from './runtime/workspace-policy.js';\n\nexport type {\n Job,\n JobMeta,\n JobContext,\n Outcome,\n OutcomeStatus,\n FeedbackActionSeverity,\n FeedbackDecision,\n FeedbackFinding,\n FeedbackSeverity,\n RevisionRequest,\n RevisionRerun,\n GraphPosition,\n LimitPolicy,\n Condition,\n ConditionInput,\n ConditionResult,\n RawPredicate,\n LoopConfig,\n RetryPolicy,\n DagConfig,\n KickbackBudget,\n DagNode,\n LoopEvent,\n LogLevel,\n Workspace,\n ProofKind,\n ProofArtifact,\n ProofRecord,\n UsageTotals,\n} from './core/types.js';\n\nexport { loop } from './core/loop.js';\nexport { dag, sequence, parallel } from './core/dag.js';\nexport { pipeline, type PipelineStage } from './core/pipeline.js';\nexport { tournament, type TournamentConfig } from './core/tournament.js';\nexport {\n team,\n type TeamAgent,\n type TeamAgentResult,\n type TeamConfig,\n type TeamResult,\n type TeamReview,\n} from './core/team.js';\nexport {\n agentJob,\n fnJob,\n type FnJobResult,\n prove,\n kickback,\n revisionRequest,\n type AgentJobConfig,\n type AgentRoute,\n type ProofDescriptor,\n type ProofProducer,\n RECORDED_ENGINE_USAGE,\n type RecordedEngineUsage,\n} from './core/job.js';\nexport {\n reviewPanel,\n reviewContext,\n type ReviewPanelConfig,\n type ReviewContextConfig,\n type RevisionRequestInput,\n} from './core/feedback.js';\n\nexport { copyJobMeta, jobMeta, renderPlan, describeConditions } from './core/describe.js';\nexport {\n assertGraph,\n type GraphShape,\n type GraphNodeShape,\n} from './core/assert-graph.js';\n\nexport {\n defineAgent,\n defineSkill,\n fromFile,\n type AgentContractSummary,\n type AgentDef,\n type AgentFailureMode,\n type AgentOutputContract,\n type AgentSkillRef,\n type AgentTier,\n type Skill,\n} from './core/agent.js';\nexport { defineAgentFromMarkdown } from './core/agent-md.js';\n\nexport { isolated, type IsolatedOptions } from './core/isolated.js';\nexport {\n confidenceCondition,\n confidenceFromText,\n lastDecisionLine,\n lastGateBrief,\n type ConfidenceConditionOptions,\n type LastDecisionLineOptions,\n type LastGateBriefOptions,\n} from './core/decision.js';\nexport {\n toCondition,\n predicate,\n bodyPassed,\n minConfidence,\n commandSucceeds,\n all,\n any,\n not,\n quorum,\n always,\n never,\n agentCheck,\n gateJob,\n commandJob,\n passed,\n failed,\n type AgentCheckConfig,\n} from './core/condition.js';\nexport { approval, type ApprovalAnswer, type ApprovalOptions } from './core/approval-job.js';\nexport type { RunCallbacks } from './core/types.js';\nexport type { RunMonitor, MonitorState, MonitorNodeState, MonitorNodePhase, MonitorKickback } from './runtime/monitor.js';\nexport type {\n NoProgressConfig,\n NoProgressInput,\n StallReport,\n} from './core/progress.js';\nexport { LoopError, type LoopErrorCode } from './core/errors.js';\nexport type { BudgetConfig } from './core/budget.js';\n\nexport type {\n Engine,\n EngineRef,\n EngineName,\n AgentRequest,\n AgentResult,\n AgentResultPart,\n EngineIncompleteResultEvidence,\n EngineSelectionRecord,\n EngineTransportFailure,\n EngineStreamEvent,\n Usage,\n UsageReceipt,\n} from './engines/engine.js';\nexport { EngineError, EngineIncompleteResultError } from './engines/engine.js';\nexport {\n finalResultPart,\n finalResultText,\n validateAgentResult,\n} from './runtime/result-parts.js';\n\nexport type { Environment, EnvHandle } from './env/environment.js';\nexport { withEnv } from './core/env-overlay.js';\n\nexport {\n run,\n exitCodeFor,\n EXIT_PAUSED,\n type RunOptions,\n type RunResult,\n} from './runtime/runner.js';\nexport { RESUME_STAGE_OUTCOMES } from './runtime/runner.js';\nexport type { RecordedStage, ResumedStageRecords } from './runtime/persist.js';\n// A run's events are handed to `onEvent` as data. This turns one of them into\n// the line a person reads, so an example or a host can print a run as it\n// happens without writing its own formatter.\nexport { formatEvent } from './runtime/supervisor.js';\nexport type { StatsSnapshot } from './core/stats.js';\nexport {\n classifyEngineFailure,\n LANE_DEAD_FAILURES,\n type EngineFailureKind,\n} from './engines/failure.js';\nexport {\n fallbackEngine,\n type FallbackOptions,\n type FallbackInfo,\n} from './engines/fallback.js';\nexport {\n preflight,\n preflightEngine,\n formatPreflight,\n type PreflightResult,\n type PreflightOptions,\n} from './engines/preflight.js';\nexport {\n costReport,\n formatCostReport,\n type PriceTable,\n type ModelPrice,\n type ModelCost,\n type CostReport,\n} from './core/cost.js';\nexport {\n ratchet,\n writeScope,\n sampled,\n type RatchetOptions,\n type WriteScopeOptions,\n type SampledOptions,\n} from './core/guards.js';\n\nimport type { Job } from './core/types.js';\n\n/** Preserve the exact `Job` type of a default export. */\nexport function defineJob(job: Job): Job {\n return job;\n}\n"]}
|