@iowarp/clio-coder 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +50 -53
- package/dist/acp-FPR54DGL.js +138 -0
- package/dist/{agents-Q4MYPMUW.js → agents-OGPIHPJH.js} +33 -25
- package/dist/assets/codewiki.json +1 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
- package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
- package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter.wasm +0 -0
- package/dist/{auth-O6HYIJ6J.js → auth-IC3K6NIZ.js} +22 -15
- package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
- package/dist/chunk-3I7MS7N2.js +40 -0
- package/dist/chunk-3R73A4XB.js +69 -0
- package/dist/{chunk-26BZQOAD.js → chunk-474KN5II.js} +86 -115
- package/dist/{chunk-NI4DEJMC.js → chunk-4QKXUHSR.js} +26 -3
- package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
- package/dist/{chunk-TFSSEXL6.js → chunk-673JJUWJ.js} +14 -4
- package/dist/{chunk-GNGDQYDU.js → chunk-7SS2CTV2.js} +27922 -1249
- package/dist/{chunk-7RBKDI66.js → chunk-ASND7OZK.js} +104 -12
- package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
- package/dist/{chunk-RQDWMVRB.js → chunk-BSU2YIWB.js} +9 -3
- package/dist/{chunk-CLJ5HLUD.js → chunk-C4PTHK7P.js} +24 -5
- package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
- package/dist/{chunk-BYEU76JP.js → chunk-DKGKUHFA.js} +34 -9
- package/dist/chunk-EYOKLTMF.js +170 -0
- package/dist/{chunk-PS4PFJQP.js → chunk-FCIH3BIZ.js} +15258 -14130
- package/dist/{chunk-2J63S4SF.js → chunk-FST4FYJB.js} +82 -14
- package/dist/{chunk-3DANZDGR.js → chunk-G34LV2PF.js} +34 -9
- package/dist/{chunk-BBUH4VAA.js → chunk-GAEBEQVI.js} +34 -21
- package/dist/chunk-GB6QRBXN.js +8543 -0
- package/dist/chunk-GEP36Y4X.js +12796 -0
- package/dist/{chunk-TKHQ4DGZ.js → chunk-H6F6BYOH.js} +496 -121
- package/dist/{chunk-UGYAX5YI.js → chunk-HQQID6OA.js} +10 -5
- package/dist/chunk-IHXBNWMM.js +137 -0
- package/dist/{chunk-ME6DNWIU.js → chunk-IS3ONKU3.js} +7 -1
- package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
- package/dist/chunk-K2ITRMHZ.js +642 -0
- package/dist/{chunk-KBR4MZZR.js → chunk-K5XEMXTI.js} +7 -1
- package/dist/{chunk-AMFR5YA3.js → chunk-KKNLWXI6.js} +24 -10
- package/dist/{chunk-JWHCJDCI.js → chunk-KY56HMHH.js} +145 -61
- package/dist/{chunk-E3NYWENM.js → chunk-LU4TK2PR.js} +52 -7
- package/dist/{chunk-UWIJNAOB.js → chunk-M5T5VO65.js} +109 -42
- package/dist/{chunk-JPOWPFCU.js → chunk-MAR7Y6HW.js} +38 -16
- package/dist/chunk-N6F52NLF.js +6951 -0
- package/dist/{chunk-UHTSULZS.js → chunk-NMOX6HFD.js} +20 -7
- package/dist/{chunk-WD6AJM35.js → chunk-OLBBMFRD.js} +30 -13
- package/dist/{chunk-VOO7NYPP.js → chunk-PFEFKVGL.js} +22 -6
- package/dist/{chunk-6CWDTGUC.js → chunk-PIUMUEMV.js} +7 -1
- package/dist/chunk-PV4JUBVJ.js +462 -0
- package/dist/{chunk-527KG6XR.js → chunk-Q3RUPKEJ.js} +22 -4
- package/dist/{chunk-D5YD55AR.js → chunk-Q5WJOSJ7.js} +11 -1
- package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
- package/dist/{chunk-4UQA7NCT.js → chunk-R5KLMSBV.js} +7 -2
- package/dist/{chunk-PIDUD6M2.js → chunk-RDLVBZEO.js} +11 -6
- package/dist/{chunk-O4EJEDHO.js → chunk-RPTR2H26.js} +40 -31
- package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
- package/dist/{chunk-XNISANGE.js → chunk-TEKV33Q5.js} +122 -57
- package/dist/chunk-TXOTCRLG.js +15 -0
- package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
- package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
- package/dist/{chunk-UU3R62TT.js → chunk-XYWBQRDM.js} +13 -4
- package/dist/{chunk-7BHLZB3A.js → chunk-ZPY3JZ5E.js} +32 -10
- package/dist/cli/index.js +39 -33
- package/dist/clio-BZVGEUFJ.js +58 -0
- package/dist/{components-JVHMUBEB.js → components-DMAOEKFB.js} +26 -9
- package/dist/{config-ZFCDBMDC.js → config-IRUQ7SE4.js} +42 -31
- package/dist/configure-S7S6F6CL.js +32 -0
- package/dist/{context-CDXTP2MP.js → context-3KWFLHJG.js} +17 -11
- package/dist/{context-E3KIFVXI.js → context-5RADCKTR.js} +33 -28
- package/dist/{context-clear-3F4PLXOS.js → context-clear-7TSNPAAI.js} +36 -28
- package/dist/{context-index-Q7YSYTR3.js → context-index-W4RLWOQH.js} +10 -4
- package/dist/{docs-YIETIWZI.js → docs-5AWSPS37.js} +16 -10
- package/dist/doctor-UC5NAJYQ.js +77 -0
- package/dist/{eval-B3KZZESM.js → eval-U6TJHRLX.js} +77 -24
- package/dist/{evidence-V67CHM35.js → evidence-YEGUW4L3.js} +34 -26
- package/dist/{evolve-YDZSUQYA.js → evolve-TXARCTPG.js} +39 -26
- package/dist/{extensions-SRG7XCAH.js → extensions-OZFJ3A3G.js} +13 -7
- package/dist/{fleet-CA2CRTVG.js → fleet-6G3DHNYE.js} +45 -37
- package/dist/fleet-preflight-DSNT37JK.js +23 -0
- package/dist/{init-2OZDJE2D.js → init-KZ5QTF6M.js} +42 -34
- package/dist/{memory-3PIQQAKX.js → memory-73ESV5YC.js} +35 -27
- package/dist/{models-DY35XI7Y.js → models-A4PVNWJK.js} +34 -23
- package/dist/{paths-5OMXW7Z4.js → paths-C4H6IV77.js} +12 -6
- package/dist/preload-6WVMHX3A.js +13 -0
- package/dist/{reset-PIFYNOS3.js → reset-BGW6OGMV.js} +17 -11
- package/dist/{run-3VSPP24F.js → run-YTPEYQOH.js} +60 -48
- package/dist/{share-D36RQCXM.js → share-YIFFV4NQ.js} +16 -10
- package/dist/{skills-F2MRLELY.js → skills-2V6RA3OQ.js} +18 -11
- package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-S2TVJO4F.js} +45 -36
- package/dist/{targets-DZMEZAH4.js → targets-TYXLPB23.js} +61 -59
- package/dist/{trace-7NYCUI2J.js → trace-GGOJ6Q6Z.js} +9 -3
- package/dist/{uninstall-AD3JWHBB.js → uninstall-LLLT4F4W.js} +14 -8
- package/dist/{upgrade-WYYBKGDY.js → upgrade-33G2LMM5.js} +45 -23
- package/dist/{usage-ULIDAGFF.js → usage-ZAFSXKKG.js} +35 -27
- package/dist/version-KGEG7EPO.js +21 -0
- package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-NUQCVOQ3.js} +55 -45
- package/dist/worker/entry.js +101 -43
- package/docs/README.md +12 -9
- package/docs/acp.md +28 -5
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +23 -2
- package/docs/artifact-placement.md +101 -0
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +4 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +125 -41
- package/docs/configuration-and-targets.md +88 -18
- package/docs/context-engine.md +6 -2
- package/docs/development-pipeline.md +77 -0
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +3 -3
- package/docs/environment-variables.md +2 -1
- package/docs/eval-runner.md +3 -3
- package/docs/evals-internal.md +2 -2
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +18 -11
- package/docs/fleet-demo-runbook.md +22 -23
- package/docs/fleet-dispatch.md +111 -12
- package/docs/glossary.md +107 -15
- package/docs/html/agents_blueprint.html +3 -3
- package/docs/html/alcf_blueprint.html +3 -3
- package/docs/html/architecture_blueprint.html +3 -3
- package/docs/html/commands_blueprint.html +187 -42
- package/docs/html/configuration_blueprint.html +7 -7
- package/docs/html/context_blueprint.html +3 -3
- package/docs/html/documentation_blueprint.html +1 -1
- package/docs/html/environment_blueprint.html +3 -3
- package/docs/html/eval_blueprint.html +4 -4
- package/docs/html/evals_internal_blueprint.html +3 -3
- package/docs/html/evolution_blueprint.html +3 -3
- package/docs/html/extensions_blueprint.html +3 -3
- package/docs/html/fleet_dispatch_blueprint.html +8 -8
- package/docs/html/index.html +5 -5
- package/docs/html/lifecycle_blueprint.html +4 -4
- package/docs/html/memory_blueprint.html +3 -3
- package/docs/html/middleware_blueprint.html +3 -3
- package/docs/html/models_blueprint.html +2 -2
- package/docs/html/observability_blueprint.html +2 -2
- package/docs/html/provider_adapter_blueprint.html +3 -3
- package/docs/html/safety_blueprint.html +3 -3
- package/docs/html/skills_blueprint.html +2 -2
- package/docs/html/soak_blueprint.html +3 -3
- package/docs/html/tool_usage_blueprint.html +4 -4
- package/docs/html/tools_blueprint.html +2 -2
- package/docs/html/trace_blueprint.html +3 -3
- package/docs/html/tui_design_blueprint.html +100 -40
- package/docs/html/validation_blueprint.html +1 -1
- package/docs/html/worker_dispatch_blueprint.html +3 -3
- package/docs/installation-and-lifecycle.md +62 -11
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +2 -2
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +12 -12
- package/docs/prompt-envelope-and-tools.md +2 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +4 -0
- package/docs/safety-model.md +21 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +2 -2
- package/docs/skills-marketplace.md +1 -1
- package/docs/time-conventions.md +101 -0
- package/docs/tool-usage.md +5 -4
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +83 -27
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +16 -16
- package/skills/README.md +5 -6
- package/skills/git/file-ticket/SKILL.md +107 -0
- package/skills/git/file-ticket/evals.md +54 -0
- package/skills/git/fix-issue/SKILL.md +106 -0
- package/skills/git/fix-issue/evals.md +71 -0
- package/skills/git/ship/SKILL.md +92 -0
- package/skills/git/ship/evals.md +72 -0
- package/skills/skill-marketplace.json +12 -20
- package/src/cli/acp.ts +88 -0
- package/src/cli/agents.ts +60 -0
- package/src/cli/args.ts +280 -0
- package/src/cli/argv.ts +170 -0
- package/src/cli/ask.ts +34 -0
- package/src/cli/auth.ts +468 -0
- package/src/cli/bootstrap-generate.ts +498 -0
- package/src/cli/clio.ts +34 -0
- package/src/cli/components.ts +195 -0
- package/src/cli/config-inspect.ts +330 -0
- package/src/cli/config.ts +72 -0
- package/src/cli/configure-interop.ts +67 -0
- package/src/cli/configure-layout.ts +172 -0
- package/src/cli/configure.ts +1487 -0
- package/src/cli/context-clear.ts +76 -0
- package/src/cli/context-index.ts +102 -0
- package/src/cli/context.ts +316 -0
- package/src/cli/default-target.ts +63 -0
- package/src/cli/docs.ts +340 -0
- package/src/cli/doctor.ts +54 -0
- package/src/cli/eval.ts +315 -0
- package/src/cli/evidence.ts +222 -0
- package/src/cli/evolve.ts +219 -0
- package/src/cli/extensions.ts +205 -0
- package/src/cli/fleet.ts +827 -0
- package/src/cli/index.ts +309 -0
- package/src/cli/init.ts +219 -0
- package/src/cli/initial-message.ts +47 -0
- package/src/cli/internal-dispatch.ts +55 -0
- package/src/cli/memory.ts +180 -0
- package/src/cli/models.ts +257 -0
- package/src/cli/modes/json-stream.ts +85 -0
- package/src/cli/modes/jsonl.ts +9 -0
- package/src/cli/modes/print.ts +589 -0
- package/src/cli/oauth-manual-input.ts +72 -0
- package/src/cli/oauth-select.ts +36 -0
- package/src/cli/output-guard.ts +48 -0
- package/src/cli/paths.ts +44 -0
- package/src/cli/provider-target.ts +113 -0
- package/src/cli/removal.ts +72 -0
- package/src/cli/reset.ts +253 -0
- package/src/cli/run.ts +497 -0
- package/src/cli/share.ts +243 -0
- package/src/cli/shared.ts +60 -0
- package/src/cli/skills-eval.ts +1225 -0
- package/src/cli/skills.ts +470 -0
- package/src/cli/steer-channel.ts +86 -0
- package/src/cli/targets.ts +1150 -0
- package/src/cli/text-layout.ts +102 -0
- package/src/cli/trace.ts +274 -0
- package/src/cli/uninstall.ts +405 -0
- package/src/cli/upgrade.ts +270 -0
- package/src/cli/usage.ts +869 -0
- package/src/cli/validate-model.ts +28 -0
- package/src/cli/version.ts +7 -0
- package/src/cli/wiki-generate.ts +509 -0
- package/src/core/artifact-paths.ts +43 -0
- package/src/core/bash-exec.ts +242 -0
- package/src/core/boot-trace.ts +37 -0
- package/src/core/bus-events.ts +728 -0
- package/src/core/bus-trace.ts +53 -0
- package/src/core/c-header-language.ts +265 -0
- package/src/core/clio-repo.ts +78 -0
- package/src/core/config.ts +1593 -0
- package/src/core/context-floor.ts +33 -0
- package/src/core/defaults.ts +625 -0
- package/src/core/domain-loader.ts +170 -0
- package/src/core/event-bus.ts +94 -0
- package/src/core/file-references.ts +282 -0
- package/src/core/guardrails.ts +185 -0
- package/src/core/headless-permission.ts +21 -0
- package/src/core/init.ts +223 -0
- package/src/core/json-payload.ts +58 -0
- package/src/core/package-root.ts +54 -0
- package/src/core/path-canonical.ts +37 -0
- package/src/core/process-identity.ts +41 -0
- package/src/core/recent-models.ts +91 -0
- package/src/core/release.ts +2 -0
- package/src/core/residency-protection.ts +56 -0
- package/src/core/resolve-config-value.ts +88 -0
- package/src/core/response-schema.ts +279 -0
- package/src/core/run-overrides.ts +77 -0
- package/src/core/safe-exec.ts +193 -0
- package/src/core/safe-id.ts +37 -0
- package/src/core/safe-resource-write.ts +162 -0
- package/src/core/session-routing.ts +339 -0
- package/src/core/settings-layers.ts +220 -0
- package/src/core/shared-bus.ts +8 -0
- package/src/core/shell-quote.ts +26 -0
- package/src/core/skill-activation.ts +190 -0
- package/src/core/startup-timer.ts +37 -0
- package/src/core/state-file-lock.ts +207 -0
- package/src/core/termination.ts +202 -0
- package/src/core/timers.ts +38 -0
- package/src/core/tool-names.ts +65 -0
- package/src/core/verification-scripts.ts +13 -0
- package/src/core/workspace-files.ts +492 -0
- package/src/core/xdg.ts +177 -0
- package/src/domains/agents/builtins/architect.md +4 -4
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +3 -3
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +1 -1
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +172 -0
- package/src/domains/agents/contract.ts +16 -0
- package/src/domains/agents/extension.ts +110 -0
- package/src/domains/agents/fleet-commands.ts +154 -0
- package/src/domains/agents/fleet-contract.ts +797 -0
- package/src/domains/agents/frontmatter.ts +40 -0
- package/src/domains/agents/index.ts +102 -0
- package/src/domains/agents/manifest.ts +6 -0
- package/src/domains/agents/recipe-schema.ts +202 -0
- package/src/domains/agents/recipe.ts +125 -0
- package/src/domains/agents/registry.ts +111 -0
- package/src/domains/agents/result-contract.ts +1265 -0
- package/src/domains/agents/spec.ts +371 -0
- package/src/domains/agents/write-boundary.ts +109 -0
- package/src/domains/components/diff.ts +99 -0
- package/src/domains/components/hash.ts +21 -0
- package/src/domains/components/index.ts +3 -0
- package/src/domains/components/scan.ts +304 -0
- package/src/domains/components/snapshot.ts +108 -0
- package/src/domains/components/types.ts +82 -0
- package/src/domains/config/agent-namespace.ts +13 -0
- package/src/domains/config/classify.ts +94 -0
- package/src/domains/config/contract.ts +22 -0
- package/src/domains/config/extension.ts +136 -0
- package/src/domains/config/index.ts +13 -0
- package/src/domains/config/keybindings.ts +164 -0
- package/src/domains/config/manifest.ts +6 -0
- package/src/domains/config/watcher.ts +41 -0
- package/src/domains/context/adoption.ts +880 -0
- package/src/domains/context/bootstrap-prompt.ts +273 -0
- package/src/domains/context/bootstrap.ts +1409 -0
- package/src/domains/context/clear.ts +86 -0
- package/src/domains/context/clio-md.ts +327 -0
- package/src/domains/context/codewiki/cmake.ts +356 -0
- package/src/domains/context/codewiki/cooperative.ts +46 -0
- package/src/domains/context/codewiki/digest.ts +135 -0
- package/src/domains/context/codewiki/grammar-assets.ts +33 -0
- package/src/domains/context/codewiki/indexer.ts +1614 -0
- package/src/domains/context/codewiki/tree-sitter.ts +771 -0
- package/src/domains/context/contract.ts +62 -0
- package/src/domains/context/excluded-dirs.ts +1 -0
- package/src/domains/context/extension.ts +407 -0
- package/src/domains/context/fingerprint.ts +196 -0
- package/src/domains/context/index.ts +164 -0
- package/src/domains/context/init-options.ts +69 -0
- package/src/domains/context/manifest.ts +6 -0
- package/src/domains/context/operator-profile.ts +157 -0
- package/src/domains/context/project-metadata.ts +510 -0
- package/src/domains/context/project-rules.ts +227 -0
- package/src/domains/context/prompt-context.ts +62 -0
- package/src/domains/context/refresh.ts +170 -0
- package/src/domains/context/sibling-files.ts +10 -0
- package/src/domains/context/state.ts +237 -0
- package/src/domains/context/wiki/assemble.ts +303 -0
- package/src/domains/context/wiki/frontmatter.ts +210 -0
- package/src/domains/context/wiki/generate.ts +590 -0
- package/src/domains/context/wiki/layout.ts +111 -0
- package/src/domains/context/wiki/meta.ts +221 -0
- package/src/domains/context/wiki/plan-store.ts +217 -0
- package/src/domains/context/wiki/plan.ts +250 -0
- package/src/domains/context/wiki/prompts.ts +270 -0
- package/src/domains/context/wiki/staleness.ts +198 -0
- package/src/domains/dispatch/active-route-planner.ts +168 -0
- package/src/domains/dispatch/admission-queue.ts +150 -0
- package/src/domains/dispatch/admission.ts +334 -0
- package/src/domains/dispatch/agent-candidates.ts +307 -0
- package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
- package/src/domains/dispatch/agent-ledger-store.ts +257 -0
- package/src/domains/dispatch/agent-ledger.ts +212 -0
- package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
- package/src/domains/dispatch/assignment-events.ts +132 -0
- package/src/domains/dispatch/assignment-reconcile.ts +76 -0
- package/src/domains/dispatch/assignment-store.ts +162 -0
- package/src/domains/dispatch/assignment.ts +278 -0
- package/src/domains/dispatch/backoff.ts +59 -0
- package/src/domains/dispatch/batch-store.ts +134 -0
- package/src/domains/dispatch/batch-tracker.ts +66 -0
- package/src/domains/dispatch/capability-match.ts +155 -0
- package/src/domains/dispatch/capacity-lease.ts +413 -0
- package/src/domains/dispatch/code-step-store.ts +52 -0
- package/src/domains/dispatch/code-step.ts +368 -0
- package/src/domains/dispatch/contract.ts +278 -0
- package/src/domains/dispatch/dedup.ts +133 -0
- package/src/domains/dispatch/event-pump.ts +251 -0
- package/src/domains/dispatch/execution-handoff.ts +29 -0
- package/src/domains/dispatch/execution-plan.ts +328 -0
- package/src/domains/dispatch/execution-role.ts +277 -0
- package/src/domains/dispatch/execution-scheduler.ts +583 -0
- package/src/domains/dispatch/extension.ts +5869 -0
- package/src/domains/dispatch/failure-classification.ts +141 -0
- package/src/domains/dispatch/fleet-plan.ts +225 -0
- package/src/domains/dispatch/fleet-preflight.ts +394 -0
- package/src/domains/dispatch/gate-decisions.ts +1040 -0
- package/src/domains/dispatch/gate-role-prompts.ts +58 -0
- package/src/domains/dispatch/heartbeat.ts +27 -0
- package/src/domains/dispatch/index.ts +137 -0
- package/src/domains/dispatch/joint-route-adapter.ts +114 -0
- package/src/domains/dispatch/joint-route-resolver.ts +283 -0
- package/src/domains/dispatch/manifest.ts +6 -0
- package/src/domains/dispatch/orphan-recovery.ts +224 -0
- package/src/domains/dispatch/outcome.ts +109 -0
- package/src/domains/dispatch/phase-timing.ts +47 -0
- package/src/domains/dispatch/placement.ts +202 -0
- package/src/domains/dispatch/receipt-findings.ts +255 -0
- package/src/domains/dispatch/receipt-integrity.ts +378 -0
- package/src/domains/dispatch/recovery-candidates.ts +74 -0
- package/src/domains/dispatch/reproducibility.ts +48 -0
- package/src/domains/dispatch/reservation-store.ts +501 -0
- package/src/domains/dispatch/route-approval.ts +177 -0
- package/src/domains/dispatch/route-candidates.ts +57 -0
- package/src/domains/dispatch/route-decision.ts +1079 -0
- package/src/domains/dispatch/route-facts.ts +187 -0
- package/src/domains/dispatch/route-history.ts +238 -0
- package/src/domains/dispatch/route-observer.ts +488 -0
- package/src/domains/dispatch/route-policy.ts +327 -0
- package/src/domains/dispatch/route-quality.ts +256 -0
- package/src/domains/dispatch/route-readiness.ts +120 -0
- package/src/domains/dispatch/routing-intent.ts +287 -0
- package/src/domains/dispatch/run-identity.ts +56 -0
- package/src/domains/dispatch/scout-transition.ts +130 -0
- package/src/domains/dispatch/state.ts +277 -0
- package/src/domains/dispatch/tool-stats.ts +132 -0
- package/src/domains/dispatch/transport.ts +209 -0
- package/src/domains/dispatch/types.ts +785 -0
- package/src/domains/dispatch/validation-grounding.ts +154 -0
- package/src/domains/dispatch/validation.ts +721 -0
- package/src/domains/dispatch/worker-protocol.ts +275 -0
- package/src/domains/dispatch/worker-spawn.ts +566 -0
- package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
- package/src/domains/dispatch/write-boundary.ts +426 -0
- package/src/domains/eval/artifacts/redact.ts +42 -0
- package/src/domains/eval/artifacts/store.ts +173 -0
- package/src/domains/eval/compare/compare.ts +33 -0
- package/src/domains/eval/compare/gates.ts +66 -0
- package/src/domains/eval/compare/thresholds.ts +92 -0
- package/src/domains/eval/harness-metrics.ts +62 -0
- package/src/domains/eval/index.ts +66 -0
- package/src/domains/eval/metrics/chaos-stream.ts +93 -0
- package/src/domains/eval/metrics/context.ts +34 -0
- package/src/domains/eval/metrics/coverage.ts +21 -0
- package/src/domains/eval/metrics/evidence.ts +182 -0
- package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
- package/src/domains/eval/metrics/invariants.ts +736 -0
- package/src/domains/eval/metrics/latency.ts +4 -0
- package/src/domains/eval/metrics/token-stream.ts +139 -0
- package/src/domains/eval/metrics/tokens.ts +51 -0
- package/src/domains/eval/metrics/tool-calls.ts +7 -0
- package/src/domains/eval/proactive-memory.ts +279 -0
- package/src/domains/eval/provenance.ts +35 -0
- package/src/domains/eval/report.ts +234 -0
- package/src/domains/eval/reports/json.ts +5 -0
- package/src/domains/eval/reports/junit.ts +23 -0
- package/src/domains/eval/reports/markdown.ts +20 -0
- package/src/domains/eval/reports/swe-jsonl.ts +16 -0
- package/src/domains/eval/reports/text.ts +25 -0
- package/src/domains/eval/run-compare.ts +274 -0
- package/src/domains/eval/runner.ts +244 -0
- package/src/domains/eval/runners/clio-run.ts +148 -0
- package/src/domains/eval/runners/context-index.ts +56 -0
- package/src/domains/eval/runners/context-init.ts +203 -0
- package/src/domains/eval/runners/external-command.ts +350 -0
- package/src/domains/eval/runtime-paths.ts +171 -0
- package/src/domains/eval/schema/artifact.ts +75 -0
- package/src/domains/eval/schema/suite.ts +235 -0
- package/src/domains/eval/schema/validate.ts +339 -0
- package/src/domains/eval/store.ts +392 -0
- package/src/domains/eval/suites/load.ts +74 -0
- package/src/domains/eval/suites/matrix.ts +19 -0
- package/src/domains/eval/suites/resolve.ts +44 -0
- package/src/domains/eval/suites/run.ts +325 -0
- package/src/domains/eval/task-file.ts +186 -0
- package/src/domains/eval/types.ts +141 -0
- package/src/domains/eval/verifiers/command.ts +27 -0
- package/src/domains/eval/verifiers/file-exists.ts +6 -0
- package/src/domains/eval/verifiers/patch.ts +22 -0
- package/src/domains/eval/workspaces/git.ts +41 -0
- package/src/domains/eval/workspaces/local.ts +17 -0
- package/src/domains/eval/workspaces/temp-copy.ts +29 -0
- package/src/domains/evidence/build.ts +1714 -0
- package/src/domains/evidence/eval.ts +605 -0
- package/src/domains/evidence/failure-attribution.ts +54 -0
- package/src/domains/evidence/finish-contract-map.ts +42 -0
- package/src/domains/evidence/index.ts +55 -0
- package/src/domains/evidence/provenance.ts +200 -0
- package/src/domains/evidence/redact.ts +81 -0
- package/src/domains/evidence/store.ts +291 -0
- package/src/domains/evidence/types.ts +325 -0
- package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
- package/src/domains/evolution/index.ts +26 -0
- package/src/domains/evolution/manifest.ts +154 -0
- package/src/domains/evolution/validate.ts +304 -0
- package/src/domains/extensions/contract.ts +22 -0
- package/src/domains/extensions/discovery.ts +193 -0
- package/src/domains/extensions/extension.ts +46 -0
- package/src/domains/extensions/index.ts +34 -0
- package/src/domains/extensions/manager.ts +30 -0
- package/src/domains/extensions/manifest.ts +6 -0
- package/src/domains/extensions/resources.ts +38 -0
- package/src/domains/extensions/state.ts +224 -0
- package/src/domains/extensions/types.ts +83 -0
- package/src/domains/interop/consent.ts +185 -0
- package/src/domains/interop/contract.ts +29 -0
- package/src/domains/interop/detect.ts +173 -0
- package/src/domains/interop/extension.ts +59 -0
- package/src/domains/interop/index.ts +34 -0
- package/src/domains/interop/manifest.ts +6 -0
- package/src/domains/interop/registry.ts +139 -0
- package/src/domains/interop/state.ts +92 -0
- package/src/domains/interop/types.ts +109 -0
- package/src/domains/lifecycle/contract.ts +11 -0
- package/src/domains/lifecycle/doctor.ts +536 -0
- package/src/domains/lifecycle/extension.ts +23 -0
- package/src/domains/lifecycle/index.ts +21 -0
- package/src/domains/lifecycle/install-method.ts +51 -0
- package/src/domains/lifecycle/manifest.ts +6 -0
- package/src/domains/lifecycle/migrations/index.ts +94 -0
- package/src/domains/lifecycle/state.ts +93 -0
- package/src/domains/lifecycle/upgrade-notice.ts +35 -0
- package/src/domains/lifecycle/version.ts +35 -0
- package/src/domains/memory/index.ts +128 -0
- package/src/domains/memory/operations.ts +143 -0
- package/src/domains/memory/prompt-section.ts +86 -0
- package/src/domains/memory/proposal.ts +180 -0
- package/src/domains/memory/store.ts +163 -0
- package/src/domains/memory/task-bank.ts +229 -0
- package/src/domains/memory/task-memory-handoff.ts +222 -0
- package/src/domains/memory/task-memory-policy.ts +602 -0
- package/src/domains/memory/task-memory-status.ts +58 -0
- package/src/domains/memory/task-memory-telemetry.ts +346 -0
- package/src/domains/memory/task-memory-trace.ts +89 -0
- package/src/domains/memory/types.ts +74 -0
- package/src/domains/memory/validate.ts +297 -0
- package/src/domains/middleware/budget.ts +216 -0
- package/src/domains/middleware/contract.ts +35 -0
- package/src/domains/middleware/dispatch-nudge.ts +469 -0
- package/src/domains/middleware/extension.ts +129 -0
- package/src/domains/middleware/hook-receipts.ts +70 -0
- package/src/domains/middleware/hooks-io.ts +174 -0
- package/src/domains/middleware/hooks.ts +432 -0
- package/src/domains/middleware/index.ts +154 -0
- package/src/domains/middleware/manifest.ts +6 -0
- package/src/domains/middleware/memory-intervention.ts +701 -0
- package/src/domains/middleware/rules.ts +42 -0
- package/src/domains/middleware/runtime.ts +333 -0
- package/src/domains/middleware/skills-reminder.ts +187 -0
- package/src/domains/middleware/snapshot.ts +71 -0
- package/src/domains/middleware/stalled-turn.ts +71 -0
- package/src/domains/middleware/task-board-reminder.ts +87 -0
- package/src/domains/middleware/task-nudge.ts +77 -0
- package/src/domains/middleware/tool-choice-control.ts +42 -0
- package/src/domains/middleware/types.ts +131 -0
- package/src/domains/middleware/validate.ts +329 -0
- package/src/domains/observability/accountability.ts +67 -0
- package/src/domains/observability/contract.ts +168 -0
- package/src/domains/observability/cost.ts +206 -0
- package/src/domains/observability/evidence-index.ts +123 -0
- package/src/domains/observability/extension.ts +281 -0
- package/src/domains/observability/index.ts +78 -0
- package/src/domains/observability/manifest.ts +10 -0
- package/src/domains/observability/metrics.ts +37 -0
- package/src/domains/observability/projection.ts +477 -0
- package/src/domains/observability/telemetry.ts +89 -0
- package/src/domains/observability/trace-store.ts +1454 -0
- package/src/domains/prompts/compiler.ts +556 -0
- package/src/domains/prompts/contract.ts +30 -0
- package/src/domains/prompts/extension.ts +304 -0
- package/src/domains/prompts/fragment-loader.ts +139 -0
- package/src/domains/prompts/fragments/identity/clio.md +3 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +63 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -1
- package/src/domains/prompts/hash.ts +73 -0
- package/src/domains/prompts/index.ts +32 -0
- package/src/domains/prompts/manifest.ts +8 -0
- package/src/domains/prompts/memory-intervention.ts +57 -0
- package/src/domains/prompts/preload.ts +82 -0
- package/src/domains/providers/auth/api-key.ts +47 -0
- package/src/domains/providers/auth/backend-file.ts +69 -0
- package/src/domains/providers/auth/backend-memory.ts +17 -0
- package/src/domains/providers/auth/index.ts +37 -0
- package/src/domains/providers/auth/oauth.ts +36 -0
- package/src/domains/providers/auth/storage.ts +667 -0
- package/src/domains/providers/capabilities.ts +50 -0
- package/src/domains/providers/catalog.ts +162 -0
- package/src/domains/providers/contract.ts +151 -0
- package/src/domains/providers/credentials.ts +20 -0
- package/src/domains/providers/eligibility.ts +24 -0
- package/src/domains/providers/errors.ts +64 -0
- package/src/domains/providers/extension.ts +536 -0
- package/src/domains/providers/index.ts +142 -0
- package/src/domains/providers/knowledge-base-path.ts +102 -0
- package/src/domains/providers/manifest.ts +6 -0
- package/src/domains/providers/model-capabilities.ts +136 -0
- package/src/domains/providers/model-discovery.ts +144 -0
- package/src/domains/providers/model-family.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +712 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +2 -2
- package/src/domains/providers/plugins.ts +59 -0
- package/src/domains/providers/probe/fingerprint.ts +44 -0
- package/src/domains/providers/probe/http.ts +114 -0
- package/src/domains/providers/probe/reasoning.ts +111 -0
- package/src/domains/providers/registry.ts +166 -0
- package/src/domains/providers/resolver.ts +156 -0
- package/src/domains/providers/runtime-resolution.ts +720 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
- package/src/domains/providers/runtimes/builtins.ts +78 -0
- package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
- package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
- package/src/domains/providers/runtimes/claude/common.ts +55 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
- package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
- package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
- package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
- package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
- package/src/domains/providers/runtimes/cloud/google.ts +41 -0
- package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
- package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
- package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +32 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +165 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
- package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
- package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +491 -0
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
- package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
- package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
- package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
- package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
- package/src/domains/providers/runtimes/protocol/google.ts +27 -0
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
- package/src/domains/providers/support.ts +238 -0
- package/src/domains/providers/thinking-control-policy.ts +85 -0
- package/src/domains/providers/types/capability-flags.ts +114 -0
- package/src/domains/providers/types/cost-provenance.ts +7 -0
- package/src/domains/providers/types/inference.ts +41 -0
- package/src/domains/providers/types/knowledge-base.ts +156 -0
- package/src/domains/providers/types/local-model-quirks.ts +218 -0
- package/src/domains/providers/types/runtime-descriptor.ts +170 -0
- package/src/domains/providers/types/target-descriptor.ts +38 -0
- package/src/domains/resources/collision.ts +92 -0
- package/src/domains/resources/common-loader.ts +140 -0
- package/src/domains/resources/contract.ts +25 -0
- package/src/domains/resources/extension.ts +61 -0
- package/src/domains/resources/index.ts +74 -0
- package/src/domains/resources/loader.ts +86 -0
- package/src/domains/resources/manifest.ts +6 -0
- package/src/domains/resources/prompts/loader.ts +232 -0
- package/src/domains/resources/prompts/substitute.ts +65 -0
- package/src/domains/resources/skills/content-hash.ts +105 -0
- package/src/domains/resources/skills/evals.ts +175 -0
- package/src/domains/resources/skills/install.ts +410 -0
- package/src/domains/resources/skills/loader.ts +978 -0
- package/src/domains/resources/skills/marketplace.ts +255 -0
- package/src/domains/resources/skills/provenance-pin.ts +115 -0
- package/src/domains/safety/action-classifier.ts +268 -0
- package/src/domains/safety/approval-axis.ts +23 -0
- package/src/domains/safety/audit.ts +487 -0
- package/src/domains/safety/autonomy.ts +174 -0
- package/src/domains/safety/call-target.ts +59 -0
- package/src/domains/safety/contract.ts +65 -0
- package/src/domains/safety/damage-control.ts +44 -0
- package/src/domains/safety/default-path-policy.ts +117 -0
- package/src/domains/safety/extension.ts +383 -0
- package/src/domains/safety/finish-contract-registration.ts +128 -0
- package/src/domains/safety/finish-contract.ts +554 -0
- package/src/domains/safety/index.ts +44 -0
- package/src/domains/safety/loop-detector.ts +143 -0
- package/src/domains/safety/manifest.ts +6 -0
- package/src/domains/safety/path-policy.ts +164 -0
- package/src/domains/safety/policy-engine.ts +994 -0
- package/src/domains/safety/project-policy.ts +391 -0
- package/src/domains/safety/protected-artifacts-registration.ts +189 -0
- package/src/domains/safety/protected-artifacts.ts +993 -0
- package/src/domains/safety/rejection-feedback.ts +102 -0
- package/src/domains/safety/rigor.ts +72 -0
- package/src/domains/safety/rule-compiler.ts +48 -0
- package/src/domains/safety/rule-pack-loader.ts +92 -0
- package/src/domains/safety/run-effects.ts +197 -0
- package/src/domains/safety/scope.ts +61 -0
- package/src/domains/scheduling/budget.ts +35 -0
- package/src/domains/scheduling/cluster.ts +175 -0
- package/src/domains/scheduling/contract.ts +30 -0
- package/src/domains/scheduling/extension.ts +91 -0
- package/src/domains/scheduling/index.ts +12 -0
- package/src/domains/scheduling/manifest.ts +6 -0
- package/src/domains/session/archive-readers.ts +208 -0
- package/src/domains/session/checkpoint.ts +38 -0
- package/src/domains/session/compaction/auto.ts +89 -0
- package/src/domains/session/compaction/branch-summary.ts +186 -0
- package/src/domains/session/compaction/compact.ts +493 -0
- package/src/domains/session/compaction/cut-point.ts +171 -0
- package/src/domains/session/compaction/defaults.ts +34 -0
- package/src/domains/session/compaction/mask-observations.ts +265 -0
- package/src/domains/session/compaction/session-entries.ts +18 -0
- package/src/domains/session/compaction/tokens.ts +147 -0
- package/src/domains/session/context-accounting.ts +583 -0
- package/src/domains/session/context-ledger.ts +348 -0
- package/src/domains/session/contract.ts +144 -0
- package/src/domains/session/cwd-fallback.ts +65 -0
- package/src/domains/session/entries.ts +509 -0
- package/src/domains/session/extension.ts +322 -0
- package/src/domains/session/history.ts +172 -0
- package/src/domains/session/index.ts +84 -0
- package/src/domains/session/manager.ts +128 -0
- package/src/domains/session/manifest.ts +6 -0
- package/src/domains/session/migrations/index.ts +27 -0
- package/src/domains/session/prompt-manifest.ts +173 -0
- package/src/domains/session/protected-artifact-journal.ts +241 -0
- package/src/domains/session/protected-artifacts.ts +90 -0
- package/src/domains/session/retry.ts +238 -0
- package/src/domains/session/task-board.ts +375 -0
- package/src/domains/session/tree/active-path.ts +98 -0
- package/src/domains/session/tree/fork.ts +160 -0
- package/src/domains/session/tree/manager.ts +128 -0
- package/src/domains/session/tree/navigator.ts +177 -0
- package/src/domains/session/tree/preview.ts +259 -0
- package/src/domains/session/usage.ts +148 -0
- package/src/domains/session/workspace/git-probe.ts +161 -0
- package/src/domains/session/workspace/index.ts +4 -0
- package/src/domains/session/workspace/project-type.ts +217 -0
- package/src/domains/session/workspace/snapshot.ts +74 -0
- package/src/domains/share/archive.ts +684 -0
- package/src/domains/share/contract.ts +9 -0
- package/src/domains/share/extension.ts +26 -0
- package/src/domains/share/index.ts +28 -0
- package/src/domains/share/manifest.ts +6 -0
- package/src/engine/acp/adapter.ts +397 -0
- package/src/engine/acp/errors.ts +32 -0
- package/src/engine/acp/event-mapper.ts +154 -0
- package/src/engine/acp/server.ts +656 -0
- package/src/engine/acp/tool-mediator.ts +686 -0
- package/src/engine/acp/transport.ts +654 -0
- package/src/engine/acp/types.ts +170 -0
- package/src/engine/agent.ts +29 -0
- package/src/engine/ai.ts +202 -0
- package/src/engine/alcf-oauth.ts +198 -0
- package/src/engine/antigravity/subprocess-runtime.ts +205 -0
- package/src/engine/apis/degraded-inference.ts +95 -0
- package/src/engine/apis/index.ts +20 -0
- package/src/engine/apis/llamacpp-residency.ts +252 -0
- package/src/engine/apis/lmstudio-native.ts +1438 -0
- package/src/engine/apis/lmstudio-residency.ts +92 -0
- package/src/engine/apis/ollama-native.ts +507 -0
- package/src/engine/apis/openai-completions.ts +716 -0
- package/src/engine/apis/output-budget.ts +99 -0
- package/src/engine/apis/residency-lock.ts +29 -0
- package/src/engine/apis/residency.ts +640 -0
- package/src/engine/apis/resident-models.ts +42 -0
- package/src/engine/apis/sampling-overrides.ts +38 -0
- package/src/engine/apis/thinking-replay.ts +11 -0
- package/src/engine/claude/sdk-runtime.ts +685 -0
- package/src/engine/claude/session-id.ts +5 -0
- package/src/engine/claude/subprocess-runtime.ts +316 -0
- package/src/engine/claude/tool-safety.ts +400 -0
- package/src/engine/external-subprocess.ts +23 -0
- package/src/engine/harmony-response.ts +165 -0
- package/src/engine/loop-guard.ts +1127 -0
- package/src/engine/oauth.ts +192 -0
- package/src/engine/pi-mono-names.ts +13 -0
- package/src/engine/provider-payload.ts +315 -0
- package/src/engine/select-list.ts +53 -0
- package/src/engine/session.ts +834 -0
- package/src/engine/strip-tokenizer-sentinels.ts +125 -0
- package/src/engine/tui.ts +103 -0
- package/src/engine/types.ts +66 -0
- package/src/engine/worker-events.ts +100 -0
- package/src/engine/worker-runtime.ts +1022 -0
- package/src/engine/worker-tools.ts +203 -0
- package/src/entry/orchestrator.ts +1873 -0
- package/src/interactive/application-controller.ts +346 -0
- package/src/interactive/bus-notices.ts +265 -0
- package/src/interactive/chat-loop-messages.ts +626 -0
- package/src/interactive/chat-loop-policy.ts +18 -0
- package/src/interactive/chat-loop.ts +865 -0
- package/src/interactive/chat-panel.ts +1694 -0
- package/src/interactive/chat-renderer.ts +1038 -0
- package/src/interactive/clio-editor.ts +166 -0
- package/src/interactive/command-fallbacks.ts +23 -0
- package/src/interactive/command-output.ts +85 -0
- package/src/interactive/context-activity.ts +203 -0
- package/src/interactive/context-meter.ts +223 -0
- package/src/interactive/context-overlay.ts +220 -0
- package/src/interactive/cost-overlay.ts +279 -0
- package/src/interactive/dispatch-board.ts +1319 -0
- package/src/interactive/dispatch-steering.ts +86 -0
- package/src/interactive/editor-bash.ts +46 -0
- package/src/interactive/editor-steer.ts +51 -0
- package/src/interactive/editor-submit.ts +303 -0
- package/src/interactive/external-editor.ts +67 -0
- package/src/interactive/follow-up-queue-panel.ts +75 -0
- package/src/interactive/footer/dashboard.ts +534 -0
- package/src/interactive/footer/notifications.ts +275 -0
- package/src/interactive/footer/widgets.ts +1246 -0
- package/src/interactive/footer-panel.ts +187 -0
- package/src/interactive/format-time.ts +85 -0
- package/src/interactive/index.ts +11 -0
- package/src/interactive/interactive-application.ts +755 -0
- package/src/interactive/interactive-event-projection.ts +380 -0
- package/src/interactive/interactive-input-runtime.ts +261 -0
- package/src/interactive/interactive-presentation.ts +452 -0
- package/src/interactive/interactive-shell.ts +134 -0
- package/src/interactive/interactive-slash-runtime.ts +492 -0
- package/src/interactive/interactive-subscriptions.ts +111 -0
- package/src/interactive/interactive-tickers.ts +152 -0
- package/src/interactive/keybinding-manager.ts +496 -0
- package/src/interactive/layout.ts +20 -0
- package/src/interactive/leader-key.ts +143 -0
- package/src/interactive/loop-guard-interrupt.ts +101 -0
- package/src/interactive/memory-overlay.ts +280 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
- package/src/interactive/overlay-auth-lifecycle.ts +308 -0
- package/src/interactive/overlay-frame.ts +502 -0
- package/src/interactive/overlay-general-openers.ts +217 -0
- package/src/interactive/overlay-key-routing.ts +213 -0
- package/src/interactive/overlay-lifecycle.ts +413 -0
- package/src/interactive/overlay-model-selectors.ts +127 -0
- package/src/interactive/overlay-permission-lifecycle.ts +344 -0
- package/src/interactive/overlay-resource-openers.ts +112 -0
- package/src/interactive/overlay-session-lifecycle.ts +270 -0
- package/src/interactive/overlay-transitions.ts +57 -0
- package/src/interactive/overlays/agents.ts +69 -0
- package/src/interactive/overlays/ask-user.ts +921 -0
- package/src/interactive/overlays/auth-dialog.ts +221 -0
- package/src/interactive/overlays/context-reset.ts +108 -0
- package/src/interactive/overlays/cwd-fallback.ts +141 -0
- package/src/interactive/overlays/extensions.ts +54 -0
- package/src/interactive/overlays/help-reference.ts +140 -0
- package/src/interactive/overlays/interop.ts +139 -0
- package/src/interactive/overlays/keybinding-detail.ts +90 -0
- package/src/interactive/overlays/list-overlay.ts +606 -0
- package/src/interactive/overlays/message-picker.ts +155 -0
- package/src/interactive/overlays/model-selector.ts +1091 -0
- package/src/interactive/overlays/prompts.ts +72 -0
- package/src/interactive/overlays/session-selector-search.ts +31 -0
- package/src/interactive/overlays/session-selector.ts +266 -0
- package/src/interactive/overlays/settings.ts +3363 -0
- package/src/interactive/overlays/skills-hub.ts +237 -0
- package/src/interactive/overlays/tree-selector.ts +387 -0
- package/src/interactive/permission-overlay.ts +170 -0
- package/src/interactive/render-trace.ts +125 -0
- package/src/interactive/renderers/branch-summary.ts +86 -0
- package/src/interactive/renderers/code-ink.ts +420 -0
- package/src/interactive/renderers/compaction-summary.ts +112 -0
- package/src/interactive/renderers/diff.ts +126 -0
- package/src/interactive/renderers/notice.ts +28 -0
- package/src/interactive/renderers/retry-status.ts +31 -0
- package/src/interactive/renderers/structured.ts +89 -0
- package/src/interactive/renderers/tool-execution.ts +1104 -0
- package/src/interactive/renderers/worker-entry.ts +264 -0
- package/src/interactive/session-last-turn.ts +186 -0
- package/src/interactive/session-transcript.ts +105 -0
- package/src/interactive/session-usage-reseed.ts +74 -0
- package/src/interactive/slash-autocomplete.ts +364 -0
- package/src/interactive/slash-commands.ts +1319 -0
- package/src/interactive/slash-spec.ts +453 -0
- package/src/interactive/status/controller.ts +256 -0
- package/src/interactive/status/index.ts +23 -0
- package/src/interactive/status/state-machine.ts +530 -0
- package/src/interactive/status/summary.ts +170 -0
- package/src/interactive/status/types.ts +121 -0
- package/src/interactive/status/verbs.ts +163 -0
- package/src/interactive/status/watchdog.ts +24 -0
- package/src/interactive/tasks-overlay.ts +186 -0
- package/src/interactive/theme/components.ts +55 -0
- package/src/interactive/theme/glyphs.ts +70 -0
- package/src/interactive/theme/index.ts +15 -0
- package/src/interactive/theme/labels.ts +88 -0
- package/src/interactive/theme/rules.ts +138 -0
- package/src/interactive/theme/segments.ts +88 -0
- package/src/interactive/theme/tokens.ts +121 -0
- package/src/interactive/thinking-level-policy.ts +6 -0
- package/src/interactive/tool-prose-loop.ts +122 -0
- package/src/interactive/tool-prose-registration.ts +48 -0
- package/src/interactive/turn-context.ts +854 -0
- package/src/interactive/turn-middleware.ts +283 -0
- package/src/interactive/turn-persistence.ts +441 -0
- package/src/interactive/turn-queues.ts +169 -0
- package/src/interactive/turn-recovery.ts +306 -0
- package/src/interactive/turn-runtime.ts +802 -0
- package/src/interactive/turn-state.ts +123 -0
- package/src/interactive/view/artifacts.ts +1342 -0
- package/src/interactive/view/view-overlay.ts +732 -0
- package/src/interactive/welcome-dashboard.ts +536 -0
- package/src/interactive/worker-receipts.ts +94 -0
- package/src/interactive/worker-replay.ts +111 -0
- package/src/interactive/worker-share.ts +100 -0
- package/src/interactive/worker-stream.ts +442 -0
- package/src/interactive/workspace-facts.ts +141 -0
- package/src/tools/agent-tools.ts +382 -0
- package/src/tools/artifact.ts +103 -0
- package/src/tools/ask-user.ts +656 -0
- package/src/tools/bash.ts +176 -0
- package/src/tools/bootstrap.ts +474 -0
- package/src/tools/codewiki/code-nav.ts +563 -0
- package/src/tools/codewiki/shared.ts +115 -0
- package/src/tools/compete-worktrees.ts +898 -0
- package/src/tools/context/docs-engine.ts +619 -0
- package/src/tools/context/index.ts +435 -0
- package/src/tools/credential-present.ts +151 -0
- package/src/tools/dispatch-arguments.ts +228 -0
- package/src/tools/dispatch-plan.ts +741 -0
- package/src/tools/dispatch-scout.ts +461 -0
- package/src/tools/dispatch.ts +3338 -0
- package/src/tools/edit-diff.ts +534 -0
- package/src/tools/edit.ts +128 -0
- package/src/tools/executables.ts +22 -0
- package/src/tools/file-mutation-queue.ts +35 -0
- package/src/tools/find.ts +292 -0
- package/src/tools/grep.ts +495 -0
- package/src/tools/ignore-policy.ts +169 -0
- package/src/tools/ledger.ts +206 -0
- package/src/tools/ls.ts +110 -0
- package/src/tools/monitor.ts +797 -0
- package/src/tools/network-policy.ts +29 -0
- package/src/tools/observation.ts +421 -0
- package/src/tools/observers.ts +99 -0
- package/src/tools/path-utils.ts +79 -0
- package/src/tools/policy.ts +154 -0
- package/src/tools/profiles.ts +108 -0
- package/src/tools/read.ts +173 -0
- package/src/tools/registry.ts +1157 -0
- package/src/tools/result-shaping.ts +204 -0
- package/src/tools/safe-exec.ts +128 -0
- package/src/tools/spawn-hygiene.ts +182 -0
- package/src/tools/steer.ts +88 -0
- package/src/tools/string-enum.ts +15 -0
- package/src/tools/tasks.ts +168 -0
- package/src/tools/truncate-utf8.ts +17 -0
- package/src/tools/truncate.ts +202 -0
- package/src/tools/verify/frontend.ts +685 -0
- package/src/tools/verify/index.ts +66 -0
- package/src/tools/verify/scripts.ts +108 -0
- package/src/tools/web-fetch.ts +777 -0
- package/src/tools/worker-evidence.ts +215 -0
- package/src/tools/write.ts +52 -0
- package/src/utils/exif-orientation.ts +192 -0
- package/src/utils/git.ts +24 -0
- package/src/utils/image-resize.ts +148 -0
- package/src/utils/photon.ts +103 -0
- package/src/worker/control-lane.ts +22 -0
- package/src/worker/entry.ts +257 -0
- package/src/worker/event-projection.ts +56 -0
- package/src/worker/heartbeat.ts +24 -0
- package/src/worker/ledger-mirror.ts +95 -0
- package/src/worker/ndjson.ts +40 -0
- package/src/worker/protocol.ts +529 -0
- package/src/worker/resource-facts.ts +79 -0
- package/src/worker/runtime-registry.ts +12 -0
- package/src/worker/spec-contract.ts +654 -0
- package/src/worker/stdin-demux.ts +316 -0
- package/dist/acp-UMLFVA3F.js +0 -92
- package/dist/chunk-262G75JS.js +0 -35
- package/dist/chunk-5LDRNKX2.js +0 -1063
- package/dist/chunk-67MTHP2E.js +0 -135
- package/dist/chunk-GOTUR54M.js +0 -9
- package/dist/chunk-TPOCL34A.js +0 -2876
- package/dist/chunk-XV4ZJ6ZM.js +0 -3177
- package/dist/clio-KIQ5SNDS.js +0 -53
- package/dist/configure-G4E3A2PG.js +0 -27
- package/dist/doctor-M5HJJZOL.js +0 -61
- package/dist/domains/agents/builtins/architect.md +0 -33
- package/dist/domains/agents/builtins/coder.md +0 -31
- package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
- package/dist/domains/agents/builtins/debugger.md +0 -30
- package/dist/domains/agents/builtins/documenter.md +0 -31
- package/dist/domains/agents/builtins/git-master.md +0 -30
- package/dist/domains/agents/builtins/provenance.md +0 -30
- package/dist/domains/agents/builtins/researcher.md +0 -71
- package/dist/domains/agents/builtins/scout.md +0 -42
- package/dist/domains/agents/builtins/tester.md +0 -31
- package/dist/domains/agents/builtins/verifier.md +0 -30
- package/dist/domains/agents/builtins/wiki-writer.md +0 -41
- package/dist/fleet-preflight-CLIAX7YR.js +0 -21
- package/dist/preload-KZVHET2B.js +0 -11
- package/dist/version-ROZ6CZKH.js +0 -16
- package/skills/git/commit-crafting/SKILL.md +0 -79
- package/skills/git/commit-crafting/evals.md +0 -92
- package/skills/git/create-pr/SKILL.md +0 -116
- package/skills/git/create-pr/evals.md +0 -114
- package/skills/git/investigate-issue/SKILL.md +0 -139
- package/skills/git/investigate-issue/evals.md +0 -94
- package/skills/git/review-changes/SKILL.md +0 -103
- package/skills/git/review-changes/evals.md +0 -85
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
import { closeAgentLedger, openAgentLedger } from "./agent-ledger-store.js";
|
|
2
|
+
import { type ExecutionHandoff, projectExecutionHandoffs } from "./execution-handoff.js";
|
|
3
|
+
import {
|
|
4
|
+
type ExecutionPlan,
|
|
5
|
+
type ExecutionPlanAgentStep,
|
|
6
|
+
type ExecutionPlanCodeStep,
|
|
7
|
+
type ExecutionPlanLoop,
|
|
8
|
+
type ExecutionPlanStep,
|
|
9
|
+
executionPlanAncestors,
|
|
10
|
+
} from "./execution-plan.js";
|
|
11
|
+
|
|
12
|
+
export interface ExecutionStepResult extends ExecutionHandoff {
|
|
13
|
+
succeeded: boolean;
|
|
14
|
+
integrityValid: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* The step changed the workspace outside its declared boundary. Sealed by
|
|
17
|
+
* the orchestrator after the fact, never by the step: a run that reports on
|
|
18
|
+
* its own writes is not a witness.
|
|
19
|
+
*/
|
|
20
|
+
boundaryViolated?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The verdict on one scheduling window's write boundary, projected for the
|
|
25
|
+
* scheduler. The full record, with the offending paths and everything rolled
|
|
26
|
+
* back, is written durably by whoever performs the check.
|
|
27
|
+
*/
|
|
28
|
+
export interface ExecutionWriteBoundaryOutcome {
|
|
29
|
+
/** `wave-<n>` or `revalidate-<stepId>-<n>`; matches the durable record. */
|
|
30
|
+
window: string;
|
|
31
|
+
violated: boolean;
|
|
32
|
+
/** Steps that fail because of it. More than one means concurrent authorship. */
|
|
33
|
+
failedStepIds: ReadonlyArray<string>;
|
|
34
|
+
/** Operator-facing message naming the paths and the declaration. */
|
|
35
|
+
detail: string | null;
|
|
36
|
+
}
|
|
37
|
+
export interface ExecutionPlanAdmission {
|
|
38
|
+
step: ExecutionPlanAgentStep;
|
|
39
|
+
costUpperBoundUsd: number;
|
|
40
|
+
nodeId: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* How a loop ended.
|
|
45
|
+
*
|
|
46
|
+
* `loop_bound_exhausted` is the declared bound spent without a passing
|
|
47
|
+
* verification: every attempt ran and the answer was still no. It is a typed
|
|
48
|
+
* outcome rather than a generic step failure because the operator's question
|
|
49
|
+
* ("did it converge?") is different from "did something break", and because
|
|
50
|
+
* the bound is the number they get to change.
|
|
51
|
+
*/
|
|
52
|
+
export type ExecutionLoopReason = "resolved" | "loop_bound_exhausted" | "loop_step_failed" | "loop_not_reached";
|
|
53
|
+
|
|
54
|
+
export interface ExecutionLoopOutcome {
|
|
55
|
+
loopId: string;
|
|
56
|
+
resolved: boolean;
|
|
57
|
+
/** Verifications that actually ran, including staleness revalidations. */
|
|
58
|
+
attempts: number;
|
|
59
|
+
repairs: number;
|
|
60
|
+
reason: ExecutionLoopReason;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** One coordinator continuation decision for a loop whose check is an agent. */
|
|
64
|
+
export interface ExecutionLoopDecision {
|
|
65
|
+
/** Whether the verification passed and the loop is done. */
|
|
66
|
+
resolved: boolean;
|
|
67
|
+
/** Structured findings threaded to the repair attempt, or null. */
|
|
68
|
+
findings: string | null;
|
|
69
|
+
/** Operator-facing reason the gate produced no usable verdict. */
|
|
70
|
+
needsDecision?: string | null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface ExecutionLoopDecisionInput {
|
|
74
|
+
loop: ExecutionPlanLoop;
|
|
75
|
+
step: ExecutionPlanStep;
|
|
76
|
+
/** 1-based verification ordinal. */
|
|
77
|
+
attempt: number;
|
|
78
|
+
/** True when the declared bound leaves no further repair. */
|
|
79
|
+
terminalAttempt: boolean;
|
|
80
|
+
result: ExecutionStepResult;
|
|
81
|
+
/** Results the loop has produced so far, by step id. */
|
|
82
|
+
priorResults: ReadonlyMap<string, ExecutionStepResult>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface ExecutionSchedulerAdapter {
|
|
86
|
+
preflight(step: ExecutionPlanAgentStep): ExecutionPlanAdmission;
|
|
87
|
+
reserve(plan: ExecutionPlan, admissions: ReadonlyArray<ExecutionPlanAdmission>): { ownerId: string };
|
|
88
|
+
run(
|
|
89
|
+
step: ExecutionPlanAgentStep,
|
|
90
|
+
handoffs: ReadonlyArray<ExecutionHandoff>,
|
|
91
|
+
reservation: { ownerId: string; memberId: string },
|
|
92
|
+
/**
|
|
93
|
+
* The agent ledger this plan's steps coordinate on, present only when the
|
|
94
|
+
* plan has two or more agent steps. The adapter threads it onto the
|
|
95
|
+
* request it builds; the scheduler owns the ledger's lifetime.
|
|
96
|
+
*/
|
|
97
|
+
ledger?: { id: string; sequence: number },
|
|
98
|
+
): Promise<{ assignmentId: string; result: Promise<ExecutionStepResult> }>;
|
|
99
|
+
/**
|
|
100
|
+
* Execute a deterministic step. It takes no reservation because it holds no
|
|
101
|
+
* worker capacity lease. Required only for plans that contain code steps.
|
|
102
|
+
* `priorResults` is what a commit node reads its message from: the message
|
|
103
|
+
* belongs to the agent that produced the work, not to the committer.
|
|
104
|
+
*/
|
|
105
|
+
runCode?(
|
|
106
|
+
step: ExecutionPlanCodeStep,
|
|
107
|
+
handoffs: ReadonlyArray<ExecutionHandoff>,
|
|
108
|
+
signal: AbortSignal,
|
|
109
|
+
priorResults: ReadonlyMap<string, ExecutionStepResult>,
|
|
110
|
+
): Promise<ExecutionStepResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Decide whether an agent verification resolved its loop. Required only for
|
|
113
|
+
* plans with an agent-checked loop: a worker that merely ran successfully
|
|
114
|
+
* has not said whether the work passes, and the scheduler refuses to guess.
|
|
115
|
+
*/
|
|
116
|
+
decideLoop?(input: ExecutionLoopDecisionInput): Promise<ExecutionLoopDecision>;
|
|
117
|
+
/**
|
|
118
|
+
* Record the workspace as it stands before a window's steps run. Required
|
|
119
|
+
* only for plans whose steps declare a boundary; a plan that declares one
|
|
120
|
+
* and a scheduler that cannot check it is refused rather than run
|
|
121
|
+
* unenforced.
|
|
122
|
+
*/
|
|
123
|
+
beginWriteBoundary?(window: string, stepIds: ReadonlyArray<string>): void;
|
|
124
|
+
/**
|
|
125
|
+
* Compare the workspace against that snapshot, roll back what the window was
|
|
126
|
+
* not allowed to change, and return the verdict. Runs before any result
|
|
127
|
+
* crosses an edge: a step that wrote outside its boundary must not hand its
|
|
128
|
+
* output to a dependent as though it had passed.
|
|
129
|
+
*/
|
|
130
|
+
verifyWriteBoundary?(window: string, stepIds: ReadonlyArray<string>): Promise<ExecutionWriteBoundaryOutcome>;
|
|
131
|
+
cancel(assignmentId: string): void;
|
|
132
|
+
release(ownerId: string): void;
|
|
133
|
+
releaseUnconsumed(ownerId: string): void;
|
|
134
|
+
}
|
|
135
|
+
export interface ExecutionPlanResult {
|
|
136
|
+
planHash: string;
|
|
137
|
+
results: ReadonlyMap<string, ExecutionStepResult>;
|
|
138
|
+
skipped: ReadonlyArray<string>;
|
|
139
|
+
/** Nodes a resolved loop made unnecessary; declared, never run, not failures. */
|
|
140
|
+
unneeded: ReadonlyArray<string>;
|
|
141
|
+
loops: ReadonlyArray<ExecutionLoopOutcome>;
|
|
142
|
+
/** Verifications re-run because a later workspace step invalidated their green. */
|
|
143
|
+
revalidated: ReadonlyArray<string>;
|
|
144
|
+
needsDecision: ReadonlyArray<string>;
|
|
145
|
+
/** Every enforced window, in scheduling order, violated or not. */
|
|
146
|
+
writeBoundaries: ReadonlyArray<ExecutionWriteBoundaryOutcome>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Times one verification may be re-run for staleness inside a single plan. A
|
|
151
|
+
* deterministic command is cheap, but an unbounded revalidation chain is a
|
|
152
|
+
* loop nobody declared, so the plan fails closed instead.
|
|
153
|
+
*/
|
|
154
|
+
export const STALENESS_REVALIDATION_LIMIT = 3;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* A step whose completion can change what a verification measured. A
|
|
158
|
+
* verification does not invalidate itself, and a commit records the tree
|
|
159
|
+
* without editing it; everything else that may write does invalidate.
|
|
160
|
+
*/
|
|
161
|
+
function isWorkspaceMutator(step: ExecutionPlanStep): boolean {
|
|
162
|
+
if (step.scope !== "workspace") return false;
|
|
163
|
+
if (step.kind !== "code") return true;
|
|
164
|
+
return step.verification !== true && step.commitFrom === undefined;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export async function executePlan(
|
|
168
|
+
plan: ExecutionPlan,
|
|
169
|
+
adapter: ExecutionSchedulerAdapter,
|
|
170
|
+
signal?: AbortSignal,
|
|
171
|
+
): Promise<ExecutionPlanResult> {
|
|
172
|
+
const stepsById = new Map(plan.steps.map((step) => [step.id, step]));
|
|
173
|
+
const loopsById = new Map(plan.loops.map((loop) => [loop.id, loop]));
|
|
174
|
+
const agentSteps: ExecutionPlanAgentStep[] = [];
|
|
175
|
+
for (const step of plan.steps) {
|
|
176
|
+
if (step.kind === "code") {
|
|
177
|
+
if (adapter.runCode === undefined) {
|
|
178
|
+
throw new Error(`execution plan: step '${step.id}' is a code step and this scheduler cannot run one`);
|
|
179
|
+
}
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (step.approvedAuthority === null || step.approvedAuthority !== step.requestedAuthority) {
|
|
183
|
+
throw new Error(`execution plan: step '${step.id}' lacks its requested authority grant`);
|
|
184
|
+
}
|
|
185
|
+
agentSteps.push(step);
|
|
186
|
+
}
|
|
187
|
+
for (const loop of plan.loops) {
|
|
188
|
+
if (loop.checkKind === "agent" && adapter.decideLoop === undefined) {
|
|
189
|
+
throw new Error(`execution plan: loop '${loop.id}' is agent-checked and this scheduler cannot decide one`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// A declared boundary that nothing checks is worse than no boundary: the
|
|
193
|
+
// contract reads as confinement and the run has none. Fail closed.
|
|
194
|
+
const enforcesBoundaries = plan.steps.some((step) => step.writes !== undefined);
|
|
195
|
+
if (enforcesBoundaries && (adapter.beginWriteBoundary === undefined || adapter.verifyWriteBoundary === undefined)) {
|
|
196
|
+
throw new Error("execution plan: steps declare write boundaries and this scheduler cannot verify them");
|
|
197
|
+
}
|
|
198
|
+
// Resolve every hard admission fact before reservation or spawn. Code steps
|
|
199
|
+
// are outside admission entirely: they reserve nothing and spawn no worker.
|
|
200
|
+
// Loop attempts are admitted up front too, because the bound is the ceiling
|
|
201
|
+
// an operator approved and a repair must never be admitted mid-run.
|
|
202
|
+
// A plan with a single agent step has no peers, so it gets no board.
|
|
203
|
+
const ledgerId = agentSteps.length >= 2 ? `ledger-plan-${plan.hash.slice(0, 12)}-${Date.now().toString(36)}` : null;
|
|
204
|
+
const ledger = ledgerId === null ? undefined : { id: ledgerId, sequence: 0 };
|
|
205
|
+
if (ledgerId !== null) await openAgentLedger(ledgerId);
|
|
206
|
+
const admissions = agentSteps.map((step) => adapter.preflight(step));
|
|
207
|
+
const reservation = adapter.reserve(plan, admissions);
|
|
208
|
+
const results = new Map<string, ExecutionStepResult>();
|
|
209
|
+
const skipped = new Set<string>();
|
|
210
|
+
const unneeded = new Set<string>();
|
|
211
|
+
const needsDecision: string[] = [];
|
|
212
|
+
const running = new Map<string, { assignmentId: string | null }>();
|
|
213
|
+
/** Per-check verdict, so a loop's resolution is recomputed from live results. */
|
|
214
|
+
const checkPassed = new Map<string, boolean>();
|
|
215
|
+
/** Findings a failed agent verification threaded to its repair attempt. */
|
|
216
|
+
const loopFindings = new Map<string, string>();
|
|
217
|
+
const attemptsRun = new Map<string, number>();
|
|
218
|
+
const repairsRun = new Map<string, number>();
|
|
219
|
+
const revalidations = new Map<string, number>();
|
|
220
|
+
const revalidated: string[] = [];
|
|
221
|
+
const writeBoundaries: ExecutionWriteBoundaryOutcome[] = [];
|
|
222
|
+
/** Monotonic completion order, the only clock staleness needs. */
|
|
223
|
+
let sequence = 0;
|
|
224
|
+
const completedAt = new Map<string, number>();
|
|
225
|
+
let lastMutationSeq = 0;
|
|
226
|
+
let stopped = false;
|
|
227
|
+
// Code steps carry no assignment id, so `cancel` cannot reach them. They are
|
|
228
|
+
// aborted through this signal, which the runner turns into a process-group
|
|
229
|
+
// kill on the whole command tree.
|
|
230
|
+
const codeAbort = new AbortController();
|
|
231
|
+
const cancelOwned = (): void => {
|
|
232
|
+
stopped = true;
|
|
233
|
+
for (const owned of running.values()) if (owned.assignmentId !== null) adapter.cancel(owned.assignmentId);
|
|
234
|
+
codeAbort.abort();
|
|
235
|
+
adapter.releaseUnconsumed(reservation.ownerId);
|
|
236
|
+
};
|
|
237
|
+
signal?.addEventListener("abort", cancelOwned, { once: true });
|
|
238
|
+
|
|
239
|
+
const loopOf = (step: ExecutionPlanStep): ExecutionPlanLoop | null =>
|
|
240
|
+
step.loop === undefined ? null : (loopsById.get(step.loop.loopId) ?? null);
|
|
241
|
+
const loopResolved = (loop: ExecutionPlanLoop): boolean =>
|
|
242
|
+
loop.checkStepIds.some((id) => results.has(id) && checkPassed.get(id) === true);
|
|
243
|
+
|
|
244
|
+
const recordCompletion = (step: ExecutionPlanStep, result: ExecutionStepResult): void => {
|
|
245
|
+
sequence += 1;
|
|
246
|
+
completedAt.set(step.id, sequence);
|
|
247
|
+
results.set(step.id, result);
|
|
248
|
+
if (isWorkspaceMutator(step)) lastMutationSeq = sequence;
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* A failed predecessor normally disqualifies its dependents. Two deliberate
|
|
253
|
+
* exceptions carry a failure across an edge instead of severing it:
|
|
254
|
+
*
|
|
255
|
+
* - A failed code step under `onFailure: continue`. The red suite's
|
|
256
|
+
* verbatim output is the input to the step that repairs it.
|
|
257
|
+
* - A failed verification inside a bounded loop, for that loop's own
|
|
258
|
+
* repair attempt. That edge is the loop's designed failure path, so it
|
|
259
|
+
* carries the red result regardless of the plan's failure policy. Only
|
|
260
|
+
* an integrity-invalid result severs it: a run that cannot be trusted
|
|
261
|
+
* is not evidence of anything.
|
|
262
|
+
*
|
|
263
|
+
* An edge out of a verification is answered by the loop, never by the
|
|
264
|
+
* verification's own exit status. A gate agent that ran perfectly and
|
|
265
|
+
* returned `fail` is a successful run and an unmet condition, so reading
|
|
266
|
+
* `succeeded` here would let a rejected review flow downstream as approval.
|
|
267
|
+
*/
|
|
268
|
+
const dependencyBlocks = (dependency: string, dependent: ExecutionPlanStep): boolean => {
|
|
269
|
+
if (unneeded.has(dependency)) return false;
|
|
270
|
+
if (skipped.has(dependency)) return true;
|
|
271
|
+
const result = results.get(dependency);
|
|
272
|
+
// A boundary violation severs every edge, including a loop's own repair
|
|
273
|
+
// path. The tree was rolled back or left for an operator; either way the
|
|
274
|
+
// answer is not "try again", it is "this step is not allowed to do that".
|
|
275
|
+
if (result?.boundaryViolated === true) return true;
|
|
276
|
+
const source = stepsById.get(dependency);
|
|
277
|
+
const loop = source?.loop?.role === "check" ? loopOf(source) : null;
|
|
278
|
+
if (loop !== null) {
|
|
279
|
+
// Inside the loop, only an untrustworthy result severs the chain; the
|
|
280
|
+
// verdict itself is what the next attempt exists to answer.
|
|
281
|
+
if (dependent.loop?.loopId === loop.id) return result !== undefined && !result.integrityValid;
|
|
282
|
+
return !loopResolved(loop);
|
|
283
|
+
}
|
|
284
|
+
if (result === undefined) return true;
|
|
285
|
+
if (!result.integrityValid) return true;
|
|
286
|
+
if (result.succeeded) return false;
|
|
287
|
+
return !(source?.kind === "code" && plan.onFailure === "continue");
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Handoffs from predecessors that produced a result. Only loop members may
|
|
292
|
+
* be absent: a resolved loop leaves its later attempts declared and unrun.
|
|
293
|
+
* Any other missing predecessor stays in the list so projection still fails
|
|
294
|
+
* loudly rather than quietly handing a step less context than it declared.
|
|
295
|
+
*/
|
|
296
|
+
const handoffsFor = (step: ExecutionPlanStep): ExecutionHandoff[] => {
|
|
297
|
+
const available = step.dependencies.filter((id) => results.has(id) || stepsById.get(id)?.loop === undefined);
|
|
298
|
+
const projected = projectExecutionHandoffs(available, results);
|
|
299
|
+
if (step.loop?.role !== "repair") return projected;
|
|
300
|
+
// A gate's continuation findings, not its raw transcript, are what the
|
|
301
|
+
// repair attempt is answering.
|
|
302
|
+
const findings = loopFindings.get(`${step.loop.loopId}:${step.loop.attempt}`);
|
|
303
|
+
if (findings === undefined) return projected;
|
|
304
|
+
const checkId = loopsById.get(step.loop.loopId)?.checkStepIds[step.loop.attempt - 1];
|
|
305
|
+
return projected.map((handoff) => (handoff.stepId === checkId ? { ...handoff, output: findings } : handoff));
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
const isUnneeded = (step: ExecutionPlanStep): boolean => {
|
|
309
|
+
const loop = loopOf(step);
|
|
310
|
+
if (loop === null) return false;
|
|
311
|
+
// Every later attempt of a resolved loop is declared but unnecessary. The
|
|
312
|
+
// first verification always runs: it is the question the loop exists to
|
|
313
|
+
// ask.
|
|
314
|
+
if (step.loop?.role === "check" && step.loop.attempt === 1) return false;
|
|
315
|
+
return loopResolved(loop);
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Open an enforcement window over the steps of one scheduling unit. The
|
|
320
|
+
* snapshot is taken before anything spawns, so every change the window
|
|
321
|
+
* produces is inside it.
|
|
322
|
+
*/
|
|
323
|
+
const openBoundary = (window: string, steps: ReadonlyArray<ExecutionPlanStep>): string[] | null => {
|
|
324
|
+
const enforced = steps.filter((step) => step.writes !== undefined).map((step) => step.id);
|
|
325
|
+
if (enforced.length === 0 || adapter.beginWriteBoundary === undefined) return null;
|
|
326
|
+
adapter.beginWriteBoundary(window, enforced);
|
|
327
|
+
return enforced;
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Close the window before any result crosses an edge. A blamed step fails
|
|
332
|
+
* whatever its exit status said: writing outside the declared boundary is
|
|
333
|
+
* not a thing a successful run gets to have done, and it is not something a
|
|
334
|
+
* loop repair can be asked to fix, so the failure is carried on the result
|
|
335
|
+
* rather than folded into the loop's verdict.
|
|
336
|
+
*/
|
|
337
|
+
const closeBoundary = async (
|
|
338
|
+
window: string,
|
|
339
|
+
enforced: ReadonlyArray<string> | null,
|
|
340
|
+
settled: ReadonlyArray<{ step: ExecutionPlanStep; result: ExecutionStepResult }>,
|
|
341
|
+
): Promise<Array<{ step: ExecutionPlanStep; result: ExecutionStepResult }>> => {
|
|
342
|
+
const verify = adapter.verifyWriteBoundary;
|
|
343
|
+
if (enforced === null || verify === undefined) return [...settled];
|
|
344
|
+
const outcome = await verify(window, enforced);
|
|
345
|
+
writeBoundaries.push(outcome);
|
|
346
|
+
if (!outcome.violated) return [...settled];
|
|
347
|
+
const blamed = new Set(outcome.failedStepIds);
|
|
348
|
+
return settled.map(({ step, result }) =>
|
|
349
|
+
blamed.has(step.id) ? { step, result: { ...result, succeeded: false, boundaryViolated: true } } : { step, result },
|
|
350
|
+
);
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
const runCodeStepNode = async (
|
|
354
|
+
step: ExecutionPlanCodeStep,
|
|
355
|
+
handoffs: ReadonlyArray<ExecutionHandoff>,
|
|
356
|
+
): Promise<ExecutionStepResult> => {
|
|
357
|
+
const runCode = adapter.runCode;
|
|
358
|
+
if (runCode === undefined) throw new Error(`execution plan: no runner for code step '${step.id}'`);
|
|
359
|
+
return await runCode(step, handoffs, codeAbort.signal, results);
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Scheduler-enforced staleness. A green verification measured the workspace
|
|
364
|
+
* as it stood; a workspace step that finishes afterwards makes that green a
|
|
365
|
+
* statement about a tree nobody has now. Before any dependent may treat the
|
|
366
|
+
* verification as satisfied, the verification runs again.
|
|
367
|
+
*/
|
|
368
|
+
const revalidateFor = async (wave: ReadonlyArray<string>): Promise<boolean> => {
|
|
369
|
+
const candidates = new Set<string>();
|
|
370
|
+
for (const id of wave) {
|
|
371
|
+
const step = stepsById.get(id);
|
|
372
|
+
if (step === undefined || unneeded.has(id) || skipped.has(id)) continue;
|
|
373
|
+
for (const ancestor of executionPlanAncestors(plan, id)) {
|
|
374
|
+
const source = stepsById.get(ancestor);
|
|
375
|
+
if (source?.kind !== "code" || source.verification !== true) continue;
|
|
376
|
+
const result = results.get(ancestor);
|
|
377
|
+
if (result === undefined || !result.succeeded || !result.integrityValid) continue;
|
|
378
|
+
if ((completedAt.get(ancestor) ?? 0) >= lastMutationSeq) continue;
|
|
379
|
+
candidates.add(ancestor);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
let halt = false;
|
|
383
|
+
for (const id of [...candidates].sort()) {
|
|
384
|
+
const step = stepsById.get(id);
|
|
385
|
+
if (step?.kind !== "code") continue;
|
|
386
|
+
const spent = revalidations.get(id) ?? 0;
|
|
387
|
+
if (spent >= STALENESS_REVALIDATION_LIMIT) {
|
|
388
|
+
throw new Error(
|
|
389
|
+
`execution plan: verification '${id}' exhausted ${STALENESS_REVALIDATION_LIMIT} staleness revalidations`,
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
revalidations.set(id, spent + 1);
|
|
393
|
+
revalidated.push(id);
|
|
394
|
+
const window = `revalidate-${id}-${spent + 1}`;
|
|
395
|
+
const enforced = openBoundary(window, [step]);
|
|
396
|
+
const ran = await runCodeStepNode(step, handoffsFor(step));
|
|
397
|
+
const [checked] = await closeBoundary(window, enforced, [{ step, result: ran }]);
|
|
398
|
+
const result = checked?.result ?? ran;
|
|
399
|
+
recordCompletion(step, result);
|
|
400
|
+
const loop = loopOf(step);
|
|
401
|
+
if (step.loop?.role === "check") {
|
|
402
|
+
checkPassed.set(step.id, result.succeeded && result.integrityValid);
|
|
403
|
+
if (loop !== null) attemptsRun.set(loop.id, (attemptsRun.get(loop.id) ?? 0) + 1);
|
|
404
|
+
}
|
|
405
|
+
// A revalidation that comes back red is terminal: the loop that
|
|
406
|
+
// produced the original green has no attempts left to spend on it.
|
|
407
|
+
if (!result.succeeded || !result.integrityValid) {
|
|
408
|
+
if (plan.onFailure === "stop") {
|
|
409
|
+
stopped = true;
|
|
410
|
+
codeAbort.abort();
|
|
411
|
+
adapter.releaseUnconsumed(reservation.ownerId);
|
|
412
|
+
halt = true;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return halt;
|
|
417
|
+
};
|
|
418
|
+
|
|
419
|
+
/** Stop-policy verdict for one settled step. */
|
|
420
|
+
const isPlanFailure = (step: ExecutionPlanStep, result: ExecutionStepResult): boolean => {
|
|
421
|
+
if (result.boundaryViolated === true) return true;
|
|
422
|
+
if (result.succeeded && result.integrityValid) return false;
|
|
423
|
+
if (step.loop?.role !== "check" || !result.integrityValid) return true;
|
|
424
|
+
const loop = loopOf(step);
|
|
425
|
+
// A red verification with attempts left is the loop working as declared.
|
|
426
|
+
return loop === null || step.loop.attempt >= loop.maxAttempts;
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
const settleCheck = async (step: ExecutionPlanStep, result: ExecutionStepResult): Promise<void> => {
|
|
430
|
+
const loop = loopOf(step);
|
|
431
|
+
if (loop === null || step.loop?.role !== "check") return;
|
|
432
|
+
const attempt = step.loop.attempt;
|
|
433
|
+
attemptsRun.set(loop.id, (attemptsRun.get(loop.id) ?? 0) + 1);
|
|
434
|
+
// A verification that wrote outside its boundary answered nothing: its
|
|
435
|
+
// verdict describes a tree that has since been rolled back under it.
|
|
436
|
+
if (result.boundaryViolated === true) {
|
|
437
|
+
checkPassed.set(step.id, false);
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
if (loop.checkKind === "code") {
|
|
441
|
+
checkPassed.set(step.id, result.succeeded && result.integrityValid);
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
const decide = adapter.decideLoop;
|
|
445
|
+
if (decide === undefined) throw new Error(`execution plan: loop '${loop.id}' has no decider`);
|
|
446
|
+
if (!result.integrityValid) {
|
|
447
|
+
checkPassed.set(step.id, false);
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
const decision = await decide({
|
|
451
|
+
loop,
|
|
452
|
+
step,
|
|
453
|
+
attempt,
|
|
454
|
+
terminalAttempt: attempt >= loop.maxAttempts,
|
|
455
|
+
result,
|
|
456
|
+
priorResults: results,
|
|
457
|
+
});
|
|
458
|
+
checkPassed.set(step.id, decision.resolved);
|
|
459
|
+
if (decision.findings !== null) loopFindings.set(`${loop.id}:${attempt}`, decision.findings);
|
|
460
|
+
if (decision.needsDecision !== undefined && decision.needsDecision !== null) {
|
|
461
|
+
needsDecision.push(decision.needsDecision);
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
|
|
465
|
+
const loopOutcomes = (): ExecutionLoopOutcome[] =>
|
|
466
|
+
plan.loops.map((loop) => {
|
|
467
|
+
const attempts = attemptsRun.get(loop.id) ?? 0;
|
|
468
|
+
const repairs = repairsRun.get(loop.id) ?? 0;
|
|
469
|
+
if (loopResolved(loop)) return { loopId: loop.id, resolved: true, attempts, repairs, reason: "resolved" };
|
|
470
|
+
if (attempts === 0) return { loopId: loop.id, resolved: false, attempts, repairs, reason: "loop_not_reached" };
|
|
471
|
+
const ran = loop.checkStepIds.filter((id) => results.has(id)).length;
|
|
472
|
+
const brokenMember = [...loop.checkStepIds, ...loop.repairStepIds].some((id) => {
|
|
473
|
+
const result = results.get(id);
|
|
474
|
+
return result !== undefined && !result.integrityValid;
|
|
475
|
+
});
|
|
476
|
+
const reason: ExecutionLoopReason =
|
|
477
|
+
!brokenMember && ran >= loop.maxAttempts ? "loop_bound_exhausted" : "loop_step_failed";
|
|
478
|
+
return { loopId: loop.id, resolved: false, attempts, repairs, reason };
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
try {
|
|
482
|
+
for (const [waveIndex, wave] of plan.waves.entries()) {
|
|
483
|
+
if (stopped || signal?.aborted) break;
|
|
484
|
+
if (await revalidateFor(wave)) break;
|
|
485
|
+
const admitted = wave.flatMap((id) => {
|
|
486
|
+
const step = stepsById.get(id);
|
|
487
|
+
if (!step) throw new Error(`execution plan: unknown scheduled step '${id}'`);
|
|
488
|
+
if (isUnneeded(step)) {
|
|
489
|
+
unneeded.add(step.id);
|
|
490
|
+
return [];
|
|
491
|
+
}
|
|
492
|
+
if (step.dependencies.some((dependency) => dependencyBlocks(dependency, step))) {
|
|
493
|
+
skipped.add(step.id);
|
|
494
|
+
return [];
|
|
495
|
+
}
|
|
496
|
+
return [{ step, handoffs: handoffsFor(step) }];
|
|
497
|
+
});
|
|
498
|
+
const launch = admitted.filter(
|
|
499
|
+
(entry): entry is { step: ExecutionPlanAgentStep; handoffs: ExecutionHandoff[] } => entry.step.kind === "agent",
|
|
500
|
+
);
|
|
501
|
+
const codeWork = admitted.filter(
|
|
502
|
+
(entry): entry is { step: ExecutionPlanCodeStep; handoffs: ExecutionHandoff[] } => entry.step.kind === "code",
|
|
503
|
+
);
|
|
504
|
+
const boundaryWindow = `wave-${waveIndex}`;
|
|
505
|
+
const enforced = openBoundary(
|
|
506
|
+
boundaryWindow,
|
|
507
|
+
admitted.map((entry) => entry.step),
|
|
508
|
+
);
|
|
509
|
+
const started = await Promise.all(
|
|
510
|
+
launch.map(async ({ step, handoffs }) => ({
|
|
511
|
+
step,
|
|
512
|
+
handle: await adapter.run(step, handoffs, { ownerId: reservation.ownerId, memberId: step.id }, ledger),
|
|
513
|
+
})),
|
|
514
|
+
);
|
|
515
|
+
for (const { step, handle } of started) running.set(step.id, { assignmentId: handle.assignmentId });
|
|
516
|
+
const onSettled = (step: ExecutionPlanStep, result: ExecutionStepResult): void => {
|
|
517
|
+
if (isPlanFailure(step, result) && plan.onFailure === "stop") {
|
|
518
|
+
stopped = true;
|
|
519
|
+
for (const [runningStepId, owned] of running) {
|
|
520
|
+
if (runningStepId !== step.id && owned.assignmentId !== null) adapter.cancel(owned.assignmentId);
|
|
521
|
+
}
|
|
522
|
+
codeAbort.abort();
|
|
523
|
+
adapter.releaseUnconsumed(reservation.ownerId);
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
const ran = await Promise.all([
|
|
527
|
+
...started.map(async ({ step, handle }) => {
|
|
528
|
+
const result = await handle.result;
|
|
529
|
+
onSettled(step, result);
|
|
530
|
+
return { step: step as ExecutionPlanStep, result };
|
|
531
|
+
}),
|
|
532
|
+
...codeWork.map(async ({ step, handoffs }) => {
|
|
533
|
+
const result = await runCodeStepNode(step, handoffs);
|
|
534
|
+
onSettled(step, result);
|
|
535
|
+
return { step: step as ExecutionPlanStep, result };
|
|
536
|
+
}),
|
|
537
|
+
]);
|
|
538
|
+
// The boundary is settled before anything is recorded or handed on, so
|
|
539
|
+
// a rolled-back step never appears upstream of the work it would have
|
|
540
|
+
// contaminated.
|
|
541
|
+
const settled = await closeBoundary(boundaryWindow, enforced, ran);
|
|
542
|
+
for (const { step, result } of settled) {
|
|
543
|
+
running.set(step.id, { assignmentId: result.assignmentId });
|
|
544
|
+
recordCompletion(step, result);
|
|
545
|
+
if (step.loop?.role === "repair") {
|
|
546
|
+
repairsRun.set(step.loop.loopId, (repairsRun.get(step.loop.loopId) ?? 0) + 1);
|
|
547
|
+
}
|
|
548
|
+
running.delete(step.id);
|
|
549
|
+
}
|
|
550
|
+
// Loop continuation is decided after the wave settles, so a gate's
|
|
551
|
+
// verdict is read from a sealed result rather than from a live stream.
|
|
552
|
+
for (const { step, result } of settled) await settleCheck(step, result);
|
|
553
|
+
// A loop that spent its last attempt without converging ends the run
|
|
554
|
+
// under a stop policy, whether the verdict came from an exit code or
|
|
555
|
+
// from a gate that answered "no" perfectly well.
|
|
556
|
+
const exhausted = settled.some(({ step }) => {
|
|
557
|
+
const loop = step.loop?.role === "check" ? loopOf(step) : null;
|
|
558
|
+
return loop !== null && step.loop !== undefined && step.loop.attempt >= loop.maxAttempts && !loopResolved(loop);
|
|
559
|
+
});
|
|
560
|
+
if ((exhausted || settled.some(({ step, result }) => isPlanFailure(step, result))) && plan.onFailure === "stop") {
|
|
561
|
+
stopped = true;
|
|
562
|
+
adapter.releaseUnconsumed(reservation.ownerId);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
return {
|
|
566
|
+
planHash: plan.hash,
|
|
567
|
+
results,
|
|
568
|
+
skipped: [...skipped],
|
|
569
|
+
unneeded: [...unneeded],
|
|
570
|
+
loops: loopOutcomes(),
|
|
571
|
+
revalidated: [...revalidated],
|
|
572
|
+
needsDecision: [...needsDecision],
|
|
573
|
+
writeBoundaries: [...writeBoundaries],
|
|
574
|
+
};
|
|
575
|
+
} catch (error) {
|
|
576
|
+
cancelOwned();
|
|
577
|
+
throw error;
|
|
578
|
+
} finally {
|
|
579
|
+
signal?.removeEventListener("abort", cancelOwned);
|
|
580
|
+
adapter.release(reservation.ownerId);
|
|
581
|
+
if (ledgerId !== null) await closeAgentLedger(ledgerId);
|
|
582
|
+
}
|
|
583
|
+
}
|