@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,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-owned live routing state.
|
|
3
|
+
*
|
|
4
|
+
* Saved settings (settings.yaml) are defaults shared by every Clio process.
|
|
5
|
+
* Live routing for a running session — active orchestrator target/model/
|
|
6
|
+
* thinking, the fleet default used by /run, and the Alt+J / Alt+K scope list —
|
|
7
|
+
* is owned by the process that is running the session. Each process seeds its
|
|
8
|
+
* routing from saved settings at boot and afterwards reads everything through
|
|
9
|
+
* an effective view: the shared snapshot (targets, theme, safety, retry, …)
|
|
10
|
+
* with the session's routing fields overlaid.
|
|
11
|
+
*
|
|
12
|
+
* Interactive routing changes update the session state first (immediate
|
|
13
|
+
* effect in this session) and write through to saved settings so new sessions
|
|
14
|
+
* inherit them. External writes to settings.yaml — another Clio session, the
|
|
15
|
+
* CLI, an editor — update the shared snapshot and therefore the defaults, but
|
|
16
|
+
* never redirect a running session's routing.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { ClioSettings } from "./config.js";
|
|
20
|
+
|
|
21
|
+
type SessionThinkingLevel = ClioSettings["orchestrator"]["thinkingLevel"];
|
|
22
|
+
|
|
23
|
+
export interface SessionRoutingTarget {
|
|
24
|
+
target: string | null;
|
|
25
|
+
model: string | null;
|
|
26
|
+
thinkingLevel: SessionThinkingLevel;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface SessionRoutingState {
|
|
30
|
+
orchestrator: SessionRoutingTarget;
|
|
31
|
+
background: SessionRoutingTarget;
|
|
32
|
+
workersDefault: SessionRoutingTarget;
|
|
33
|
+
scope: string[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Partial routing update. Only the fields present are applied to the session
|
|
38
|
+
* state and written through to saved settings, so a Shift+Tab in one session
|
|
39
|
+
* never clobbers a default model another session saved a minute earlier.
|
|
40
|
+
*/
|
|
41
|
+
export interface RoutingPatch {
|
|
42
|
+
orchestrator?: Partial<SessionRoutingTarget>;
|
|
43
|
+
background?: Partial<SessionRoutingTarget>;
|
|
44
|
+
workersDefault?: Partial<SessionRoutingTarget>;
|
|
45
|
+
scope?: string[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function targetFrom(source: {
|
|
49
|
+
target: string | null;
|
|
50
|
+
model: string | null;
|
|
51
|
+
thinkingLevel: SessionThinkingLevel;
|
|
52
|
+
}): SessionRoutingTarget {
|
|
53
|
+
return {
|
|
54
|
+
target: source.target ?? null,
|
|
55
|
+
model: source.model ?? null,
|
|
56
|
+
thinkingLevel: source.thinkingLevel ?? "off",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function seedSessionRouting(saved: Readonly<ClioSettings>): SessionRoutingState {
|
|
61
|
+
return {
|
|
62
|
+
orchestrator: targetFrom(saved.orchestrator),
|
|
63
|
+
background: targetFrom(saved.background),
|
|
64
|
+
workersDefault: targetFrom(saved.workers.default),
|
|
65
|
+
scope: [...(saved.scope ?? [])],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Effective settings view: the shared snapshot with the session's routing
|
|
71
|
+
* overlaid. Everything that resolves a chat or dispatch target, and every UI
|
|
72
|
+
* surface that displays routing, must read through this view.
|
|
73
|
+
*/
|
|
74
|
+
export function applySessionRouting(saved: Readonly<ClioSettings>, routing: SessionRoutingState): ClioSettings {
|
|
75
|
+
const view = structuredClone(saved) as ClioSettings;
|
|
76
|
+
view.orchestrator.target = routing.orchestrator.target;
|
|
77
|
+
view.orchestrator.model = routing.orchestrator.model;
|
|
78
|
+
view.orchestrator.thinkingLevel = routing.orchestrator.thinkingLevel;
|
|
79
|
+
view.background.target = routing.background.target;
|
|
80
|
+
view.background.model = routing.background.model;
|
|
81
|
+
view.background.thinkingLevel = routing.background.thinkingLevel;
|
|
82
|
+
view.workers.default.target = routing.workersDefault.target;
|
|
83
|
+
view.workers.default.model = routing.workersDefault.model;
|
|
84
|
+
view.workers.default.thinkingLevel = routing.workersDefault.thinkingLevel;
|
|
85
|
+
view.scope = [...routing.scope];
|
|
86
|
+
return view;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function applyRoutingPatch(routing: SessionRoutingState, patch: RoutingPatch): void {
|
|
90
|
+
if (patch.orchestrator) Object.assign(routing.orchestrator, patch.orchestrator);
|
|
91
|
+
if (patch.background) Object.assign(routing.background, patch.background);
|
|
92
|
+
if (patch.workersDefault) Object.assign(routing.workersDefault, patch.workersDefault);
|
|
93
|
+
if (patch.scope) routing.scope = [...patch.scope];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Session-local overrides for the non-routing settings surface (autonomy,
|
|
98
|
+
* budget, compaction, retry, …). Routing has its own dedicated state above;
|
|
99
|
+
* everything else a session changes "for this session only" lives here as a
|
|
100
|
+
* sparse map of dotted config paths to values. The /settings overlay edits one
|
|
101
|
+
* leaf at a time and every editable id equals its config path, so the keys are
|
|
102
|
+
* always object paths (never array indices). A value of `undefined` represents
|
|
103
|
+
* "delete this optional leaf in the effective view" (e.g. clearing
|
|
104
|
+
* compaction.model).
|
|
105
|
+
*/
|
|
106
|
+
export type SessionOverrides = Map<string, unknown>;
|
|
107
|
+
|
|
108
|
+
/** True for the dotted paths owned by the session routing state (never overrides). */
|
|
109
|
+
export function isRoutingPath(path: string): boolean {
|
|
110
|
+
return (
|
|
111
|
+
path === "scope" ||
|
|
112
|
+
path.startsWith("orchestrator.") ||
|
|
113
|
+
path.startsWith("background.") ||
|
|
114
|
+
path.startsWith("workers.default.")
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** Read a leaf from a settings blob by dotted object path. Missing ⇒ undefined. */
|
|
119
|
+
export function getAtPath(source: Readonly<ClioSettings>, path: string): unknown {
|
|
120
|
+
let cursor: unknown = source;
|
|
121
|
+
for (const key of path.split(".")) {
|
|
122
|
+
if (cursor === null || typeof cursor !== "object") return undefined;
|
|
123
|
+
cursor = (cursor as Record<string, unknown>)[key];
|
|
124
|
+
}
|
|
125
|
+
return cursor;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Set (or, when `value === undefined`, delete) a leaf on a settings blob by
|
|
130
|
+
* dotted object path. Intermediate objects must already exist — every editable
|
|
131
|
+
* id targets a leaf under a known schema object, so this never has to create
|
|
132
|
+
* containers.
|
|
133
|
+
*/
|
|
134
|
+
export function setAtPath(target: ClioSettings, path: string, value: unknown): void {
|
|
135
|
+
const keys = path.split(".");
|
|
136
|
+
const last = keys.pop();
|
|
137
|
+
if (last === undefined) return;
|
|
138
|
+
let cursor: Record<string, unknown> = target as unknown as Record<string, unknown>;
|
|
139
|
+
for (const key of keys) {
|
|
140
|
+
const nextCursor = cursor[key];
|
|
141
|
+
if (nextCursor === null || typeof nextCursor !== "object") return;
|
|
142
|
+
cursor = nextCursor as Record<string, unknown>;
|
|
143
|
+
}
|
|
144
|
+
if (value === undefined) delete cursor[last];
|
|
145
|
+
else cursor[last] = value;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Effective non-routing view: the shared snapshot with the session's overrides
|
|
150
|
+
* applied. Returns the base untouched when there are no overrides so the common
|
|
151
|
+
* (no session-only edits) path stays allocation-free.
|
|
152
|
+
*/
|
|
153
|
+
export function applyOverrides(base: Readonly<ClioSettings>, overrides: SessionOverrides): ClioSettings {
|
|
154
|
+
if (overrides.size === 0) return base as ClioSettings;
|
|
155
|
+
const view = structuredClone(base) as ClioSettings;
|
|
156
|
+
for (const [path, value] of overrides) setAtPath(view, path, value);
|
|
157
|
+
return view;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Write-through of a routing patch onto a (cloned) saved-settings blob. */
|
|
161
|
+
export function mergeRoutingPatchIntoSettings(settings: ClioSettings, patch: RoutingPatch): void {
|
|
162
|
+
if (patch.orchestrator) Object.assign(settings.orchestrator, patch.orchestrator);
|
|
163
|
+
if (patch.background) Object.assign(settings.background, patch.background);
|
|
164
|
+
if (patch.workersDefault) Object.assign(settings.workers.default, patch.workersDefault);
|
|
165
|
+
if (patch.scope) settings.scope = [...patch.scope];
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Build the routing patch for a single /settings edit, keyed by its config-path
|
|
170
|
+
* id and read from the supplied (already-changed) settings blob. Used by the
|
|
171
|
+
* scoped /settings commit instead of a live diff: a session-only apply moves the
|
|
172
|
+
* routing state first, which would zero out a subsequent diff and make a global
|
|
173
|
+
* save no-op. Only the touched fields are included, so a global save never
|
|
174
|
+
* rewrites routing fields the operator did not change. Changing a target also
|
|
175
|
+
* carries its rebased model. Returns null for non-routing ids.
|
|
176
|
+
*/
|
|
177
|
+
export function routingPatchForId(path: string, settings: Readonly<ClioSettings>): RoutingPatch | null {
|
|
178
|
+
switch (path) {
|
|
179
|
+
case "orchestrator.target":
|
|
180
|
+
return { orchestrator: { target: settings.orchestrator.target, model: settings.orchestrator.model } };
|
|
181
|
+
case "orchestrator.model":
|
|
182
|
+
return { orchestrator: { model: settings.orchestrator.model } };
|
|
183
|
+
case "orchestrator.thinkingLevel":
|
|
184
|
+
return { orchestrator: { thinkingLevel: settings.orchestrator.thinkingLevel } };
|
|
185
|
+
case "background.target":
|
|
186
|
+
return { background: { target: settings.background.target, model: settings.background.model } };
|
|
187
|
+
case "background.model":
|
|
188
|
+
return { background: { model: settings.background.model } };
|
|
189
|
+
case "background.thinkingLevel":
|
|
190
|
+
return { background: { thinkingLevel: settings.background.thinkingLevel } };
|
|
191
|
+
case "workers.default.target":
|
|
192
|
+
return { workersDefault: { target: settings.workers.default.target, model: settings.workers.default.model } };
|
|
193
|
+
case "workers.default.model":
|
|
194
|
+
return { workersDefault: { model: settings.workers.default.model } };
|
|
195
|
+
case "workers.default.thinkingLevel":
|
|
196
|
+
return { workersDefault: { thinkingLevel: settings.workers.default.thinkingLevel } };
|
|
197
|
+
case "scope":
|
|
198
|
+
return { scope: [...(settings.scope ?? [])] };
|
|
199
|
+
default:
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function diffTarget(
|
|
205
|
+
prev: { target: string | null; model: string | null; thinkingLevel: SessionThinkingLevel },
|
|
206
|
+
next: { target: string | null; model: string | null; thinkingLevel: SessionThinkingLevel },
|
|
207
|
+
): Partial<SessionRoutingTarget> | null {
|
|
208
|
+
const out: Partial<SessionRoutingTarget> = {};
|
|
209
|
+
if ((prev.target ?? null) !== (next.target ?? null)) out.target = next.target ?? null;
|
|
210
|
+
if ((prev.model ?? null) !== (next.model ?? null)) out.model = next.model ?? null;
|
|
211
|
+
if ((prev.thinkingLevel ?? "off") !== (next.thinkingLevel ?? "off")) out.thinkingLevel = next.thinkingLevel ?? "off";
|
|
212
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function scopeEquals(a: ReadonlyArray<string>, b: ReadonlyArray<string>): boolean {
|
|
216
|
+
return a.length === b.length && a.every((entry, idx) => entry === b[idx]);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Field-level diff of the routing surface between two settings blobs. Used to
|
|
221
|
+
* absorb routing edits made through whole-settings writers (the /settings
|
|
222
|
+
* overlay) into the session state without letting unrelated edits persist the
|
|
223
|
+
* session's routing as new defaults.
|
|
224
|
+
*/
|
|
225
|
+
export function diffRouting(prev: Readonly<ClioSettings>, next: Readonly<ClioSettings>): RoutingPatch | null {
|
|
226
|
+
const patch: RoutingPatch = {};
|
|
227
|
+
const orchestrator = diffTarget(prev.orchestrator, next.orchestrator);
|
|
228
|
+
if (orchestrator) patch.orchestrator = orchestrator;
|
|
229
|
+
const background = diffTarget(prev.background, next.background);
|
|
230
|
+
if (background) patch.background = background;
|
|
231
|
+
const workersDefault = diffTarget(prev.workers.default, next.workers.default);
|
|
232
|
+
if (workersDefault) patch.workersDefault = workersDefault;
|
|
233
|
+
if (!scopeEquals(prev.scope ?? [], next.scope ?? [])) patch.scope = [...(next.scope ?? [])];
|
|
234
|
+
return Object.keys(patch).length > 0 ? patch : null;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Replace `target`'s routing fields with `source`'s. Applied before
|
|
239
|
+
* persisting a whole-settings blob that was derived from the effective view,
|
|
240
|
+
* so a /settings edit to, say, retry.maxRetries does not silently rewrite the
|
|
241
|
+
* saved routing defaults with this session's live routing.
|
|
242
|
+
*/
|
|
243
|
+
export function restoreRoutingFields(target: ClioSettings, source: Readonly<ClioSettings>): void {
|
|
244
|
+
target.orchestrator.target = source.orchestrator.target;
|
|
245
|
+
target.orchestrator.model = source.orchestrator.model;
|
|
246
|
+
target.orchestrator.thinkingLevel = source.orchestrator.thinkingLevel;
|
|
247
|
+
target.background.target = source.background.target;
|
|
248
|
+
target.background.model = source.background.model;
|
|
249
|
+
target.background.thinkingLevel = source.background.thinkingLevel;
|
|
250
|
+
target.workers.default.target = source.workers.default.target;
|
|
251
|
+
target.workers.default.model = source.workers.default.model;
|
|
252
|
+
target.workers.default.thinkingLevel = source.workers.default.thinkingLevel;
|
|
253
|
+
target.scope = [...(source.scope ?? [])];
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const ROUTING_FIELD_LABELS: ReadonlyArray<{
|
|
257
|
+
field: string;
|
|
258
|
+
label: string;
|
|
259
|
+
read: (settings: Readonly<ClioSettings>) => unknown;
|
|
260
|
+
}> = [
|
|
261
|
+
{ field: "orchestrator.target", label: "chat target", read: (s) => s.orchestrator.target ?? null },
|
|
262
|
+
{ field: "orchestrator.model", label: "chat model", read: (s) => s.orchestrator.model ?? null },
|
|
263
|
+
{ field: "orchestrator.thinkingLevel", label: "chat thinking", read: (s) => s.orchestrator.thinkingLevel ?? "off" },
|
|
264
|
+
{ field: "background.target", label: "background target", read: (s) => s.background.target ?? null },
|
|
265
|
+
{ field: "background.model", label: "background model", read: (s) => s.background.model ?? null },
|
|
266
|
+
{ field: "background.thinkingLevel", label: "background thinking", read: (s) => s.background.thinkingLevel ?? "off" },
|
|
267
|
+
{ field: "workers.default.target", label: "fleet target", read: (s) => s.workers.default.target ?? null },
|
|
268
|
+
{ field: "workers.default.model", label: "fleet model", read: (s) => s.workers.default.model ?? null },
|
|
269
|
+
{
|
|
270
|
+
field: "workers.default.thinkingLevel",
|
|
271
|
+
label: "fleet thinking",
|
|
272
|
+
read: (s) => s.workers.default.thinkingLevel ?? "off",
|
|
273
|
+
},
|
|
274
|
+
{ field: "scope", label: "Alt+J/Alt+K scope", read: (s) => (s.scope ?? []).join(",") },
|
|
275
|
+
];
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Given the changed paths from a settings reload, return the human labels of
|
|
279
|
+
* routing fields whose saved value now differs from the session's effective
|
|
280
|
+
* routing. A session's own write-through produces no divergence (the changed
|
|
281
|
+
* fields carry the session's values), so a non-empty result means another
|
|
282
|
+
* writer — a second session, the CLI, or a manual edit — moved the defaults
|
|
283
|
+
* out from under this session.
|
|
284
|
+
*/
|
|
285
|
+
export function externalRoutingDivergence(
|
|
286
|
+
changedPaths: ReadonlyArray<string>,
|
|
287
|
+
saved: Readonly<ClioSettings>,
|
|
288
|
+
effective: Readonly<ClioSettings>,
|
|
289
|
+
): string[] {
|
|
290
|
+
const labels: string[] = [];
|
|
291
|
+
for (const entry of ROUTING_FIELD_LABELS) {
|
|
292
|
+
const touched = changedPaths.some((path) => path === entry.field || path.startsWith(`${entry.field}.`));
|
|
293
|
+
if (!touched) continue;
|
|
294
|
+
if (entry.read(saved) !== entry.read(effective)) labels.push(entry.label);
|
|
295
|
+
}
|
|
296
|
+
return labels;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export interface RoutingChangeNotice {
|
|
300
|
+
kind: "external-divergence" | "active-target-removed";
|
|
301
|
+
level: "info" | "warning";
|
|
302
|
+
text: string;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* The two advisory notices a running session emits when an external writer
|
|
307
|
+
* moves settings.yaml underneath it. One helper feeds every surface — the TUI
|
|
308
|
+
* notification center and the ACP session ledger — so the wording cannot
|
|
309
|
+
* drift. `commandHints` appends the interactive remedies (/settings, /model,
|
|
310
|
+
* Alt+L), which only make sense where a user can type slash commands.
|
|
311
|
+
*/
|
|
312
|
+
export function routingChangeNotices(
|
|
313
|
+
changedPaths: ReadonlyArray<string>,
|
|
314
|
+
saved: Readonly<ClioSettings>,
|
|
315
|
+
effective: Readonly<ClioSettings>,
|
|
316
|
+
options?: { commandHints?: boolean },
|
|
317
|
+
): RoutingChangeNotice[] {
|
|
318
|
+
const notices: RoutingChangeNotice[] = [];
|
|
319
|
+
const diverged = externalRoutingDivergence(changedPaths, saved, effective);
|
|
320
|
+
if (diverged.length > 0) {
|
|
321
|
+
const hint = options?.commandHints ? " Change live routing via /settings or /model." : "";
|
|
322
|
+
notices.push({
|
|
323
|
+
kind: "external-divergence",
|
|
324
|
+
level: "info",
|
|
325
|
+
text: `settings.yaml changed (${diverged.join(", ")}). This session keeps its routing; new sessions use the saved defaults.${hint}`,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
const activeTarget = effective.orchestrator.target;
|
|
329
|
+
const targetsTouched = changedPaths.some((path) => path === "targets" || path.startsWith("targets."));
|
|
330
|
+
if (activeTarget && targetsTouched && !saved.targets.some((entry) => entry.id === activeTarget)) {
|
|
331
|
+
const hint = options?.commandHints ? " (/model)" : "";
|
|
332
|
+
notices.push({
|
|
333
|
+
kind: "active-target-removed",
|
|
334
|
+
level: "warning",
|
|
335
|
+
text: `active target '${activeTarget}' was removed from settings.yaml; chat turns will fail until you pick a new target${hint}.`,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
return notices;
|
|
339
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scoped settings layering. Effective settings come from four file layers plus
|
|
3
|
+
* CLI flags, lowest precedence first:
|
|
4
|
+
*
|
|
5
|
+
* built-in < user settings.yaml < project .clio-coder/settings.yaml
|
|
6
|
+
* < project .clio-coder/settings.local.yaml < CLI flags
|
|
7
|
+
*
|
|
8
|
+
* Layering happens on the raw parsed blobs so each effective leaf can be
|
|
9
|
+
* attributed to the layer that set it, then the merged blob is validated against
|
|
10
|
+
* the one strict schema (core/config.ts). Project layers are committed
|
|
11
|
+
* team configuration and must stay secrets-free, so credential-bearing keys are
|
|
12
|
+
* stripped from the project and project.local layers with a diagnostic.
|
|
13
|
+
*
|
|
14
|
+
* Merge semantics, documented and explicit: objects deep-merge key by key;
|
|
15
|
+
* arrays and scalars replace wholesale (a later layer's array wins entirely).
|
|
16
|
+
* Replacing arrays keeps the result predictable and avoids ambiguous element
|
|
17
|
+
* identity. Reads are best-effort: a missing file is skipped, and a malformed
|
|
18
|
+
* file degrades to the lower layers with an issue rather than throwing.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
22
|
+
import { join } from "node:path";
|
|
23
|
+
import { parse as parseYaml } from "yaml";
|
|
24
|
+
import { type ClioSettings, settingsPath, validateSettings } from "./config.js";
|
|
25
|
+
|
|
26
|
+
export type SettingsOrigin = "built-in" | "user" | "project" | "project.local" | "cli";
|
|
27
|
+
|
|
28
|
+
export interface SettingsLayerIssue {
|
|
29
|
+
origin: SettingsOrigin;
|
|
30
|
+
path: string;
|
|
31
|
+
message: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface SettingsLayerInfo {
|
|
35
|
+
origin: SettingsOrigin;
|
|
36
|
+
path: string;
|
|
37
|
+
present: boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface LayeredSettings {
|
|
41
|
+
settings: ClioSettings;
|
|
42
|
+
/** Dotted leaf path to the origin that set it. Keys not present here are built-in defaults. */
|
|
43
|
+
sources: Record<string, SettingsOrigin>;
|
|
44
|
+
issues: SettingsLayerIssue[];
|
|
45
|
+
layers: SettingsLayerInfo[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Keys whose presence in a project layer means a credential leaked into a
|
|
49
|
+
// committed file. `auth` carries target headers and api keys; the rest cover
|
|
50
|
+
// stray secrets. Stripped from project layers with a diagnostic.
|
|
51
|
+
const CREDENTIAL_KEYS: ReadonlySet<string> = new Set(["auth", "apikey", "api_key", "token", "secret", "password"]);
|
|
52
|
+
|
|
53
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
54
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
interface RawLayer {
|
|
58
|
+
origin: SettingsOrigin;
|
|
59
|
+
path: string;
|
|
60
|
+
blob: Record<string, unknown> | undefined;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function readRawLayer(origin: SettingsOrigin, path: string, issues: SettingsLayerIssue[]): RawLayer {
|
|
64
|
+
if (!existsSync(path)) return { origin, path, blob: undefined };
|
|
65
|
+
let parsed: unknown;
|
|
66
|
+
try {
|
|
67
|
+
parsed = parseYaml(readFileSync(path, "utf8"));
|
|
68
|
+
} catch (err) {
|
|
69
|
+
issues.push({ origin, path, message: `invalid YAML: ${err instanceof Error ? err.message : String(err)}` });
|
|
70
|
+
return { origin, path, blob: undefined };
|
|
71
|
+
}
|
|
72
|
+
if (parsed === null || parsed === undefined) return { origin, path, blob: {} };
|
|
73
|
+
if (!isRecord(parsed)) {
|
|
74
|
+
issues.push({ origin, path, message: "settings file must be a mapping at the root" });
|
|
75
|
+
return { origin, path, blob: undefined };
|
|
76
|
+
}
|
|
77
|
+
return { origin, path, blob: parsed };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Remove credential-bearing keys from a project layer, recording where each was
|
|
82
|
+
* dropped. Recurses through nested objects and arrays so a credential nested
|
|
83
|
+
* under `targets[].auth` is caught too.
|
|
84
|
+
*/
|
|
85
|
+
function stripCredentials(value: unknown, origin: SettingsOrigin, path: string, issues: SettingsLayerIssue[]): unknown {
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
return value.map((item, index) => stripCredentials(item, origin, `${path}[${index}]`, issues));
|
|
88
|
+
}
|
|
89
|
+
if (!isRecord(value)) return value;
|
|
90
|
+
const out: Record<string, unknown> = {};
|
|
91
|
+
for (const [key, child] of Object.entries(value)) {
|
|
92
|
+
if (CREDENTIAL_KEYS.has(key.toLowerCase())) {
|
|
93
|
+
issues.push({
|
|
94
|
+
origin,
|
|
95
|
+
path: path ? `${path}.${key}` : key,
|
|
96
|
+
message: "credentials are not allowed in project settings; key ignored",
|
|
97
|
+
});
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
out[key] = stripCredentials(child, origin, path ? `${path}.${key}` : key, issues);
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Deep-merge raw layer blobs in precedence order, recording the origin that last
|
|
107
|
+
* set each leaf. Objects recurse; arrays and scalars replace.
|
|
108
|
+
*/
|
|
109
|
+
function mergeLayersWithSources(layers: ReadonlyArray<RawLayer>): {
|
|
110
|
+
merged: Record<string, unknown>;
|
|
111
|
+
sources: Record<string, SettingsOrigin>;
|
|
112
|
+
} {
|
|
113
|
+
const merged: Record<string, unknown> = {};
|
|
114
|
+
const sources: Record<string, SettingsOrigin> = {};
|
|
115
|
+
for (const layer of layers) {
|
|
116
|
+
if (layer.blob === undefined) continue;
|
|
117
|
+
mergeInto(merged, layer.blob, layer.origin, "", sources);
|
|
118
|
+
}
|
|
119
|
+
return { merged, sources };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function mergeInto(
|
|
123
|
+
target: Record<string, unknown>,
|
|
124
|
+
source: Record<string, unknown>,
|
|
125
|
+
origin: SettingsOrigin,
|
|
126
|
+
prefix: string,
|
|
127
|
+
sources: Record<string, SettingsOrigin>,
|
|
128
|
+
): void {
|
|
129
|
+
for (const [key, value] of Object.entries(source)) {
|
|
130
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
131
|
+
if (isRecord(value)) {
|
|
132
|
+
const existing = target[key];
|
|
133
|
+
const nested = isRecord(existing) ? existing : {};
|
|
134
|
+
mergeInto(nested, value, origin, path, sources);
|
|
135
|
+
target[key] = nested;
|
|
136
|
+
sources[path] = origin;
|
|
137
|
+
} else {
|
|
138
|
+
target[key] = Array.isArray(value) ? [...value] : value;
|
|
139
|
+
sources[path] = origin;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export interface ReadLayeredSettingsOptions {
|
|
145
|
+
/** Override the user settings.yaml path; defaults to the resolved config dir. */
|
|
146
|
+
userPath?: string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Read and layer settings for `cwd`, returning the validated effective settings
|
|
151
|
+
* plus per-leaf source attribution. Never throws: validation issues and layer
|
|
152
|
+
* problems are returned, and the effective settings always validate (invalid
|
|
153
|
+
* merges fall back to the schema defaults for the offending keys).
|
|
154
|
+
*/
|
|
155
|
+
export function readLayeredSettings(cwd: string, options: ReadLayeredSettingsOptions = {}): LayeredSettings {
|
|
156
|
+
const issues: SettingsLayerIssue[] = [];
|
|
157
|
+
const userFile = options.userPath ?? settingsPath();
|
|
158
|
+
const projectFile = join(cwd, ".clio-coder", "settings.yaml");
|
|
159
|
+
const localFile = join(cwd, ".clio-coder", "settings.local.yaml");
|
|
160
|
+
|
|
161
|
+
const user = readRawLayer("user", userFile, issues);
|
|
162
|
+
const projectRaw = readRawLayer("project", projectFile, issues);
|
|
163
|
+
const localRaw = readRawLayer("project.local", localFile, issues);
|
|
164
|
+
|
|
165
|
+
const project: RawLayer = {
|
|
166
|
+
...projectRaw,
|
|
167
|
+
blob:
|
|
168
|
+
projectRaw.blob === undefined
|
|
169
|
+
? undefined
|
|
170
|
+
: (stripCredentials(projectRaw.blob, "project", "", issues) as Record<string, unknown>),
|
|
171
|
+
};
|
|
172
|
+
const local: RawLayer = {
|
|
173
|
+
...localRaw,
|
|
174
|
+
blob:
|
|
175
|
+
localRaw.blob === undefined
|
|
176
|
+
? undefined
|
|
177
|
+
: (stripCredentials(localRaw.blob, "project.local", "", issues) as Record<string, unknown>),
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const { merged, sources } = mergeLayersWithSources([user, project, local]);
|
|
181
|
+
const validation = validateSettings(merged);
|
|
182
|
+
for (const issue of validation.issues) {
|
|
183
|
+
issues.push({ origin: settingsSourceFor(sources, issue.path), path: issue.path, message: issue.message });
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
settings: validation.settings,
|
|
188
|
+
sources,
|
|
189
|
+
issues,
|
|
190
|
+
layers: [
|
|
191
|
+
{ origin: "built-in", path: "(defaults)", present: true },
|
|
192
|
+
{ origin: "user", path: userFile, present: user.blob !== undefined },
|
|
193
|
+
{ origin: "project", path: projectFile, present: projectRaw.blob !== undefined },
|
|
194
|
+
{ origin: "project.local", path: localFile, present: localRaw.blob !== undefined },
|
|
195
|
+
],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Effective origin of one dotted key path: the layer that set it, or built-in
|
|
201
|
+
* when no layer did. A parent path's origin applies when the exact leaf was not
|
|
202
|
+
* individually tracked.
|
|
203
|
+
*/
|
|
204
|
+
export function settingsSourceFor(sources: Record<string, SettingsOrigin>, keyPath: string): SettingsOrigin {
|
|
205
|
+
let prefix = keyPath;
|
|
206
|
+
while (prefix.length > 0) {
|
|
207
|
+
const direct = sources[prefix];
|
|
208
|
+
if (direct) return direct;
|
|
209
|
+
const bracket = prefix.lastIndexOf("[");
|
|
210
|
+
if (bracket >= 0) {
|
|
211
|
+
const arrayKey = prefix.slice(0, bracket);
|
|
212
|
+
const hit = sources[arrayKey];
|
|
213
|
+
if (hit) return hit;
|
|
214
|
+
}
|
|
215
|
+
const dot = prefix.lastIndexOf(".");
|
|
216
|
+
if (dot < 0) break;
|
|
217
|
+
prefix = prefix.slice(0, dot);
|
|
218
|
+
}
|
|
219
|
+
return "built-in";
|
|
220
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POSIX single-quote escaping for one shell word.
|
|
3
|
+
*
|
|
4
|
+
* Every consumer here builds a command string that a POSIX shell will parse:
|
|
5
|
+
* an eval runner's `sh -c`, the SSH transport's remote command, and an
|
|
6
|
+
* external editor launched through `$SHELL -lc`. The escaping a
|
|
7
|
+
* single-quoted POSIX word needs is fixed by the shell grammar rather than
|
|
8
|
+
* chosen per caller, so there is one rule and it cannot drift per consumer
|
|
9
|
+
* without that consumer having stopped targeting a POSIX shell.
|
|
10
|
+
*
|
|
11
|
+
* Inside single quotes a POSIX shell treats every byte literally, including
|
|
12
|
+
* backslashes, so the only character that needs handling is the quote itself.
|
|
13
|
+
* `'\''` closes the string, emits an escaped literal quote, and reopens it.
|
|
14
|
+
*
|
|
15
|
+
* The result always begins and ends with a single quote, including for the
|
|
16
|
+
* empty string, which is what makes it exactly one word. `fleet-preflight.ts`
|
|
17
|
+
* relies on that shape: it strips the outer pair to embed an already-escaped
|
|
18
|
+
* value inside a `case` pattern, so an implementation that returned a bare
|
|
19
|
+
* word for safe input would silently break that caller.
|
|
20
|
+
*
|
|
21
|
+
* This is quoting for a shell, never sanitization for a security boundary. A
|
|
22
|
+
* quoted word is one argument; it is not a value that has been vetted.
|
|
23
|
+
*/
|
|
24
|
+
export function shellQuote(value: string): string {
|
|
25
|
+
return `'${value.replace(/'/g, "'\\''")}'`;
|
|
26
|
+
}
|