@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,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recently selected target/model refs ("targetId/wireModelId").
|
|
3
|
+
*
|
|
4
|
+
* Recents are runtime state, not user configuration, so they live in the state
|
|
5
|
+
* dir (recent-models.json) and never in settings.yaml. Keeping them out
|
|
6
|
+
* of the settings file means an Alt+L model pick does not rewrite settings.yaml
|
|
7
|
+
* just to bump a recency list, which would fire the config watcher in every
|
|
8
|
+
* other running session. Favorites (modelSelector.favorites) remain in
|
|
9
|
+
* settings.yaml because they are deliberate user configuration.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { safeResourceWrite } from "./safe-resource-write.js";
|
|
15
|
+
import { clioStateDir, stateRootRemoved } from "./xdg.js";
|
|
16
|
+
|
|
17
|
+
export function recentModelsPath(): string {
|
|
18
|
+
return join(clioStateDir(), "recent-models.json");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let cache: string[] | null = null;
|
|
22
|
+
let cachePath: string | null = null;
|
|
23
|
+
|
|
24
|
+
function readFromDisk(path: string): string[] | null {
|
|
25
|
+
if (!existsSync(path)) return null;
|
|
26
|
+
try {
|
|
27
|
+
const parsed: unknown = JSON.parse(readFileSync(path, "utf8"));
|
|
28
|
+
if (!Array.isArray(parsed)) return [];
|
|
29
|
+
const seen = new Set<string>();
|
|
30
|
+
const out: string[] = [];
|
|
31
|
+
for (const entry of parsed) {
|
|
32
|
+
if (typeof entry !== "string") continue;
|
|
33
|
+
const trimmed = entry.trim();
|
|
34
|
+
if (trimmed.length === 0 || seen.has(trimmed)) continue;
|
|
35
|
+
seen.add(trimmed);
|
|
36
|
+
out.push(trimmed);
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
} catch {
|
|
40
|
+
// A corrupted file counts as empty rather than absent so a stale legacy
|
|
41
|
+
// settings list cannot resurrect over fresher (but unreadable) state.
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function writeToDisk(path: string, refs: ReadonlyArray<string>): void {
|
|
47
|
+
safeResourceWrite(path, `${JSON.stringify(refs, null, "\t")}\n`, { encoding: "utf8" });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Current recents, newest first, truncated to `limit`. An absent or unreadable
|
|
52
|
+
* file is an empty list.
|
|
53
|
+
*/
|
|
54
|
+
export function listRecentModels(options?: { limit?: number }): string[] {
|
|
55
|
+
const path = recentModelsPath();
|
|
56
|
+
if (cache === null || cachePath !== path) {
|
|
57
|
+
cache = readFromDisk(path) ?? [];
|
|
58
|
+
cachePath = path;
|
|
59
|
+
}
|
|
60
|
+
const limit = Math.max(1, Math.floor(options?.limit ?? 12));
|
|
61
|
+
return cache.slice(0, limit);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Move `ref` to the front of the recents list and persist to the state dir. */
|
|
65
|
+
export function rememberRecentModel(ref: string, limit: number): string[] {
|
|
66
|
+
const path = recentModelsPath();
|
|
67
|
+
// Re-read so refs remembered by other processes since our last load are
|
|
68
|
+
// merged instead of overwritten. Plain last-writer-wins on the file is
|
|
69
|
+
// acceptable for a recency list; no lock needed.
|
|
70
|
+
const base = readFromDisk(path) ?? (cachePath === path && cache !== null ? cache : []);
|
|
71
|
+
const max = Math.max(1, Math.floor(limit));
|
|
72
|
+
const next = [ref, ...base.filter((entry) => entry !== ref)].slice(0, max);
|
|
73
|
+
cache = next;
|
|
74
|
+
cachePath = path;
|
|
75
|
+
// An Alt+L model pick in a session outliving `clio-coder uninstall` must not
|
|
76
|
+
// rebuild the state root around recent-models.json. The in-memory list still
|
|
77
|
+
// updates so the picker behaves for the rest of the run; see stateRootRemoved().
|
|
78
|
+
if (stateRootRemoved()) return next;
|
|
79
|
+
try {
|
|
80
|
+
writeToDisk(path, next);
|
|
81
|
+
} catch {
|
|
82
|
+
// Best-effort, as above.
|
|
83
|
+
}
|
|
84
|
+
return next;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Test hook: clear the in-process cache after CLIO_* dir overrides change. */
|
|
88
|
+
export function resetRecentModelsCache(): void {
|
|
89
|
+
cache = null;
|
|
90
|
+
cachePath = null;
|
|
91
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire model ids the operator's configuration references, each tagged with the
|
|
3
|
+
* role it serves. The residency layer (src/engine/apis/residency.ts) protects
|
|
4
|
+
* these from eviction by any other Clio stream: a scout worker must never
|
|
5
|
+
* unload the orchestrator's coder, and no profile may evict another profile's
|
|
6
|
+
* model. The orchestrator derives the set from its live effective settings;
|
|
7
|
+
* dispatch copies it onto each WorkerSpec so worker subprocesses protect the
|
|
8
|
+
* same models.
|
|
9
|
+
*
|
|
10
|
+
* The role travels with the id because an eviction message that names only a
|
|
11
|
+
* model id reads as an anonymous collision. A resident serving `memory` is the
|
|
12
|
+
* proactive-memory plane; unloading it silently stops task memory rather than
|
|
13
|
+
* freeing a spare model, and the operator has to be told which plane they are
|
|
14
|
+
* about to lose.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { ClioSettings } from "./config.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Which plane of the operator's configuration references a model:
|
|
21
|
+
* - `chat`: the orchestrator model, the one the interactive session talks to.
|
|
22
|
+
* - `memory`: the background plane for proactive task memory.
|
|
23
|
+
* - `worker`: the worker default or one of the worker profiles.
|
|
24
|
+
* - `target-default`: a target's `defaultModel`, the fallback any session picks up.
|
|
25
|
+
*/
|
|
26
|
+
export type ResidencyRole = "chat" | "memory" | "worker" | "target-default";
|
|
27
|
+
|
|
28
|
+
/** One configured model id and the role its configuration entry serves. */
|
|
29
|
+
export interface ProtectedModelRef {
|
|
30
|
+
modelId: string;
|
|
31
|
+
role: ResidencyRole;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Configured model ids with their roles. The first role that claims an id wins,
|
|
36
|
+
* ordered chat > memory > worker > target-default, so a model serving both the
|
|
37
|
+
* chat plane and a target default is reported by the more specific role.
|
|
38
|
+
*/
|
|
39
|
+
export function protectedResidencyModels(settings: ClioSettings): ProtectedModelRef[] {
|
|
40
|
+
const byId = new Map<string, ResidencyRole>();
|
|
41
|
+
const add = (id: string | null | undefined, role: ResidencyRole): void => {
|
|
42
|
+
const trimmed = id?.trim();
|
|
43
|
+
if (!trimmed || byId.has(trimmed)) return;
|
|
44
|
+
byId.set(trimmed, role);
|
|
45
|
+
};
|
|
46
|
+
add(settings.orchestrator.model, "chat");
|
|
47
|
+
add(settings.background.model, "memory");
|
|
48
|
+
add(settings.workers.default.model, "worker");
|
|
49
|
+
for (const profile of Object.values(settings.workers.profiles ?? {})) add(profile.model, "worker");
|
|
50
|
+
for (const target of settings.targets) add(target.defaultModel, "target-default");
|
|
51
|
+
return [...byId].map(([modelId, role]) => ({ modelId, role }));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function protectedResidencyModelIds(settings: ClioSettings): string[] {
|
|
55
|
+
return protectedResidencyModels(settings).map((ref) => ref.modelId);
|
|
56
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, resolve, sep } from "node:path";
|
|
4
|
+
|
|
5
|
+
const commandResultCache = new Map<string, string | undefined>();
|
|
6
|
+
|
|
7
|
+
export interface ConfigValueWarning {
|
|
8
|
+
code: "dynamic-command-in-static-resolution";
|
|
9
|
+
message: string;
|
|
10
|
+
command: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ResolveConfigValueOptions {
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
cwd?: string;
|
|
16
|
+
onWarning?: (warning: ConfigValueWarning) => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function env(options?: ResolveConfigValueOptions): NodeJS.ProcessEnv {
|
|
20
|
+
return options?.env ?? process.env;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function shellCommand(command: string): string | undefined {
|
|
24
|
+
const isWindows = process.platform === "win32";
|
|
25
|
+
const shell = isWindows ? process.env.ComSpec || "cmd.exe" : process.env.SHELL || "/bin/sh";
|
|
26
|
+
const args = isWindows ? ["/d", "/s", "/c", command] : ["-lc", command];
|
|
27
|
+
const result = spawnSync(shell, args, {
|
|
28
|
+
encoding: "utf8",
|
|
29
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
30
|
+
timeout: 10_000,
|
|
31
|
+
windowsHide: true,
|
|
32
|
+
});
|
|
33
|
+
if (result.error || result.status !== 0) return undefined;
|
|
34
|
+
const value = result.stdout.trim();
|
|
35
|
+
return value.length > 0 ? value : undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function executeCommand(commandConfig: string): string | undefined {
|
|
39
|
+
if (commandResultCache.has(commandConfig)) return commandResultCache.get(commandConfig);
|
|
40
|
+
const value = shellCommand(commandConfig.slice(1));
|
|
41
|
+
commandResultCache.set(commandConfig, value);
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function warnStaticCommand(config: string, options?: ResolveConfigValueOptions): void {
|
|
46
|
+
options?.onWarning?.({
|
|
47
|
+
code: "dynamic-command-in-static-resolution",
|
|
48
|
+
message: "bang-prefixed config command left literal by static config value resolver",
|
|
49
|
+
command: config.slice(1),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function expandConfigValue(value: string, options?: ResolveConfigValueOptions): string {
|
|
54
|
+
const sourceEnv = env(options);
|
|
55
|
+
return value.replace(/\$(\w+)|\$\{([^}]+)\}/g, (match, bare: string | undefined, braced: string | undefined) => {
|
|
56
|
+
const key = bare ?? braced;
|
|
57
|
+
if (!key) return match;
|
|
58
|
+
return sourceEnv[key] ?? "";
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function expandConfigPath(value: string, options?: ResolveConfigValueOptions): string {
|
|
63
|
+
const cwd = options?.cwd ?? process.cwd();
|
|
64
|
+
const expandedEnv = expandConfigValue(value.trim(), options);
|
|
65
|
+
let expanded = expandedEnv;
|
|
66
|
+
if (expanded === "~") {
|
|
67
|
+
expanded = homedir();
|
|
68
|
+
} else if (expanded.startsWith(`~${sep}`) || expanded.startsWith("~/")) {
|
|
69
|
+
expanded = `${homedir()}${expanded.slice(1)}`;
|
|
70
|
+
} else if (expanded.startsWith("~")) {
|
|
71
|
+
expanded = join(homedir(), expanded.slice(1));
|
|
72
|
+
}
|
|
73
|
+
return resolve(cwd, expanded);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function resolveStaticConfigValue(config: string, options?: ResolveConfigValueOptions): string | undefined {
|
|
77
|
+
if (config.startsWith("!")) warnStaticCommand(config, options);
|
|
78
|
+
const sourceEnv = env(options);
|
|
79
|
+
const envValue = sourceEnv[config];
|
|
80
|
+
if (envValue !== undefined && envValue.length > 0) return envValue;
|
|
81
|
+
const expanded = expandConfigValue(config, options);
|
|
82
|
+
return expanded.length > 0 ? expanded : undefined;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function resolveDynamicConfigValue(config: string, options?: ResolveConfigValueOptions): string | undefined {
|
|
86
|
+
if (config.startsWith("!")) return executeCommand(config);
|
|
87
|
+
return resolveStaticConfigValue(config, options);
|
|
88
|
+
}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
export const RESPONSE_SCHEMA_MAX_SERIALIZED_BYTES = 64 * 1024;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The one runtime whose wire dialect carries a JSON-schema response constraint.
|
|
5
|
+
*
|
|
6
|
+
* This is a name check rather than a capability check, deliberately. The
|
|
7
|
+
* constraint travels as `response_format: { type: "json_object", schema }`,
|
|
8
|
+
* which is llama-server's own spelling and not the openai-completions standard
|
|
9
|
+
* (`type: "json_schema"` with a nested `json_schema` object). A generic
|
|
10
|
+
* OpenAI-compatible gateway accepts that request, ignores the unrecognized
|
|
11
|
+
* `schema` key, and returns HTTP 200 with unconstrained JSON, so widening this
|
|
12
|
+
* to the api family would convert a clean refusal into a silent
|
|
13
|
+
* non-enforcement. lmstudio-native declares `structuredOutputs: "json-schema"`
|
|
14
|
+
* truthfully and is still excluded here, because Clio has no dialect for its
|
|
15
|
+
* transport. Widen this only together with a dialect for the runtime added.
|
|
16
|
+
*/
|
|
17
|
+
export const RESPONSE_SCHEMA_RUNTIME_ID = "llamacpp";
|
|
18
|
+
|
|
19
|
+
/** Whether this runtime speaks the dialect above. Transport shape, not capability. */
|
|
20
|
+
export function runtimeSpeaksResponseSchemaDialect(runtime: { id: string; kind: string; apiFamily: string }): boolean {
|
|
21
|
+
return (
|
|
22
|
+
runtime.id === RESPONSE_SCHEMA_RUNTIME_ID && runtime.kind === "http" && runtime.apiFamily === "openai-completions"
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Whether a response schema and a tool surface can constrain the same
|
|
28
|
+
* completion on this runtime.
|
|
29
|
+
*
|
|
30
|
+
* llama-server compiles `response_format.schema` into a sampler grammar. A
|
|
31
|
+
* request that also carries `tools` needs the tool-call grammar over that same
|
|
32
|
+
* completion, and the server refuses to build both: it answers HTTP 400
|
|
33
|
+
* `Failed to initialize samplers: failed to parse grammar` before generating a
|
|
34
|
+
* token. Schema alone succeeds and schema plus one tool fails, so this is a
|
|
35
|
+
* property of the wire dialect rather than of the target or the model, and no
|
|
36
|
+
* capability probe reports it. `structuredOutputs: "json-schema"` stays
|
|
37
|
+
* truthful for the schema-only request it describes.
|
|
38
|
+
*
|
|
39
|
+
* A caller that admits runs decides here instead of paying the round trip. A
|
|
40
|
+
* request carrying both earns the same {@link UnsupportedResponseSchemaError}
|
|
41
|
+
* a target with no schema support at all would earn, which arms the same
|
|
42
|
+
* prompt-parser fallback with nothing spent.
|
|
43
|
+
*/
|
|
44
|
+
export function responseSchemaConflictsWithTools(
|
|
45
|
+
runtime: { id: string; kind: string; apiFamily: string },
|
|
46
|
+
toolCount: number,
|
|
47
|
+
): boolean {
|
|
48
|
+
return toolCount > 0 && runtimeSpeaksResponseSchemaDialect(runtime);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Admission-time signal that the resolved worker runtime cannot enforce a
|
|
53
|
+
* response schema. A caller that treats native enforcement as an optimization
|
|
54
|
+
* may retry without the schema only after receiving this exact error type.
|
|
55
|
+
*/
|
|
56
|
+
export class UnsupportedResponseSchemaError extends Error {
|
|
57
|
+
readonly code = "UNSUPPORTED_RESPONSE_SCHEMA";
|
|
58
|
+
|
|
59
|
+
constructor(message: string) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.name = "UnsupportedResponseSchemaError";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Whether a run's failure text is the server refusing the request this
|
|
67
|
+
* dialect produced.
|
|
68
|
+
*
|
|
69
|
+
* llama-server compiles `response_format.schema` into a sampler grammar and
|
|
70
|
+
* rejects the request with HTTP 400 when that grammar cannot be built. The
|
|
71
|
+
* observed trigger is a request that also carries `tools`: the tool-call
|
|
72
|
+
* grammar and the schema grammar cannot both constrain one completion, so the
|
|
73
|
+
* server answers `Failed to initialize samplers: failed to parse grammar`
|
|
74
|
+
* before generating a token. Nothing in the capability probe predicts it, so
|
|
75
|
+
* the refusal only arrives mid-run.
|
|
76
|
+
*
|
|
77
|
+
* This is the same admission-time judgment `UnsupportedResponseSchemaError`
|
|
78
|
+
* carries, arriving one round trip later. Callers that treat native
|
|
79
|
+
* enforcement as an optimization may retry without the schema on either. The
|
|
80
|
+
* check only means anything on a run that actually carried a schema; callers
|
|
81
|
+
* must gate it that way rather than let a 400 about anything else match.
|
|
82
|
+
*/
|
|
83
|
+
export function isResponseSchemaRejection(diagnostic: string | null | undefined): boolean {
|
|
84
|
+
if (!diagnostic) return false;
|
|
85
|
+
const text = diagnostic.toLowerCase();
|
|
86
|
+
if (!/\b(?:400|422)\b|invalid_request_error|bad request/.test(text)) return false;
|
|
87
|
+
return /grammar|json[ _-]?schema|response[ _-]?format/.test(text);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
91
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
92
|
+
const prototype = Object.getPrototypeOf(value);
|
|
93
|
+
return prototype === Object.prototype || prototype === null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const SUPPORTED_SCHEMA_KEYS = new Set(["type", "properties", "required", "items", "additionalProperties"]);
|
|
97
|
+
const SUPPORTED_SCHEMA_TYPES = new Set(["object", "array", "string", "number", "integer", "boolean", "null"]);
|
|
98
|
+
|
|
99
|
+
function definesToJson(value: object): boolean {
|
|
100
|
+
let current: object | null = value;
|
|
101
|
+
while (current) {
|
|
102
|
+
if (Object.getOwnPropertyDescriptor(current, "toJSON")) return true;
|
|
103
|
+
current = Object.getPrototypeOf(current) as object | null;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function jsonDataError(value: unknown): string | null {
|
|
109
|
+
type Frame = { value: unknown; path: string; exit?: object };
|
|
110
|
+
const stack: Frame[] = [{ value, path: "$" }];
|
|
111
|
+
const active = new Set<object>();
|
|
112
|
+
|
|
113
|
+
while (stack.length > 0) {
|
|
114
|
+
const frame = stack.pop();
|
|
115
|
+
if (!frame) break;
|
|
116
|
+
if (frame.exit) {
|
|
117
|
+
active.delete(frame.exit);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const current = frame.value;
|
|
122
|
+
if (current === null || typeof current === "string" || typeof current === "boolean") continue;
|
|
123
|
+
if (typeof current === "number") {
|
|
124
|
+
if (!Number.isFinite(current)) return `${frame.path} must be a finite number`;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (typeof current !== "object") return `${frame.path} contains a non-JSON value`;
|
|
128
|
+
if (active.has(current)) return `${frame.path} contains a circular reference`;
|
|
129
|
+
|
|
130
|
+
if (!Array.isArray(current) && !isPlainObject(current)) {
|
|
131
|
+
return `${frame.path} must contain only plain objects and arrays`;
|
|
132
|
+
}
|
|
133
|
+
if (definesToJson(current)) {
|
|
134
|
+
return `${frame.path} must not define toJSON`;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
active.add(current);
|
|
138
|
+
stack.push({ value: null, path: frame.path, exit: current });
|
|
139
|
+
|
|
140
|
+
if (Array.isArray(current)) {
|
|
141
|
+
const descriptors = Object.getOwnPropertyDescriptors(current);
|
|
142
|
+
for (const [key, descriptor] of Object.entries(descriptors)) {
|
|
143
|
+
if (key === "length" || /^(?:0|[1-9]\d*)$/.test(key)) continue;
|
|
144
|
+
if (descriptor.enumerable) return `${frame.path}.${key} is not a JSON array index`;
|
|
145
|
+
}
|
|
146
|
+
for (let index = current.length - 1; index >= 0; index -= 1) {
|
|
147
|
+
if (!Object.hasOwn(current, index)) return `${frame.path}[${index}] must not be an array hole`;
|
|
148
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, String(index));
|
|
149
|
+
if (!descriptor || !("value" in descriptor)) return `${frame.path}[${index}] must be a data property`;
|
|
150
|
+
stack.push({ value: descriptor.value, path: `${frame.path}[${index}]` });
|
|
151
|
+
}
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
for (const symbol of Object.getOwnPropertySymbols(current)) {
|
|
156
|
+
if (Object.getOwnPropertyDescriptor(current, symbol)?.enumerable) {
|
|
157
|
+
return `${frame.path} must not contain symbol keys`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const descriptors = Object.getOwnPropertyDescriptors(current);
|
|
161
|
+
const keys = Object.keys(descriptors);
|
|
162
|
+
for (let index = keys.length - 1; index >= 0; index -= 1) {
|
|
163
|
+
const key = keys[index];
|
|
164
|
+
if (key === undefined) continue;
|
|
165
|
+
const descriptor = descriptors[key];
|
|
166
|
+
if (!descriptor?.enumerable) continue;
|
|
167
|
+
if (!("value" in descriptor)) return `${frame.path}.${key} must be a data property`;
|
|
168
|
+
stack.push({ value: descriptor.value, path: `${frame.path}.${key}` });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function schemaSyntaxError(value: Record<string, unknown>): string | null {
|
|
176
|
+
const stack: Array<{ schema: Record<string, unknown>; path: string }> = [{ schema: value, path: "$" }];
|
|
177
|
+
while (stack.length > 0) {
|
|
178
|
+
const frame = stack.pop();
|
|
179
|
+
if (!frame) break;
|
|
180
|
+
const { schema, path } = frame;
|
|
181
|
+
for (const key of Object.keys(schema)) {
|
|
182
|
+
if (!SUPPORTED_SCHEMA_KEYS.has(key)) return `${path}.${key} is not supported by the llama.cpp schema subset`;
|
|
183
|
+
}
|
|
184
|
+
if (typeof schema.type !== "string" || !SUPPORTED_SCHEMA_TYPES.has(schema.type)) {
|
|
185
|
+
return `${path}.type must be one of ${[...SUPPORTED_SCHEMA_TYPES].join(", ")}`;
|
|
186
|
+
}
|
|
187
|
+
if (schema.type === "object") {
|
|
188
|
+
if (schema.items !== undefined) return `${path}.items is only valid for array schemas`;
|
|
189
|
+
if (schema.properties !== undefined && !isPlainObject(schema.properties)) {
|
|
190
|
+
return `${path}.properties must be a plain object`;
|
|
191
|
+
}
|
|
192
|
+
const properties = (schema.properties ?? {}) as Record<string, unknown>;
|
|
193
|
+
for (const [name, child] of Object.entries(properties)) {
|
|
194
|
+
if (!isPlainObject(child)) return `${path}.properties.${name} must be a schema object`;
|
|
195
|
+
stack.push({ schema: child, path: `${path}.properties.${name}` });
|
|
196
|
+
}
|
|
197
|
+
if (schema.required !== undefined) {
|
|
198
|
+
if (!Array.isArray(schema.required) || !schema.required.every((item) => typeof item === "string")) {
|
|
199
|
+
return `${path}.required must be an array of strings`;
|
|
200
|
+
}
|
|
201
|
+
if (new Set(schema.required).size !== schema.required.length) {
|
|
202
|
+
return `${path}.required must not contain duplicates`;
|
|
203
|
+
}
|
|
204
|
+
for (const name of schema.required) {
|
|
205
|
+
if (!Object.hasOwn(properties, name)) return `${path}.required names unknown property '${name}'`;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (schema.additionalProperties !== undefined && typeof schema.additionalProperties !== "boolean") {
|
|
209
|
+
return `${path}.additionalProperties must be a boolean`;
|
|
210
|
+
}
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (schema.type === "array") {
|
|
214
|
+
if (!isPlainObject(schema.items)) return `${path}.items must be a schema object`;
|
|
215
|
+
if (schema.properties !== undefined || schema.required !== undefined || schema.additionalProperties !== undefined) {
|
|
216
|
+
return `${path} contains object-only keywords on an array schema`;
|
|
217
|
+
}
|
|
218
|
+
stack.push({ schema: schema.items, path: `${path}.items` });
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
if (
|
|
222
|
+
schema.properties !== undefined ||
|
|
223
|
+
schema.required !== undefined ||
|
|
224
|
+
schema.items !== undefined ||
|
|
225
|
+
schema.additionalProperties !== undefined
|
|
226
|
+
) {
|
|
227
|
+
return `${path} contains container keywords on a ${schema.type} schema`;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/** Return a user-facing reason when a response schema cannot safely cross the worker JSON boundary. */
|
|
234
|
+
function responseSchemaValidationError(value: unknown, source = "responseSchema"): string | null {
|
|
235
|
+
try {
|
|
236
|
+
if (!isPlainObject(value)) return `${source} must be a plain object`;
|
|
237
|
+
const valueError = jsonDataError(value);
|
|
238
|
+
if (valueError) return `${source} must be JSON-serializable: ${valueError}`;
|
|
239
|
+
const syntaxError = schemaSyntaxError(value);
|
|
240
|
+
if (syntaxError) return `${source} is not an enforceable JSON schema: ${syntaxError}`;
|
|
241
|
+
|
|
242
|
+
const serialized = JSON.stringify(value);
|
|
243
|
+
const bytes = Buffer.byteLength(serialized, "utf8");
|
|
244
|
+
if (bytes > RESPONSE_SCHEMA_MAX_SERIALIZED_BYTES) {
|
|
245
|
+
return `${source} must be at most ${RESPONSE_SCHEMA_MAX_SERIALIZED_BYTES} serialized bytes`;
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
} catch (error) {
|
|
249
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
250
|
+
return `${source} could not be safely inspected: ${detail}`;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export function assertValidResponseSchema(
|
|
255
|
+
value: unknown,
|
|
256
|
+
source = "responseSchema",
|
|
257
|
+
): asserts value is Record<string, unknown> {
|
|
258
|
+
const error = responseSchemaValidationError(value, source);
|
|
259
|
+
if (error) throw new Error(error);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** Validate and detach a schema from caller-owned objects before any async dispatch work. */
|
|
263
|
+
export function cloneValidatedResponseSchema(value: unknown, source = "responseSchema"): Record<string, unknown> {
|
|
264
|
+
assertValidResponseSchema(value, source);
|
|
265
|
+
try {
|
|
266
|
+
const serialized = JSON.stringify(value);
|
|
267
|
+
if (Buffer.byteLength(serialized, "utf8") > RESPONSE_SCHEMA_MAX_SERIALIZED_BYTES) {
|
|
268
|
+
throw new Error(`${source} changed while being validated`);
|
|
269
|
+
}
|
|
270
|
+
const cloned: unknown = JSON.parse(serialized);
|
|
271
|
+
const cloneError = responseSchemaValidationError(cloned, source);
|
|
272
|
+
if (cloneError) throw new Error(cloneError);
|
|
273
|
+
return cloned as Record<string, unknown>;
|
|
274
|
+
} catch (error) {
|
|
275
|
+
if (error instanceof Error && error.message.startsWith(source)) throw error;
|
|
276
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
277
|
+
throw new Error(`${source} could not be canonically cloned: ${detail}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run-scoped option overrides: one-run settings a CLI invocation carries into
|
|
3
|
+
* deep engine code (context-window override, KV-cache mode, sampling params).
|
|
4
|
+
*
|
|
5
|
+
* These ride a single JSON env var, `CLIO_CODER_RUN_OVERRIDES`, instead of one env
|
|
6
|
+
* var per option. The env var is internal plumbing, not an operator surface:
|
|
7
|
+
* operators set the CLI flags (`clio-coder run --max-context-tokens`, sampling
|
|
8
|
+
* flags) or durable settings.yaml keys, and the CLI writes this var for the
|
|
9
|
+
* scope of the run via {@link withRunOverrides}. Env is the transport, rather
|
|
10
|
+
* than an in-process store, because dispatched worker subprocesses inherit
|
|
11
|
+
* `process.env` and must see the same overrides. Keeping it to ONE var means
|
|
12
|
+
* new run-scoped options extend the typed interface here instead of minting
|
|
13
|
+
* another `CLIO_CODER_*` variable with its own ad-hoc parse/save/restore code.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export const RUN_OVERRIDES_ENV = "CLIO_CODER_RUN_OVERRIDES";
|
|
17
|
+
|
|
18
|
+
export interface RunOverrides {
|
|
19
|
+
/** One-run context-window override for supported local runtimes. */
|
|
20
|
+
maxContextTokens?: number;
|
|
21
|
+
/** One-run KV-cache quantization mode; the consuming runtime validates it. */
|
|
22
|
+
kvCacheMode?: string;
|
|
23
|
+
/**
|
|
24
|
+
* One-run sampling parameter overrides. Kept as a loose numeric record
|
|
25
|
+
* here (undefined fields are dropped at serialization);
|
|
26
|
+
* engine/apis/sampling-overrides.ts narrows it to the known keys.
|
|
27
|
+
*/
|
|
28
|
+
sampling?: Record<string, number | undefined>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Parse the current overrides. Malformed JSON or fields are dropped, never thrown. */
|
|
32
|
+
export function runOverrides(env: NodeJS.ProcessEnv = process.env): RunOverrides {
|
|
33
|
+
const raw = env[RUN_OVERRIDES_ENV]?.trim();
|
|
34
|
+
if (!raw) return {};
|
|
35
|
+
let parsed: unknown;
|
|
36
|
+
try {
|
|
37
|
+
parsed = JSON.parse(raw);
|
|
38
|
+
} catch {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) return {};
|
|
42
|
+
const record = parsed as Record<string, unknown>;
|
|
43
|
+
const out: RunOverrides = {};
|
|
44
|
+
const maxContextTokens = record.maxContextTokens;
|
|
45
|
+
if (typeof maxContextTokens === "number" && Number.isInteger(maxContextTokens) && maxContextTokens > 0) {
|
|
46
|
+
out.maxContextTokens = maxContextTokens;
|
|
47
|
+
}
|
|
48
|
+
if (typeof record.kvCacheMode === "string" && record.kvCacheMode.length > 0) {
|
|
49
|
+
out.kvCacheMode = record.kvCacheMode;
|
|
50
|
+
}
|
|
51
|
+
const sampling = record.sampling;
|
|
52
|
+
if (sampling !== null && typeof sampling === "object" && !Array.isArray(sampling)) {
|
|
53
|
+
const numeric: Record<string, number> = {};
|
|
54
|
+
for (const [key, value] of Object.entries(sampling as Record<string, unknown>)) {
|
|
55
|
+
if (typeof value === "number" && Number.isFinite(value)) numeric[key] = value;
|
|
56
|
+
}
|
|
57
|
+
if (Object.keys(numeric).length > 0) out.sampling = numeric;
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Apply overrides for the duration of `fn`, merged over any overrides already
|
|
64
|
+
* in scope, and restore the previous state afterwards even on throw.
|
|
65
|
+
*/
|
|
66
|
+
export async function withRunOverrides<T>(overrides: RunOverrides, fn: () => Promise<T>): Promise<T> {
|
|
67
|
+
const entries = Object.entries(overrides).filter(([, value]) => value !== undefined);
|
|
68
|
+
if (entries.length === 0) return fn();
|
|
69
|
+
const previous = process.env[RUN_OVERRIDES_ENV];
|
|
70
|
+
process.env[RUN_OVERRIDES_ENV] = JSON.stringify({ ...runOverrides(), ...Object.fromEntries(entries) });
|
|
71
|
+
try {
|
|
72
|
+
return await fn();
|
|
73
|
+
} finally {
|
|
74
|
+
if (previous === undefined) delete process.env[RUN_OVERRIDES_ENV];
|
|
75
|
+
else process.env[RUN_OVERRIDES_ENV] = previous;
|
|
76
|
+
}
|
|
77
|
+
}
|