@iowarp/clio-coder 0.4.2 → 0.4.4
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 +98 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
- package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
- package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
- package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
- package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
- package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
- package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
- package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
- package/dist/chunk-2DSOYNFC.js +108 -0
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
- package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
- package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
- package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
- package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
- package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
- package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
- package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
- package/dist/chunk-57XXR6DR.js +3763 -0
- package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
- package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
- package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
- package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
- package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
- package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
- package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
- package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
- package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
- package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
- package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
- package/dist/chunk-DQOVN6KV.js +386 -0
- package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
- package/dist/chunk-DXKJURES.js +671 -0
- package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
- package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
- package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
- package/dist/chunk-EXLD33WO.js +381 -0
- package/dist/chunk-FEAXX7B6.js +101 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GX5WYQO4.js +59 -0
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/chunk-I2DWJ4GM.js +390 -0
- package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IRXAATOX.js +539 -0
- package/dist/chunk-IXIY2H4R.js +44 -0
- package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
- package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
- package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
- package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
- package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
- package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
- package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
- package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
- package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
- package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
- package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
- package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
- package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
- package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/chunk-ODGTEFFI.js +50 -0
- package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
- package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
- package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
- package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
- package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
- package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
- package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
- package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
- package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
- package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
- package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
- package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
- package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
- package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
- package/dist/chunk-V76WTFTW.js +318 -0
- package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
- package/dist/chunk-XXYSBZIQ.js +283 -0
- package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
- package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
- package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
- package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/cli/index.js +42 -40
- package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
- package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
- package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
- package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
- package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
- package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
- package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
- package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
- package/dist/detail-A7JAVSIG.js +98 -0
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
- package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
- package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
- package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
- package/dist/evidence-4F5USFKH.js +208 -0
- package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
- package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
- package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
- package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
- package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
- package/dist/inventory-C26CFDRR.js +101 -0
- package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
- package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
- package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
- package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
- package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
- package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
- package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
- package/dist/reset-TNWTB5LU.js +343 -0
- package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
- package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
- package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
- package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
- package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
- package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
- package/dist/tasks-IPAGMEIX.js +36 -0
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
- package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-HALS6BLF.js +407 -0
- package/dist/upgrade-MS72RJEP.js +306 -0
- package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
- package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
- package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
- package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
- package/dist/worker/entry.js +72 -68
- package/docs/README.md +3 -2
- package/docs/architecture/acp.md +17 -0
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +2 -2
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/dispatch-typed-intent.md +1 -1
- package/docs/architecture/evidence-and-memory.md +1 -1
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +19 -2
- package/docs/architecture/prompt-envelope-and-tools.md +17 -5
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +25 -22
- package/docs/architecture/tui-design.md +1 -1
- package/docs/guide/built-in-agents.md +25 -11
- package/docs/guide/commands-and-modes.md +18 -3
- package/docs/guide/configuration-and-targets.md +100 -10
- package/docs/guide/configuration-reference.md +17 -7
- package/docs/guide/environment-variables.md +4 -2
- package/docs/guide/installation-and-lifecycle.md +37 -4
- package/docs/guide/proactive-memory.md +66 -55
- package/docs/guide/skills-marketplace.md +18 -0
- package/docs/guide/tool-usage.md +78 -3
- package/docs/history/config-knobs-audit.md +2 -2
- package/docs/process/development-pipeline.md +40 -2
- package/docs/process/eval-runner.md +67 -3
- package/docs/process/git-commit-provenance.md +15 -0
- package/docs/process/release-cut-checklist.md +207 -0
- package/docs/process/scientific-validation.md +18 -17
- package/evals/behavioral-machinery-support.ts +1 -0
- package/evals/behavioral-machinery.yaml +1 -1
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +2 -2
- package/skills/README.md +7 -5
- package/skills/coding/ast-grep/SKILL.md +101 -30
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +47 -2
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +87 -28
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +80 -53
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +43 -2
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +45 -15
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +77 -63
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +87 -64
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +61 -12
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +130 -14
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -6
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +57 -2
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +53 -2
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +58 -50
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +76 -18
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +20 -1
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -1
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +26 -1
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +63 -28
- package/skills/workflow/cut-it/SKILL.md +64 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +112 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +85 -10
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +76 -17
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +0 -8
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1084 -529
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/doctor-state-size.ts +1 -12
- package/src/cli/doctor-validation-contract.ts +28 -0
- package/src/cli/doctor.ts +5 -0
- package/src/cli/evidence-detail.ts +1 -75
- package/src/cli/evidence-inventory.ts +1 -167
- package/src/cli/index.ts +3 -0
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +7 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/tasks.ts +84 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +210 -150
- package/src/cli/usage.ts +92 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/verifiers.ts +147 -1
- package/src/cli/wiki-generate.ts +1 -0
- package/src/core/commit-attribution.ts +41 -1
- package/src/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/git-commit-attribution.ts +46 -3
- package/src/core/run-overrides.ts +0 -5
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +92 -2
- package/src/core/tool-names.ts +5 -2
- package/src/domains/agents/builtins/architect.md +1 -1
- package/src/domains/agents/builtins/coder.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/provenance.md +7 -7
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +4 -3
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +1 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/context/extension.ts +31 -7
- package/src/domains/context/refresh.ts +3 -0
- package/src/domains/context/wiki/frontmatter.ts +5 -2
- package/src/domains/context/wiki/generate.ts +6 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/wiki/prompts.ts +43 -0
- package/src/domains/dispatch/active-route-planner.ts +4 -0
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/code-step.ts +11 -4
- package/src/domains/dispatch/contract.ts +42 -8
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +184 -56
- package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/host-verification.ts +114 -13
- package/src/domains/dispatch/intent.ts +28 -18
- package/src/domains/dispatch/orphan-recovery.ts +2 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/reservation-store.ts +5 -3
- package/src/domains/dispatch/state.ts +15 -2
- package/src/domains/dispatch/types.ts +20 -2
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +17 -11
- package/src/domains/eval/runners/context-index.ts +2 -7
- package/src/domains/eval/runners/context-init.ts +3 -6
- package/src/domains/eval/runners/external-command.ts +29 -11
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/build.ts +102 -15
- package/src/domains/evidence/detail.ts +69 -0
- package/src/domains/evidence/eval.ts +13 -1
- package/src/domains/evidence/finish-contract-map.ts +5 -1
- package/src/domains/evidence/inventory.ts +167 -0
- package/src/domains/evidence/store.ts +16 -0
- package/src/domains/evidence/types.ts +12 -0
- package/src/domains/extensions/resources.ts +7 -0
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/index.ts +4 -0
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +0 -1
- package/src/domains/middleware/marketplace-offer.ts +22 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/runtime.ts +7 -3
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/mux/detect.ts +3 -6
- package/src/domains/observability/accountability.ts +15 -1
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +52 -7
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/evidence-index.ts +10 -0
- package/src/domains/observability/extension.ts +15 -6
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +394 -45
- package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
- package/src/domains/prompts/fragments/operating/contract.md +2 -0
- package/src/domains/prompts/fragments/wiki/page.md +8 -0
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +3 -4
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +7 -0
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/action-classifier.ts +7 -0
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/default-path-policy.ts +2 -0
- package/src/domains/safety/finish-contract-registration.ts +29 -14
- package/src/domains/safety/finish-contract.ts +252 -40
- package/src/domains/safety/index.ts +21 -1
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +60 -17
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/rigor.ts +53 -39
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/safety/validation-contract.ts +388 -0
- package/src/domains/session/archive-readers.ts +10 -1
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/decision-board.ts +101 -2
- package/src/domains/session/entries.ts +50 -7
- package/src/domains/session/extension.ts +4 -4
- package/src/domains/session/handoff.ts +2 -1
- package/src/domains/session/manager.ts +2 -3
- package/src/domains/session/task-board.ts +14 -1
- package/src/domains/session/tree/fork.ts +1 -2
- package/src/domains/session/tree/navigator.ts +1 -1
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/user-tasks/acceptance.ts +56 -0
- package/src/domains/user-tasks/active-acceptance.ts +40 -0
- package/src/domains/user-tasks/store.ts +34 -3
- package/src/engine/acp/adapter.ts +24 -6
- package/src/engine/acp/server.ts +21 -4
- package/src/engine/acp/transport.ts +53 -8
- package/src/engine/acp/types.ts +4 -0
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/ollama-native.ts +15 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/claude/subprocess-runtime.ts +107 -60
- package/src/engine/external-subprocess.ts +122 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +416 -218
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/chat-loop-messages.ts +13 -4
- package/src/interactive/chat-loop.ts +65 -2
- package/src/interactive/chat-renderer.ts +1 -0
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +46 -717
- package/src/interactive/fleet-run-preview.ts +2 -1
- package/src/interactive/interactive-application.ts +3 -2
- package/src/interactive/interactive-presentation.ts +55 -12
- package/src/interactive/interactive-slash-runtime.ts +4 -2
- package/src/interactive/oracle.ts +5 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -2
- package/src/interactive/overlays/message-picker.ts +2 -2
- package/src/interactive/overlays/settings.ts +2 -2
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/renderers/branch-summary.ts +1 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-autocomplete.ts +4 -6
- package/src/interactive/slash-commands.ts +49 -45
- package/src/interactive/slash-spec.ts +28 -0
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +9 -5
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/view/artifacts.ts +2 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +13 -4
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +31 -0
- package/src/tools/compete-worktrees.ts +7 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/core-bootstrap.ts +16 -0
- package/src/tools/decide.ts +136 -0
- package/src/tools/dispatch-admission.ts +21 -0
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +6 -2
- package/src/tools/dispatch-runner.ts +27 -1
- package/src/tools/dispatch-types.ts +6 -0
- package/src/tools/evidence.ts +96 -0
- package/src/tools/limitation.ts +76 -0
- package/src/tools/policy.ts +9 -0
- package/src/tools/presentation.ts +3 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/result-shaping.ts +17 -5
- package/src/tools/task-worktree.ts +13 -3
- package/src/tools/tasks.ts +10 -1
- package/src/tools/verify/authoring.ts +170 -83
- package/src/tools/verify/catalog.ts +122 -5
- package/src/tools/verify/index.ts +2 -1
- package/src/tools/verify/numeric.ts +298 -0
- package/src/tools/verify/perf.ts +143 -0
- package/src/tools/verify/scripts.ts +229 -2
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/chunk-2Z2IKEXI.js +0 -1554
- package/dist/chunk-RVG5JXAL.js +0 -41
- package/dist/chunk-T56WDKA5.js +0 -183
- package/dist/chunk-VN3SHNBN.js +0 -313
- package/dist/chunk-VPKWYKEY.js +0 -169
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -156,6 +156,7 @@ function sameProbeIdentity(previous: TargetDescriptor, next: TargetDescriptor):
|
|
|
156
156
|
|
|
157
157
|
export interface ProbeMerge {
|
|
158
158
|
discoveredModels: string[];
|
|
159
|
+
discoveredModelLabels: Readonly<Record<string, string>>;
|
|
159
160
|
discoveredModelsSource: "probe" | "cache" | "runtime" | "none";
|
|
160
161
|
discoveredModelStates: NonNullable<TargetStatus["discoveredModelStates"]> | null;
|
|
161
162
|
probeCapabilities: NonNullable<TargetStatus["probeCapabilities"]> | null;
|
|
@@ -179,6 +180,7 @@ function mergeProbeResult(
|
|
|
179
180
|
probe: ProbeResult | null,
|
|
180
181
|
previous: TargetStatus | undefined,
|
|
181
182
|
cachedModels: ReadonlyArray<string> = [],
|
|
183
|
+
cachedModelLabels: Readonly<Record<string, string>> = {},
|
|
182
184
|
): ProbeMerge {
|
|
183
185
|
const probeSucceeded = probe?.ok ?? false;
|
|
184
186
|
const preservePrevious = !probeSucceeded && previous !== undefined && sameProbeIdentity(previous.target, target);
|
|
@@ -201,8 +203,14 @@ function mergeProbeResult(
|
|
|
201
203
|
[],
|
|
202
204
|
);
|
|
203
205
|
const discoveredModelStates = probe?.modelStates ?? (preservePrevious ? previous.discoveredModelStates : null) ?? null;
|
|
206
|
+
const discoveredModelLabels =
|
|
207
|
+
probe?.modelLabels ??
|
|
208
|
+
(preservePrevious ? previous.discoveredModelLabels : undefined) ??
|
|
209
|
+
(cachedModels.length > 0 ? cachedModelLabels : undefined) ??
|
|
210
|
+
{};
|
|
204
211
|
const merge: ProbeMerge = {
|
|
205
212
|
discoveredModels,
|
|
213
|
+
discoveredModelLabels,
|
|
206
214
|
discoveredModelsSource: discoveredModelsSource(probe, preservePrevious, previous, cachedModels, desc),
|
|
207
215
|
discoveredModelStates,
|
|
208
216
|
probeCapabilities,
|
|
@@ -225,14 +233,16 @@ function mergeProbeResult(
|
|
|
225
233
|
* there is no live evidence either way.
|
|
226
234
|
*/
|
|
227
235
|
function unservedDefaultModelReason(
|
|
228
|
-
desc: Pick<RuntimeDescriptor, "id">,
|
|
236
|
+
desc: Pick<RuntimeDescriptor, "id" | "externalAgentLoop">,
|
|
229
237
|
target: Pick<TargetDescriptor, "defaultModel">,
|
|
230
238
|
merge: Pick<ProbeMerge, "discoveredModels" | "discoveredModelsSource" | "discoveredModelStates">,
|
|
231
239
|
): string | null {
|
|
232
240
|
const model = target.defaultModel;
|
|
233
241
|
if (!model) return null;
|
|
234
242
|
if (merge.discoveredModelsSource !== "probe" || merge.discoveredModels.length === 0) return null;
|
|
235
|
-
if (listKnownModelsForRuntime(desc.id).length > 0)
|
|
243
|
+
if (listKnownModelsForRuntime(desc.id).length > 0 && desc.externalAgentLoop?.modelCatalog !== "live-authoritative") {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
236
246
|
if (merge.discoveredModels.includes(model)) return null;
|
|
237
247
|
// LM Studio lists a loaded model under its instance id and keeps the model
|
|
238
248
|
// key in the state map; the request path resolves either.
|
|
@@ -258,14 +268,22 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
258
268
|
return readSettings();
|
|
259
269
|
}
|
|
260
270
|
|
|
261
|
-
async function buildProbeContextForTarget(
|
|
271
|
+
async function buildProbeContextForTarget(
|
|
272
|
+
target: TargetDescriptor,
|
|
273
|
+
desc: RuntimeDescriptor,
|
|
274
|
+
signal?: AbortSignal,
|
|
275
|
+
): Promise<ProbeContext> {
|
|
262
276
|
const probeCtx: ProbeContext = {
|
|
263
277
|
credentialsPresent: credentialsPresent(),
|
|
264
278
|
httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS,
|
|
279
|
+
...(signal ? { signal } : {}),
|
|
265
280
|
};
|
|
266
281
|
if (!targetRequiresAuth(target, desc)) return probeCtx;
|
|
267
282
|
try {
|
|
268
|
-
const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
|
|
283
|
+
const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
|
|
284
|
+
includeFallback: false,
|
|
285
|
+
...(signal ? { signal } : {}),
|
|
286
|
+
});
|
|
269
287
|
if (resolution.apiKey) probeCtx.authToken = resolution.apiKey;
|
|
270
288
|
} catch {
|
|
271
289
|
// Authenticated probes should still return a runtime-specific missing-auth error.
|
|
@@ -325,8 +343,9 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
325
343
|
return out;
|
|
326
344
|
}
|
|
327
345
|
const availability = availabilityFor(desc, target, authStatusFor);
|
|
328
|
-
const
|
|
329
|
-
const
|
|
346
|
+
const cachedSnapshot = readTargetModelSnapshot(target);
|
|
347
|
+
const cachedModels = cachedSnapshot?.models ?? [];
|
|
348
|
+
const merge = mergeProbeResult(desc, target, probe, previous, cachedModels, cachedSnapshot?.modelLabels ?? {});
|
|
330
349
|
const { capabilities, contextWindowProvenance } = capabilitiesFor(desc, target, merge, kb);
|
|
331
350
|
const healthy = probe !== null ? probe.ok : null;
|
|
332
351
|
const unservedDefault = probe?.ok ? unservedDefaultModelReason(desc, target, merge) : null;
|
|
@@ -353,6 +372,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
353
372
|
probeModelCapabilities: merge.probeModelCapabilities,
|
|
354
373
|
probeModelId: merge.probeModelId,
|
|
355
374
|
discoveredModels: merge.discoveredModels,
|
|
375
|
+
discoveredModelLabels: merge.discoveredModelLabels,
|
|
356
376
|
discoveredModelsSource: merge.discoveredModelsSource,
|
|
357
377
|
discoveredModelStates: merge.discoveredModelStates,
|
|
358
378
|
};
|
|
@@ -364,8 +384,9 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
364
384
|
async function probeTargetInternal(
|
|
365
385
|
target: TargetDescriptor,
|
|
366
386
|
live: boolean,
|
|
367
|
-
options?: { reasoning?: boolean },
|
|
387
|
+
options?: { reasoning?: boolean; signal?: AbortSignal },
|
|
368
388
|
): Promise<TargetStatus> {
|
|
389
|
+
options?.signal?.throwIfAborted();
|
|
369
390
|
const previous = statuses.get(target.id);
|
|
370
391
|
const desc = registry.get(target.runtime);
|
|
371
392
|
if (!desc) {
|
|
@@ -379,13 +400,15 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
379
400
|
statuses.set(target.id, status);
|
|
380
401
|
return status;
|
|
381
402
|
}
|
|
382
|
-
const probeCtx = await buildProbeContextForTarget(target, desc);
|
|
403
|
+
const probeCtx = await buildProbeContextForTarget(target, desc, options?.signal);
|
|
404
|
+
options?.signal?.throwIfAborted();
|
|
383
405
|
let probeResult: ProbeResult;
|
|
384
406
|
try {
|
|
385
407
|
probeResult = await desc.probe(target, probeCtx);
|
|
386
408
|
} catch (err) {
|
|
387
409
|
probeResult = { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
388
410
|
}
|
|
411
|
+
options?.signal?.throwIfAborted();
|
|
389
412
|
if (probeResult.ok && typeof desc.probeModels === "function" && !probeResult.models) {
|
|
390
413
|
try {
|
|
391
414
|
const ids = await desc.probeModels(target, probeCtx);
|
|
@@ -394,6 +417,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
394
417
|
// model discovery is best-effort; keep probe as-is.
|
|
395
418
|
}
|
|
396
419
|
}
|
|
420
|
+
options?.signal?.throwIfAborted();
|
|
397
421
|
if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
|
|
398
422
|
const settings = readConfig();
|
|
399
423
|
const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
|
|
@@ -401,6 +425,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
401
425
|
if (candidateModelId) {
|
|
402
426
|
try {
|
|
403
427
|
const result = await desc.probeReasoning(target, candidateModelId, probeCtx);
|
|
428
|
+
options?.signal?.throwIfAborted();
|
|
404
429
|
reasoningCache.set(reasoningCacheKey(target.id, candidateModelId), result.reasoning);
|
|
405
430
|
const capabilityModelId = probeResult.capabilityModelId ?? null;
|
|
406
431
|
if (capabilityModelId === null || capabilityModelId === candidateModelId) {
|
|
@@ -422,10 +447,16 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
422
447
|
}
|
|
423
448
|
}
|
|
424
449
|
}
|
|
450
|
+
// A cancelled role preparation must not publish failed/stale target state.
|
|
451
|
+
options?.signal?.throwIfAborted();
|
|
425
452
|
const status = buildStatus(target, desc, probeResult, previous);
|
|
426
453
|
statuses.set(target.id, status);
|
|
427
454
|
if (probeResult.ok && probeResult.models !== undefined) {
|
|
428
|
-
recordTargetModelSnapshot(
|
|
455
|
+
recordTargetModelSnapshot(
|
|
456
|
+
target,
|
|
457
|
+
probeResult.models,
|
|
458
|
+
probeResult.modelLabels ? { modelLabels: probeResult.modelLabels } : {},
|
|
459
|
+
);
|
|
429
460
|
}
|
|
430
461
|
// Durable so the next process resolves this endpoint's real slot count
|
|
431
462
|
// instead of the conservative default. Fire and forget: the probe's answer
|
|
@@ -14,6 +14,7 @@ export interface ModelCapabilityPatchTarget {
|
|
|
14
14
|
contextWindow?: number;
|
|
15
15
|
maxTokens?: number;
|
|
16
16
|
reasoning?: boolean;
|
|
17
|
+
clioCoder?: Record<string, unknown>;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
/**
|
|
@@ -30,6 +31,14 @@ export function applyModelCapabilityPatch<T extends ModelCapabilityPatchTarget>(
|
|
|
30
31
|
if (typeof caps.contextWindow === "number") model.contextWindow = caps.contextWindow;
|
|
31
32
|
if (typeof caps.maxTokens === "number") model.maxTokens = caps.maxTokens;
|
|
32
33
|
if (typeof caps.reasoning === "boolean") model.reasoning = caps.reasoning;
|
|
34
|
+
// Refresh the probe-only control hint together with the capability snapshot.
|
|
35
|
+
// Missing metadata after a later probe must not retain an earlier route claim.
|
|
36
|
+
if (model.clioCoder || caps.thinkingControlRuntime !== undefined) {
|
|
37
|
+
const metadata = { ...model.clioCoder };
|
|
38
|
+
delete metadata.thinkingControlRuntime;
|
|
39
|
+
if (caps.thinkingControlRuntime !== undefined) metadata.thinkingControlRuntime = caps.thinkingControlRuntime;
|
|
40
|
+
model.clioCoder = metadata;
|
|
41
|
+
}
|
|
33
42
|
return model;
|
|
34
43
|
}
|
|
35
44
|
|
|
@@ -6,6 +6,7 @@ export type ProviderModelSource = "configured" | "live" | "catalog" | "default";
|
|
|
6
6
|
|
|
7
7
|
export interface ProviderModelCandidate {
|
|
8
8
|
id: string;
|
|
9
|
+
label?: string;
|
|
9
10
|
source: ProviderModelSource;
|
|
10
11
|
loadState?: string;
|
|
11
12
|
loadStateDetail?: string;
|
|
@@ -75,10 +76,7 @@ export function modelResidencyForStatus(status: DiscoveryStatus | null | undefin
|
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
export function hasLiveModelCatalog(status: TargetStatus): boolean {
|
|
78
|
-
|
|
79
|
-
// Unit-test and plugin mocks from before `discoveredModelsSource` still use
|
|
80
|
-
// `discoveredModels` to mean "this came from discovery".
|
|
81
|
-
return status.discoveredModelsSource === undefined && status.discoveredModels.length > 0;
|
|
79
|
+
return status.discoveredModelsSource === "probe" || status.discoveredModelsSource === "cache";
|
|
82
80
|
}
|
|
83
81
|
|
|
84
82
|
/**
|
|
@@ -100,6 +98,7 @@ export function modelCandidatesForStatus(status: TargetStatus): ProviderModelCan
|
|
|
100
98
|
const state = status.discoveredModelStates?.[trimmed];
|
|
101
99
|
out.push({
|
|
102
100
|
id: trimmed,
|
|
101
|
+
...(status.discoveredModelLabels?.[trimmed] ? { label: status.discoveredModelLabels[trimmed] } : {}),
|
|
103
102
|
source,
|
|
104
103
|
...(state ? { loadState: state.state } : {}),
|
|
105
104
|
...(state?.detail ? { loadStateDetail: state.detail } : {}),
|
|
@@ -131,6 +131,7 @@ interface ClioRuntimeMetadata {
|
|
|
131
131
|
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
132
132
|
gateway?: boolean;
|
|
133
133
|
family?: string;
|
|
134
|
+
thinkingControlRuntime?: CapabilityFlags["thinkingControlRuntime"];
|
|
134
135
|
quirks?: LocalModelQuirks;
|
|
135
136
|
};
|
|
136
137
|
/** Released in-memory metadata name accepted at plugin/runtime read boundaries. */
|
|
@@ -140,6 +141,7 @@ interface ClioRuntimeMetadata {
|
|
|
140
141
|
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
141
142
|
gateway?: boolean;
|
|
142
143
|
family?: string;
|
|
144
|
+
thinkingControlRuntime?: CapabilityFlags["thinkingControlRuntime"];
|
|
143
145
|
quirks?: LocalModelQuirks;
|
|
144
146
|
};
|
|
145
147
|
compat?: {
|
|
@@ -381,9 +383,10 @@ export function effectiveThinkingLevel(
|
|
|
381
383
|
const fallback = available[0] ?? "off";
|
|
382
384
|
if (!configured) return fallback;
|
|
383
385
|
if (available.includes(configured)) return configured;
|
|
384
|
-
//
|
|
385
|
-
// supported ceiling
|
|
386
|
-
if (configured === "max" && available.includes("
|
|
386
|
+
// A family with xhigh but no high keeps the released high alias at its
|
|
387
|
+
// supported ceiling; neither high nor max may fall through to low.
|
|
388
|
+
if ((configured === "max" || (configured === "high" && !available.includes("high"))) && available.includes("xhigh"))
|
|
389
|
+
return "xhigh";
|
|
387
390
|
if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
|
|
388
391
|
return "high";
|
|
389
392
|
}
|
|
@@ -553,7 +556,7 @@ function resolveThinkingCapability(
|
|
|
553
556
|
*/
|
|
554
557
|
const REASONING_EFFORT_ONLY_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio"]);
|
|
555
558
|
|
|
556
|
-
/** `none` is LM Studio
|
|
559
|
+
/** `none` is the observed LM Studio HTTP off value; on-off models have no finer dial than `low`. */
|
|
557
560
|
function onOffReasoningEffort(thinkingActive: boolean): string {
|
|
558
561
|
return thinkingActive ? "low" : "none";
|
|
559
562
|
}
|
|
@@ -647,7 +650,12 @@ export function resolveModelRuntimeCapabilities(
|
|
|
647
650
|
family,
|
|
648
651
|
capabilities: input.capabilities,
|
|
649
652
|
thinking,
|
|
650
|
-
request: resolveRequestCapability(
|
|
653
|
+
request: resolveRequestCapability(
|
|
654
|
+
thinking,
|
|
655
|
+
parser,
|
|
656
|
+
input.runtimeId === "litellm" ? (input.capabilities.thinkingControlRuntime ?? input.runtimeId) : input.runtimeId,
|
|
657
|
+
quirks,
|
|
658
|
+
),
|
|
651
659
|
response: {
|
|
652
660
|
parser,
|
|
653
661
|
stripTokenizerSentinels: true,
|
|
@@ -735,6 +743,7 @@ function thinkingFormatFromModelApi(api: Api): CapabilityFlags["thinkingFormat"]
|
|
|
735
743
|
|
|
736
744
|
function capabilitiesFromModel(model: Model<Api> & ClioRuntimeMetadata): CapabilityFlags {
|
|
737
745
|
const format = model.compat?.thinkingFormat ?? thinkingFormatFromModelApi(model.api);
|
|
746
|
+
const controlRuntime = (model.clioCoder ?? model.clio)?.thinkingControlRuntime;
|
|
738
747
|
const caps: CapabilityFlags = {
|
|
739
748
|
chat: true,
|
|
740
749
|
tools: true,
|
|
@@ -746,6 +755,7 @@ function capabilitiesFromModel(model: Model<Api> & ClioRuntimeMetadata): Capabil
|
|
|
746
755
|
fim: false,
|
|
747
756
|
contextWindow: model.contextWindow,
|
|
748
757
|
maxTokens: model.maxTokens,
|
|
758
|
+
...(controlRuntime ? { thinkingControlRuntime: controlRuntime } : {}),
|
|
749
759
|
};
|
|
750
760
|
if (
|
|
751
761
|
format === "qwen-chat-template" ||
|
|
@@ -561,8 +561,12 @@
|
|
|
561
561
|
guidance: |
|
|
562
562
|
Ornith 1.5's Qwen3.5 chat template exposes thinking as on or off
|
|
563
563
|
through enable_thinking; intermediate levels coerce to on. LM Studio
|
|
564
|
-
|
|
565
|
-
|
|
564
|
+
2026-09-03 exposed a split vocabulary on this exact Q4_K_M: native
|
|
565
|
+
discovery advertised {off,on}, while its OpenAI-compatible request
|
|
566
|
+
validator rejected literal `on` and accepted only effort-level values.
|
|
567
|
+
`low` ran only after a warning and fallback to on, so Clio now omits an
|
|
568
|
+
active override for this default-on model and sends `reasoning_effort:
|
|
569
|
+
none` only when disabling it.
|
|
566
570
|
serving: "Ornith-1.5-35B-A3B follows the 1.0 card: 262K context, qwen3 reasoning parsing, qwen3_coder tool parsing, sampler temperature=0.6, top_p=0.95, top_k=20."
|
|
567
571
|
|
|
568
572
|
- family: qwen3.6-27b
|
|
@@ -696,7 +700,7 @@
|
|
|
696
700
|
"128gb-unified-vulkan": "128 GB unified-memory Vulkan class: IQ4_NL uses about 17.3 GB and fits ctx=262144 with parallel=4. Vulkan backends show much slower prefill than ROCm/CUDA on this family; prefer ROCm where available."
|
|
697
701
|
runtimePreference:
|
|
698
702
|
llamaCpp: "Primary verified path. OpenAI-compatible chat completions with --jinja, --reasoning on, --reasoning-effort medium as server defaults; reasoning_content and tool_calls both confirmed to parse correctly. A request can override to off with chat_template_kwargs.enable_thinking:false, or to a different active level with reasoning_effort in {low, medium, xhigh} (never minimal/high/max on the wire; the stock template raises a fatal jinja exception on those and Clio's landed capability resolver already clamps to this set)."
|
|
699
|
-
lmstudioOpenaiCompat: "Clio sends reasoning_effort over LM Studio's OpenAI-compatible HTTP port and omits chat_template_kwargs because LM Studio does not use that field for this model.
|
|
703
|
+
lmstudioOpenaiCompat: "Clio sends reasoning_effort over LM Studio's OpenAI-compatible HTTP port and omits chat_template_kwargs because LM Studio does not use that field for this model. The upstream template defaults to thinking on/xhigh; an LM Studio deployment may configure another default. reasoning_effort:'none' explicitly disables it. Through LiteLLM, this control also requires allowed_openai_params:['reasoning_effort']; Clio selects the LM Studio spelling only when every deployment of that alias explicitly declares model_info.runtime: lm-studio."
|
|
700
704
|
lmstudioNative: "Clio's LM Studio runtime uses the OpenAI-compatible HTTP chat adapter with native REST model discovery and residency management."
|
|
701
705
|
llamaCpp:
|
|
702
706
|
ctxSize: 131072
|
|
@@ -718,7 +722,6 @@
|
|
|
718
722
|
effortByLevel:
|
|
719
723
|
low: low
|
|
720
724
|
medium: medium
|
|
721
|
-
high: xhigh
|
|
722
725
|
xhigh: xhigh
|
|
723
726
|
guidance: |
|
|
724
727
|
Official Qwen3.8-27B chat template (chat_template.jinja) validates
|
|
@@ -726,19 +729,32 @@
|
|
|
726
729
|
fatal jinja exception (hard 500, not a graceful fallback) on anything
|
|
727
730
|
else, including minimal/high/max. The 27B card gives no /think or
|
|
728
731
|
/no_think soft switch for this model; unlike Qwen3, that idiom has no
|
|
729
|
-
effect here.
|
|
730
|
-
|
|
732
|
+
effect here. The template defaults to xhigh with thinking enabled.
|
|
733
|
+
The picker offers off/low/medium/xhigh; released high and max choices
|
|
734
|
+
normalize to xhigh rather than reaching the strict template unchanged.
|
|
735
|
+
Template-level off uses chat_template_kwargs.enable_thinking:false.
|
|
736
|
+
preserve_thinking should stay
|
|
731
737
|
on for an agentic harness (the template's own recommendation for
|
|
732
738
|
agent scenarios; improves KV cache reuse). llama.cpp's own
|
|
733
739
|
reasoning_effort:"none" also disables reasoning at the server layer
|
|
734
740
|
and is a separate mechanism from the template's enable_thinking flag;
|
|
735
|
-
|
|
736
|
-
port.
|
|
741
|
+
the none sentinel is consumed before strict template effort validation.
|
|
742
|
+
LM Studio's HTTP port also accepts none. A 2026-09-05 same-route
|
|
743
|
+
LiteLLM probe showed none and the template flag alone still reasoned
|
|
744
|
+
because the generic OpenAI route filtered the effort parameter. Adding
|
|
745
|
+
allowed_openai_params:["reasoning_effort"] produced zero reasoning
|
|
746
|
+
twice; an allowed low control still reasoned. Clio forwards only an
|
|
747
|
+
effort resolved from the model/runtime contract, and never infers the
|
|
748
|
+
upstream control runtime from a host name, port, or model alias.
|
|
737
749
|
|
|
738
750
|
Thinking off is verified for this family, and no floor is imposed on
|
|
739
|
-
it.
|
|
751
|
+
it. The official card and template were rechecked at revision
|
|
752
|
+
1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0:
|
|
753
|
+
https://huggingface.co/Qwen/Qwen3.8-27B/blob/1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0/chat_template.jinja
|
|
754
|
+
JetBrains report that Qwen3.8 without reasoning gets stuck in a
|
|
740
755
|
loop repeating the same tool call indefinitely under Junie. Clio's
|
|
741
|
-
shipped default is
|
|
756
|
+
shipped default is chat.thinkingLevel: off, an explicit Clio preference
|
|
757
|
+
rather than the vendor's template default. On llama.cpp it
|
|
742
758
|
sends chat_template_kwargs.enable_thinking:false and on LM Studio's
|
|
743
759
|
OpenAI-compatible port sends reasoning_effort:"none". Clio 0.3.8 ran
|
|
744
760
|
that configuration on both runtimes (llama.cpp build b226-2115b73d8 on
|
|
@@ -746,8 +762,12 @@
|
|
|
746
762
|
2026-08-29 and 2026-08-30: an interactive build-and-resume session, a
|
|
747
763
|
three-worker fleet step, and a ten-task eval suite totalling 116 model
|
|
748
764
|
calls, none of which repeated a tool call into a loop. The catalog
|
|
749
|
-
therefore imposes no thinking floor
|
|
750
|
-
|
|
765
|
+
therefore imposes no thinking floor for this family. A provisional 2026-09-03 LM Studio A/B on the heavily quantized
|
|
766
|
+
`qwen3.8-27b-gsq-rco` alias corroborated the switch: four thinking-off
|
|
767
|
+
scenarios reported zero reasoning tokens and no repeated-tool loop,
|
|
768
|
+
versus visible reasoning at the active level. The host had LM Link
|
|
769
|
+
enabled, so this records behavior only—not hardware throughput or a
|
|
770
|
+
controlled quality claim. If a future build or quantization regresses into the loop
|
|
751
771
|
JetBrains describe, the guards that catch it are Clio's own, not a
|
|
752
772
|
catalog setting: the tool-prose-loop detector
|
|
753
773
|
(src/interactive/tool-prose-loop.ts), which is armed on the
|
|
@@ -1695,15 +1715,16 @@
|
|
|
1695
1715
|
card's dial is reasoning strength with levels low, medium, high, and
|
|
1696
1716
|
xhigh, set through the system prompt as "Reasoning strength: <value>",
|
|
1697
1717
|
and the router passes it as chat_template_kwargs.reasoning_strength
|
|
1698
|
-
pinned to xhigh. There is no off level on that scale,
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1718
|
+
pinned to xhigh. There is no off level on that scale, so the family
|
|
1719
|
+
stays always-on: encoding it as on-off would put an enable_thinking
|
|
1720
|
+
flag on the wire that this template does not read while the TUI showed
|
|
1721
|
+
a working off/on dial, which is the failure qwopus3.5-9b-v3 above was
|
|
1722
|
+
reclassified to stop. The strength dial itself is driven per request:
|
|
1723
|
+
thinking.chatTemplateKwargs.byLevel below maps Clio's thinking level to
|
|
1724
|
+
chat_template_kwargs.reasoning_strength on llama.cpp, and LM Studio,
|
|
1725
|
+
which drops chat_template_kwargs, reports that kwarg as undeliverable
|
|
1726
|
+
instead of sending it. No per-level output has been measured yet, so
|
|
1727
|
+
the always-on classification above stands until one is.
|
|
1707
1728
|
|
|
1708
1729
|
Sampler provenance: temperature 1.0, top_p 0.95 and top_k 64 are the
|
|
1709
1730
|
card's Best Practices values and the router preset uses the same three.
|
|
@@ -1723,7 +1744,7 @@
|
|
|
1723
1744
|
gpuTiers:
|
|
1724
1745
|
"32gb": "Agent-role target on a 32 GB card: UD-Q4_K_XL weights, q8_0 KV at ctx=131072, parallel=1, with the Q8_0 perception encoder and the DFlash drafter both resident."
|
|
1725
1746
|
runtimePreference:
|
|
1726
|
-
llamaCpp: "OpenAI-compatible chat completions with --jinja.
|
|
1747
|
+
llamaCpp: "OpenAI-compatible chat completions with --jinja. Clio drives the reasoning budget per request through chat_template_kwargs.reasoning_strength, mapped from the thinking level by thinking.chatTemplateKwargs.byLevel; a --chat-template-kwargs launch value is only the server default for requests that send none."
|
|
1727
1748
|
openaiCompat: "Use when a gateway fronts the same llama.cpp chat-completions surface. Expect a reasoning trace on every response whatever the configured thinking level says."
|
|
1728
1749
|
llamaCpp:
|
|
1729
1750
|
ctxSize: 131072
|
|
@@ -1742,7 +1763,7 @@
|
|
|
1742
1763
|
mechanism: always-on
|
|
1743
1764
|
chatTemplateKwargs:
|
|
1744
1765
|
byLevel:
|
|
1745
|
-
# Card: reasoning strength low|medium|high|xhigh (scratchpad/catalog/models/unsloth-Muse-Glimmer-30B.md:35). The per-family kwarg key the note above
|
|
1766
|
+
# Card: reasoning strength low|medium|high|xhigh (scratchpad/catalog/models/unsloth-Muse-Glimmer-30B.md:35). The per-family kwarg key the note above describes.
|
|
1746
1767
|
key: reasoning_strength
|
|
1747
1768
|
values:
|
|
1748
1769
|
low: low
|
|
@@ -1754,9 +1775,10 @@
|
|
|
1754
1775
|
guidance: |
|
|
1755
1776
|
Muse Glimmer reasons on every turn and its strength scale has no off
|
|
1756
1777
|
level, so Clio shows the dial as forced and budgets for a reasoning
|
|
1757
|
-
preamble ahead of every answer.
|
|
1758
|
-
|
|
1759
|
-
|
|
1778
|
+
preamble ahead of every answer. The thinking level still sets how much
|
|
1779
|
+
it thinks: on llama.cpp Clio sends reasoning_strength (low, medium,
|
|
1780
|
+
high, xhigh) as a chat-template kwarg per request. LM Studio drops that
|
|
1781
|
+
kwarg, so there the strength stays at the server's own default.
|
|
1760
1782
|
serving: "Meta Superintelligence Lab Muse-Glimmer-30B, a dense 29.6B causal transformer with a ~1.8B ViT-G/14 perception encoder, interleaved local and global attention with a 2048 sliding window, and a DFlash block-diffusion drafter that proposes 16 tokens per forward pass. Card context length is 131072. Input is text plus image; the mini router additionally tags video, which the card does not claim, so the catalog follows the card."
|
|
1761
1783
|
|
|
1762
1784
|
# ThinkingCap is a brevity finetune of Qwen3.6-27B and not the base model, so it
|