@iowarp/clio-coder 0.3.1 → 0.3.2
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 +90 -2
- package/CONTRIBUTING.md +23 -23
- package/README.md +284 -613
- package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
- package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
- package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
- package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
- package/dist/chunk-4KLWL3UC.js +18 -0
- package/dist/chunk-4VP4KH3K.js +962 -0
- package/dist/chunk-4ZG3XFUR.js +77 -0
- package/dist/chunk-5B2AEOW5.js +5407 -0
- package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
- package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6EJV5X2W.js +16405 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
- package/dist/chunk-7MNJORFF.js +22 -0
- package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
- package/dist/chunk-AGYYIBLL.js +1069 -0
- package/dist/chunk-AO4RKG4M.js +277 -0
- package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
- package/dist/chunk-ARBGF5F7.js +174 -0
- package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
- package/dist/chunk-CBCAPZAA.js +229 -0
- package/dist/chunk-CMZWFGD2.js +352 -0
- package/dist/chunk-ECH6PKUQ.js +39 -0
- package/dist/chunk-ED4KHGC3.js +143 -0
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G2DE3C7R.js +644 -0
- package/dist/chunk-G4BMMOKF.js +182 -0
- package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
- package/dist/chunk-HC4CLZ2Y.js +68 -0
- package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
- package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
- package/dist/chunk-I4HZDVNP.js +73 -0
- package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
- package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
- package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
- package/dist/chunk-KJ5LWLOE.js +1077 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
- package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
- package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
- package/dist/chunk-MAW544W2.js +1882 -0
- package/dist/chunk-MBS4V7ZP.js +217 -0
- package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
- package/dist/chunk-MNA4JGU4.js +255 -0
- package/dist/chunk-MQSRRFWA.js +3428 -0
- package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/chunk-OHHN2SO4.js +5135 -0
- package/dist/chunk-OKGUZO2U.js +34 -0
- package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
- package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
- package/dist/chunk-OQE5J4C6.js +73 -0
- package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
- package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/chunk-STBPMHSX.js +2456 -0
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/chunk-WMSVI4G2.js +2095 -0
- package/dist/chunk-WVO7V2QY.js +797 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/chunk-X75S7HFS.js +374 -0
- package/dist/chunk-XN3L4EYL.js +46 -0
- package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
- package/dist/chunk-YHZX5GEU.js +193 -0
- package/dist/chunk-YXLYO42X.js +91 -0
- package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
- package/dist/chunk-ZI647VB5.js +37 -0
- package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
- package/dist/cli/index.js +62 -54
- package/dist/clio-4LY5K2AC.js +25 -0
- package/dist/code-nav-7AX6FYE6.js +600 -0
- package/dist/codewiki/build-worker.js +66 -0
- package/dist/compile-cache-CVJMMODC.js +18 -0
- package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
- package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
- package/dist/configure-R6A64DHX.js +42 -0
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
- package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
- package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
- package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
- package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
- package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
- package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
- package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
- package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
- package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
- package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
- package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
- package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
- package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
- package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
- package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
- package/dist/monitor-MEQA5C3I.js +661 -0
- package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
- package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
- package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
- package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
- package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
- package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
- package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
- package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
- package/dist/terminal-lease-IT5JW2NR.js +395 -0
- package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
- package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
- package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
- package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
- package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
- package/dist/verify-G6V4D2G7.js +716 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
- package/dist/worker/entry.js +221 -36
- package/dist/workspace-G4ZWUIPR.js +22 -0
- package/docs/README.md +22 -17
- package/docs/acp.md +168 -16
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +136 -7
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +114 -71
- package/docs/config-knobs-audit.md +1 -3
- package/docs/configuration-and-targets.md +174 -46
- package/docs/context-engine.md +29 -6
- package/docs/development-pipeline.md +26 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +13 -5
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +2 -2
- package/docs/exit-codes-and-output.md +15 -9
- package/docs/extensions-and-sharing.md +9 -9
- package/docs/fleet-dispatch.md +7 -5
- package/docs/git-commit-provenance.md +120 -0
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +34 -27
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +45 -14
- package/docs/observability.md +8 -5
- package/docs/performance-methodology.md +491 -0
- package/docs/pi-boundary.md +72 -0
- package/docs/proactive-memory.md +3 -3
- package/docs/prompt-envelope-and-tools.md +24 -3
- package/docs/provider-adapter-cookbook.md +57 -4
- package/docs/release-cut-checklist.md +129 -115
- package/docs/safety-model.md +9 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +55 -12
- package/docs/skills-marketplace.md +12 -8
- package/docs/time-conventions.md +1 -1
- package/docs/tool-usage.md +3 -3
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +10 -7
- package/docs/tui-design.md +47 -10
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +19 -22
- package/skills/coding/ast-grep/SKILL.md +136 -0
- package/skills/coding/ast-grep/evals.md +56 -0
- package/skills/coding/ast-grep/references/rule_reference.md +297 -0
- package/skills/coding/coding-standards/SKILL.md +113 -0
- package/skills/coding/coding-standards/evals.md +34 -0
- package/skills/coding/prototype/SKILL.md +86 -0
- package/skills/coding/prototype/evals.md +42 -0
- package/skills/coding/prototype/references/LOGIC.md +67 -0
- package/skills/coding/prototype/references/UI.md +112 -0
- package/skills/coding/tdd/SKILL.md +101 -0
- package/skills/coding/tdd/evals.md +41 -0
- package/skills/coding/tdd/references/mocking.md +59 -0
- package/skills/coding/tdd/references/tests.md +77 -0
- package/skills/context/context-handoff/SKILL.md +126 -0
- package/skills/context/context-handoff/evals.md +57 -0
- package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
- package/skills/context/context-prime/SKILL.md +95 -0
- package/skills/context/context-prime/evals.md +54 -0
- package/skills/meta/clio-dev/SKILL.md +91 -0
- package/skills/meta/clio-dev/evals.md +45 -0
- package/skills/meta/clio-test/SKILL.md +130 -0
- package/skills/meta/clio-test/evals.md +43 -0
- package/skills/meta/clio-test/references/harness.md +97 -0
- package/skills/meta/clio-test/references/test-map.md +59 -0
- package/skills/meta/credentials/SKILL.md +125 -0
- package/skills/meta/credentials/evals.md +104 -0
- package/skills/meta/find-skills/SKILL.md +72 -0
- package/skills/meta/find-skills/evals.md +47 -0
- package/skills/meta/herdr/SKILL.md +127 -0
- package/skills/meta/herdr/evals.md +38 -0
- package/skills/meta/skill-craft/SKILL.md +102 -0
- package/skills/meta/skill-craft/evals.md +41 -0
- package/skills/planning/architecture/SKILL.md +129 -0
- package/skills/planning/architecture/evals.md +36 -0
- package/skills/planning/backlog/SKILL.md +90 -0
- package/skills/planning/backlog/evals.md +43 -0
- package/skills/planning/prd/SKILL.md +82 -0
- package/skills/planning/prd/evals.md +49 -0
- package/skills/planning/product-intent/SKILL.md +112 -0
- package/skills/planning/product-intent/evals.md +36 -0
- package/skills/planning/tech-spec/SKILL.md +115 -0
- package/skills/planning/tech-spec/evals.md +47 -0
- package/skills/registry.yaml +136 -0
- package/skills/research/arxiv-literature/SKILL.md +104 -0
- package/skills/research/arxiv-literature/evals.md +58 -0
- package/skills/research/experiment-protocol/SKILL.md +122 -0
- package/skills/research/experiment-protocol/evals.md +91 -0
- package/skills/research/scientific-debugging/SKILL.md +119 -0
- package/skills/research/scientific-debugging/evals.md +138 -0
- package/skills/research/scientific-modernization/SKILL.md +138 -0
- package/skills/research/scientific-modernization/evals.md +84 -0
- package/skills/workflow/design-council/SKILL.md +139 -0
- package/skills/workflow/design-council/evals.md +97 -0
- package/skills/workflow/grill-me/SKILL.md +186 -0
- package/skills/workflow/grill-me/evals.md +78 -0
- package/skills/workflow/workflow-distiller/SKILL.md +136 -0
- package/skills/workflow/workflow-distiller/evals.md +107 -0
- package/src/cli/acp.ts +31 -4
- package/src/cli/clio.ts +68 -6
- package/src/cli/config-inspect.ts +28 -22
- package/src/cli/configure.ts +47 -9
- package/src/cli/context-clear.ts +2 -2
- package/src/cli/context-index.ts +21 -23
- package/src/cli/context.ts +13 -8
- package/src/cli/default-target.ts +9 -17
- package/src/cli/docs.ts +11 -5
- package/src/cli/evidence.ts +4 -1
- package/src/cli/extensions.ts +10 -1
- package/src/cli/fleet.ts +47 -6
- package/src/cli/index.ts +55 -26
- package/src/cli/memory.ts +3 -1
- package/src/cli/models.ts +1 -1
- package/src/cli/modes/json-stream.ts +37 -1
- package/src/cli/modes/print.ts +24 -9
- package/src/cli/run.ts +2 -2
- package/src/cli/skills-eval.ts +23 -8
- package/src/cli/skills.ts +19 -4
- package/src/cli/targets.ts +4 -0
- package/src/cli/text-layout.ts +15 -5
- package/src/cli/trace.ts +62 -14
- package/src/cli/upgrade.ts +18 -2
- package/src/cli/usage.ts +10 -3
- package/src/cli/wiki-generate.ts +2 -1
- package/src/core/agent-environment.ts +7 -0
- package/src/core/bash-exec.ts +72 -1
- package/src/core/boot-trace.ts +9 -4
- package/src/core/bus-events.ts +20 -4
- package/src/core/commit-attribution.ts +157 -0
- package/src/core/compile-cache.ts +159 -0
- package/src/core/config.ts +131 -2
- package/src/core/defaults.ts +39 -5
- package/src/core/domain-loader.ts +12 -5
- package/src/core/git-commit-attribution.ts +362 -0
- package/src/core/incomplete-installation.ts +45 -0
- package/src/core/response-schema.ts +1 -1
- package/src/core/safe-exec.ts +13 -1
- package/src/core/settings-layers.ts +155 -21
- package/src/core/skill-activation.ts +1 -1
- package/src/core/startup-timer.ts +3 -3
- package/src/core/state-file-lock.ts +13 -1
- package/src/core/termination.ts +78 -5
- package/src/domains/config/classify.ts +15 -3
- package/src/domains/config/extension.ts +19 -13
- package/src/domains/config/index.ts +10 -0
- package/src/domains/config/keybindings.ts +42 -6
- package/src/domains/context/bootstrap-prompt.ts +1 -1
- package/src/domains/context/bootstrap.ts +111 -18
- package/src/domains/context/clear.ts +16 -11
- package/src/domains/context/clio-md.ts +111 -9
- package/src/domains/context/codewiki/artifact.ts +400 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
- package/src/domains/context/codewiki/build-worker.ts +54 -0
- package/src/domains/context/codewiki/coordinator.ts +182 -0
- package/src/domains/context/codewiki/indexer.ts +59 -144
- package/src/domains/context/codewiki/paths.ts +67 -0
- package/src/domains/context/codewiki/schema.ts +80 -0
- package/src/domains/context/codewiki/tree-sitter.ts +1 -1
- package/src/domains/context/contract.ts +11 -5
- package/src/domains/context/extension.ts +94 -143
- package/src/domains/context/fingerprint.ts +3 -1
- package/src/domains/context/index.ts +12 -22
- package/src/domains/context/project-metadata.ts +19 -0
- package/src/domains/context/prompt-context.ts +9 -10
- package/src/domains/context/refresh.ts +29 -21
- package/src/domains/context/runtime.ts +17 -0
- package/src/domains/context/wiki/generate.ts +39 -34
- package/src/domains/context/wiki/plan.ts +1 -1
- package/src/domains/context/wiki/prompts.ts +21 -8
- package/src/domains/dispatch/code-step.ts +20 -1
- package/src/domains/dispatch/extension.ts +158 -21
- package/src/domains/dispatch/failure-classification.ts +6 -0
- package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
- package/src/domains/dispatch/orphan-recovery.ts +50 -8
- package/src/domains/dispatch/receipt-integrity.ts +5 -0
- package/src/domains/dispatch/state.ts +31 -6
- package/src/domains/dispatch/transport.ts +2 -1
- package/src/domains/dispatch/types.ts +14 -0
- package/src/domains/dispatch/worker-spawn.ts +21 -2
- package/src/domains/eval/metrics/context.ts +1 -1
- package/src/domains/eval/types.ts +0 -1
- package/src/domains/evidence/build.ts +41 -1
- package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
- package/src/domains/lifecycle/migrations/index.ts +24 -4
- package/src/domains/middleware/hooks-io.ts +12 -0
- package/src/domains/middleware/skills-reminder.ts +30 -15
- package/src/domains/prompts/compiler.ts +142 -84
- package/src/domains/prompts/contract.ts +18 -2
- package/src/domains/prompts/extension.ts +39 -7
- package/src/domains/prompts/fragment-loader.ts +0 -1
- package/src/domains/prompts/fragments/identity/clio.md +2 -4
- package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
- package/src/domains/prompts/fragments/operating/contract.md +4 -50
- package/src/domains/prompts/fragments/operating/delegation.md +42 -0
- package/src/domains/prompts/fragments/operating/skills.md +26 -0
- package/src/domains/prompts/fragments/operating/worker.md +16 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
- package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
- package/src/domains/prompts/fragments/safety/read-only.md +4 -4
- package/src/domains/prompts/fragments/safety/suggest.md +2 -2
- package/src/domains/prompts/fragments/wiki/page.md +10 -0
- package/src/domains/prompts/fragments/wiki/plan.md +10 -0
- package/src/domains/prompts/preload.ts +3 -3
- package/src/domains/providers/auth/api-key.ts +1 -1
- package/src/domains/providers/auth/backend-file.ts +20 -10
- package/src/domains/providers/auth/backend-memory.ts +59 -4
- package/src/domains/providers/auth/boot-status.ts +65 -0
- package/src/domains/providers/auth/oauth.ts +2 -1
- package/src/domains/providers/auth/storage.ts +97 -38
- package/src/domains/providers/capabilities.ts +12 -4
- package/src/domains/providers/contract.ts +15 -4
- package/src/domains/providers/extension.ts +18 -6
- package/src/domains/providers/model-runtime-capabilities.ts +15 -4
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
- package/src/domains/providers/plugins.ts +5 -3
- package/src/domains/providers/probe/fingerprint.ts +25 -5
- package/src/domains/providers/registry.ts +31 -10
- package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -2
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
- package/src/domains/providers/support.ts +6 -3
- package/src/domains/providers/types/local-model-quirks.ts +7 -9
- package/src/domains/providers/types/runtime-descriptor.ts +12 -1
- package/src/domains/providers/types/target-descriptor.ts +22 -0
- package/src/domains/resources/contract.ts +0 -1
- package/src/domains/resources/extension.ts +1 -3
- package/src/domains/resources/loader.ts +3 -4
- package/src/domains/resources/prompts/loader.ts +16 -2
- package/src/domains/resources/prompts/substitute.ts +1 -65
- package/src/domains/resources/skills/content-hash.ts +2 -0
- package/src/domains/resources/skills/install.ts +17 -0
- package/src/domains/resources/skills/loader.ts +17 -10
- package/src/domains/resources/skills/marketplace.ts +55 -9
- package/src/domains/safety/action-classifier.ts +4 -2
- package/src/domains/safety/audit.ts +8 -2
- package/src/domains/safety/extension.ts +1 -1
- package/src/domains/session/compaction/branch-summary.ts +3 -2
- package/src/domains/session/compaction/cut-point.ts +2 -1
- package/src/domains/session/compaction/tokens.ts +2 -1
- package/src/domains/session/context-ledger.ts +14 -0
- package/src/domains/session/contract.ts +15 -0
- package/src/domains/session/decision-board.ts +190 -0
- package/src/domains/session/entries.ts +66 -3
- package/src/domains/session/extension.ts +93 -12
- package/src/domains/session/retry.ts +10 -18
- package/src/domains/session/session-artifacts.ts +107 -0
- package/src/domains/session/task-board.ts +207 -13
- package/src/domains/session/tree/active-path.ts +44 -5
- package/src/domains/session/tree/fork.ts +26 -27
- package/src/domains/session/tree/preview.ts +2 -2
- package/src/domains/session/workspace/git-probe.ts +17 -11
- package/src/domains/user-tasks/store.ts +297 -0
- package/src/engine/acp/errors.ts +96 -0
- package/src/engine/acp/server.ts +1728 -146
- package/src/engine/acp/transport.ts +135 -14
- package/src/engine/acp/types.ts +26 -0
- package/src/engine/agent.ts +3 -3
- package/src/engine/ai.ts +32 -27
- package/src/engine/alcf-oauth.ts +26 -19
- package/src/engine/api-registry.ts +223 -0
- package/src/engine/apis/index.ts +3 -7
- package/src/engine/apis/llamacpp-residency.ts +49 -9
- package/src/engine/apis/lmstudio-residency.ts +5 -21
- package/src/engine/apis/lmstudio.ts +243 -0
- package/src/engine/apis/ollama-native.ts +24 -3
- package/src/engine/apis/openai-completions.ts +170 -91
- package/src/engine/apis/residency.ts +139 -3
- package/src/engine/apis/types.ts +16 -0
- package/src/engine/env-api-keys.ts +98 -0
- package/src/engine/gemma-channel-filter.ts +223 -0
- package/src/engine/instrumented-tui.ts +192 -0
- package/src/engine/messages.ts +14 -0
- package/src/engine/models.ts +42 -0
- package/src/engine/oauth.ts +16 -12
- package/src/engine/prompt-templates.ts +1 -0
- package/src/engine/provider-payload.ts +16 -59
- package/src/engine/strip-tokenizer-sentinels.ts +1 -1
- package/src/engine/truncate.ts +9 -0
- package/src/engine/tui.ts +17 -9
- package/src/engine/types.ts +3 -6
- package/src/engine/worker-runtime-capabilities.ts +5 -0
- package/src/engine/worker-runtime.ts +1 -1
- package/src/engine/worker-tools.ts +9 -4
- package/src/entry/boot-options.ts +50 -0
- package/src/entry/orchestrator.ts +288 -150
- package/src/interactive/application-controller.ts +89 -2
- package/src/interactive/chat-loop.ts +266 -41
- package/src/interactive/chat-panel.ts +173 -47
- package/src/interactive/chat-renderer.ts +262 -72
- package/src/interactive/clio-editor.ts +3 -8
- package/src/interactive/command-fallbacks.ts +2 -2
- package/src/interactive/context-overlay.ts +27 -1
- package/src/interactive/editor-submit.ts +228 -24
- package/src/interactive/export-html/ansi-to-html.ts +161 -0
- package/src/interactive/export-html/index.ts +51 -0
- package/src/interactive/export-html/template.ts +45 -0
- package/src/interactive/export-html/tool-renderer.ts +54 -0
- package/src/interactive/footer/dashboard.ts +4 -0
- package/src/interactive/footer/notifications.ts +1 -1
- package/src/interactive/footer/widgets.ts +20 -2
- package/src/interactive/footer-panel.ts +2 -2
- package/src/interactive/format-time.ts +14 -2
- package/src/interactive/interactive-application.ts +201 -17
- package/src/interactive/interactive-event-projection.ts +6 -1
- package/src/interactive/interactive-input-runtime.ts +50 -4
- package/src/interactive/interactive-presentation.ts +151 -19
- package/src/interactive/interactive-shell.ts +268 -14
- package/src/interactive/interactive-slash-runtime.ts +176 -114
- package/src/interactive/interactive-tickers.ts +38 -7
- package/src/interactive/keybinding-manager.ts +1 -1
- package/src/interactive/layout.ts +40 -3
- package/src/interactive/overlay-frame.ts +1 -1
- package/src/interactive/overlay-general-openers.ts +58 -1
- package/src/interactive/overlay-key-routing.ts +3 -0
- package/src/interactive/overlay-lifecycle.ts +13 -0
- package/src/interactive/overlay-permission-lifecycle.ts +2 -1
- package/src/interactive/overlay-session-lifecycle.ts +69 -12
- package/src/interactive/overlays/decisions.ts +300 -0
- package/src/interactive/overlays/help-reference.ts +15 -10
- package/src/interactive/overlays/model-selector.ts +34 -16
- package/src/interactive/overlays/session-selector.ts +18 -0
- package/src/interactive/overlays/settings.ts +105 -17
- package/src/interactive/overlays/skills-hub.ts +4 -4
- package/src/interactive/overlays/tree-selector.ts +41 -6
- package/src/interactive/render-trace.ts +499 -90
- package/src/interactive/renderers/compaction-summary.ts +2 -2
- package/src/interactive/renderers/diff.ts +115 -104
- package/src/interactive/renderers/mermaid.ts +53 -0
- package/src/interactive/renderers/tool-execution.ts +386 -133
- package/src/interactive/renderers/worker-entry.ts +20 -4
- package/src/interactive/session-switch-settlement.ts +10 -0
- package/src/interactive/slash-autocomplete.ts +6 -114
- package/src/interactive/slash-commands.ts +135 -47
- package/src/interactive/slash-spec.ts +9 -38
- package/src/interactive/status/controller.ts +5 -1
- package/src/interactive/stdout-backpressure.ts +99 -0
- package/src/interactive/stream-pacer.ts +530 -0
- package/src/interactive/stream-pacing-policy.ts +66 -0
- package/src/interactive/tasks-overlay.ts +368 -14
- package/src/interactive/terminal-lease.ts +485 -0
- package/src/interactive/theme/tokens.ts +1 -1
- package/src/interactive/turn-context.ts +4 -3
- package/src/interactive/turn-persistence.ts +30 -13
- package/src/interactive/turn-queues.ts +12 -0
- package/src/interactive/turn-recovery.ts +25 -8
- package/src/interactive/turn-runtime.ts +79 -12
- package/src/interactive/turn-state.ts +10 -0
- package/src/interactive/view/artifacts.ts +114 -4
- package/src/interactive/view/view-overlay.ts +3 -0
- package/src/interactive/welcome-dashboard.ts +17 -16
- package/src/interactive/worker-receipts.ts +52 -3
- package/src/interactive/worker-stream.ts +5 -1
- package/src/tools/agent-tools.ts +23 -3
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +23 -13
- package/src/tools/bash.ts +30 -2
- package/src/tools/bootstrap.ts +34 -431
- package/src/tools/builtin-tool-catalog.ts +265 -0
- package/src/tools/codewiki/code-nav-surface.ts +29 -0
- package/src/tools/codewiki/code-nav.ts +8 -22
- package/src/tools/codewiki/shared.ts +41 -38
- package/src/tools/context/docs-engine.ts +14 -3
- package/src/tools/context/index.ts +107 -28
- package/src/tools/context/surface.ts +19 -0
- package/src/tools/core-bootstrap.ts +168 -0
- package/src/tools/credential-present.ts +5 -5
- package/src/tools/dispatch-admission.ts +533 -0
- package/src/tools/dispatch-background.ts +54 -0
- package/src/tools/dispatch-event-text.ts +6 -0
- package/src/tools/dispatch-plan.ts +9 -4
- package/src/tools/dispatch-run-events.ts +238 -0
- package/src/tools/dispatch-runner.ts +2370 -0
- package/src/tools/dispatch-scout-admission.ts +295 -0
- package/src/tools/dispatch-types.ts +77 -0
- package/src/tools/dispatch.ts +67 -3161
- package/src/tools/find.ts +4 -2
- package/src/tools/grep.ts +2 -2
- package/src/tools/lazy-tool.ts +60 -0
- package/src/tools/ledger.ts +3 -3
- package/src/tools/monitor-surface.ts +36 -0
- package/src/tools/monitor.ts +2 -32
- package/src/tools/observers.ts +2 -2
- package/src/tools/registry.ts +39 -27
- package/src/tools/safe-exec.ts +2 -2
- package/src/tools/steer-surface.ts +17 -0
- package/src/tools/steer.ts +2 -13
- package/src/tools/tasks.ts +108 -11
- package/src/tools/truncate.ts +25 -184
- package/src/tools/verify/frontend.ts +3 -1
- package/src/tools/verify/index.ts +3 -38
- package/src/tools/verify/surface.ts +46 -0
- package/src/tools/web-fetch-surface.ts +23 -0
- package/src/tools/web-fetch.ts +2 -20
- package/src/tools/write.ts +7 -2
- package/src/worker/entry.ts +39 -2
- package/src/worker/spec-contract.ts +26 -5
- package/dist/chunk-7SS2CTV2.js +0 -61361
- package/dist/chunk-DKGKUHFA.js +0 -924
- package/dist/chunk-GEP36Y4X.js +0 -12796
- package/dist/chunk-XYWBQRDM.js +0 -137
- package/dist/clio-BZVGEUFJ.js +0 -58
- package/dist/configure-S7S6F6CL.js +0 -32
- package/docs/html/agents_blueprint.html +0 -936
- package/docs/html/alcf_blueprint.html +0 -324
- package/docs/html/architecture_blueprint.html +0 -850
- package/docs/html/commands_blueprint.html +0 -939
- package/docs/html/config_knobs_audit_blueprint.html +0 -178
- package/docs/html/configuration_blueprint.html +0 -1080
- package/docs/html/context_blueprint.html +0 -603
- package/docs/html/documentation_blueprint.html +0 -832
- package/docs/html/environment_blueprint.html +0 -404
- package/docs/html/eval_blueprint.html +0 -743
- package/docs/html/evals_internal_blueprint.html +0 -190
- package/docs/html/evolution_blueprint.html +0 -674
- package/docs/html/extensions_blueprint.html +0 -2065
- package/docs/html/fleet_dispatch_blueprint.html +0 -286
- package/docs/html/index.html +0 -919
- package/docs/html/lifecycle_blueprint.html +0 -723
- package/docs/html/memory_blueprint.html +0 -699
- package/docs/html/middleware_blueprint.html +0 -664
- package/docs/html/models_blueprint.html +0 -2366
- package/docs/html/observability_blueprint.html +0 -683
- package/docs/html/provider_adapter_blueprint.html +0 -245
- package/docs/html/safety_blueprint.html +0 -1386
- package/docs/html/shared.css +0 -571
- package/docs/html/shared.js +0 -143
- package/docs/html/skills_blueprint.html +0 -671
- package/docs/html/soak_blueprint.html +0 -182
- package/docs/html/tool_usage_blueprint.html +0 -350
- package/docs/html/tools_blueprint.html +0 -2249
- package/docs/html/trace_blueprint.html +0 -235
- package/docs/html/tui_design_blueprint.html +0 -374
- package/docs/html/validation_blueprint.html +0 -961
- package/docs/html/worker_dispatch_blueprint.html +0 -231
- package/src/core/release.ts +0 -2
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
- package/src/engine/apis/lmstudio-native.ts +0 -1438
- package/src/engine/apis/thinking-replay.ts +0 -11
- package/src/tools/string-enum.ts +0 -15
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
2
|
-
|
|
3
2
|
import type { OAuthLoginCallbacks } from "../../../engine/oauth.js";
|
|
3
|
+
import type { AuthOperationOptions } from "../../../engine/types.js";
|
|
4
4
|
import type { RuntimeAuth, RuntimeDescriptor } from "../types/runtime-descriptor.js";
|
|
5
5
|
import type { TargetDescriptor } from "../types/target-descriptor.js";
|
|
6
6
|
|
|
@@ -39,7 +39,10 @@ export interface LockResult<T> {
|
|
|
39
39
|
|
|
40
40
|
export interface AuthStorageBackend {
|
|
41
41
|
withLock<T>(fn: (current: string | undefined) => LockResult<T>): T;
|
|
42
|
-
withLockAsync<T>(
|
|
42
|
+
withLockAsync<T>(
|
|
43
|
+
fn: (current: string | undefined) => Promise<LockResult<T>>,
|
|
44
|
+
options?: AuthOperationOptions,
|
|
45
|
+
): Promise<T>;
|
|
43
46
|
/** Where the store lives, for error text. Absent for non-file backends. */
|
|
44
47
|
describe?(): string;
|
|
45
48
|
}
|
|
@@ -246,7 +249,12 @@ function serializeStorageData(data: AuthStorageData): string {
|
|
|
246
249
|
});
|
|
247
250
|
}
|
|
248
251
|
|
|
249
|
-
export
|
|
252
|
+
export type RuntimeAuthMetadata = Pick<
|
|
253
|
+
RuntimeDescriptor,
|
|
254
|
+
"id" | "auth" | "tier" | "credentialsEnvVar" | "oauthProviderId"
|
|
255
|
+
>;
|
|
256
|
+
|
|
257
|
+
export function resolveAuthTarget(target: TargetDescriptor, runtime: RuntimeAuthMetadata): AuthTarget {
|
|
250
258
|
const providerId =
|
|
251
259
|
target.auth?.oauthProfile?.trim() || target.auth?.apiKeyRef?.trim() || runtime.oauthProviderId || runtime.id;
|
|
252
260
|
const authTarget: AuthTarget = {
|
|
@@ -268,7 +276,7 @@ export function resolveRuntimeAuthTarget(runtime: RuntimeDescriptor): AuthTarget
|
|
|
268
276
|
return target;
|
|
269
277
|
}
|
|
270
278
|
|
|
271
|
-
export function targetRequiresAuth(target: TargetDescriptor, runtime:
|
|
279
|
+
export function targetRequiresAuth(target: TargetDescriptor, runtime: RuntimeAuthMetadata): boolean {
|
|
272
280
|
if (runtime.auth === "oauth") return true;
|
|
273
281
|
if (runtime.auth !== "api-key") return false;
|
|
274
282
|
if (target.auth?.apiKeyEnvVar || target.auth?.apiKeyRef || target.auth?.oauthProfile) return true;
|
|
@@ -371,6 +379,34 @@ export class AuthStorage {
|
|
|
371
379
|
delete this.data[providerId];
|
|
372
380
|
}
|
|
373
381
|
|
|
382
|
+
renameProvider(fromProviderId: string, toProviderId: string, options: { keepSource?: boolean } = {}): void {
|
|
383
|
+
this.backend.withLock((current) => {
|
|
384
|
+
const read = readStorageData(current);
|
|
385
|
+
const source = read.data[fromProviderId];
|
|
386
|
+
// A rename with nothing to rename writes nothing, so a file this parser
|
|
387
|
+
// could not fully read is in no danger from it. Refusing on damage before
|
|
388
|
+
// establishing that turned a hand-edited credentials.yaml into a
|
|
389
|
+
// permanent `clio-coder upgrade` failure: the lmstudio-native migration
|
|
390
|
+
// calls this on every upgrade, and it failed even on homes that had never
|
|
391
|
+
// held an lmstudio-native credential.
|
|
392
|
+
if (!source) {
|
|
393
|
+
// Adopt the fresh view only when it is the whole file. A damaged read
|
|
394
|
+
// yields an empty view, and adopting that would report stored
|
|
395
|
+
// credentials as gone.
|
|
396
|
+
if (read.damage === null) this.data = read.data;
|
|
397
|
+
return { result: undefined };
|
|
398
|
+
}
|
|
399
|
+
// Past here the rename rewrites the whole file, so a partially readable
|
|
400
|
+
// one would be serialized back with the unread entries dropped.
|
|
401
|
+
if (read.damage !== null) throw new AuthStorageDamagedError(read.damage, this.backend.describe?.());
|
|
402
|
+
if (!read.data[toProviderId]) read.data[toProviderId] = source;
|
|
403
|
+
if (options.keepSource !== true) delete read.data[fromProviderId];
|
|
404
|
+
this.data = read.data;
|
|
405
|
+
this.damage = null;
|
|
406
|
+
return { result: undefined, next: serializeStorageData(read.data) };
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
|
|
374
410
|
listStored(): ReadonlyArray<{ providerId: string; type: AuthCredential["type"]; updatedAt: string }> {
|
|
375
411
|
return Object.entries(this.data)
|
|
376
412
|
.map(([providerId, credential]) => ({
|
|
@@ -486,41 +522,51 @@ export class AuthStorage {
|
|
|
486
522
|
|
|
487
523
|
private async refreshOAuthCredentialWithLock(
|
|
488
524
|
providerId: string,
|
|
525
|
+
signal: AbortSignal,
|
|
489
526
|
): Promise<{ apiKey: string; credential: OAuthCredential } | null> {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
527
|
+
let latestData: AuthStorageData | undefined;
|
|
528
|
+
const result = await this.backend.withLockAsync(
|
|
529
|
+
async (current) => {
|
|
530
|
+
const read = readStorageData(current);
|
|
531
|
+
if (read.damage !== null) {
|
|
532
|
+
this.damage = read.damage;
|
|
533
|
+
throw new AuthStorageDamagedError(read.damage, this.backend.describe?.());
|
|
534
|
+
}
|
|
535
|
+
const currentData = read.data;
|
|
536
|
+
latestData = currentData;
|
|
537
|
+
const stored = currentData[providerId];
|
|
538
|
+
if (stored?.type !== "oauth") {
|
|
539
|
+
return { result: null };
|
|
540
|
+
}
|
|
541
|
+
if (Date.now() < stored.expires) {
|
|
542
|
+
return { result: { apiKey: await getOAuthApiKey(providerId, stored), credential: stored } };
|
|
543
|
+
}
|
|
544
|
+
const refreshed = await refreshOAuthCredentials(providerId, stored, signal);
|
|
545
|
+
const next: OAuthCredential = {
|
|
546
|
+
type: "oauth",
|
|
547
|
+
...refreshed,
|
|
548
|
+
updatedAt: nowIso(),
|
|
549
|
+
};
|
|
550
|
+
const merged: AuthStorageData = { ...currentData, [providerId]: next };
|
|
551
|
+
latestData = merged;
|
|
552
|
+
return {
|
|
553
|
+
result: { apiKey: await getOAuthApiKey(providerId, next), credential: next },
|
|
554
|
+
next: serializeStorageData(merged),
|
|
555
|
+
};
|
|
556
|
+
},
|
|
557
|
+
{ signal },
|
|
558
|
+
);
|
|
559
|
+
// Adopt the view only after the backend has committed it. Pi 0.84's
|
|
560
|
+
// CredentialStore.modify pattern prevents a cancellation between refresh
|
|
561
|
+
// and persistence from making memory advertise a token disk never received.
|
|
562
|
+
if (latestData) this.data = latestData;
|
|
563
|
+
this.damage = null;
|
|
564
|
+
return result;
|
|
519
565
|
}
|
|
520
566
|
|
|
521
567
|
async resolveApiKey(
|
|
522
568
|
providerId: string,
|
|
523
|
-
opts?: { targetId?: string; explicitEnvVar?: string; includeFallback?: boolean },
|
|
569
|
+
opts?: { targetId?: string; explicitEnvVar?: string; includeFallback?: boolean; signal?: AbortSignal },
|
|
524
570
|
): Promise<AuthResolution> {
|
|
525
571
|
if (opts?.targetId) {
|
|
526
572
|
const override = this.runtimeOverrides.get(opts.targetId);
|
|
@@ -571,7 +617,10 @@ export class AuthStorage {
|
|
|
571
617
|
};
|
|
572
618
|
}
|
|
573
619
|
try {
|
|
574
|
-
const refreshed = await this.refreshOAuthCredentialWithLock(
|
|
620
|
+
const refreshed = await this.refreshOAuthCredentialWithLock(
|
|
621
|
+
providerId,
|
|
622
|
+
opts?.signal ?? new AbortController().signal,
|
|
623
|
+
);
|
|
575
624
|
if (refreshed) {
|
|
576
625
|
return {
|
|
577
626
|
providerId,
|
|
@@ -582,7 +631,8 @@ export class AuthStorage {
|
|
|
582
631
|
apiKey: refreshed.apiKey,
|
|
583
632
|
};
|
|
584
633
|
}
|
|
585
|
-
} catch {
|
|
634
|
+
} catch (error) {
|
|
635
|
+
if (opts?.signal?.aborted) throw opts.signal.reason ?? error;
|
|
586
636
|
// A refusal already recorded its reason on this.damage; a refresh that
|
|
587
637
|
// failed for any other reason is answered by re-reading the store below.
|
|
588
638
|
this.reload();
|
|
@@ -642,9 +692,18 @@ export class AuthStorage {
|
|
|
642
692
|
};
|
|
643
693
|
}
|
|
644
694
|
|
|
645
|
-
resolveForTarget(
|
|
646
|
-
|
|
695
|
+
resolveForTarget(
|
|
696
|
+
target: AuthTarget,
|
|
697
|
+
opts?: { includeFallback?: boolean; signal?: AbortSignal },
|
|
698
|
+
): Promise<AuthResolution> {
|
|
699
|
+
const args: {
|
|
700
|
+
targetId?: string;
|
|
701
|
+
explicitEnvVar?: string;
|
|
702
|
+
includeFallback?: boolean;
|
|
703
|
+
signal?: AbortSignal;
|
|
704
|
+
} = {};
|
|
647
705
|
if (opts?.includeFallback !== undefined) args.includeFallback = opts.includeFallback;
|
|
706
|
+
if (opts?.signal !== undefined) args.signal = opts.signal;
|
|
648
707
|
if (target.explicitEnvVar) args.explicitEnvVar = target.explicitEnvVar;
|
|
649
708
|
if (target.targetId) args.targetId = target.targetId;
|
|
650
709
|
return this.resolveApiKey(target.providerId, args);
|
|
@@ -4,10 +4,11 @@ import type { CapabilityFlags } from "./types/capability-flags.js";
|
|
|
4
4
|
* Layer capability sources onto a runtime's defaults, weakest first.
|
|
5
5
|
*
|
|
6
6
|
* A probe is what the server currently reports; a knowledge-base entry is what
|
|
7
|
-
* an operator wrote down about a specific model. The written entry wins
|
|
8
|
-
* a hand-authored `model-catalog.d` file
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* an operator wrote down about a specific model. The written entry wins for
|
|
8
|
+
* descriptive capabilities because a hand-authored `model-catalog.d` file is
|
|
9
|
+
* the per-model escape hatch for incorrect server metadata. Context and output
|
|
10
|
+
* limits are deployment facts, so a live probe overrides the model's maximums.
|
|
11
|
+
* A target-level override still outranks every source.
|
|
11
12
|
*/
|
|
12
13
|
export function mergeCapabilities(
|
|
13
14
|
base: CapabilityFlags,
|
|
@@ -18,10 +19,17 @@ export function mergeCapabilities(
|
|
|
18
19
|
const merged: Record<string, unknown> = { ...base };
|
|
19
20
|
applyLayer(merged, probe);
|
|
20
21
|
applyLayer(merged, kb);
|
|
22
|
+
applyDeploymentLimits(merged, probe);
|
|
21
23
|
applyLayer(merged, userOverride);
|
|
22
24
|
return merged as unknown as CapabilityFlags;
|
|
23
25
|
}
|
|
24
26
|
|
|
27
|
+
function applyDeploymentLimits(target: Record<string, unknown>, probe: Partial<CapabilityFlags> | null): void {
|
|
28
|
+
if (!probe) return;
|
|
29
|
+
if (probe.contextWindow !== undefined) target.contextWindow = probe.contextWindow;
|
|
30
|
+
if (probe.maxTokens !== undefined) target.maxTokens = probe.maxTokens;
|
|
31
|
+
}
|
|
32
|
+
|
|
25
33
|
/**
|
|
26
34
|
* Whether a model may drive an agent role (orchestrator, dispatched worker).
|
|
27
35
|
*
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { OAuthLoginCallbacks } from "../../engine/oauth.js";
|
|
2
|
+
import type { AuthOperationOptions } from "../../engine/types.js";
|
|
2
3
|
import type { AuthCredential, AuthResolution, AuthStatus } from "./auth/index.js";
|
|
3
4
|
import type { CapabilityFlags } from "./types/capability-flags.js";
|
|
4
5
|
import type { KnowledgeBase } from "./types/knowledge-base.js";
|
|
5
|
-
import type { ProbeModelStatus, RuntimeDescriptor } from "./types/runtime-descriptor.js";
|
|
6
|
+
import type { ProbeModelStatus, ProbeSurfaceMap, RuntimeDescriptor } from "./types/runtime-descriptor.js";
|
|
6
7
|
import type { TargetDescriptor } from "./types/target-descriptor.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -54,6 +55,8 @@ export interface TargetStatus {
|
|
|
54
55
|
probeModelId?: string | null;
|
|
55
56
|
/** Diagnostic notes from the last probe (e.g. wire-model mismatch warnings). */
|
|
56
57
|
probeNotes?: ReadonlyArray<string>;
|
|
58
|
+
/** Inference and management surfaces selected by the last successful probe. */
|
|
59
|
+
probeSurfaces?: Readonly<ProbeSurfaceMap>;
|
|
57
60
|
/** Ids returned by the last successful probeModels() call. */
|
|
58
61
|
discoveredModels: ReadonlyArray<string>;
|
|
59
62
|
/**
|
|
@@ -85,8 +88,12 @@ export interface ProvidersContract {
|
|
|
85
88
|
/** Live liveness + probeModels sweep. */
|
|
86
89
|
probeAllLive(): Promise<void>;
|
|
87
90
|
|
|
88
|
-
/**
|
|
89
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Probe a single target live. Null when the id is not in settings.targets.
|
|
93
|
+
* `reasoning: false` skips an inference-based reasoning-capability probe while
|
|
94
|
+
* retaining the target's liveness and model-catalog checks.
|
|
95
|
+
*/
|
|
96
|
+
probeTarget(id: string, options?: { reasoning?: boolean }): Promise<TargetStatus | null>;
|
|
90
97
|
|
|
91
98
|
/** Clear in-memory live connection state for a configured target. */
|
|
92
99
|
disconnectTarget(id: string): TargetStatus | null;
|
|
@@ -114,7 +121,11 @@ export interface ProvidersContract {
|
|
|
114
121
|
*/
|
|
115
122
|
auth: {
|
|
116
123
|
statusForTarget(target: TargetDescriptor, runtime: RuntimeDescriptor): AuthStatus;
|
|
117
|
-
resolveForTarget(
|
|
124
|
+
resolveForTarget(
|
|
125
|
+
target: TargetDescriptor,
|
|
126
|
+
runtime: RuntimeDescriptor,
|
|
127
|
+
options?: AuthOperationOptions,
|
|
128
|
+
): Promise<AuthResolution>;
|
|
118
129
|
getStored(providerId: string): AuthCredential | null;
|
|
119
130
|
listStored(): ReadonlyArray<{ providerId: string; type: AuthCredential["type"]; updatedAt: string }>;
|
|
120
131
|
setApiKey(providerId: string, key: string): void;
|
|
@@ -157,6 +157,7 @@ export interface ProbeMerge {
|
|
|
157
157
|
probeModelCapabilities: NonNullable<TargetStatus["probeModelCapabilities"]> | null;
|
|
158
158
|
probeModelId: NonNullable<TargetStatus["probeModelId"]> | null;
|
|
159
159
|
probeNotes?: ReadonlyArray<string>;
|
|
160
|
+
probeSurfaces?: NonNullable<TargetStatus["probeSurfaces"]>;
|
|
160
161
|
}
|
|
161
162
|
|
|
162
163
|
/**
|
|
@@ -185,6 +186,7 @@ export function mergeProbeResult(
|
|
|
185
186
|
: ((preservePrevious ? previous.probeModelId : null) ?? null);
|
|
186
187
|
const probeNotes =
|
|
187
188
|
probe?.notes && probe.notes.length > 0 ? probe.notes : preservePrevious ? previous.probeNotes : undefined;
|
|
189
|
+
const probeSurfaces = probe?.surfaces ?? (preservePrevious ? previous.probeSurfaces : undefined);
|
|
188
190
|
const discoveredModels = uniqueModels(
|
|
189
191
|
probe?.models ?? (preservePrevious ? previous.discoveredModels : undefined) ?? desc.knownModels ?? [],
|
|
190
192
|
);
|
|
@@ -198,6 +200,7 @@ export function mergeProbeResult(
|
|
|
198
200
|
probeModelId,
|
|
199
201
|
};
|
|
200
202
|
if (probeNotes && probeNotes.length > 0) merge.probeNotes = probeNotes;
|
|
203
|
+
if (probeSurfaces && Object.keys(probeSurfaces).length > 0) merge.probeSurfaces = probeSurfaces;
|
|
201
204
|
return merge;
|
|
202
205
|
}
|
|
203
206
|
|
|
@@ -282,6 +285,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
282
285
|
discoveredModelStates: previous?.discoveredModelStates ?? null,
|
|
283
286
|
};
|
|
284
287
|
if (previous?.probeNotes && previous.probeNotes.length > 0) out.probeNotes = previous.probeNotes;
|
|
288
|
+
if (previous?.probeSurfaces) out.probeSurfaces = previous.probeSurfaces;
|
|
285
289
|
return out;
|
|
286
290
|
}
|
|
287
291
|
const availability = availabilityFor(desc, target, authStatusFor);
|
|
@@ -315,10 +319,15 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
315
319
|
discoveredModelStates: merge.discoveredModelStates,
|
|
316
320
|
};
|
|
317
321
|
if (merge.probeNotes && merge.probeNotes.length > 0) out.probeNotes = merge.probeNotes;
|
|
322
|
+
if (merge.probeSurfaces) out.probeSurfaces = merge.probeSurfaces;
|
|
318
323
|
return out;
|
|
319
324
|
}
|
|
320
325
|
|
|
321
|
-
async function probeTargetInternal(
|
|
326
|
+
async function probeTargetInternal(
|
|
327
|
+
target: TargetDescriptor,
|
|
328
|
+
live: boolean,
|
|
329
|
+
options?: { reasoning?: boolean },
|
|
330
|
+
): Promise<TargetStatus> {
|
|
322
331
|
const previous = statuses.get(target.id);
|
|
323
332
|
const desc = registry.get(target.runtime);
|
|
324
333
|
if (!desc) {
|
|
@@ -347,7 +356,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
347
356
|
// model discovery is best-effort; keep probe as-is.
|
|
348
357
|
}
|
|
349
358
|
}
|
|
350
|
-
if (probeResult.ok && typeof desc.probeReasoning === "function") {
|
|
359
|
+
if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
|
|
351
360
|
const settings = readConfig();
|
|
352
361
|
const orchestratorTarget = settings.orchestrator.target === target.id ? settings.orchestrator.model : null;
|
|
353
362
|
const candidateModelId = orchestratorTarget ?? target.defaultModel ?? null;
|
|
@@ -460,11 +469,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
460
469
|
},
|
|
461
470
|
probeAll,
|
|
462
471
|
probeAllLive,
|
|
463
|
-
async probeTarget(id) {
|
|
472
|
+
async probeTarget(id, options) {
|
|
464
473
|
const settings = readConfig();
|
|
465
474
|
const target = settings.targets.find((ep) => ep.id === id);
|
|
466
475
|
if (!target) return null;
|
|
467
|
-
return probeTargetInternal(target, true);
|
|
476
|
+
return probeTargetInternal(target, true, options);
|
|
468
477
|
},
|
|
469
478
|
disconnectTarget(id) {
|
|
470
479
|
const settings = readConfig();
|
|
@@ -492,11 +501,14 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
492
501
|
}
|
|
493
502
|
return authStore.statusForTarget(resolveAuthTarget(target, runtime), { includeFallback: false });
|
|
494
503
|
},
|
|
495
|
-
resolveForTarget(target, runtime) {
|
|
504
|
+
resolveForTarget(target, runtime, options) {
|
|
496
505
|
if (!targetRequiresAuth(target, runtime)) {
|
|
497
506
|
return Promise.resolve(authNotRequiredStatus(resolveAuthTarget(target, runtime).providerId));
|
|
498
507
|
}
|
|
499
|
-
return authStore.resolveForTarget(resolveAuthTarget(target, runtime), {
|
|
508
|
+
return authStore.resolveForTarget(resolveAuthTarget(target, runtime), {
|
|
509
|
+
includeFallback: false,
|
|
510
|
+
...(options?.signal ? { signal: options.signal } : {}),
|
|
511
|
+
});
|
|
500
512
|
},
|
|
501
513
|
getStored(providerId) {
|
|
502
514
|
return authStore.get(providerId) ?? null;
|
|
@@ -325,7 +325,12 @@ export function effectiveThinkingLevel(
|
|
|
325
325
|
const fallback = available[0] ?? "off";
|
|
326
326
|
if (!configured) return fallback;
|
|
327
327
|
if (available.includes(configured)) return configured;
|
|
328
|
-
|
|
328
|
+
// Catalog effort maps intentionally stop at xhigh; `max` must clamp to that
|
|
329
|
+
// supported ceiling instead of falling through to the generic low fallback.
|
|
330
|
+
if (configured === "max" && available.includes("xhigh")) return "xhigh";
|
|
331
|
+
if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
|
|
332
|
+
return "high";
|
|
333
|
+
}
|
|
329
334
|
if (configured === "medium" && available.includes("medium")) return "medium";
|
|
330
335
|
if (configured !== "off" && available.includes("low")) return "low";
|
|
331
336
|
if (configured === "off" && !available.includes("off") && available.includes("low")) return "low";
|
|
@@ -359,7 +364,9 @@ export function thinkingLevelFromChoiceLabel(value: string): ThinkingLevel | nul
|
|
|
359
364
|
return null;
|
|
360
365
|
}
|
|
361
366
|
|
|
362
|
-
function acceptsBudgetTokensField(
|
|
367
|
+
function acceptsBudgetTokensField(
|
|
368
|
+
input: Pick<ResolveRuntimeCapabilitiesInput, "runtimeId" | "apiFamily" | "capabilities">,
|
|
369
|
+
): boolean {
|
|
363
370
|
const format = input.capabilities.thinkingFormat;
|
|
364
371
|
if (format === "anthropic-extended") {
|
|
365
372
|
return (
|
|
@@ -369,12 +376,13 @@ function acceptsBudgetTokensField(input: Pick<ResolveRuntimeCapabilitiesInput, "
|
|
|
369
376
|
);
|
|
370
377
|
}
|
|
371
378
|
if (input.apiFamily !== "openai-completions") return false;
|
|
379
|
+
if (input.runtimeId === "vllm") return true;
|
|
372
380
|
return format === "openrouter" || format === "zai";
|
|
373
381
|
}
|
|
374
382
|
|
|
375
383
|
function resolveBudgetEnforcement(
|
|
376
384
|
mechanism: ThinkingMechanism,
|
|
377
|
-
input: Pick<ResolveRuntimeCapabilitiesInput, "apiFamily" | "capabilities">,
|
|
385
|
+
input: Pick<ResolveRuntimeCapabilitiesInput, "runtimeId" | "apiFamily" | "capabilities">,
|
|
378
386
|
): ThinkingBudgetEnforcement {
|
|
379
387
|
if (mechanism !== "budget-tokens") return "none";
|
|
380
388
|
return acceptsBudgetTokensField(input) ? "enforced" : "informational";
|
|
@@ -483,7 +491,7 @@ function resolveThinkingCapability(
|
|
|
483
491
|
* while llama.cpp did the reverse. Sending the wrong spelling reads as "no
|
|
484
492
|
* preference" to the server, so the model keeps reasoning at every dial.
|
|
485
493
|
*/
|
|
486
|
-
const REASONING_EFFORT_ON_OFF_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio
|
|
494
|
+
const REASONING_EFFORT_ON_OFF_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio"]);
|
|
487
495
|
|
|
488
496
|
/** `none` is LM Studio's documented off value; on-off models have no finer dial than `low`. */
|
|
489
497
|
function onOffReasoningEffort(thinkingActive: boolean): string {
|
|
@@ -499,6 +507,9 @@ function resolveRequestCapability(
|
|
|
499
507
|
if (thinking.mechanism === "effort-levels" && thinking.effort) {
|
|
500
508
|
request.reasoningEffort = thinking.effort;
|
|
501
509
|
}
|
|
510
|
+
if (thinking.mechanism === "effort-levels" && !thinking.thinkingActive) {
|
|
511
|
+
request.chatTemplateKwargs = { ...(request.chatTemplateKwargs ?? {}), enable_thinking: false };
|
|
512
|
+
}
|
|
502
513
|
if (thinking.mechanism === "budget-tokens" && thinking.budgetTokens !== undefined) {
|
|
503
514
|
request.budgetTokens = thinking.budgetTokens;
|
|
504
515
|
}
|