@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,654 @@
|
|
|
1
|
+
import { THINKING_LEVELS } from "../core/defaults.js";
|
|
2
|
+
import type { ProtectedModelRef, ResidencyRole } from "../core/residency-protection.js";
|
|
3
|
+
import { assertValidResponseSchema, runtimeSpeaksResponseSchemaDialect } from "../core/response-schema.js";
|
|
4
|
+
import type { ToolName } from "../core/tool-names.js";
|
|
5
|
+
import type { ResultContract } from "../domains/agents/result-contract.js";
|
|
6
|
+
import type { AgentProduct } from "../domains/agents/spec.js";
|
|
7
|
+
import type { MiddlewareSnapshot } from "../domains/middleware/index.js";
|
|
8
|
+
import type {
|
|
9
|
+
CapabilityFlags,
|
|
10
|
+
RuntimeApiFamily,
|
|
11
|
+
RuntimeAuth,
|
|
12
|
+
RuntimeDescriptor,
|
|
13
|
+
RuntimeKind,
|
|
14
|
+
RuntimeTargetSnapshot,
|
|
15
|
+
TargetDescriptor,
|
|
16
|
+
ThinkingLevel,
|
|
17
|
+
} from "../domains/providers/index.js";
|
|
18
|
+
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
19
|
+
import type { ProtectedArtifact } from "../domains/safety/protected-artifacts.js";
|
|
20
|
+
import type { ToolProfileName } from "../tools/profiles.js";
|
|
21
|
+
|
|
22
|
+
/** Current attested, budget-bearing dispatch document emitted by this release. */
|
|
23
|
+
export const WORKER_SPEC_VERSION = 3;
|
|
24
|
+
export const WORKER_RUNTIME_DESCRIPTOR_VERSION = 2;
|
|
25
|
+
export const WORKER_PROTECTED_ARTIFACT_STATE_VERSION = 1;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Exit code a native worker uses to report that the run ended because a tool
|
|
29
|
+
* call required interactive permission under workers.onPermission="fail".
|
|
30
|
+
* The orchestrator's outcome resolver maps it to failed/permission_required.
|
|
31
|
+
*/
|
|
32
|
+
export const WORKER_EXIT_PERMISSION_REQUIRED = 3;
|
|
33
|
+
|
|
34
|
+
export interface SerializedWorkerRuntimeDescriptor {
|
|
35
|
+
version: typeof WORKER_RUNTIME_DESCRIPTOR_VERSION;
|
|
36
|
+
id: string;
|
|
37
|
+
kind: RuntimeKind;
|
|
38
|
+
apiFamily: RuntimeApiFamily;
|
|
39
|
+
auth: RuntimeAuth;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Immutable, admission-time snapshot of the parent session's hard blocks. */
|
|
43
|
+
export interface WorkerProtectedArtifactState {
|
|
44
|
+
version: typeof WORKER_PROTECTED_ARTIFACT_STATE_VERSION;
|
|
45
|
+
artifacts: ReadonlyArray<ProtectedArtifact>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Concrete dispatch-time budget after recipe policy and operator clamping. */
|
|
49
|
+
export interface WorkerBudget {
|
|
50
|
+
/** Agent phase boundary before synthesis or bounded termination. */
|
|
51
|
+
toolCalls: number;
|
|
52
|
+
/** Tail of toolCalls reserved for canonical read calls. */
|
|
53
|
+
readReserve: number;
|
|
54
|
+
/** True enters text-only synthesis; false ends at the phase boundary. */
|
|
55
|
+
synthesis: boolean;
|
|
56
|
+
/** Independent operator-owned attempt ceiling; recipes cannot widen it. */
|
|
57
|
+
hardCap: number;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
interface WorkerSpecFields {
|
|
61
|
+
/**
|
|
62
|
+
* sha256 of the immutable settings snapshot this dispatch was admitted
|
|
63
|
+
* under. The worker echoes it in its announcement so the orchestrator can
|
|
64
|
+
* refuse a peer running against a different configuration before any model
|
|
65
|
+
* call happens.
|
|
66
|
+
*/
|
|
67
|
+
settingsFingerprint: string;
|
|
68
|
+
systemPrompt: string;
|
|
69
|
+
dynamicPromptMessages?: ReadonlyArray<WorkerPromptMessage>;
|
|
70
|
+
promptSignature?: string;
|
|
71
|
+
toolSignature?: string;
|
|
72
|
+
dynamicHash?: string;
|
|
73
|
+
agentId: string;
|
|
74
|
+
task: string;
|
|
75
|
+
target: TargetDescriptor;
|
|
76
|
+
runtime: SerializedWorkerRuntimeDescriptor;
|
|
77
|
+
/** Runtime id kept as a direct lookup key for older dispatch tests and receipts. */
|
|
78
|
+
runtimeId: string;
|
|
79
|
+
wireModelId: string;
|
|
80
|
+
modelCapabilities?: Partial<CapabilityFlags>;
|
|
81
|
+
sessionId?: string;
|
|
82
|
+
apiKey?: string;
|
|
83
|
+
thinkingLevel?: ThinkingLevel;
|
|
84
|
+
/** JSON Schema enforced on the llama.cpp chat-completions request. */
|
|
85
|
+
responseSchema?: Record<string, unknown>;
|
|
86
|
+
/**
|
|
87
|
+
* Terminal contract from the admitted agent recipe. The worker validates its
|
|
88
|
+
* own final result against it and spends bounded repair rounds, so the
|
|
89
|
+
* orchestrator's sealed validation is a confirmation rather than the model's
|
|
90
|
+
* first and only notice that its result was the wrong shape.
|
|
91
|
+
*/
|
|
92
|
+
resultContract?: ResultContract;
|
|
93
|
+
/**
|
|
94
|
+
* What this run delivers. It widens the reserve window's delivery-tool set,
|
|
95
|
+
* so it is validated here like every other closed field on the wire rather
|
|
96
|
+
* than trusted as free text.
|
|
97
|
+
*/
|
|
98
|
+
product?: AgentProduct;
|
|
99
|
+
/**
|
|
100
|
+
* The agent ledger this run coordinates on, present only when the dispatch
|
|
101
|
+
* unit has more than one concurrent peer. `sequence` is the board watermark
|
|
102
|
+
* at spawn, so a worker knows how far behind its mirror started.
|
|
103
|
+
*/
|
|
104
|
+
ledger?: { id: string; sequence: number };
|
|
105
|
+
/** Orchestrator-resolved effective runtime/capability decision for receipts and debugging. */
|
|
106
|
+
runtimeResolution?: RuntimeTargetSnapshot;
|
|
107
|
+
allowedTools: ReadonlyArray<ToolName>;
|
|
108
|
+
middlewareSnapshot?: MiddlewareSnapshot;
|
|
109
|
+
/** Parent-session protections frozen before placement and worker launch. */
|
|
110
|
+
protectedArtifactState?: WorkerProtectedArtifactState;
|
|
111
|
+
/**
|
|
112
|
+
* Wire model ids the operator's configuration references, each tagged with
|
|
113
|
+
* the role it serves (chat, memory, worker, target default). The worker
|
|
114
|
+
* seeds its residency layer with these so it never evicts another profile's
|
|
115
|
+
* model, or the memory plane, from a shared local server. A bare string is
|
|
116
|
+
* accepted for an id whose role the sender did not resolve.
|
|
117
|
+
*/
|
|
118
|
+
protectedModels?: ReadonlyArray<string | ProtectedModelRef>;
|
|
119
|
+
noSkills?: boolean;
|
|
120
|
+
skillPaths?: ReadonlyArray<string>;
|
|
121
|
+
/** Skill names the agent recipe binds to this run; context(scope=skills) admits exactly these. */
|
|
122
|
+
agentSkills?: ReadonlyArray<string>;
|
|
123
|
+
trustProjectCompatRoots?: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Dispatch-time tool profile that narrowed `allowedTools`. Carried so
|
|
126
|
+
* black-box external CLI runtimes that cannot mediate per-tool calls can
|
|
127
|
+
* refuse a narrowing profile. Undefined or "full-agent" imposes no
|
|
128
|
+
* narrowing.
|
|
129
|
+
*/
|
|
130
|
+
toolProfile?: ToolProfileName;
|
|
131
|
+
/**
|
|
132
|
+
* Non-stall posture for permission-requiring tool calls. "deny" converts
|
|
133
|
+
* the call into a structured tool denial and the run continues; "fail"
|
|
134
|
+
* aborts the run, which then exits with WORKER_EXIT_PERMISSION_REQUIRED;
|
|
135
|
+
* "escalate" parks the call, emits clio_permission_escalated, and waits for
|
|
136
|
+
* an operator permission_decision on stdin (falling back to the configured
|
|
137
|
+
* deny/fail on timeout). Default "deny".
|
|
138
|
+
*/
|
|
139
|
+
onPermission?: "deny" | "fail" | "escalate";
|
|
140
|
+
/**
|
|
141
|
+
* Escalation bounds, honored only when onPermission="escalate". A parked
|
|
142
|
+
* call that receives no operator decision within timeoutMs applies fallback.
|
|
143
|
+
* Defaults: 120000 ms, "deny".
|
|
144
|
+
*/
|
|
145
|
+
escalation?: WorkerEscalationConfig;
|
|
146
|
+
/**
|
|
147
|
+
* Session autonomy level captured at dispatch admission (sd-01 §2.5). The
|
|
148
|
+
* worker registry applies the same mapping as the orchestrator's, so a
|
|
149
|
+
* worker never acts more freely than the session that dispatched it.
|
|
150
|
+
* Default "auto-edit".
|
|
151
|
+
*/
|
|
152
|
+
autonomy?: AutonomyLevel;
|
|
153
|
+
/**
|
|
154
|
+
* Absolute directories write-class tool calls are confined to for this run.
|
|
155
|
+
* Enforced at the shared worker safety seam so a write/edit target outside
|
|
156
|
+
* every root is a final block. Only set on runtimes that mediate per-tool
|
|
157
|
+
* calls (native, claude-sdk); dispatch refuses it on subprocess runtimes.
|
|
158
|
+
*/
|
|
159
|
+
writeRoots?: ReadonlyArray<string>;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Current wire shape. Every document carries its concrete admitted budget. */
|
|
163
|
+
export type CurrentWorkerSpec = WorkerSpecFields & {
|
|
164
|
+
specVersion: typeof WORKER_SPEC_VERSION;
|
|
165
|
+
budget: WorkerBudget;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
export type WorkerSpec = CurrentWorkerSpec;
|
|
169
|
+
|
|
170
|
+
export interface WorkerPromptMessage {
|
|
171
|
+
id: string;
|
|
172
|
+
body: string;
|
|
173
|
+
contentHash: string;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** Bounds for the escalate posture; see WorkerSpec.escalation. */
|
|
177
|
+
export interface WorkerEscalationConfig {
|
|
178
|
+
/** Wall-clock budget before the parked call applies the fallback. */
|
|
179
|
+
timeoutMs: number;
|
|
180
|
+
/** Posture applied when the operator does not decide within timeoutMs. */
|
|
181
|
+
fallback: "deny" | "fail";
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Default escalation bounds when onPermission="escalate" but no override is given. */
|
|
185
|
+
export const DEFAULT_ESCALATION_TIMEOUT_MS = 120_000;
|
|
186
|
+
export const DEFAULT_ESCALATION_FALLBACK: "deny" | "fail" = "deny";
|
|
187
|
+
|
|
188
|
+
const RUNTIME_KINDS = ["http", "sdk", "subprocess"] as const satisfies ReadonlyArray<RuntimeKind>;
|
|
189
|
+
const RUNTIME_API_FAMILIES = [
|
|
190
|
+
"openai-completions",
|
|
191
|
+
"openai-responses",
|
|
192
|
+
"openai-codex-responses",
|
|
193
|
+
"azure-openai-responses",
|
|
194
|
+
"anthropic-messages",
|
|
195
|
+
"bedrock-converse-stream",
|
|
196
|
+
"google-generative-ai",
|
|
197
|
+
"google-vertex",
|
|
198
|
+
"lmstudio-native",
|
|
199
|
+
"mistral-conversations",
|
|
200
|
+
"ollama-native",
|
|
201
|
+
"rerank-http",
|
|
202
|
+
"embeddings-http",
|
|
203
|
+
"claude-agent-sdk",
|
|
204
|
+
"claude-code-subprocess",
|
|
205
|
+
] as const satisfies ReadonlyArray<RuntimeApiFamily>;
|
|
206
|
+
const RUNTIME_AUTHS = [
|
|
207
|
+
"api-key",
|
|
208
|
+
"oauth",
|
|
209
|
+
"aws-sdk",
|
|
210
|
+
"vertex-adc",
|
|
211
|
+
"claude-cli",
|
|
212
|
+
"none",
|
|
213
|
+
] as const satisfies ReadonlyArray<RuntimeAuth>;
|
|
214
|
+
const TOOL_PROFILE_NAMES = [
|
|
215
|
+
"minimal-local",
|
|
216
|
+
"science-local",
|
|
217
|
+
"full-agent",
|
|
218
|
+
] as const satisfies ReadonlyArray<ToolProfileName>;
|
|
219
|
+
const WORKER_PRODUCTS = ["orientation"] as const satisfies ReadonlyArray<AgentProduct>;
|
|
220
|
+
const TARGET_LIFECYCLES = ["user-managed", "clio-managed"] as const;
|
|
221
|
+
const RESIDENCY_ROLES = ["chat", "memory", "worker", "target-default"] as const satisfies ReadonlyArray<ResidencyRole>;
|
|
222
|
+
const MIDDLEWARE_HOOKS = ["before_tool", "after_tool", "turn_start", "turn_end", "on_compaction"] as const;
|
|
223
|
+
const MIDDLEWARE_EFFECT_KINDS = [
|
|
224
|
+
"inject_reminder",
|
|
225
|
+
"annotate_tool_result",
|
|
226
|
+
"block_tool",
|
|
227
|
+
"protect_path",
|
|
228
|
+
"request_continuation",
|
|
229
|
+
"require_tool",
|
|
230
|
+
"lock_tools",
|
|
231
|
+
] as const;
|
|
232
|
+
const RUNTIME_RESOLUTION_SEVERITIES = ["info", "warning", "error"] as const;
|
|
233
|
+
const SPEC_AUTONOMY_LEVELS = [
|
|
234
|
+
"read-only",
|
|
235
|
+
"suggest",
|
|
236
|
+
"auto-edit",
|
|
237
|
+
"full-auto",
|
|
238
|
+
] as const satisfies ReadonlyArray<AutonomyLevel>;
|
|
239
|
+
const THINKING_MECHANISMS = ["effort-levels", "budget-tokens", "on-off", "always-on", "none"] as const;
|
|
240
|
+
const THINKING_BUDGET_ENFORCEMENTS = ["enforced", "informational", "none"] as const;
|
|
241
|
+
const THINKING_NOTICE_KINDS = ["applied", "ignored-on-off", "always-on", "unsupported"] as const;
|
|
242
|
+
|
|
243
|
+
export function serializeWorkerRuntimeDescriptor(runtime: RuntimeDescriptor): SerializedWorkerRuntimeDescriptor {
|
|
244
|
+
return {
|
|
245
|
+
version: WORKER_RUNTIME_DESCRIPTOR_VERSION,
|
|
246
|
+
id: runtime.id,
|
|
247
|
+
kind: runtime.kind,
|
|
248
|
+
apiFamily: runtime.apiFamily,
|
|
249
|
+
auth: runtime.auth,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function readRecord(value: unknown, source: string): Record<string, unknown> {
|
|
254
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
255
|
+
throw new Error(`${source} must be an object`);
|
|
256
|
+
}
|
|
257
|
+
return value as Record<string, unknown>;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function readWorkerPromptMessages(value: unknown, source: string): void {
|
|
261
|
+
if (value === undefined) return;
|
|
262
|
+
if (!Array.isArray(value)) throw new Error(`${source} must be an array`);
|
|
263
|
+
for (let index = 0; index < value.length; index++) {
|
|
264
|
+
const entry = readRecord(value[index], `${source}[${index}]`);
|
|
265
|
+
readString(entry.id, `${source}[${index}].id`);
|
|
266
|
+
readString(entry.body, `${source}[${index}].body`);
|
|
267
|
+
readString(entry.contentHash, `${source}[${index}].contentHash`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function readString(value: unknown, source: string, options?: { allowEmpty?: boolean }): string {
|
|
272
|
+
if (typeof value !== "string") throw new Error(`${source} must be a string`);
|
|
273
|
+
if (!options?.allowEmpty && value.length === 0) throw new Error(`${source} must be a non-empty string`);
|
|
274
|
+
return value;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function readOptionalString(record: Record<string, unknown>, key: string, source: string): void {
|
|
278
|
+
if (record[key] !== undefined) readString(record[key], `${source}.${key}`);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function readOptionalBoolean(record: Record<string, unknown>, key: string, source: string): void {
|
|
282
|
+
const value = record[key];
|
|
283
|
+
if (value !== undefined && typeof value !== "boolean") throw new Error(`${source}.${key} must be a boolean`);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function readOptionalNumber(record: Record<string, unknown>, key: string, source: string): void {
|
|
287
|
+
const value = record[key];
|
|
288
|
+
if (value !== undefined && (typeof value !== "number" || !Number.isFinite(value))) {
|
|
289
|
+
throw new Error(`${source}.${key} must be a finite number`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function readEnum<T extends string>(value: unknown, source: string, allowed: ReadonlyArray<T>): T {
|
|
294
|
+
if (typeof value !== "string" || !allowed.includes(value as T)) {
|
|
295
|
+
throw new Error(`${source} must be one of: ${allowed.join(", ")}`);
|
|
296
|
+
}
|
|
297
|
+
return value as T;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function readOptionalEnum<T extends string>(
|
|
301
|
+
record: Record<string, unknown>,
|
|
302
|
+
key: string,
|
|
303
|
+
source: string,
|
|
304
|
+
allowed: ReadonlyArray<T>,
|
|
305
|
+
): void {
|
|
306
|
+
if (record[key] !== undefined) readEnum(record[key], `${source}.${key}`, allowed);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function readStringArray(value: unknown, source: string): string[] {
|
|
310
|
+
if (!Array.isArray(value)) throw new Error(`${source} must be an array`);
|
|
311
|
+
return value.map((item, index) => readString(item, `${source}[${index}]`));
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function readOptionalStringArray(record: Record<string, unknown>, key: string, source: string): void {
|
|
315
|
+
if (record[key] !== undefined) readStringArray(record[key], `${source}.${key}`);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Configured residency protections. Each entry is either a bare wire model id
|
|
320
|
+
* or an id tagged with the configured role that references it; both spellings
|
|
321
|
+
* are accepted so a spec written by an older orchestrator still validates.
|
|
322
|
+
*/
|
|
323
|
+
function validateProtectedModels(value: unknown): void {
|
|
324
|
+
if (value === undefined) return;
|
|
325
|
+
if (!Array.isArray(value)) throw new Error("WorkerSpec.protectedModels must be an array");
|
|
326
|
+
value.forEach((item, index) => {
|
|
327
|
+
const source = `WorkerSpec.protectedModels[${index}]`;
|
|
328
|
+
if (typeof item === "string") {
|
|
329
|
+
readString(item, source);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const ref = readRecord(item, source);
|
|
333
|
+
readString(ref.modelId, `${source}.modelId`);
|
|
334
|
+
readEnum(ref.role, `${source}.role`, RESIDENCY_ROLES);
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function validateTarget(value: unknown, runtimeId: string): void {
|
|
339
|
+
const target = readRecord(value, "WorkerSpec.target");
|
|
340
|
+
const targetId = readString(target.id, "WorkerSpec.target.id");
|
|
341
|
+
const targetRuntime = readString(target.runtime, "WorkerSpec.target.runtime");
|
|
342
|
+
if (targetRuntime !== runtimeId) {
|
|
343
|
+
throw new Error(`WorkerSpec target runtime mismatch: target.runtime=${targetRuntime} runtimeId=${runtimeId}`);
|
|
344
|
+
}
|
|
345
|
+
if (targetId.length === 0) throw new Error("WorkerSpec.target.id must be a non-empty string");
|
|
346
|
+
readOptionalString(target, "url", "WorkerSpec.target");
|
|
347
|
+
readOptionalString(target, "defaultModel", "WorkerSpec.target");
|
|
348
|
+
readOptionalStringArray(target, "wireModels", "WorkerSpec.target");
|
|
349
|
+
readOptionalBoolean(target, "gateway", "WorkerSpec.target");
|
|
350
|
+
readOptionalEnum(target, "lifecycle", "WorkerSpec.target", TARGET_LIFECYCLES);
|
|
351
|
+
if (target.auth !== undefined) validateTargetAuth(target.auth);
|
|
352
|
+
if (target.pricing !== undefined) validateTargetPricing(target.pricing);
|
|
353
|
+
if (target.capabilities !== undefined) validateCapabilityPatch(target.capabilities, "WorkerSpec.target.capabilities");
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
function validateTargetAuth(value: unknown): void {
|
|
357
|
+
const auth = readRecord(value, "WorkerSpec.target.auth");
|
|
358
|
+
readOptionalString(auth, "apiKeyEnvVar", "WorkerSpec.target.auth");
|
|
359
|
+
readOptionalString(auth, "apiKeyRef", "WorkerSpec.target.auth");
|
|
360
|
+
readOptionalString(auth, "oauthProfile", "WorkerSpec.target.auth");
|
|
361
|
+
if (auth.headers === undefined) return;
|
|
362
|
+
const headers = readRecord(auth.headers, "WorkerSpec.target.auth.headers");
|
|
363
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
364
|
+
readString(value, `WorkerSpec.target.auth.headers.${key}`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
function validateTargetPricing(value: unknown): void {
|
|
369
|
+
const pricing = readRecord(value, "WorkerSpec.target.pricing");
|
|
370
|
+
const input = pricing.input;
|
|
371
|
+
const output = pricing.output;
|
|
372
|
+
if (typeof input !== "number" || !Number.isFinite(input) || input < 0) {
|
|
373
|
+
throw new Error("WorkerSpec.target.pricing.input must be a non-negative finite number");
|
|
374
|
+
}
|
|
375
|
+
if (typeof output !== "number" || !Number.isFinite(output) || output < 0) {
|
|
376
|
+
throw new Error("WorkerSpec.target.pricing.output must be a non-negative finite number");
|
|
377
|
+
}
|
|
378
|
+
readOptionalNumber(pricing, "cacheRead", "WorkerSpec.target.pricing");
|
|
379
|
+
readOptionalNumber(pricing, "cacheWrite", "WorkerSpec.target.pricing");
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
function validateCapabilityPatch(value: unknown, source: string): void {
|
|
383
|
+
const caps = readRecord(value, source);
|
|
384
|
+
for (const key of ["chat", "tools", "reasoning", "vision", "audio", "embeddings", "rerank", "fim"] as const) {
|
|
385
|
+
readOptionalBoolean(caps, key, source);
|
|
386
|
+
}
|
|
387
|
+
for (const key of ["contextWindow", "maxTokens"] as const) {
|
|
388
|
+
readOptionalNumber(caps, key, source);
|
|
389
|
+
}
|
|
390
|
+
for (const key of ["toolCallFormat", "thinkingFormat", "structuredOutputs"] as const) {
|
|
391
|
+
readOptionalString(caps, key, source);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
function validateAllowedTools(value: unknown): void {
|
|
396
|
+
for (const name of readStringArray(value, "WorkerSpec.allowedTools")) {
|
|
397
|
+
if (name.trim().length === 0) throw new Error("WorkerSpec.allowedTools entries must be non-empty strings");
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
function validateWorkerBudget(value: unknown): void {
|
|
402
|
+
const budget = readRecord(value, "WorkerSpec.budget");
|
|
403
|
+
const expected = ["hardCap", "readReserve", "synthesis", "toolCalls"];
|
|
404
|
+
const actual = Object.keys(budget).sort();
|
|
405
|
+
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
|
|
406
|
+
throw new Error(`WorkerSpec.budget must contain exactly: ${expected.join(", ")}`);
|
|
407
|
+
}
|
|
408
|
+
for (const key of ["toolCalls", "readReserve", "hardCap"] as const) {
|
|
409
|
+
const value = budget[key];
|
|
410
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value)) {
|
|
411
|
+
throw new Error(`WorkerSpec.budget.${key} must be a safe integer`);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
if ((budget.toolCalls as number) <= 0) throw new Error("WorkerSpec.budget.toolCalls must be greater than zero");
|
|
415
|
+
if ((budget.hardCap as number) <= 0) throw new Error("WorkerSpec.budget.hardCap must be greater than zero");
|
|
416
|
+
if ((budget.toolCalls as number) > (budget.hardCap as number)) {
|
|
417
|
+
throw new Error("WorkerSpec.budget.toolCalls must not exceed WorkerSpec.budget.hardCap");
|
|
418
|
+
}
|
|
419
|
+
if ((budget.readReserve as number) < 0 || (budget.readReserve as number) >= (budget.toolCalls as number)) {
|
|
420
|
+
throw new Error("WorkerSpec.budget.readReserve must be an integer in [0, toolCalls)");
|
|
421
|
+
}
|
|
422
|
+
if (typeof budget.synthesis !== "boolean") throw new Error("WorkerSpec.budget.synthesis must be a boolean");
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
function validateRuntimeCapabilityDecision(value: unknown, source: string): void {
|
|
426
|
+
const caps = readRecord(value, source);
|
|
427
|
+
for (const key of ["chat", "tools", "reasoning", "vision", "streaming"] as const) {
|
|
428
|
+
if (typeof caps[key] !== "boolean") throw new Error(`${source}.${key} must be a boolean`);
|
|
429
|
+
}
|
|
430
|
+
for (const key of ["contextWindow", "maxTokens"] as const) {
|
|
431
|
+
const n = caps[key];
|
|
432
|
+
if (typeof n !== "number" || !Number.isFinite(n) || n < 0)
|
|
433
|
+
throw new Error(`${source}.${key} must be a non-negative finite number`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
function validateRuntimeResolution(value: unknown): void {
|
|
438
|
+
if (value === undefined) return;
|
|
439
|
+
const resolution = readRecord(value, "WorkerSpec.runtimeResolution");
|
|
440
|
+
readString(resolution.targetId, "WorkerSpec.runtimeResolution.targetId");
|
|
441
|
+
readString(resolution.runtimeId, "WorkerSpec.runtimeResolution.runtimeId");
|
|
442
|
+
readEnum(resolution.runtimeKind, "WorkerSpec.runtimeResolution.runtimeKind", RUNTIME_KINDS);
|
|
443
|
+
readEnum(resolution.apiFamily, "WorkerSpec.runtimeResolution.apiFamily", RUNTIME_API_FAMILIES);
|
|
444
|
+
readEnum(resolution.auth, "WorkerSpec.runtimeResolution.auth", RUNTIME_AUTHS);
|
|
445
|
+
if (typeof resolution.authRequired !== "boolean") {
|
|
446
|
+
throw new Error("WorkerSpec.runtimeResolution.authRequired must be a boolean");
|
|
447
|
+
}
|
|
448
|
+
readString(resolution.wireModelId, "WorkerSpec.runtimeResolution.wireModelId");
|
|
449
|
+
readEnum(resolution.requestedThinkingLevel, "WorkerSpec.runtimeResolution.requestedThinkingLevel", THINKING_LEVELS);
|
|
450
|
+
readEnum(resolution.effectiveThinkingLevel, "WorkerSpec.runtimeResolution.effectiveThinkingLevel", THINKING_LEVELS);
|
|
451
|
+
validateRuntimeCapabilityDecision(resolution.capabilities, "WorkerSpec.runtimeResolution.capabilities");
|
|
452
|
+
const thinking = readRecord(resolution.thinking, "WorkerSpec.runtimeResolution.thinking");
|
|
453
|
+
readEnum(thinking.mechanism, "WorkerSpec.runtimeResolution.thinking.mechanism", THINKING_MECHANISMS);
|
|
454
|
+
readString(thinking.display, "WorkerSpec.runtimeResolution.thinking.display", { allowEmpty: true });
|
|
455
|
+
for (const level of readStringArray(
|
|
456
|
+
thinking.supportedLevels,
|
|
457
|
+
"WorkerSpec.runtimeResolution.thinking.supportedLevels",
|
|
458
|
+
)) {
|
|
459
|
+
readEnum(level, "WorkerSpec.runtimeResolution.thinking.supportedLevels[]", THINKING_LEVELS);
|
|
460
|
+
}
|
|
461
|
+
readEnum(
|
|
462
|
+
thinking.budgetEnforcement,
|
|
463
|
+
"WorkerSpec.runtimeResolution.thinking.budgetEnforcement",
|
|
464
|
+
THINKING_BUDGET_ENFORCEMENTS,
|
|
465
|
+
);
|
|
466
|
+
readEnum(thinking.noticeKind, "WorkerSpec.runtimeResolution.thinking.noticeKind", THINKING_NOTICE_KINDS);
|
|
467
|
+
readString(thinking.notice, "WorkerSpec.runtimeResolution.thinking.notice", { allowEmpty: true });
|
|
468
|
+
readRecord(resolution.request, "WorkerSpec.runtimeResolution.request");
|
|
469
|
+
readRecord(resolution.response, "WorkerSpec.runtimeResolution.response");
|
|
470
|
+
if (!Array.isArray(resolution.diagnostics)) {
|
|
471
|
+
throw new Error("WorkerSpec.runtimeResolution.diagnostics must be an array");
|
|
472
|
+
}
|
|
473
|
+
for (let index = 0; index < resolution.diagnostics.length; index += 1) {
|
|
474
|
+
const diag = readRecord(resolution.diagnostics[index], `WorkerSpec.runtimeResolution.diagnostics[${index}]`);
|
|
475
|
+
readEnum(diag.severity, `WorkerSpec.runtimeResolution.diagnostics[${index}].severity`, RUNTIME_RESOLUTION_SEVERITIES);
|
|
476
|
+
readString(diag.code, `WorkerSpec.runtimeResolution.diagnostics[${index}].code`);
|
|
477
|
+
readString(diag.message, `WorkerSpec.runtimeResolution.diagnostics[${index}].message`);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
function validateMiddlewareSnapshot(value: unknown): void {
|
|
482
|
+
const snapshot = readRecord(value, "WorkerSpec.middlewareSnapshot");
|
|
483
|
+
if (snapshot.version !== 1) throw new Error("WorkerSpec.middlewareSnapshot version must be 1");
|
|
484
|
+
if (!Array.isArray(snapshot.rules)) throw new Error("WorkerSpec.middlewareSnapshot.rules must be an array");
|
|
485
|
+
for (let index = 0; index < snapshot.rules.length; index += 1) {
|
|
486
|
+
const source = `WorkerSpec.middlewareSnapshot.rules[${index}]`;
|
|
487
|
+
const rule = readRecord(snapshot.rules[index], source);
|
|
488
|
+
readString(rule.id, `${source}.id`);
|
|
489
|
+
if (rule.source !== "builtin") throw new Error(`${source}.source must be builtin`);
|
|
490
|
+
readString(rule.description, `${source}.description`);
|
|
491
|
+
if (typeof rule.enabled !== "boolean") throw new Error(`${source}.enabled must be a boolean`);
|
|
492
|
+
for (const hook of readStringArray(rule.hooks, `${source}.hooks`)) {
|
|
493
|
+
readEnum(hook, `${source}.hooks[]`, MIDDLEWARE_HOOKS);
|
|
494
|
+
}
|
|
495
|
+
for (const kind of readStringArray(rule.effectKinds, `${source}.effectKinds`)) {
|
|
496
|
+
readEnum(kind, `${source}.effectKinds[]`, MIDDLEWARE_EFFECT_KINDS);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
function validateProtectedArtifactState(value: unknown): void {
|
|
502
|
+
const state = readRecord(value, "WorkerSpec.protectedArtifactState");
|
|
503
|
+
if (state.version !== WORKER_PROTECTED_ARTIFACT_STATE_VERSION) {
|
|
504
|
+
throw new Error(
|
|
505
|
+
`WorkerSpec.protectedArtifactState version ${String(state.version)} is unsupported; expected ${WORKER_PROTECTED_ARTIFACT_STATE_VERSION}`,
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
if (!Array.isArray(state.artifacts)) {
|
|
509
|
+
throw new Error("WorkerSpec.protectedArtifactState.artifacts must be an array");
|
|
510
|
+
}
|
|
511
|
+
const sources = ["validation", "middleware", "user", "session"] as const;
|
|
512
|
+
for (let index = 0; index < state.artifacts.length; index += 1) {
|
|
513
|
+
const source = `WorkerSpec.protectedArtifactState.artifacts[${index}]`;
|
|
514
|
+
const artifact = readRecord(state.artifacts[index], source);
|
|
515
|
+
readString(artifact.path, `${source}.path`);
|
|
516
|
+
readString(artifact.protectedAt, `${source}.protectedAt`);
|
|
517
|
+
readString(artifact.reason, `${source}.reason`);
|
|
518
|
+
readEnum(artifact.source, `${source}.source`, sources);
|
|
519
|
+
readOptionalString(artifact, "validationCommand", source);
|
|
520
|
+
readOptionalNumber(artifact, "validationExitCode", source);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
export function parseWorkerSpec(value: unknown): WorkerSpec {
|
|
525
|
+
const spec = readRecord(value, "WorkerSpec");
|
|
526
|
+
if (spec.specVersion !== WORKER_SPEC_VERSION) {
|
|
527
|
+
throw new Error(
|
|
528
|
+
`WorkerSpec version ${String(spec.specVersion)} is unsupported (expected version ${WORKER_SPEC_VERSION}). Re-dispatch the request to generate a valid attested, budget-bearing worker specification.`,
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
if (spec.budget === undefined) {
|
|
532
|
+
throw new Error(`WorkerSpec version ${WORKER_SPEC_VERSION} requires budget`);
|
|
533
|
+
}
|
|
534
|
+
if (typeof spec.settingsFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(spec.settingsFingerprint)) {
|
|
535
|
+
throw new Error(`WorkerSpec version ${WORKER_SPEC_VERSION} requires settingsFingerprint as a sha256 hex digest`);
|
|
536
|
+
}
|
|
537
|
+
const runtime = readRecord(spec.runtime, "WorkerSpec.runtime");
|
|
538
|
+
if (runtime.version !== WORKER_RUNTIME_DESCRIPTOR_VERSION) {
|
|
539
|
+
throw new Error(
|
|
540
|
+
`WorkerSpec.runtime version ${String(runtime.version)} is unsupported; expected ${WORKER_RUNTIME_DESCRIPTOR_VERSION}`,
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
const runtimeId = readString(spec.runtimeId, "WorkerSpec.runtimeId");
|
|
544
|
+
const runtimeRefId = readString(runtime.id, "WorkerSpec.runtime.id");
|
|
545
|
+
if (runtimeId !== runtimeRefId) {
|
|
546
|
+
throw new Error(`WorkerSpec runtime id mismatch: runtimeId=${runtimeId} runtime.id=${runtimeRefId}`);
|
|
547
|
+
}
|
|
548
|
+
const runtimeKind = readEnum(runtime.kind, "WorkerSpec.runtime.kind", RUNTIME_KINDS);
|
|
549
|
+
const runtimeApiFamily = readEnum(runtime.apiFamily, "WorkerSpec.runtime.apiFamily", RUNTIME_API_FAMILIES);
|
|
550
|
+
readEnum(runtime.auth, "WorkerSpec.runtime.auth", RUNTIME_AUTHS);
|
|
551
|
+
readString(spec.systemPrompt, "WorkerSpec.systemPrompt", { allowEmpty: true });
|
|
552
|
+
readWorkerPromptMessages(spec.dynamicPromptMessages, "WorkerSpec.dynamicPromptMessages");
|
|
553
|
+
readOptionalString(spec, "promptSignature", "WorkerSpec");
|
|
554
|
+
readOptionalString(spec, "toolSignature", "WorkerSpec");
|
|
555
|
+
readOptionalString(spec, "dynamicHash", "WorkerSpec");
|
|
556
|
+
readString(spec.agentId, "WorkerSpec.agentId");
|
|
557
|
+
readString(spec.task, "WorkerSpec.task");
|
|
558
|
+
validateTarget(spec.target, runtimeId);
|
|
559
|
+
readString(spec.wireModelId, "WorkerSpec.wireModelId");
|
|
560
|
+
readOptionalString(spec, "sessionId", "WorkerSpec");
|
|
561
|
+
readOptionalString(spec, "apiKey", "WorkerSpec");
|
|
562
|
+
readOptionalEnum(spec, "thinkingLevel", "WorkerSpec", THINKING_LEVELS);
|
|
563
|
+
if (spec.modelCapabilities !== undefined)
|
|
564
|
+
validateCapabilityPatch(spec.modelCapabilities, "WorkerSpec.modelCapabilities");
|
|
565
|
+
if (spec.responseSchema !== undefined) {
|
|
566
|
+
assertValidResponseSchema(spec.responseSchema, "WorkerSpec.responseSchema");
|
|
567
|
+
if (!runtimeSpeaksResponseSchemaDialect({ id: runtimeId, kind: runtimeKind, apiFamily: runtimeApiFamily })) {
|
|
568
|
+
throw new Error("WorkerSpec.responseSchema is supported only by the native llamacpp runtime");
|
|
569
|
+
}
|
|
570
|
+
const structuredOutputs =
|
|
571
|
+
spec.modelCapabilities === undefined
|
|
572
|
+
? undefined
|
|
573
|
+
: readRecord(spec.modelCapabilities, "WorkerSpec.modelCapabilities").structuredOutputs;
|
|
574
|
+
if (structuredOutputs !== "json-schema") {
|
|
575
|
+
throw new Error("WorkerSpec.responseSchema requires resolved JSON-schema model capability");
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
validateAllowedTools(spec.allowedTools);
|
|
579
|
+
validateWorkerBudget(spec.budget);
|
|
580
|
+
validateProtectedModels(spec.protectedModels);
|
|
581
|
+
validateRuntimeResolution(spec.runtimeResolution);
|
|
582
|
+
if (spec.middlewareSnapshot !== undefined) validateMiddlewareSnapshot(spec.middlewareSnapshot);
|
|
583
|
+
if (spec.protectedArtifactState !== undefined) validateProtectedArtifactState(spec.protectedArtifactState);
|
|
584
|
+
if (spec.noSkills !== undefined && typeof spec.noSkills !== "boolean") {
|
|
585
|
+
throw new Error("WorkerSpec.noSkills must be a boolean");
|
|
586
|
+
}
|
|
587
|
+
if (spec.skillPaths !== undefined) {
|
|
588
|
+
readStringArray(spec.skillPaths, "WorkerSpec.skillPaths");
|
|
589
|
+
}
|
|
590
|
+
if (spec.agentSkills !== undefined) {
|
|
591
|
+
for (const name of readStringArray(spec.agentSkills, "WorkerSpec.agentSkills")) {
|
|
592
|
+
if (name.trim().length === 0) throw new Error("WorkerSpec.agentSkills entries must be non-empty strings");
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
if (spec.trustProjectCompatRoots !== undefined && typeof spec.trustProjectCompatRoots !== "boolean") {
|
|
596
|
+
throw new Error("WorkerSpec.trustProjectCompatRoots must be a boolean");
|
|
597
|
+
}
|
|
598
|
+
readOptionalEnum(spec, "toolProfile", "WorkerSpec", TOOL_PROFILE_NAMES);
|
|
599
|
+
readOptionalEnum(spec, "product", "WorkerSpec", WORKER_PRODUCTS);
|
|
600
|
+
if (
|
|
601
|
+
spec.onPermission !== undefined &&
|
|
602
|
+
spec.onPermission !== "deny" &&
|
|
603
|
+
spec.onPermission !== "fail" &&
|
|
604
|
+
spec.onPermission !== "escalate"
|
|
605
|
+
) {
|
|
606
|
+
throw new Error('WorkerSpec.onPermission must be "deny", "fail", or "escalate"');
|
|
607
|
+
}
|
|
608
|
+
if (spec.escalation !== undefined) {
|
|
609
|
+
const escalation = readRecord(spec.escalation, "WorkerSpec.escalation");
|
|
610
|
+
const timeoutMs = escalation.timeoutMs;
|
|
611
|
+
if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
612
|
+
throw new Error("WorkerSpec.escalation.timeoutMs must be a positive finite number");
|
|
613
|
+
}
|
|
614
|
+
if (escalation.fallback !== "deny" && escalation.fallback !== "fail") {
|
|
615
|
+
throw new Error('WorkerSpec.escalation.fallback must be "deny" or "fail"');
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
if (spec.autonomy !== undefined) {
|
|
619
|
+
readEnum(spec.autonomy, "WorkerSpec.autonomy", SPEC_AUTONOMY_LEVELS);
|
|
620
|
+
}
|
|
621
|
+
if (spec.ledger !== undefined) {
|
|
622
|
+
const ledger = readRecord(spec.ledger, "WorkerSpec.ledger");
|
|
623
|
+
readString(ledger.id, "WorkerSpec.ledger.id");
|
|
624
|
+
if (typeof ledger.sequence !== "number" || !Number.isSafeInteger(ledger.sequence) || ledger.sequence < 0) {
|
|
625
|
+
throw new Error("WorkerSpec.ledger.sequence must be a non-negative safe integer");
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
if (spec.writeRoots !== undefined) {
|
|
629
|
+
const roots = readStringArray(spec.writeRoots, "WorkerSpec.writeRoots");
|
|
630
|
+
if (roots.length === 0) throw new Error("WorkerSpec.writeRoots must be a non-empty array when present");
|
|
631
|
+
for (const root of roots) {
|
|
632
|
+
if (root.trim().length === 0) throw new Error("WorkerSpec.writeRoots entries must be non-empty strings");
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
return spec as unknown as WorkerSpec;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
export function validateRehydratedWorkerRuntime(spec: WorkerSpec, runtime: RuntimeDescriptor): void {
|
|
639
|
+
const expected = spec.runtime;
|
|
640
|
+
if (runtime.id !== expected.id) {
|
|
641
|
+
throw new Error(`WorkerSpec runtime rehydration mismatch for id: expected ${expected.id}, got ${runtime.id}`);
|
|
642
|
+
}
|
|
643
|
+
if (runtime.kind !== expected.kind) {
|
|
644
|
+
throw new Error(`WorkerSpec runtime rehydration mismatch for kind: expected ${expected.kind}, got ${runtime.kind}`);
|
|
645
|
+
}
|
|
646
|
+
if (runtime.apiFamily !== expected.apiFamily) {
|
|
647
|
+
throw new Error(
|
|
648
|
+
`WorkerSpec runtime rehydration mismatch for apiFamily: expected ${expected.apiFamily}, got ${runtime.apiFamily}`,
|
|
649
|
+
);
|
|
650
|
+
}
|
|
651
|
+
if (runtime.auth !== expected.auth) {
|
|
652
|
+
throw new Error(`WorkerSpec runtime rehydration mismatch for auth: expected ${expected.auth}, got ${runtime.auth}`);
|
|
653
|
+
}
|
|
654
|
+
}
|