@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,720 @@
|
|
|
1
|
+
import { CLIO_CONTEXT_WINDOW_WARN_BELOW, CLIO_MIN_CONTEXT_WINDOW } from "../../core/context-floor.js";
|
|
2
|
+
import { runOverrides } from "../../core/run-overrides.js";
|
|
3
|
+
import { targetRequiresAuth } from "./auth/index.js";
|
|
4
|
+
import { getCatalogModelForRuntime, resolveCostProvenance } from "./catalog.js";
|
|
5
|
+
import type { ProvidersContract, TargetStatus } from "./contract.js";
|
|
6
|
+
import { isDispatchEligibleRuntime, isOrchestratorEligibleRuntime, isTargetEligibleRuntime } from "./eligibility.js";
|
|
7
|
+
import { probeCapabilitiesForModel, resolveModelCapabilities } from "./model-capabilities.js";
|
|
8
|
+
import { hasLiveModelCatalog, loadedContextWindowForModel } from "./model-discovery.js";
|
|
9
|
+
import {
|
|
10
|
+
type ReasoningClass,
|
|
11
|
+
type ResolvedModelRuntimeCapabilities,
|
|
12
|
+
reasoningClassForMechanism,
|
|
13
|
+
resolveModelRuntimeCapabilities,
|
|
14
|
+
resolveTargetRuntimeCapabilities,
|
|
15
|
+
} from "./model-runtime-capabilities.js";
|
|
16
|
+
import type { CapabilityFlags, ThinkingLevel } from "./types/capability-flags.js";
|
|
17
|
+
import type { CostProvenance } from "./types/cost-provenance.js";
|
|
18
|
+
import type { KnowledgeBase } from "./types/knowledge-base.js";
|
|
19
|
+
import type {
|
|
20
|
+
RuntimeApiFamily,
|
|
21
|
+
RuntimeAuth,
|
|
22
|
+
RuntimeDescriptor,
|
|
23
|
+
RuntimeKind,
|
|
24
|
+
RuntimeTier,
|
|
25
|
+
} from "./types/runtime-descriptor.js";
|
|
26
|
+
import type { TargetDescriptor } from "./types/target-descriptor.js";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The layer that answered `effectiveContextWindow`, most authoritative first.
|
|
30
|
+
* `loaded` is the window a backend reports having this model open at; `probe` is
|
|
31
|
+
* a window the target reported without saying it is what is serving.
|
|
32
|
+
*/
|
|
33
|
+
export type ContextWindowSource =
|
|
34
|
+
| "catalog"
|
|
35
|
+
| "probe"
|
|
36
|
+
| "loaded"
|
|
37
|
+
| "target-override"
|
|
38
|
+
| "model-hint"
|
|
39
|
+
| "descriptor-default"
|
|
40
|
+
| "unknown";
|
|
41
|
+
|
|
42
|
+
export interface ContextWindowDetails {
|
|
43
|
+
/** Best static knowledge of the model's window (hint > KB > catalog > runtime default). */
|
|
44
|
+
declaredContextWindow: number;
|
|
45
|
+
/** Raw probe result, when the target was probed. */
|
|
46
|
+
probedContextWindow: number | null;
|
|
47
|
+
/** Context the backend reports this model loaded at; only some runtimes report it. */
|
|
48
|
+
loadedContextWindow: number | null;
|
|
49
|
+
/** What Clio would like for coding; advisory only and never displayed as provider truth. */
|
|
50
|
+
desiredContextWindow: number;
|
|
51
|
+
/** What the target actually offers; live probe/config/model knowledge only. */
|
|
52
|
+
effectiveContextWindow: number;
|
|
53
|
+
/** Where `effectiveContextWindow` came from. */
|
|
54
|
+
contextWindowSource: ContextWindowSource;
|
|
55
|
+
/** The window is below what this kind of work wants. An actionable degradation. */
|
|
56
|
+
warning: string | null;
|
|
57
|
+
/** The window is a placeholder rather than something the target reported. */
|
|
58
|
+
provenanceNotice: string | null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export type RuntimeResolutionUse = "orchestrator" | "print" | "dispatch";
|
|
62
|
+
export type RuntimeResolutionSeverity = "info" | "warning" | "error";
|
|
63
|
+
|
|
64
|
+
export interface RuntimeResolutionDiagnostic {
|
|
65
|
+
severity: RuntimeResolutionSeverity;
|
|
66
|
+
code: string;
|
|
67
|
+
message: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface RuntimeCapabilityDecision {
|
|
71
|
+
chat: boolean;
|
|
72
|
+
tools: boolean;
|
|
73
|
+
reasoning: boolean;
|
|
74
|
+
vision: boolean;
|
|
75
|
+
streaming: boolean;
|
|
76
|
+
contextWindow: number;
|
|
77
|
+
maxTokens: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface ResolvedRuntimeTarget {
|
|
81
|
+
targetId: string;
|
|
82
|
+
target: TargetDescriptor;
|
|
83
|
+
runtime: RuntimeDescriptor;
|
|
84
|
+
runtimeId: string;
|
|
85
|
+
runtimeKind: RuntimeKind;
|
|
86
|
+
apiFamily: RuntimeApiFamily;
|
|
87
|
+
auth: RuntimeAuth;
|
|
88
|
+
authRequired: boolean;
|
|
89
|
+
wireModelId: string;
|
|
90
|
+
costProvenance: CostProvenance;
|
|
91
|
+
requestedThinkingLevel: ThinkingLevel;
|
|
92
|
+
effectiveThinkingLevel: ThinkingLevel;
|
|
93
|
+
capabilities: CapabilityFlags;
|
|
94
|
+
capabilityDecisions: RuntimeCapabilityDecision;
|
|
95
|
+
modelRuntime: ResolvedModelRuntimeCapabilities;
|
|
96
|
+
/** True when live probe/detection data should beat synthesized model hints for reasoning. */
|
|
97
|
+
modelReasoningAuthoritative: boolean;
|
|
98
|
+
diagnostics: RuntimeResolutionDiagnostic[];
|
|
99
|
+
runtimeTier?: RuntimeTier;
|
|
100
|
+
contextWindowDetails: ContextWindowDetails;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface RuntimeTargetSnapshot {
|
|
104
|
+
targetId: string;
|
|
105
|
+
runtimeId: string;
|
|
106
|
+
runtimeKind: RuntimeKind;
|
|
107
|
+
apiFamily: RuntimeApiFamily;
|
|
108
|
+
auth: RuntimeAuth;
|
|
109
|
+
authRequired: boolean;
|
|
110
|
+
wireModelId: string;
|
|
111
|
+
requestedThinkingLevel: ThinkingLevel;
|
|
112
|
+
effectiveThinkingLevel: ThinkingLevel;
|
|
113
|
+
capabilities: RuntimeCapabilityDecision;
|
|
114
|
+
thinking: {
|
|
115
|
+
mechanism: ResolvedModelRuntimeCapabilities["thinking"]["mechanism"];
|
|
116
|
+
/** Derived reasoning class: never | switchable | always. */
|
|
117
|
+
class: ReasoningClass;
|
|
118
|
+
display: string;
|
|
119
|
+
supportedLevels: ReadonlyArray<ThinkingLevel>;
|
|
120
|
+
budgetEnforcement: ResolvedModelRuntimeCapabilities["thinking"]["budgetEnforcement"];
|
|
121
|
+
noticeKind: ResolvedModelRuntimeCapabilities["thinking"]["noticeKind"];
|
|
122
|
+
notice: string;
|
|
123
|
+
};
|
|
124
|
+
request: ResolvedModelRuntimeCapabilities["request"];
|
|
125
|
+
response: ResolvedModelRuntimeCapabilities["response"];
|
|
126
|
+
diagnostics: RuntimeResolutionDiagnostic[];
|
|
127
|
+
runtimeTier?: RuntimeTier;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export type RuntimeTargetResolution =
|
|
131
|
+
| { ok: true; target: ResolvedRuntimeTarget; diagnostics: RuntimeResolutionDiagnostic[] }
|
|
132
|
+
| { ok: false; diagnostics: RuntimeResolutionDiagnostic[] };
|
|
133
|
+
|
|
134
|
+
export interface ResolveRuntimeTargetInput {
|
|
135
|
+
targetId?: string | null;
|
|
136
|
+
wireModelId?: string | null;
|
|
137
|
+
requestedThinkingLevel?: ThinkingLevel;
|
|
138
|
+
requiredCapabilities?: ReadonlyArray<string>;
|
|
139
|
+
use?: RuntimeResolutionUse;
|
|
140
|
+
requireTools?: boolean;
|
|
141
|
+
requireStreaming?: boolean;
|
|
142
|
+
requireOutputBudget?: boolean;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function diagnostic(severity: RuntimeResolutionSeverity, code: string, message: string): RuntimeResolutionDiagnostic {
|
|
146
|
+
return { severity, code, message };
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function hasError(diagnostics: ReadonlyArray<RuntimeResolutionDiagnostic>): boolean {
|
|
150
|
+
return diagnostics.some((entry) => entry.severity === "error");
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function statusFor(
|
|
154
|
+
providers: ProvidersContract,
|
|
155
|
+
target: TargetDescriptor,
|
|
156
|
+
runtime: RuntimeDescriptor,
|
|
157
|
+
_wireModelId: string,
|
|
158
|
+
): TargetStatus {
|
|
159
|
+
const existing = providers.list().find((entry) => entry.target.id === target.id);
|
|
160
|
+
if (existing) return existing;
|
|
161
|
+
const capabilities: CapabilityFlags = { ...runtime.defaultCapabilities, ...(target.capabilities ?? {}) };
|
|
162
|
+
return {
|
|
163
|
+
target,
|
|
164
|
+
runtime,
|
|
165
|
+
available: true,
|
|
166
|
+
reason: "synthetic-status",
|
|
167
|
+
health: { status: "unknown", lastCheckAt: null, lastError: null, latencyMs: null },
|
|
168
|
+
capabilities,
|
|
169
|
+
probeCapabilities: null,
|
|
170
|
+
probeModelId: null,
|
|
171
|
+
discoveredModels: runtime.knownModels ?? [],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function requiredCapabilitySupported(capabilities: CapabilityFlags, name: string): boolean {
|
|
176
|
+
const value = (capabilities as unknown as Record<string, unknown>)[name];
|
|
177
|
+
return value !== undefined && value !== false && value !== 0 && value !== "";
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function streamingDecision(runtime: RuntimeDescriptor): boolean {
|
|
181
|
+
// HTTP/native runtimes stream through pi-ai/pi-agent-core. The sanctioned
|
|
182
|
+
// Claude Code worker runtimes stream through their SDK/CLI worker runners.
|
|
183
|
+
return isTargetEligibleRuntime(runtime);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function runtimeSupportsUse(runtime: RuntimeDescriptor, use: RuntimeResolutionUse): boolean {
|
|
187
|
+
if (use === "dispatch") return isDispatchEligibleRuntime(runtime);
|
|
188
|
+
return isOrchestratorEligibleRuntime(runtime);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function capabilityDecisions(runtime: RuntimeDescriptor, capabilities: CapabilityFlags): RuntimeCapabilityDecision {
|
|
192
|
+
return {
|
|
193
|
+
chat: capabilities.chat,
|
|
194
|
+
tools: capabilities.tools,
|
|
195
|
+
reasoning: capabilities.reasoning,
|
|
196
|
+
vision: capabilities.vision,
|
|
197
|
+
streaming: streamingDecision(runtime),
|
|
198
|
+
contextWindow: capabilities.contextWindow,
|
|
199
|
+
maxTokens: capabilities.maxTokens,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function appendCapabilityDiagnostics(
|
|
204
|
+
diagnostics: RuntimeResolutionDiagnostic[],
|
|
205
|
+
input: ResolveRuntimeTargetInput,
|
|
206
|
+
capabilities: CapabilityFlags,
|
|
207
|
+
decisions: RuntimeCapabilityDecision,
|
|
208
|
+
targetId: string,
|
|
209
|
+
): void {
|
|
210
|
+
if (!decisions.chat) {
|
|
211
|
+
diagnostics.push(diagnostic("error", "chat-unsupported", `target '${targetId}' does not advertise chat support`));
|
|
212
|
+
}
|
|
213
|
+
if (input.requireTools === true && !decisions.tools) {
|
|
214
|
+
diagnostics.push(diagnostic("warning", "tools-unsupported", `target '${targetId}' does not support tool calls`));
|
|
215
|
+
}
|
|
216
|
+
if (input.requireStreaming === true && !decisions.streaming) {
|
|
217
|
+
diagnostics.push(diagnostic("error", "streaming-unsupported", `target '${targetId}' cannot stream responses`));
|
|
218
|
+
}
|
|
219
|
+
if (input.requireOutputBudget === true && decisions.maxTokens <= 0) {
|
|
220
|
+
diagnostics.push(
|
|
221
|
+
diagnostic("warning", "output-budget-unknown", `target '${targetId}' does not expose a positive output budget`),
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
for (const capability of input.requiredCapabilities ?? []) {
|
|
225
|
+
if (!requiredCapabilitySupported(capabilities, capability)) {
|
|
226
|
+
diagnostics.push(
|
|
227
|
+
diagnostic(
|
|
228
|
+
"error",
|
|
229
|
+
"required-capability-missing",
|
|
230
|
+
`target '${targetId}' does not satisfy required capability '${capability}'`,
|
|
231
|
+
),
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function appendThinkingDiagnostics(
|
|
238
|
+
diagnostics: RuntimeResolutionDiagnostic[],
|
|
239
|
+
resolved: ResolvedModelRuntimeCapabilities,
|
|
240
|
+
requested: ThinkingLevel,
|
|
241
|
+
): void {
|
|
242
|
+
const thinking = resolved.thinking;
|
|
243
|
+
if (thinking.effectiveLevel !== requested) {
|
|
244
|
+
diagnostics.push(
|
|
245
|
+
diagnostic(
|
|
246
|
+
"warning",
|
|
247
|
+
"thinking-coerced",
|
|
248
|
+
`thinking ${requested} resolved to ${thinking.display} for ${resolved.runtimeId}/${resolved.modelId}`,
|
|
249
|
+
),
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
if (thinking.notice.length === 0) return;
|
|
253
|
+
const severity: RuntimeResolutionSeverity =
|
|
254
|
+
thinking.noticeKind === "unsupported" ||
|
|
255
|
+
thinking.noticeKind === "always-on" ||
|
|
256
|
+
thinking.noticeKind === "ignored-on-off"
|
|
257
|
+
? "warning"
|
|
258
|
+
: "info";
|
|
259
|
+
diagnostics.push(diagnostic(severity, `thinking-${thinking.noticeKind}`, thinking.notice));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function nonNegativeFiniteNumber(value: unknown): number | undefined {
|
|
263
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
interface ModelCapabilitiesResolution {
|
|
267
|
+
capabilities: CapabilityFlags;
|
|
268
|
+
reasoningAuthoritative: boolean;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function probeReasoningApplies(status: TargetStatus, wireModelId: string): boolean {
|
|
272
|
+
return probeCapabilitiesForModel(status, wireModelId)?.reasoning !== undefined;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Warn instead of silently passing a model id the target does not advertise.
|
|
277
|
+
* The id still resolves (local servers accept ids they never listed), but a
|
|
278
|
+
* typo or a stale settings entry surfaces here instead of at stream time.
|
|
279
|
+
* Silent only when there is no basis to judge: no configured wireModels and
|
|
280
|
+
* no live catalog yet.
|
|
281
|
+
*/
|
|
282
|
+
function unknownModelDiagnostic(
|
|
283
|
+
target: TargetDescriptor,
|
|
284
|
+
status: TargetStatus,
|
|
285
|
+
wireModelId: string,
|
|
286
|
+
): RuntimeResolutionDiagnostic | null {
|
|
287
|
+
const configured = (target.wireModels ?? []).map((id) => id.trim()).filter((id) => id.length > 0);
|
|
288
|
+
const probed = hasLiveModelCatalog(status);
|
|
289
|
+
const live = probed ? status.discoveredModels : null;
|
|
290
|
+
if (configured.length === 0 && live === null) return null;
|
|
291
|
+
if (configured.includes(wireModelId) || (live?.includes(wireModelId) ?? false)) return null;
|
|
292
|
+
const sources = [
|
|
293
|
+
...(configured.length > 0 ? ["configured wireModels"] : []),
|
|
294
|
+
...(live !== null && live.length > 0 ? ["live model catalog"] : []),
|
|
295
|
+
];
|
|
296
|
+
// A catalog that came back empty is a read that failed, not a server that
|
|
297
|
+
// serves nothing. Reporting it as a catalog the model is missing from sends
|
|
298
|
+
// the user to fix the settings entry or add the model to the server, and
|
|
299
|
+
// both of those are the wrong place to look.
|
|
300
|
+
if (sources.length === 0) {
|
|
301
|
+
return diagnostic(
|
|
302
|
+
"warning",
|
|
303
|
+
"model-catalog-unreadable",
|
|
304
|
+
`target '${target.id}' returned no model list, so Clio could not check whether '${wireModelId}' is served there; requests will send the id as-is. Re-read the catalog with: clio-coder targets --probe`,
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
return diagnostic(
|
|
308
|
+
"warning",
|
|
309
|
+
"model-not-in-catalog",
|
|
310
|
+
`model '${wireModelId}' is not in target '${target.id}' ${sources.join(" or ")}; requests will send the id as-is. Fix the settings entry or add the model to the server if this is unintended.`,
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function modelCapabilitiesFor(
|
|
315
|
+
providers: ProvidersContract,
|
|
316
|
+
status: TargetStatus,
|
|
317
|
+
wireModelId: string,
|
|
318
|
+
): ModelCapabilitiesResolution {
|
|
319
|
+
const detectedReasoning = providers.getDetectedReasoning(status.target.id, wireModelId);
|
|
320
|
+
return {
|
|
321
|
+
capabilities: resolveModelCapabilities(status, wireModelId, providers.knowledgeBase, { detectedReasoning }),
|
|
322
|
+
reasoningAuthoritative: detectedReasoning !== null || probeReasoningApplies(status, wireModelId),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
export function resolveRuntimeTarget(
|
|
327
|
+
providers: ProvidersContract,
|
|
328
|
+
input: ResolveRuntimeTargetInput,
|
|
329
|
+
): RuntimeTargetResolution {
|
|
330
|
+
const diagnostics: RuntimeResolutionDiagnostic[] = [];
|
|
331
|
+
const targetId = input.targetId?.trim();
|
|
332
|
+
if (!targetId) {
|
|
333
|
+
return {
|
|
334
|
+
ok: false,
|
|
335
|
+
diagnostics: [diagnostic("error", "target-not-configured", "no target is configured")],
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const target = providers.getTarget(targetId);
|
|
340
|
+
if (!target) {
|
|
341
|
+
return {
|
|
342
|
+
ok: false,
|
|
343
|
+
diagnostics: [diagnostic("error", "target-not-found", `target '${targetId}' not found in settings.targets`)],
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
const runtime = providers.getRuntime(target.runtime);
|
|
348
|
+
if (!runtime) {
|
|
349
|
+
return {
|
|
350
|
+
ok: false,
|
|
351
|
+
diagnostics: [diagnostic("error", "runtime-not-registered", `runtime '${target.runtime}' not registered`)],
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (!isTargetEligibleRuntime(runtime)) {
|
|
356
|
+
return {
|
|
357
|
+
ok: false,
|
|
358
|
+
diagnostics: [
|
|
359
|
+
diagnostic(
|
|
360
|
+
"error",
|
|
361
|
+
"runtime-target-unsupported",
|
|
362
|
+
`target '${targetId}' uses runtime '${runtime.id}' (${runtime.kind}); Clio cannot drive this runtime as a target`,
|
|
363
|
+
),
|
|
364
|
+
],
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const resolutionUse = input.use ?? "orchestrator";
|
|
369
|
+
if (!runtimeSupportsUse(runtime, resolutionUse)) {
|
|
370
|
+
return {
|
|
371
|
+
ok: false,
|
|
372
|
+
diagnostics: [
|
|
373
|
+
diagnostic(
|
|
374
|
+
"error",
|
|
375
|
+
"runtime-use-unsupported",
|
|
376
|
+
`target '${targetId}' uses runtime '${runtime.id}' (${runtime.kind}); this runtime is only supported for worker dispatch`,
|
|
377
|
+
),
|
|
378
|
+
],
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
const wireModelId = input.wireModelId?.trim() || target.defaultModel?.trim();
|
|
383
|
+
if (!wireModelId) {
|
|
384
|
+
return {
|
|
385
|
+
ok: false,
|
|
386
|
+
diagnostics: [diagnostic("error", "model-not-configured", `target '${targetId}' has no model configured`)],
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
const status = statusFor(providers, target, runtime, wireModelId);
|
|
391
|
+
const unknownModel = unknownModelDiagnostic(target, status, wireModelId);
|
|
392
|
+
if (unknownModel) diagnostics.push(unknownModel);
|
|
393
|
+
|
|
394
|
+
const requestedThinkingLevel = input.requestedThinkingLevel ?? "off";
|
|
395
|
+
const capabilityResolution = modelCapabilitiesFor(providers, status, wireModelId);
|
|
396
|
+
const capabilities: CapabilityFlags = { ...capabilityResolution.capabilities };
|
|
397
|
+
const probedContextWindow = probeCapabilitiesForModel(status, wireModelId)?.contextWindow ?? null;
|
|
398
|
+
// Discovery's per-model loaded window, which the probe capabilities cannot
|
|
399
|
+
// carry: `probeCapabilitiesForModel` answers for the target's default model
|
|
400
|
+
// and reports a window without saying whether it is the one being served.
|
|
401
|
+
const loadedContextWindow = loadedContextWindowForModel(status, wireModelId);
|
|
402
|
+
const contextWindowDetails = resolveContextWindowDetails(
|
|
403
|
+
target,
|
|
404
|
+
runtime,
|
|
405
|
+
wireModelId,
|
|
406
|
+
providers.knowledgeBase,
|
|
407
|
+
probedContextWindow,
|
|
408
|
+
loadedContextWindow,
|
|
409
|
+
);
|
|
410
|
+
capabilities.contextWindow = contextWindowDetails.effectiveContextWindow;
|
|
411
|
+
if (contextWindowDetails.warning) {
|
|
412
|
+
diagnostics.push(diagnostic("warning", "context-window-low", contextWindowDetails.warning));
|
|
413
|
+
}
|
|
414
|
+
if (contextWindowDetails.provenanceNotice) {
|
|
415
|
+
// A warning, not info. Clio now assumes its own minimum when a target
|
|
416
|
+
// reports nothing, so an unverified window is a number that could be
|
|
417
|
+
// larger than the truth, and overrunning it fails the request rather
|
|
418
|
+
// than merely wasting capacity. As info this reached only the dispatch
|
|
419
|
+
// receipt JSON, which nobody reads during the run it describes.
|
|
420
|
+
diagnostics.push(diagnostic("warning", "context-window-unverified", contextWindowDetails.provenanceNotice));
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const modelRuntime = resolveTargetRuntimeCapabilities(
|
|
424
|
+
target,
|
|
425
|
+
runtime,
|
|
426
|
+
wireModelId,
|
|
427
|
+
capabilities,
|
|
428
|
+
providers.knowledgeBase,
|
|
429
|
+
requestedThinkingLevel,
|
|
430
|
+
);
|
|
431
|
+
const decisions = capabilityDecisions(runtime, capabilities);
|
|
432
|
+
appendCapabilityDiagnostics(diagnostics, input, capabilities, decisions, targetId);
|
|
433
|
+
appendThinkingDiagnostics(diagnostics, modelRuntime, requestedThinkingLevel);
|
|
434
|
+
|
|
435
|
+
if (hasError(diagnostics)) return { ok: false, diagnostics };
|
|
436
|
+
|
|
437
|
+
const resolved: ResolvedRuntimeTarget = {
|
|
438
|
+
targetId: target.id,
|
|
439
|
+
target,
|
|
440
|
+
runtime,
|
|
441
|
+
runtimeId: runtime.id,
|
|
442
|
+
runtimeKind: runtime.kind,
|
|
443
|
+
apiFamily: runtime.apiFamily,
|
|
444
|
+
auth: runtime.auth,
|
|
445
|
+
authRequired: targetRequiresAuth(target, runtime),
|
|
446
|
+
wireModelId,
|
|
447
|
+
costProvenance: resolveCostProvenance(target, runtime.id, wireModelId),
|
|
448
|
+
requestedThinkingLevel,
|
|
449
|
+
effectiveThinkingLevel: modelRuntime.thinking.effectiveLevel,
|
|
450
|
+
capabilities,
|
|
451
|
+
capabilityDecisions: decisions,
|
|
452
|
+
modelRuntime,
|
|
453
|
+
modelReasoningAuthoritative: capabilityResolution.reasoningAuthoritative,
|
|
454
|
+
diagnostics,
|
|
455
|
+
contextWindowDetails,
|
|
456
|
+
};
|
|
457
|
+
if (runtime.tier !== undefined) resolved.runtimeTier = runtime.tier;
|
|
458
|
+
return { ok: true, target: resolved, diagnostics };
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
function modelHintPatch(target: ResolvedRuntimeTarget, model: unknown): Partial<CapabilityFlags> {
|
|
462
|
+
if (!model || typeof model !== "object") return {};
|
|
463
|
+
const record = model as Record<string, unknown>;
|
|
464
|
+
const patch: Partial<CapabilityFlags> = {};
|
|
465
|
+
if (!target.modelReasoningAuthoritative && typeof record.reasoning === "boolean") patch.reasoning = record.reasoning;
|
|
466
|
+
const contextWindow = nonNegativeFiniteNumber(record.contextWindow);
|
|
467
|
+
if (contextWindow !== undefined && target.capabilities.contextWindow <= 0) patch.contextWindow = contextWindow;
|
|
468
|
+
const maxTokens = nonNegativeFiniteNumber(record.maxTokens);
|
|
469
|
+
if (maxTokens !== undefined && target.capabilities.maxTokens <= 0) patch.maxTokens = maxTokens;
|
|
470
|
+
if (Array.isArray(record.input)) patch.vision = record.input.includes("image");
|
|
471
|
+
return patch;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
function withoutStaleRuntimeDiagnostics(
|
|
475
|
+
diagnostics: ReadonlyArray<RuntimeResolutionDiagnostic>,
|
|
476
|
+
decisions: RuntimeCapabilityDecision,
|
|
477
|
+
): RuntimeResolutionDiagnostic[] {
|
|
478
|
+
return diagnostics.filter((entry) => {
|
|
479
|
+
if (entry.code.startsWith("thinking-")) return false;
|
|
480
|
+
if (entry.code === "output-budget-unknown" && decisions.maxTokens > 0) return false;
|
|
481
|
+
if (entry.code === "tools-unsupported" && decisions.tools) return false;
|
|
482
|
+
return true;
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
export function refineRuntimeTargetWithModelHints(
|
|
487
|
+
target: ResolvedRuntimeTarget,
|
|
488
|
+
model: unknown,
|
|
489
|
+
knowledgeBase?: KnowledgeBase | null,
|
|
490
|
+
): ResolvedRuntimeTarget {
|
|
491
|
+
const patch = modelHintPatch(target, model);
|
|
492
|
+
const hintRecord = model && typeof model === "object" ? (model as Record<string, unknown>) : undefined;
|
|
493
|
+
const modelHintContextWindow = nonNegativeFiniteNumber(hintRecord?.contextWindow);
|
|
494
|
+
// The capability patch ignores the hint window once a target carries any
|
|
495
|
+
// effective window (it always does now), so the hint must independently
|
|
496
|
+
// force a re-resolution: a live model reporting a smaller loaded window
|
|
497
|
+
// than the local-native floor would otherwise be silently ignored and
|
|
498
|
+
// compaction would trigger too late.
|
|
499
|
+
const windowHintDiffers =
|
|
500
|
+
modelHintContextWindow !== undefined &&
|
|
501
|
+
modelHintContextWindow > 0 &&
|
|
502
|
+
modelHintContextWindow !== target.contextWindowDetails.effectiveContextWindow;
|
|
503
|
+
if (Object.keys(patch).length === 0 && !windowHintDiffers) return target;
|
|
504
|
+
const capabilities: CapabilityFlags = { ...target.capabilities, ...patch };
|
|
505
|
+
const contextWindowDetails = resolveContextWindowDetails(
|
|
506
|
+
target.target,
|
|
507
|
+
target.runtime,
|
|
508
|
+
target.wireModelId,
|
|
509
|
+
knowledgeBase ?? null,
|
|
510
|
+
target.contextWindowDetails.probedContextWindow,
|
|
511
|
+
// A synthesized model hint carries the model's declared window, never the
|
|
512
|
+
// one the backend has open. Re-resolving without the loaded number would
|
|
513
|
+
// hand the planner the declared window back on the first refinement.
|
|
514
|
+
target.contextWindowDetails.loadedContextWindow,
|
|
515
|
+
modelHintContextWindow,
|
|
516
|
+
);
|
|
517
|
+
capabilities.contextWindow = contextWindowDetails.effectiveContextWindow;
|
|
518
|
+
|
|
519
|
+
const modelRuntime = resolveModelRuntimeCapabilities({
|
|
520
|
+
targetId: target.targetId,
|
|
521
|
+
runtimeId: target.runtimeId,
|
|
522
|
+
apiFamily: target.apiFamily,
|
|
523
|
+
modelId: target.wireModelId,
|
|
524
|
+
capabilities,
|
|
525
|
+
...(target.modelRuntime.quirks ? { quirks: target.modelRuntime.quirks } : {}),
|
|
526
|
+
configuredThinkingLevel: target.requestedThinkingLevel,
|
|
527
|
+
});
|
|
528
|
+
const decisions = capabilityDecisions(target.runtime, capabilities);
|
|
529
|
+
const diagnostics = withoutStaleRuntimeDiagnostics(target.diagnostics, decisions);
|
|
530
|
+
appendThinkingDiagnostics(diagnostics, modelRuntime, target.requestedThinkingLevel);
|
|
531
|
+
return {
|
|
532
|
+
...target,
|
|
533
|
+
capabilities,
|
|
534
|
+
capabilityDecisions: decisions,
|
|
535
|
+
modelRuntime,
|
|
536
|
+
effectiveThinkingLevel: modelRuntime.thinking.effectiveLevel,
|
|
537
|
+
diagnostics,
|
|
538
|
+
contextWindowDetails,
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
export function runtimeTargetSnapshot(target: ResolvedRuntimeTarget): RuntimeTargetSnapshot {
|
|
543
|
+
const snapshot: RuntimeTargetSnapshot = {
|
|
544
|
+
targetId: target.targetId,
|
|
545
|
+
runtimeId: target.runtimeId,
|
|
546
|
+
runtimeKind: target.runtimeKind,
|
|
547
|
+
apiFamily: target.apiFamily,
|
|
548
|
+
auth: target.auth,
|
|
549
|
+
authRequired: target.authRequired,
|
|
550
|
+
wireModelId: target.wireModelId,
|
|
551
|
+
requestedThinkingLevel: target.requestedThinkingLevel,
|
|
552
|
+
effectiveThinkingLevel: target.effectiveThinkingLevel,
|
|
553
|
+
capabilities: { ...target.capabilityDecisions },
|
|
554
|
+
thinking: {
|
|
555
|
+
mechanism: target.modelRuntime.thinking.mechanism,
|
|
556
|
+
class: reasoningClassForMechanism(target.modelRuntime.thinking.mechanism),
|
|
557
|
+
display: target.modelRuntime.thinking.display,
|
|
558
|
+
supportedLevels: [...target.modelRuntime.thinking.supportedLevels],
|
|
559
|
+
budgetEnforcement: target.modelRuntime.thinking.budgetEnforcement,
|
|
560
|
+
noticeKind: target.modelRuntime.thinking.noticeKind,
|
|
561
|
+
notice: target.modelRuntime.thinking.notice,
|
|
562
|
+
},
|
|
563
|
+
request: { ...target.modelRuntime.request },
|
|
564
|
+
response: { ...target.modelRuntime.response },
|
|
565
|
+
diagnostics: target.diagnostics.map((entry) => ({ ...entry })),
|
|
566
|
+
};
|
|
567
|
+
if (target.runtimeTier !== undefined) snapshot.runtimeTier = target.runtimeTier;
|
|
568
|
+
return snapshot;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
export function firstRuntimeResolutionError(diagnostics: ReadonlyArray<RuntimeResolutionDiagnostic>): string | null {
|
|
572
|
+
return diagnostics.find((entry) => entry.severity === "error")?.message ?? null;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* The warnings a successful resolution still carries. A resolution that
|
|
577
|
+
* succeeded is not a resolution that was clean: an unadvertised model id or a
|
|
578
|
+
* thinking level the runtime ignores resolves fine and still changes what the
|
|
579
|
+
* run does, so the caller has something to report rather than discard.
|
|
580
|
+
*/
|
|
581
|
+
export function runtimeResolutionWarnings(diagnostics: ReadonlyArray<RuntimeResolutionDiagnostic>): string[] {
|
|
582
|
+
return diagnostics.filter((entry) => entry.severity === "warning").map((entry) => entry.message);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Minimum context Clio is built for, applied to every tier rather than only to
|
|
587
|
+
* local-native. A hosted target that reports less than this is as unable to
|
|
588
|
+
* hold a repository's worth of tool results as a local one.
|
|
589
|
+
*/
|
|
590
|
+
const DESIRED_CONTEXT_WINDOW = CLIO_MIN_CONTEXT_WINDOW;
|
|
591
|
+
/** Last-resort window when nothing declares one. */
|
|
592
|
+
const FALLBACK_CONTEXT_WINDOW = CLIO_MIN_CONTEXT_WINDOW;
|
|
593
|
+
|
|
594
|
+
function positiveWindow(value: number | null | undefined): number | undefined {
|
|
595
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* Resolve the three context-window figures a target carries:
|
|
600
|
+
*
|
|
601
|
+
* - `declared`: best static knowledge of the model's window
|
|
602
|
+
* (live model hint > knowledge base > catalog > runtime default > 8192).
|
|
603
|
+
* - `desired`: what Clio wants for coding. Local-native tiers still get a
|
|
604
|
+
* 128k recommendation, but this is advisory only.
|
|
605
|
+
* - `effective`: what the target actually offers, most live source first:
|
|
606
|
+
* loaded > probe > target config override > model-specific knowledge >
|
|
607
|
+
* runtime descriptor default. Clio no longer invents a 128k effective
|
|
608
|
+
* window for unknown local models; providers must probe it or users must
|
|
609
|
+
* configure an explicit override.
|
|
610
|
+
*
|
|
611
|
+
* The loaded window outranks everything below it because it is the only figure
|
|
612
|
+
* that describes what the backend will serve this turn. A model whose weights
|
|
613
|
+
* allow 262k but which is open at 100k fails at 100k, so planning against the
|
|
614
|
+
* declared number means autocompact never fires in time.
|
|
615
|
+
*
|
|
616
|
+
* Warns when a local-native target's effective window is below the 128k recommendation.
|
|
617
|
+
*/
|
|
618
|
+
export function resolveContextWindowDetails(
|
|
619
|
+
target: TargetDescriptor,
|
|
620
|
+
runtime: RuntimeDescriptor,
|
|
621
|
+
wireModelId: string,
|
|
622
|
+
knowledgeBase: KnowledgeBase | null,
|
|
623
|
+
probedContextWindow: number | null,
|
|
624
|
+
loadedContextWindow: number | null = null,
|
|
625
|
+
modelHintContextWindow?: number,
|
|
626
|
+
): ContextWindowDetails {
|
|
627
|
+
const catalogModel = getCatalogModelForRuntime(runtime.id, wireModelId);
|
|
628
|
+
const kbHit = knowledgeBase?.lookup(wireModelId) ?? null;
|
|
629
|
+
|
|
630
|
+
// Model-specific knowledge, most live first.
|
|
631
|
+
let modelDeclared: number | undefined;
|
|
632
|
+
let modelDeclaredSource: ContextWindowDetails["contextWindowSource"] = "unknown";
|
|
633
|
+
const hintWindow = positiveWindow(modelHintContextWindow);
|
|
634
|
+
const kbWindow = positiveWindow(kbHit?.entry.capabilities?.contextWindow);
|
|
635
|
+
const catalogWindow = positiveWindow(catalogModel?.contextWindow);
|
|
636
|
+
if (hintWindow !== undefined) {
|
|
637
|
+
modelDeclared = hintWindow;
|
|
638
|
+
modelDeclaredSource = "model-hint";
|
|
639
|
+
} else if (kbWindow !== undefined) {
|
|
640
|
+
modelDeclared = kbWindow;
|
|
641
|
+
modelDeclaredSource = "catalog";
|
|
642
|
+
} else if (catalogWindow !== undefined) {
|
|
643
|
+
modelDeclared = catalogWindow;
|
|
644
|
+
modelDeclaredSource = "catalog";
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
const runtimeDefault = positiveWindow(runtime.defaultCapabilities?.contextWindow);
|
|
648
|
+
const declaredContextWindow = modelDeclared ?? runtimeDefault ?? FALLBACK_CONTEXT_WINDOW;
|
|
649
|
+
|
|
650
|
+
const desired = Math.max(declaredContextWindow, DESIRED_CONTEXT_WINDOW);
|
|
651
|
+
|
|
652
|
+
const loadedWindow = positiveWindow(loadedContextWindow);
|
|
653
|
+
const probeWindow = positiveWindow(probedContextWindow);
|
|
654
|
+
const overrideWindow = positiveWindow(target.capabilities?.contextWindow);
|
|
655
|
+
let effective: number;
|
|
656
|
+
let source: ContextWindowSource;
|
|
657
|
+
if (loadedWindow !== undefined) {
|
|
658
|
+
effective = loadedWindow;
|
|
659
|
+
source = "loaded";
|
|
660
|
+
} else if (probeWindow !== undefined) {
|
|
661
|
+
effective = probeWindow;
|
|
662
|
+
// Not "loaded": a probed window is what the target reported for the
|
|
663
|
+
// model, and only a runtime that names its resident instance's window
|
|
664
|
+
// has said anything about what is serving right now.
|
|
665
|
+
source = "probe";
|
|
666
|
+
} else if (overrideWindow !== undefined) {
|
|
667
|
+
effective = overrideWindow;
|
|
668
|
+
source = "target-override";
|
|
669
|
+
} else if (modelDeclared !== undefined) {
|
|
670
|
+
effective = modelDeclared;
|
|
671
|
+
source = modelDeclaredSource;
|
|
672
|
+
} else {
|
|
673
|
+
effective = declaredContextWindow;
|
|
674
|
+
// `descriptor-default` is a claim that the runtime descriptor supplied
|
|
675
|
+
// this number. When it did not, the number is FALLBACK_CONTEXT_WINDOW and
|
|
676
|
+
// the honest label is `unknown`; attributing a hardcoded guess to the
|
|
677
|
+
// descriptor makes a value nobody declared read like a declared one.
|
|
678
|
+
source = runtimeDefault !== undefined ? "descriptor-default" : "unknown";
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
// One-run CLI override (clio-coder run --max-context-tokens), delivered over the
|
|
682
|
+
// run-overrides transport; see core/run-overrides.ts.
|
|
683
|
+
const overrideMaxContextTokens = runOverrides().maxContextTokens;
|
|
684
|
+
if (overrideMaxContextTokens !== undefined) {
|
|
685
|
+
effective = overrideMaxContextTokens;
|
|
686
|
+
source = "target-override";
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
// Below the floor is a warning on every tier. A target that reports less
|
|
690
|
+
// than Clio's minimum will compact on the first substantial read no matter
|
|
691
|
+
// where it runs, and the operator can act on that only if they are told.
|
|
692
|
+
let warning: string | null = null;
|
|
693
|
+
if (effective < CLIO_CONTEXT_WINDOW_WARN_BELOW) {
|
|
694
|
+
warning =
|
|
695
|
+
`Target offers ${effective} context tokens, below the ${CLIO_CONTEXT_WINDOW_WARN_BELOW} Clio needs. ` +
|
|
696
|
+
`Load the model with a larger context, or set capabilities.contextWindow on this target.`;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// Deliberately not folded into `warning`. That field means the window is
|
|
700
|
+
// smaller than the work needs, which is a degradation an operator can act
|
|
701
|
+
// on. Provenance is the separate question of whether the number is real:
|
|
702
|
+
// Clio assumes the floor rather than a number nobody declared, and says so.
|
|
703
|
+
let provenanceNotice: string | null = null;
|
|
704
|
+
if (source === "descriptor-default" || source === "unknown") {
|
|
705
|
+
provenanceNotice =
|
|
706
|
+
`Context window ${effective} is Clio's assumed minimum, not a figure this target reported. ` +
|
|
707
|
+
`Run 'clio-coder targets --probe' to read the real one.`;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
return {
|
|
711
|
+
declaredContextWindow,
|
|
712
|
+
probedContextWindow,
|
|
713
|
+
loadedContextWindow: loadedWindow ?? null,
|
|
714
|
+
desiredContextWindow: desired,
|
|
715
|
+
effectiveContextWindow: effective,
|
|
716
|
+
contextWindowSource: source,
|
|
717
|
+
warning,
|
|
718
|
+
provenanceNotice,
|
|
719
|
+
};
|
|
720
|
+
}
|