@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,371 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { type BuiltinToolName, isBuiltinToolName, type ToolName, ToolNames } from "../../core/tool-names.js";
|
|
3
|
+
import { type ActionClass, classify } from "../safety/action-classifier.js";
|
|
4
|
+
import type { AgentBudget, AgentRecipe, AgentToolRequirement } from "./recipe.js";
|
|
5
|
+
import type { ResultContract } from "./result-contract.js";
|
|
6
|
+
|
|
7
|
+
export type AgentCategory =
|
|
8
|
+
| "explore"
|
|
9
|
+
| "plan"
|
|
10
|
+
| "research"
|
|
11
|
+
| "implement"
|
|
12
|
+
| "quality"
|
|
13
|
+
| "science"
|
|
14
|
+
| "evolution"
|
|
15
|
+
| "operations"
|
|
16
|
+
| "internal";
|
|
17
|
+
|
|
18
|
+
export type AgentCapabilityClass =
|
|
19
|
+
| "read-only"
|
|
20
|
+
| "artifact-write"
|
|
21
|
+
| "workspace-edit"
|
|
22
|
+
| "verification"
|
|
23
|
+
| "orchestration"
|
|
24
|
+
| "internal";
|
|
25
|
+
|
|
26
|
+
/** Authority classes a bounded coordinator plan may grant to agent automation. */
|
|
27
|
+
export const AGENT_AUTOMATION_AUTHORITIES = ["read-only", "verification", "artifact-write", "workspace-edit"] as const;
|
|
28
|
+
export type AgentAutomationAuthority = (typeof AGENT_AUTOMATION_AUTHORITIES)[number];
|
|
29
|
+
|
|
30
|
+
export type AgentLatencyClass = "fast" | "balanced" | "deep";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* How much durable project context a worker run receives as a dynamic prompt
|
|
34
|
+
* message: "bounded" is the capped name/conventions/invariants projection,
|
|
35
|
+
* "none" is nothing. Defaults derive from the capability class so read-only
|
|
36
|
+
* scouts never pay the CLIO-CODER.md read; recipe frontmatter may override.
|
|
37
|
+
*/
|
|
38
|
+
export type AgentProjectContextTier = "none" | "bounded";
|
|
39
|
+
|
|
40
|
+
export type AgentAudience = "base" | "shadow" | "custom" | "internal";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* What a run delivers, which is what decides the shape of its reserve window.
|
|
44
|
+
* The reserve ends discovery, not the run's own product, so the delivery tools
|
|
45
|
+
* a run keeps inside it depend on what it is producing. An "orientation" run
|
|
46
|
+
* delivers a description of a codebase, so `code_nav` is a delivery tool for it
|
|
47
|
+
* the way `write` and `edit` are for a run that delivers files.
|
|
48
|
+
*
|
|
49
|
+
* Closed on purpose: it widens the reserve admission set, so an unrecognized
|
|
50
|
+
* value must be a loud parse error rather than a silent degrade back to the
|
|
51
|
+
* default set. `product: orientaton` in a recipe would otherwise cost the run
|
|
52
|
+
* its navigation tool with no diagnostic anywhere.
|
|
53
|
+
*/
|
|
54
|
+
export type AgentProduct = "orientation";
|
|
55
|
+
|
|
56
|
+
const AGENT_PRODUCTS: ReadonlyArray<AgentProduct> = ["orientation"];
|
|
57
|
+
|
|
58
|
+
const AGENT_CATEGORIES: ReadonlyArray<AgentCategory> = [
|
|
59
|
+
"explore",
|
|
60
|
+
"plan",
|
|
61
|
+
"research",
|
|
62
|
+
"implement",
|
|
63
|
+
"quality",
|
|
64
|
+
"science",
|
|
65
|
+
"evolution",
|
|
66
|
+
"operations",
|
|
67
|
+
"internal",
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const AGENT_CAPABILITY_CLASSES: ReadonlyArray<AgentCapabilityClass> = [
|
|
71
|
+
"read-only",
|
|
72
|
+
"artifact-write",
|
|
73
|
+
"workspace-edit",
|
|
74
|
+
"verification",
|
|
75
|
+
"orchestration",
|
|
76
|
+
"internal",
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
const AGENT_LATENCY_CLASSES: ReadonlyArray<AgentLatencyClass> = ["fast", "balanced", "deep"];
|
|
80
|
+
|
|
81
|
+
const AGENT_AUDIENCES: ReadonlyArray<AgentAudience> = ["base", "shadow", "custom", "internal"];
|
|
82
|
+
|
|
83
|
+
const AGENT_PROJECT_CONTEXT_TIERS: ReadonlyArray<AgentProjectContextTier> = ["none", "bounded"];
|
|
84
|
+
|
|
85
|
+
export interface AgentToolRequirements {
|
|
86
|
+
required: ReadonlyArray<ToolName | { anyOf: ReadonlyArray<ToolName> }>;
|
|
87
|
+
optional: ReadonlyArray<ToolName>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface AgentSpec {
|
|
91
|
+
version: 1;
|
|
92
|
+
id: string;
|
|
93
|
+
name: string;
|
|
94
|
+
description: string;
|
|
95
|
+
source: AgentRecipe["source"] | "custom";
|
|
96
|
+
filepath: string;
|
|
97
|
+
tools: ReadonlyArray<ToolName>;
|
|
98
|
+
toolRequirements: AgentToolRequirements;
|
|
99
|
+
category: AgentCategory;
|
|
100
|
+
capabilityClass: AgentCapabilityClass;
|
|
101
|
+
latencyClass: AgentLatencyClass;
|
|
102
|
+
projectContextTier: AgentProjectContextTier;
|
|
103
|
+
audience: AgentAudience;
|
|
104
|
+
tags: ReadonlyArray<string>;
|
|
105
|
+
skills: ReadonlyArray<string>;
|
|
106
|
+
resultContract: ResultContract;
|
|
107
|
+
product?: AgentProduct;
|
|
108
|
+
budget: AgentBudget;
|
|
109
|
+
body: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function includes<T extends string>(values: ReadonlyArray<T>, value: unknown): value is T {
|
|
113
|
+
return typeof value === "string" && (values as ReadonlyArray<string>).includes(value);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function isAgentCategory(value: unknown): value is AgentCategory {
|
|
117
|
+
return includes(AGENT_CATEGORIES, value);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function isAgentCapabilityClass(value: unknown): value is AgentCapabilityClass {
|
|
121
|
+
return includes(AGENT_CAPABILITY_CLASSES, value);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function isAgentLatencyClass(value: unknown): value is AgentLatencyClass {
|
|
125
|
+
return includes(AGENT_LATENCY_CLASSES, value);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function isAgentAudience(value: unknown): value is AgentAudience {
|
|
129
|
+
return includes(AGENT_AUDIENCES, value);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function isAgentProjectContextTier(value: unknown): value is AgentProjectContextTier {
|
|
133
|
+
return includes(AGENT_PROJECT_CONTEXT_TIERS, value);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function isAgentProduct(value: unknown): value is AgentProduct {
|
|
137
|
+
return includes(AGENT_PRODUCTS, value);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Default tier per capability class. Reproduces the historical dispatch
|
|
142
|
+
* allowlist byte-for-byte: workers that act on the workspace get the bounded
|
|
143
|
+
* projection; read-only, orchestration, and internal classes get none.
|
|
144
|
+
*/
|
|
145
|
+
export function defaultProjectContextTier(capability: AgentCapabilityClass): AgentProjectContextTier {
|
|
146
|
+
return capability === "workspace-edit" || capability === "verification" || capability === "artifact-write"
|
|
147
|
+
? "bounded"
|
|
148
|
+
: "none";
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function actionClassesForTools(tools: ReadonlyArray<ToolName>): ReadonlySet<ActionClass> {
|
|
152
|
+
const actions = new Set<ActionClass>();
|
|
153
|
+
for (const tool of tools) actions.add(classify({ tool }).actionClass);
|
|
154
|
+
return actions;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function normalizeTools(recipe: AgentRecipe): ReadonlyArray<ToolName> {
|
|
158
|
+
const seen = new Set<string>();
|
|
159
|
+
const tools: ToolName[] = [];
|
|
160
|
+
for (const tool of recipe.tools) {
|
|
161
|
+
if (typeof tool !== "string" || tool.trim().length === 0) {
|
|
162
|
+
throw new Error(`agent recipe '${recipe.id}' declares an invalid tool name`);
|
|
163
|
+
}
|
|
164
|
+
if (seen.has(tool)) continue;
|
|
165
|
+
seen.add(tool);
|
|
166
|
+
tools.push(isBuiltinToolName(tool as ToolName) ? (tool as BuiltinToolName) : (tool as ToolName));
|
|
167
|
+
}
|
|
168
|
+
return tools;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function asToolName(tool: string): ToolName {
|
|
172
|
+
return isBuiltinToolName(tool as ToolName) ? (tool as BuiltinToolName) : (tool as ToolName);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function normalizeToolRequirements(recipe: AgentRecipe, tools: ReadonlyArray<ToolName>): AgentToolRequirements {
|
|
176
|
+
if (!recipe.toolRequirements) {
|
|
177
|
+
throw new Error(`agent recipe '${recipe.id}' must declare tools.required and tools.optional`);
|
|
178
|
+
}
|
|
179
|
+
const declared = new Set(tools);
|
|
180
|
+
const required = recipe.toolRequirements.required.map((requirement: AgentToolRequirement, index) => {
|
|
181
|
+
if (typeof requirement === "string") return asToolName(requirement);
|
|
182
|
+
if (!Array.isArray(requirement.anyOf) || requirement.anyOf.length === 0) {
|
|
183
|
+
throw new Error(`agent recipe '${recipe.id}' tools.required[${index}].anyOf must be non-empty`);
|
|
184
|
+
}
|
|
185
|
+
return { anyOf: requirement.anyOf.map(asToolName) };
|
|
186
|
+
});
|
|
187
|
+
const optional = recipe.toolRequirements.optional.map(asToolName);
|
|
188
|
+
const mentioned = required.flatMap((requirement) =>
|
|
189
|
+
typeof requirement === "string" ? [requirement] : requirement.anyOf,
|
|
190
|
+
);
|
|
191
|
+
for (const tool of [...mentioned, ...optional]) {
|
|
192
|
+
if (!declared.has(tool)) throw new Error(`agent recipe '${recipe.id}' requirement '${tool}' is not declared`);
|
|
193
|
+
}
|
|
194
|
+
if (new Set([...mentioned, ...optional]).size !== mentioned.length + optional.length) {
|
|
195
|
+
throw new Error(`agent recipe '${recipe.id}' contains duplicate tool requirements`);
|
|
196
|
+
}
|
|
197
|
+
if (new Set([...mentioned, ...optional]).size !== tools.length) {
|
|
198
|
+
throw new Error(`agent recipe '${recipe.id}' has declared tools without required/optional semantics`);
|
|
199
|
+
}
|
|
200
|
+
return { required, optional };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export interface AgentToolCompatibility {
|
|
204
|
+
compatible: boolean;
|
|
205
|
+
missingRequired: ReadonlyArray<string>;
|
|
206
|
+
lostOptional: ReadonlyArray<ToolName>;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export function resolveAgentToolCompatibility(
|
|
210
|
+
spec: Pick<AgentSpec, "toolRequirements">,
|
|
211
|
+
effectiveTools: ReadonlyArray<ToolName>,
|
|
212
|
+
options: { mediatesDispatch: boolean },
|
|
213
|
+
): AgentToolCompatibility {
|
|
214
|
+
const available = new Set(effectiveTools);
|
|
215
|
+
const missingRequired: string[] = [];
|
|
216
|
+
for (const requirement of spec.toolRequirements.required) {
|
|
217
|
+
if (typeof requirement === "string") {
|
|
218
|
+
if (!available.has(requirement)) missingRequired.push(requirement);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
if (!requirement.anyOf.some((tool) => available.has(tool))) {
|
|
222
|
+
missingRequired.push(`anyOf(${requirement.anyOf.join("|")})`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (available.has(ToolNames.Dispatch) && !options.mediatesDispatch) {
|
|
226
|
+
missingRequired.push("dispatch(runtime mediation unavailable)");
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
compatible: missingRequired.length === 0,
|
|
230
|
+
missingRequired,
|
|
231
|
+
lostOptional: spec.toolRequirements.optional.filter((tool) => !available.has(tool)),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function normalizeAgentSpec(recipe: AgentRecipe): AgentSpec {
|
|
236
|
+
const tools = normalizeTools(recipe);
|
|
237
|
+
const toolRequirements = normalizeToolRequirements(recipe, tools);
|
|
238
|
+
return {
|
|
239
|
+
version: recipe.version,
|
|
240
|
+
id: recipe.id,
|
|
241
|
+
name: recipe.name,
|
|
242
|
+
description: recipe.description,
|
|
243
|
+
source: recipe.source,
|
|
244
|
+
filepath: recipe.filepath,
|
|
245
|
+
tools,
|
|
246
|
+
toolRequirements,
|
|
247
|
+
category: recipe.category,
|
|
248
|
+
capabilityClass: recipe.capabilityClass,
|
|
249
|
+
latencyClass: recipe.latencyClass,
|
|
250
|
+
projectContextTier: recipe.projectContextTier,
|
|
251
|
+
audience: recipe.audience,
|
|
252
|
+
tags: recipe.tags,
|
|
253
|
+
skills: recipe.skills,
|
|
254
|
+
resultContract: recipe.resultContract,
|
|
255
|
+
...(recipe.product !== undefined ? { product: recipe.product } : {}),
|
|
256
|
+
budget: recipe.budget,
|
|
257
|
+
body: recipe.body,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Stable identity of everything about a recipe that changes what a route means.
|
|
263
|
+
*
|
|
264
|
+
* Route statistics are only comparable when they were produced by the same
|
|
265
|
+
* agent. A Coder run under a reviewer persona, a Coder whose declared tools
|
|
266
|
+
* changed, and a Coder whose body was rewritten are three different things to
|
|
267
|
+
* aggregate, so each gets a different fingerprint. Display-only metadata
|
|
268
|
+
* (name, description, category, filepath, source, tags) is excluded: display
|
|
269
|
+
* metadata edits must not invalidate measured history.
|
|
270
|
+
*/
|
|
271
|
+
export function agentSpecFingerprint(spec: AgentSpec): string {
|
|
272
|
+
const requirement = (entry: AgentToolRequirement): string =>
|
|
273
|
+
typeof entry === "string" ? entry : `anyOf(${[...entry.anyOf].sort().join("|")})`;
|
|
274
|
+
const payload = JSON.stringify({
|
|
275
|
+
id: spec.id,
|
|
276
|
+
tools: [...spec.tools].sort(),
|
|
277
|
+
required: spec.toolRequirements.required.map(requirement).sort(),
|
|
278
|
+
optional: [...spec.toolRequirements.optional].sort(),
|
|
279
|
+
capabilityClass: spec.capabilityClass,
|
|
280
|
+
latencyClass: spec.latencyClass,
|
|
281
|
+
projectContextTier: spec.projectContextTier,
|
|
282
|
+
audience: spec.audience,
|
|
283
|
+
skills: [...spec.skills].sort(),
|
|
284
|
+
resultContract: spec.resultContract,
|
|
285
|
+
budget: spec.budget,
|
|
286
|
+
body: createHash("sha256").update(spec.body, "utf8").digest("hex"),
|
|
287
|
+
});
|
|
288
|
+
return createHash("sha256").update(payload, "utf8").digest("hex");
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export function isUserVisibleAgent(spec: AgentSpec): boolean {
|
|
292
|
+
return spec.audience === "base" || spec.audience === "custom";
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export function isShadowAgent(spec: AgentSpec): boolean {
|
|
296
|
+
return spec.audience === "shadow" || spec.audience === "internal";
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export function agentSpecPolicyErrors(spec: AgentSpec): string[] {
|
|
300
|
+
const errors: string[] = [];
|
|
301
|
+
const actions = actionClassesForTools(spec.tools);
|
|
302
|
+
const requiredGroups = spec.toolRequirements.required.map((requirement) =>
|
|
303
|
+
typeof requirement === "string" ? [requirement] : requirement.anyOf,
|
|
304
|
+
);
|
|
305
|
+
const requiresTool = (tool: ToolName): boolean =>
|
|
306
|
+
requiredGroups.some((group) => group.length > 0 && group.every((candidate) => candidate === tool));
|
|
307
|
+
const requiresMutation = requiredGroups.some(
|
|
308
|
+
(group) => group.length > 0 && group.every((tool) => tool === ToolNames.Write || tool === ToolNames.Edit),
|
|
309
|
+
);
|
|
310
|
+
if (spec.capabilityClass === "workspace-edit" && (!requiresTool(ToolNames.Read) || !requiresMutation)) {
|
|
311
|
+
errors.push(`workspace-edit agent '${spec.id}' must require read and write|edit`);
|
|
312
|
+
}
|
|
313
|
+
if (spec.capabilityClass === "verification" && !requiresTool(ToolNames.Verify)) {
|
|
314
|
+
errors.push(`verification agent '${spec.id}' must require verify`);
|
|
315
|
+
}
|
|
316
|
+
if (spec.capabilityClass === "artifact-write" && !requiresTool(ToolNames.Artifact)) {
|
|
317
|
+
errors.push(`artifact-write agent '${spec.id}' must require artifact`);
|
|
318
|
+
}
|
|
319
|
+
if (spec.skills.length > 0 && !requiresTool(ToolNames.Context)) {
|
|
320
|
+
errors.push(`agent '${spec.id}' must require context for bound skills`);
|
|
321
|
+
}
|
|
322
|
+
if (
|
|
323
|
+
spec.capabilityClass === "orchestration" &&
|
|
324
|
+
spec.tools.includes(ToolNames.Dispatch) &&
|
|
325
|
+
!requiresTool(ToolNames.Dispatch)
|
|
326
|
+
) {
|
|
327
|
+
errors.push(`orchestration agent '${spec.id}' must require dispatch when it is declared`);
|
|
328
|
+
}
|
|
329
|
+
const toolList = spec.tools.join(", ");
|
|
330
|
+
if (spec.capabilityClass === "read-only") {
|
|
331
|
+
for (const action of actions) {
|
|
332
|
+
if (action !== "read") errors.push(`read-only agent '${spec.id}' requests ${action} tools (${toolList})`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (spec.capabilityClass === "artifact-write") {
|
|
336
|
+
for (const tool of spec.tools) {
|
|
337
|
+
const action = classify({ tool }).actionClass;
|
|
338
|
+
if (action === "execute" || action === "dispatch" || action === "system_modify" || action === "git_destructive") {
|
|
339
|
+
errors.push(`artifact-write agent '${spec.id}' requests ${action} tool '${tool}'`);
|
|
340
|
+
}
|
|
341
|
+
if (action === "write" && tool !== ToolNames.Artifact) {
|
|
342
|
+
errors.push(`artifact-write agent '${spec.id}' can only write terminal artifacts; got '${tool}'`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (spec.capabilityClass === "verification") {
|
|
347
|
+
for (const tool of spec.tools) {
|
|
348
|
+
const action = classify({ tool }).actionClass;
|
|
349
|
+
if (action === "write" || action === "dispatch" || action === "system_modify" || action === "git_destructive") {
|
|
350
|
+
errors.push(`verification agent '${spec.id}' must not request ${action} tool '${tool}'`);
|
|
351
|
+
}
|
|
352
|
+
if (tool === ToolNames.Bash)
|
|
353
|
+
errors.push(`verification agent '${spec.id}' must use typed validation tools, not bash`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (spec.capabilityClass !== "orchestration" && spec.tools.includes(ToolNames.Dispatch)) {
|
|
357
|
+
errors.push(`agent '${spec.id}' exposes dispatch without orchestration capability`);
|
|
358
|
+
}
|
|
359
|
+
if (spec.tools.includes(ToolNames.AskUser)) {
|
|
360
|
+
errors.push(`agent '${spec.id}' exposes ask_user, which is only available to the orchestrator`);
|
|
361
|
+
}
|
|
362
|
+
if (spec.skills.length > 0 && !spec.tools.includes(ToolNames.Context)) {
|
|
363
|
+
errors.push(`agent '${spec.id}' declares skills but does not expose context`);
|
|
364
|
+
}
|
|
365
|
+
return errors;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
export function assertAgentSpecPolicy(spec: AgentSpec): void {
|
|
369
|
+
const errors = agentSpecPolicyErrors(spec);
|
|
370
|
+
if (errors.length > 0) throw new Error(`agent policy violation:\n${errors.map((error) => `- ${error}`).join("\n")}`);
|
|
371
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declared write boundaries: the repo paths a fleet step is allowed to change.
|
|
3
|
+
*
|
|
4
|
+
* A tool permission level is a capability list. This is a boundary, and they
|
|
5
|
+
* are not the same thing: a step that may run a command may write anywhere that
|
|
6
|
+
* command can reach, so "this step changes nothing outside `docs/`" is a claim
|
|
7
|
+
* about the repository, not about the tool surface. Clio settles the claim in
|
|
8
|
+
* code, after the step, by diffing the workspace.
|
|
9
|
+
*
|
|
10
|
+
* This module owns only the grammar: what a declared entry may look like, what
|
|
11
|
+
* it covers, and when two declarations overlap. The enforcement half lives in
|
|
12
|
+
* `src/domains/dispatch/write-boundary.ts`, because deciding what a step was
|
|
13
|
+
* allowed to write is contract policy and observing what it did write is a
|
|
14
|
+
* property of the checkout.
|
|
15
|
+
*
|
|
16
|
+
* Grammar, deliberately small (v1 has no globs):
|
|
17
|
+
*
|
|
18
|
+
* src/domains/dispatch/route-facts.ts exactly that file
|
|
19
|
+
* docs/ that directory and everything under it
|
|
20
|
+
*
|
|
21
|
+
* Entries are repo-relative and POSIX-separated. An absolute path, a `..`
|
|
22
|
+
* segment, a backslash, or a glob character is refused at parse time rather
|
|
23
|
+
* than interpreted, because an allowlist that quietly means something other
|
|
24
|
+
* than it says is worse than no allowlist.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Upper bound on one step's declared allowlist. A boundary is a statement an
|
|
29
|
+
* operator has to be able to read; thirty-two prefixes is already generous, and
|
|
30
|
+
* a step that needs more of the tree than that should say `workspace` and mean
|
|
31
|
+
* it in a contract that does not claim a boundary.
|
|
32
|
+
*/
|
|
33
|
+
export const WRITE_BOUNDARY_MAX_ENTRIES = 32;
|
|
34
|
+
|
|
35
|
+
/** A normalized allowlist. Empty means "changes nothing", which is `readonly`. */
|
|
36
|
+
export type WriteBoundary = ReadonlyArray<string>;
|
|
37
|
+
|
|
38
|
+
const GLOB_CHARACTERS = /[*?[\]{}]/u;
|
|
39
|
+
|
|
40
|
+
/** Normalize one declared entry, or throw explaining exactly what is wrong. */
|
|
41
|
+
export function normalizeWriteBoundaryEntry(entry: string): string {
|
|
42
|
+
const raw = entry.trim();
|
|
43
|
+
if (raw.length === 0) throw new Error("write boundary: entry must be a non-empty path");
|
|
44
|
+
if (raw.includes("\\")) {
|
|
45
|
+
throw new Error(`write boundary: entry '${entry}' must use '/' separators`);
|
|
46
|
+
}
|
|
47
|
+
if (GLOB_CHARACTERS.test(raw)) {
|
|
48
|
+
throw new Error(`write boundary: entry '${entry}' looks like a glob, which v1 does not support`);
|
|
49
|
+
}
|
|
50
|
+
if (raw.startsWith("/") || /^[A-Za-z]:/u.test(raw)) {
|
|
51
|
+
throw new Error(`write boundary: entry '${entry}' must be repository-relative, not absolute`);
|
|
52
|
+
}
|
|
53
|
+
const subtree = raw.endsWith("/");
|
|
54
|
+
const segments = raw.split("/").filter((segment) => segment.length > 0);
|
|
55
|
+
if (segments.length === 0) {
|
|
56
|
+
throw new Error(`write boundary: entry '${entry}' must name a path inside the repository`);
|
|
57
|
+
}
|
|
58
|
+
for (const segment of segments) {
|
|
59
|
+
if (segment === "..") throw new Error(`write boundary: entry '${entry}' must not contain '..'`);
|
|
60
|
+
if (segment === ".") throw new Error(`write boundary: entry '${entry}' must not contain '.' segments`);
|
|
61
|
+
}
|
|
62
|
+
const joined = segments.join("/");
|
|
63
|
+
return subtree ? `${joined}/` : joined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Normalize a declaration. Duplicates collapse and the result is sorted, so two
|
|
68
|
+
* spellings of the same boundary produce one canonical value that a plan hash
|
|
69
|
+
* and a sealed verdict can both carry.
|
|
70
|
+
*/
|
|
71
|
+
export function normalizeWriteBoundary(entries: ReadonlyArray<string>): string[] {
|
|
72
|
+
if (entries.length > WRITE_BOUNDARY_MAX_ENTRIES) {
|
|
73
|
+
throw new Error(`write boundary: at most ${WRITE_BOUNDARY_MAX_ENTRIES} entries may be declared`);
|
|
74
|
+
}
|
|
75
|
+
const normalized = new Set(entries.map(normalizeWriteBoundaryEntry));
|
|
76
|
+
// A file entry covered by a declared subtree is redundant, not an error: the
|
|
77
|
+
// operator said the directory, and saying one of its files again changes
|
|
78
|
+
// nothing about what is allowed.
|
|
79
|
+
return [...normalized].sort();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Repo-relative path with the separators this grammar speaks. */
|
|
83
|
+
function toRepoRelativePosix(path: string): string {
|
|
84
|
+
return path.split("\\").join("/");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Whether the boundary permits a change to one repo-relative path. */
|
|
88
|
+
export function writeBoundaryCovers(boundary: WriteBoundary, path: string): boolean {
|
|
89
|
+
const candidate = toRepoRelativePosix(path);
|
|
90
|
+
return boundary.some((entry) => (entry.endsWith("/") ? candidate.startsWith(entry) : candidate === entry));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Whether two declared entries can describe the same path. */
|
|
94
|
+
function entriesOverlap(left: string, right: string): boolean {
|
|
95
|
+
if (left === right) return true;
|
|
96
|
+
if (left.endsWith("/") && right.startsWith(left)) return true;
|
|
97
|
+
if (right.endsWith("/") && left.startsWith(right)) return true;
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Whether two boundaries share any path. Empty boundaries never overlap. */
|
|
102
|
+
export function writeBoundariesOverlap(left: WriteBoundary, right: WriteBoundary): boolean {
|
|
103
|
+
return left.some((entry) => right.some((other) => entriesOverlap(entry, other)));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Operator-facing rendering, used verbatim in violation messages. */
|
|
107
|
+
export function describeWriteBoundary(boundary: WriteBoundary): string {
|
|
108
|
+
return boundary.length === 0 ? "(nothing: readonly)" : boundary.join(", ");
|
|
109
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ChangedHarnessComponent,
|
|
3
|
+
ComponentDiff,
|
|
4
|
+
ComponentFieldName,
|
|
5
|
+
ComponentSnapshot,
|
|
6
|
+
HarnessComponent,
|
|
7
|
+
} from "./types.js";
|
|
8
|
+
|
|
9
|
+
const COMPONENT_FIELDS: ReadonlyArray<ComponentFieldName> = [
|
|
10
|
+
"id",
|
|
11
|
+
"kind",
|
|
12
|
+
"path",
|
|
13
|
+
"ownerDomain",
|
|
14
|
+
"mutable",
|
|
15
|
+
"authority",
|
|
16
|
+
"reloadClass",
|
|
17
|
+
"contentHash",
|
|
18
|
+
"description",
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
export function diffComponentSnapshots(from: ComponentSnapshot, to: ComponentSnapshot): ComponentDiff {
|
|
22
|
+
const fromById = indexComponents(from.components, "from");
|
|
23
|
+
const toById = indexComponents(to.components, "to");
|
|
24
|
+
const added: HarnessComponent[] = [];
|
|
25
|
+
const removed: HarnessComponent[] = [];
|
|
26
|
+
const changed: ChangedHarnessComponent[] = [];
|
|
27
|
+
let unchanged = 0;
|
|
28
|
+
|
|
29
|
+
for (const before of from.components) {
|
|
30
|
+
const after = toById.get(before.id);
|
|
31
|
+
if (!after) {
|
|
32
|
+
removed.push(before);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const changedFields = changedComponentFields(before, after);
|
|
36
|
+
if (changedFields.length === 0) {
|
|
37
|
+
unchanged += 1;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
changed.push({ id: before.id, before, after, changedFields });
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
for (const after of to.components) {
|
|
44
|
+
if (!fromById.has(after.id)) added.push(after);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
version: 1,
|
|
49
|
+
from: {
|
|
50
|
+
root: from.root,
|
|
51
|
+
generatedAt: from.generatedAt,
|
|
52
|
+
componentCount: from.components.length,
|
|
53
|
+
},
|
|
54
|
+
to: {
|
|
55
|
+
root: to.root,
|
|
56
|
+
generatedAt: to.generatedAt,
|
|
57
|
+
componentCount: to.components.length,
|
|
58
|
+
},
|
|
59
|
+
summary: {
|
|
60
|
+
added: added.length,
|
|
61
|
+
removed: removed.length,
|
|
62
|
+
changed: changed.length,
|
|
63
|
+
unchanged,
|
|
64
|
+
},
|
|
65
|
+
added: sortComponents(added),
|
|
66
|
+
removed: sortComponents(removed),
|
|
67
|
+
changed: changed.sort((a, b) => a.id.localeCompare(b.id)),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function indexComponents(
|
|
72
|
+
components: ReadonlyArray<HarnessComponent>,
|
|
73
|
+
label: "from" | "to",
|
|
74
|
+
): Map<string, HarnessComponent> {
|
|
75
|
+
const map = new Map<string, HarnessComponent>();
|
|
76
|
+
for (const component of components) {
|
|
77
|
+
if (map.has(component.id)) {
|
|
78
|
+
throw new Error(`component diff ${label} snapshot has duplicate id: ${component.id}`);
|
|
79
|
+
}
|
|
80
|
+
map.set(component.id, component);
|
|
81
|
+
}
|
|
82
|
+
return map;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function changedComponentFields(before: HarnessComponent, after: HarnessComponent): ComponentFieldName[] {
|
|
86
|
+
const changed: ComponentFieldName[] = [];
|
|
87
|
+
for (const field of COMPONENT_FIELDS) {
|
|
88
|
+
if (before[field] !== after[field]) changed.push(field);
|
|
89
|
+
}
|
|
90
|
+
return changed;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function sortComponents(components: ReadonlyArray<HarnessComponent>): HarnessComponent[] {
|
|
94
|
+
return [...components].sort((a, b) => {
|
|
95
|
+
const idOrder = a.id.localeCompare(b.id);
|
|
96
|
+
if (idOrder !== 0) return idOrder;
|
|
97
|
+
return a.path.localeCompare(b.path);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
export function sha256Hex(content: Buffer | string): string {
|
|
4
|
+
return createHash("sha256").update(content).digest("hex");
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function stableJson(value: unknown): string {
|
|
8
|
+
if (value === null) return "null";
|
|
9
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
10
|
+
if (typeof value === "number" || typeof value === "boolean") return JSON.stringify(value);
|
|
11
|
+
if (Array.isArray(value)) return `[${value.map((item) => stableJson(item)).join(",")}]`;
|
|
12
|
+
if (isRecord(value)) {
|
|
13
|
+
const entries = Object.entries(value).sort(([a], [b]) => a.localeCompare(b));
|
|
14
|
+
return `{${entries.map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`).join(",")}}`;
|
|
15
|
+
}
|
|
16
|
+
return JSON.stringify(null);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
20
|
+
return typeof value === "object" && value !== null;
|
|
21
|
+
}
|