@iowarp/clio-coder 0.4.1 → 0.4.3
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 +127 -0
- package/CONTRIBUTING.md +142 -52
- package/README.md +434 -473
- package/SECURITY.md +2 -1
- package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
- package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
- package/dist/builtins-IA7V7FUC.js +22 -0
- package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
- package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
- package/dist/chunk-4UVU7BJ5.js +39 -0
- package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/chunk-5MEZN6CB.js +1334 -0
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
- package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/chunk-7DRAWPTZ.js +360 -0
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
- package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
- package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
- package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
- package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
- package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
- package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
- package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
- package/dist/chunk-JEQ3XTHC.js +42 -0
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
- package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
- package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
- package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
- package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
- package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
- package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
- package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
- package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
- package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
- package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
- package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
- package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
- package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
- package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
- package/dist/chunk-XRZT5WY5.js +47 -0
- package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
- package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
- package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
- package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
- package/dist/cli/index.js +41 -39
- package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
- package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
- package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
- package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
- package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
- package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
- package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
- package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
- package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
- package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
- package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
- package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
- package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
- package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
- package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
- package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
- package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
- package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
- package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
- package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
- package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
- package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
- package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
- package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
- package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
- package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
- package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
- package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
- package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
- package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
- package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
- package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
- package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
- package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
- package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
- package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
- package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
- package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
- package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
- package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
- package/dist/worker/entry.js +90 -74
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
- package/docs/{observability.md → architecture/observability.md} +38 -14
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
- package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
- package/docs/guide/configuration-reference.md +1163 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
- package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
- package/docs/process/development-pipeline.md +152 -0
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- package/evals/README.md +2 -2
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +10 -8
- package/skills/README.md +52 -41
- package/skills/coding/ast-grep/SKILL.md +102 -31
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +41 -6
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +88 -29
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +81 -54
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +44 -3
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +46 -16
- 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 +78 -64
- 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 +88 -65
- 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 +101 -52
- 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/meta/clio-coder-dev/SKILL.md +9 -5
- package/skills/meta/clio-coder-dev/evals.md +3 -2
- package/skills/meta/clio-coder-test/SKILL.md +102 -95
- package/skills/meta/clio-coder-test/evals.md +9 -4
- package/skills/meta/clio-coder-test/references/harness.md +100 -124
- package/skills/meta/clio-coder-test/references/test-map.md +77 -50
- package/skills/meta/credentials/SKILL.md +2 -2
- package/skills/meta/find-skills/SKILL.md +2 -2
- package/skills/meta/herdr/SKILL.md +2 -2
- package/skills/meta/skill-craft/SKILL.md +22 -16
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +62 -13
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +131 -15
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -7
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +58 -3
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +54 -3
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +70 -62
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +77 -19
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +21 -2
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -2
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +27 -2
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +97 -62
- package/skills/workflow/cut-it/SKILL.md +66 -6
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +118 -28
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +87 -11
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +77 -18
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/bootstrap-generate.ts +1 -1
- package/src/cli/config-inspect.ts +65 -12
- 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 +1082 -532
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/docs.ts +22 -14
- package/src/cli/doctor-naming.ts +5 -5
- package/src/cli/doctor-toolchain.ts +3 -3
- package/src/cli/eval.ts +1 -2
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet.ts +1 -1
- package/src/cli/index.ts +3 -1
- package/src/cli/internal-dispatch.ts +3 -4
- 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/panes.ts +19 -5
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +9 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/share.ts +5 -1
- package/src/cli/skills-eval.ts +3 -3
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +5 -6
- package/src/cli/trace.ts +55 -4
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/wiki-generate.ts +1 -1
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +131 -86
- package/src/core/bus-events.ts +51 -6
- package/src/core/config.ts +61 -1
- package/src/core/defaults.ts +7 -4
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/guardrails.ts +10 -49
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +13 -15
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +23 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/config/keybindings.ts +8 -0
- package/src/domains/context/extension.ts +0 -3
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -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 +11 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +237 -49
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/path-scope.ts +235 -24
- package/src/domains/dispatch/run-event-journal.ts +4 -15
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/transport.ts +45 -21
- package/src/domains/dispatch/types.ts +58 -3
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/artifacts/store.ts +5 -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 +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/store.ts +8 -1
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/index.ts +6 -0
- package/src/domains/lifecycle/naming-resources.ts +19 -4
- package/src/domains/lifecycle/naming-yazi.ts +10 -5
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +28 -5
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +28 -0
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +38 -0
- package/src/domains/mux/detect.ts +6 -13
- package/src/domains/mux/index.ts +1 -1
- package/src/domains/mux/operations.ts +44 -5
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/session.ts +53 -4
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +17 -4
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +14 -90
- package/src/domains/observability/trace-store.ts +43 -7
- package/src/domains/prompts/compiler.ts +73 -53
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +97 -9
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +10 -24
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +99 -25
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- 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/common/probe-helpers.ts +7 -2
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- 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/cost-provenance.ts +19 -0
- package/src/domains/providers/types/local-model-quirks.ts +85 -37
- 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 +23 -19
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/share/archive.ts +164 -7
- package/src/engine/acp/server.ts +62 -9
- 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/llamacpp-residency.ts +3 -4
- package/src/engine/apis/lmstudio.ts +3 -3
- package/src/engine/apis/ollama-native.ts +6 -6
- package/src/engine/apis/openai-completions.ts +145 -39
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +8 -27
- package/src/engine/external-subprocess.ts +114 -6
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -12
- package/src/engine/worker-runtime.ts +40 -11
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +464 -251
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/application-controller.ts +2 -1
- package/src/interactive/bus-notices.ts +8 -1
- package/src/interactive/chat-loop-messages.ts +16 -17
- package/src/interactive/chat-loop.ts +75 -3
- package/src/interactive/chat-panel.ts +36 -13
- package/src/interactive/chat-renderer.ts +72 -7
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +6 -11
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +39 -4
- package/src/interactive/interactive-input-runtime.ts +4 -0
- package/src/interactive/interactive-presentation.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/settings.ts +27 -16
- package/src/interactive/panes-runtime.ts +111 -35
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +153 -20
- package/src/interactive/stream-pacing-policy.ts +0 -23
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +39 -20
- 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/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/interactive/yazi-bridge.ts +60 -6
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +59 -21
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-arguments.ts +6 -1
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +49 -4
- package/src/tools/dispatch-run-events.ts +1 -1
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/observation.ts +4 -5
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +41 -12
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/builtins-UJLMOVOV.js +0 -17
- package/dist/chunk-5QIAJV2D.js +0 -48
- package/dist/chunk-JZWT5J3Y.js +0 -814
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-WR6U3OVP.js +0 -45
- package/dist/chunk-Y45G3AXC.js +0 -1558
- package/dist/reset-EOLM7GVE.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-H7TOM7YL.js +0 -323
- package/docs/artifact-versions.md +0 -67
- package/docs/development-pipeline.md +0 -121
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/time-conventions.md +0 -101
|
@@ -1,42 +1,40 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: operating.delegation
|
|
3
3
|
version: 1
|
|
4
|
-
budgetTokens: 620
|
|
5
4
|
description: Coordinator delegation and receipt discipline; rendered only when dispatch is on the surface
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# Delegation
|
|
9
8
|
|
|
10
|
-
You coordinate
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
and
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
the
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
leads, never as validation.
|
|
9
|
+
You coordinate Clio workers through the dispatch tool. Before your first
|
|
10
|
+
edit, count the independent file-scoped changes the request asks for.
|
|
11
|
+
Two or more, or any repository-wide exploration: dispatch, and do not
|
|
12
|
+
edit those files yourself. One narrow change: do it yourself.
|
|
13
|
+
For two or more changes, one dispatch call carries them all as `tasks`,
|
|
14
|
+
one task per change, each naming its file in `intent`, with `agent`
|
|
15
|
+
"coder" and `mode` "parallel". For exploration, dispatch `scout` with
|
|
16
|
+
the question before any repo-wide grep or read, however small the
|
|
17
|
+
repository looks. You keep synthesis and validation: when the receipts
|
|
18
|
+
arrive, spot-check them and run the checks yourself. A worker whose
|
|
19
|
+
intent declares `write_roots` is confined to them and has no bash or
|
|
20
|
+
verify tool, so do not ask it to run tests or scripts: name the checks
|
|
21
|
+
in `verification` and the host runs them after it finishes.
|
|
22
|
+
A sealed run receipt is the durable record of delegated work; the
|
|
23
|
+
worker's prose is an advisory claim until its evidence is verified or
|
|
24
|
+
you spot-check it. Spot-check a small, risk-weighted subset of a
|
|
25
|
+
reconnaissance receipt's citations (normally at most six read or search
|
|
26
|
+
calls), and re-read any cited file:line and re-run or inspect the named
|
|
27
|
+
validation before repeating a "tests pass" claim. Failed, cap-exhausted,
|
|
28
|
+
zero-tool, or citation-free reconnaissance is unconfirmed leads, never
|
|
29
|
+
validation.
|
|
30
|
+
Put receipt-derived context in the dispatch briefing field, separate
|
|
31
|
+
from task instructions. Collect detached runs before final synthesis,
|
|
32
|
+
and report receipt integrity, evidence verification, briefing
|
|
33
|
+
provenance, and project-context provenance as separate facts. Never
|
|
34
|
+
narrate or summarize a worker you did not dispatch; if you cannot
|
|
35
|
+
dispatch, say so and name the reason.
|
|
36
|
+
A note headed `[worker result] <agent> · run <id> · <outcome> · shared
|
|
37
|
+
by the operator` is operator text: a worker the operator ran with /run
|
|
38
|
+
or /delegate and shared with --share or /share. Use it like any operator
|
|
39
|
+
steering, read its receipt by run id, and apply the same spot-check
|
|
40
|
+
discipline; not having dispatched it is no reason to dismiss it.
|
|
@@ -1,33 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: operating.skills
|
|
3
3
|
version: 1
|
|
4
|
-
budgetTokens: 340
|
|
5
4
|
description: Coordinator skill suggestion discipline; rendered only when context is on the surface
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# Skills
|
|
9
8
|
|
|
10
|
-
Skills
|
|
11
|
-
|
|
12
|
-
the one authoritative listing of
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
in order when skills compose — and let the operator decide before
|
|
21
|
-
grinding through that workflow bare; a marketplace match is suggested
|
|
22
|
-
the same way, and /skill <name> offers the install. When the operator
|
|
23
|
-
names a skill or asks how one works, answer from that same listing.
|
|
24
|
-
When a [Marketplace] reminder names an uninstalled skill for the
|
|
25
|
-
current request, first check the installed side with context
|
|
26
|
-
(scope="skills"); only if nothing installed serves and the named skill
|
|
27
|
-
truly fits, put the install question to the operator with ask_user
|
|
28
|
-
using exactly the four options the reminder states, then continue the
|
|
29
|
-
task in the same turn. The harness performs any consented install;
|
|
30
|
-
never install a skill yourself, and never offer one no reminder named.
|
|
31
|
-
Only an explicit operator request activates a skill; never load one on
|
|
32
|
-
your own. If nothing fits or the task is routine, proceed normally and
|
|
9
|
+
Skills are operator-activated workflows: git delivery, planning, coding
|
|
10
|
+
practice, context priming and handoff, research, and plan stress-testing.
|
|
11
|
+
context (scope="skills") is the one authoritative listing of installed
|
|
12
|
+
and marketplace skills; never guess the inventory or search the
|
|
13
|
+
repository for one. When a task has one of those shapes, list them,
|
|
14
|
+
suggest the best match as /skill <name> (the sequence in order when
|
|
15
|
+
several compose), and continue the task without it: only the operator
|
|
16
|
+
activates or installs a skill, and a [Marketplace] reminder states its
|
|
17
|
+
own offer options. When the operator names a skill or asks how one
|
|
18
|
+
works, answer from that listing. If nothing fits, proceed normally and
|
|
33
19
|
suggest nothing.
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: operating.worker
|
|
3
3
|
version: 1
|
|
4
|
-
budgetTokens: 120
|
|
5
4
|
description: Assigned-task contract for a bounded fleet worker
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# Assigned Task Contract
|
|
9
8
|
|
|
10
|
-
The assigned task is authoritative
|
|
11
|
-
|
|
12
|
-
Do not invent a different task, source tree, file path, or implementation plan.
|
|
13
|
-
|
|
14
|
-
If the assigned task asks for an exact response, a direct answer, or no tool use, answer it directly without tool calls.
|
|
15
|
-
|
|
16
|
-
Use tools only when necessary for the assigned task and admitted by the worker tool contract.
|
|
9
|
+
The assigned task is authoritative; role guidance is a persona, not a replacement. Do not invent a different task, source tree, file path, or implementation plan.
|
|
@@ -59,6 +59,8 @@ export interface TargetStatus {
|
|
|
59
59
|
probeSurfaces?: Readonly<ProbeSurfaceMap>;
|
|
60
60
|
/** Ids returned by the last successful probeModels() call. */
|
|
61
61
|
discoveredModels: ReadonlyArray<string>;
|
|
62
|
+
/** Human-readable live/cache labels keyed by exact model slug. */
|
|
63
|
+
discoveredModelLabels?: Readonly<Record<string, string>>;
|
|
62
64
|
/**
|
|
63
65
|
* Source for `discoveredModels`. `probe` means the target just returned a
|
|
64
66
|
* live catalog, `cache` is a previously probed catalog preserved across a
|
|
@@ -93,7 +95,8 @@ export interface ProvidersContract {
|
|
|
93
95
|
* `reasoning: false` skips an inference-based reasoning-capability probe while
|
|
94
96
|
* retaining the target's liveness and model-catalog checks.
|
|
95
97
|
*/
|
|
96
|
-
|
|
98
|
+
/** Optional cancellation covers auth and metadata; a cancelled probe does not publish health. */
|
|
99
|
+
probeTarget(id: string, options?: { reasoning?: boolean; signal?: AbortSignal }): Promise<TargetStatus | null>;
|
|
97
100
|
|
|
98
101
|
/** Clear in-memory live connection state for a configured target. */
|
|
99
102
|
disconnectTarget(id: string): TargetStatus | null;
|
|
@@ -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
|
|
@@ -161,7 +161,7 @@ export {
|
|
|
161
161
|
VALID_THINKING_LEVELS,
|
|
162
162
|
} from "./types/capability-flags.js";
|
|
163
163
|
export { type ContextWindowSlots, formatContextWindowSlots } from "./types/context-window-slots.js";
|
|
164
|
-
export { type CostProvenance, normalizeCostProvenance } from "./types/cost-provenance.js";
|
|
164
|
+
export { type CostProvenance, normalizeCostProvenance, resolveCostProvenance } from "./types/cost-provenance.js";
|
|
165
165
|
export type { KnowledgeBase, KnowledgeBaseEntry, KnowledgeBaseHit } from "./types/knowledge-base.js";
|
|
166
166
|
export type {
|
|
167
167
|
ProbeContext,
|
|
@@ -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;
|
|
@@ -100,6 +101,7 @@ export function modelCandidatesForStatus(status: TargetStatus): ProviderModelCan
|
|
|
100
101
|
const state = status.discoveredModelStates?.[trimmed];
|
|
101
102
|
out.push({
|
|
102
103
|
id: trimmed,
|
|
104
|
+
...(status.discoveredModelLabels?.[trimmed] ? { label: status.discoveredModelLabels[trimmed] } : {}),
|
|
103
105
|
source,
|
|
104
106
|
...(state ? { loadState: state.state } : {}),
|
|
105
107
|
...(state?.detail ? { loadStateDetail: state.detail } : {}),
|
|
@@ -36,7 +36,7 @@ export interface AppliedThinking {
|
|
|
36
36
|
mechanism: ThinkingMechanism;
|
|
37
37
|
effort?: string;
|
|
38
38
|
budgetTokens?: number;
|
|
39
|
-
chatTemplateKwargs?: Record<string, boolean>;
|
|
39
|
+
chatTemplateKwargs?: Record<string, boolean | string | number>;
|
|
40
40
|
noticeKind: AppliedThinkingNoticeKind;
|
|
41
41
|
notice: string;
|
|
42
42
|
}
|
|
@@ -53,7 +53,20 @@ export interface ResolvedRequestCapability {
|
|
|
53
53
|
reasoningEffort?: string;
|
|
54
54
|
budgetTokens?: number;
|
|
55
55
|
budgetEnforcement: ThinkingBudgetEnforcement;
|
|
56
|
-
chatTemplateKwargs?: Record<string, boolean | string>;
|
|
56
|
+
chatTemplateKwargs?: Record<string, boolean | string | number>;
|
|
57
|
+
/**
|
|
58
|
+
* Family-declared chat-template kwargs the runtime cannot carry. LM Studio
|
|
59
|
+
* ignores `chat_template_kwargs` for every family measured, so the keys are
|
|
60
|
+
* named here for the resolution diagnostics instead of riding in
|
|
61
|
+
* `chatTemplateKwargs` only to be deleted at the wire.
|
|
62
|
+
*/
|
|
63
|
+
undeliverableChatTemplateKwargs?: UndeliverableChatTemplateKwargs;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface UndeliverableChatTemplateKwargs {
|
|
67
|
+
keys: string[];
|
|
68
|
+
/** True when the family entry itself marks the block `lmstudio: unsupported`. */
|
|
69
|
+
declaredUnsupported: boolean;
|
|
57
70
|
}
|
|
58
71
|
|
|
59
72
|
export interface ResolvedResponseCapability {
|
|
@@ -118,6 +131,7 @@ interface ClioRuntimeMetadata {
|
|
|
118
131
|
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
119
132
|
gateway?: boolean;
|
|
120
133
|
family?: string;
|
|
134
|
+
thinkingControlRuntime?: CapabilityFlags["thinkingControlRuntime"];
|
|
121
135
|
quirks?: LocalModelQuirks;
|
|
122
136
|
};
|
|
123
137
|
/** Released in-memory metadata name accepted at plugin/runtime read boundaries. */
|
|
@@ -127,6 +141,7 @@ interface ClioRuntimeMetadata {
|
|
|
127
141
|
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
128
142
|
gateway?: boolean;
|
|
129
143
|
family?: string;
|
|
144
|
+
thinkingControlRuntime?: CapabilityFlags["thinkingControlRuntime"];
|
|
130
145
|
quirks?: LocalModelQuirks;
|
|
131
146
|
};
|
|
132
147
|
compat?: {
|
|
@@ -335,14 +350,15 @@ function supportedEffortLevels(
|
|
|
335
350
|
): ReadonlyArray<ThinkingLevel> {
|
|
336
351
|
if (harmony) return HARMONY_LEVELS;
|
|
337
352
|
const efforts = quirks?.thinking?.effortByLevel;
|
|
338
|
-
|
|
353
|
+
const byLevelValues = (quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs)?.byLevel?.values;
|
|
354
|
+
if (!efforts && !byLevelValues) return baseLevels;
|
|
339
355
|
const out: ThinkingLevel[] = [];
|
|
340
356
|
if (baseLevels.includes("off")) out.push("off");
|
|
341
|
-
if (efforts
|
|
342
|
-
if (efforts
|
|
343
|
-
if (efforts
|
|
344
|
-
if (efforts
|
|
345
|
-
if (efforts
|
|
357
|
+
if (efforts?.minimal !== undefined || byLevelValues?.minimal !== undefined) out.push("minimal");
|
|
358
|
+
if (efforts?.low !== undefined || byLevelValues?.low !== undefined) out.push("low");
|
|
359
|
+
if (efforts?.medium !== undefined || byLevelValues?.medium !== undefined) out.push("medium");
|
|
360
|
+
if (efforts?.high !== undefined || byLevelValues?.high !== undefined) out.push("high");
|
|
361
|
+
if (efforts?.xhigh !== undefined || byLevelValues?.xhigh !== undefined) out.push("xhigh");
|
|
346
362
|
return out.length > 0 ? out : baseLevels;
|
|
347
363
|
}
|
|
348
364
|
|
|
@@ -367,9 +383,10 @@ export function effectiveThinkingLevel(
|
|
|
367
383
|
const fallback = available[0] ?? "off";
|
|
368
384
|
if (!configured) return fallback;
|
|
369
385
|
if (available.includes(configured)) return configured;
|
|
370
|
-
//
|
|
371
|
-
// supported ceiling
|
|
372
|
-
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";
|
|
373
390
|
if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
|
|
374
391
|
return "high";
|
|
375
392
|
}
|
|
@@ -525,27 +542,71 @@ function resolveThinkingCapability(
|
|
|
525
542
|
}
|
|
526
543
|
|
|
527
544
|
/**
|
|
528
|
-
* Runtimes whose OpenAI-compatible surface
|
|
529
|
-
* from `reasoning_effort
|
|
530
|
-
*
|
|
531
|
-
*
|
|
532
|
-
*
|
|
533
|
-
*
|
|
534
|
-
*
|
|
545
|
+
* Runtimes whose OpenAI-compatible surface ignores `chat_template_kwargs`
|
|
546
|
+
* and reads every thinking control from `reasoning_effort`. Measured against
|
|
547
|
+
* dynamo (LM Studio) on 2026-08-11 with `nvidia-nemotron-3.5-lightning-30b-a3b`
|
|
548
|
+
* and again on 2026-09-02 across three mechanisms: `enable_thinking: false`
|
|
549
|
+
* left 26 reasoning tokens on qwen3.8-27b (effort-levels), 52 on
|
|
550
|
+
* gemma-4-26b-a4b-it (on-off) and 105 on nemotron-3.5-lightning (on-off),
|
|
551
|
+
* while `reasoning_effort: "none"` produced 0 on each; llama.cpp does the
|
|
552
|
+
* reverse. Sending the wrong spelling reads as "no preference" to the
|
|
553
|
+
* server, so the model keeps reasoning at every dial. The same runtime drops
|
|
554
|
+
* a family's own kwargs (#267) for the same reason, so those are reported as
|
|
555
|
+
* undeliverable rather than merged into the request (#268).
|
|
535
556
|
*/
|
|
536
|
-
const
|
|
557
|
+
const REASONING_EFFORT_ONLY_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio"]);
|
|
537
558
|
|
|
538
|
-
/** `none` is LM Studio
|
|
559
|
+
/** `none` is the observed LM Studio HTTP off value; on-off models have no finer dial than `low`. */
|
|
539
560
|
function onOffReasoningEffort(thinkingActive: boolean): string {
|
|
540
561
|
return thinkingActive ? "low" : "none";
|
|
541
562
|
}
|
|
542
563
|
|
|
564
|
+
function resolveFamilyChatTemplateKwargs(
|
|
565
|
+
quirks: LocalModelQuirks | undefined,
|
|
566
|
+
effectiveLevel: ThinkingLevel,
|
|
567
|
+
configuredLevel: ThinkingLevel,
|
|
568
|
+
): Record<string, boolean | string | number> | undefined {
|
|
569
|
+
const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
|
|
570
|
+
if (!block) return undefined;
|
|
571
|
+
const out: Record<string, boolean | string | number> = {};
|
|
572
|
+
if (block.static) {
|
|
573
|
+
for (const [k, v] of Object.entries(block.static)) {
|
|
574
|
+
out[k] = v;
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
if (block.byLevel) {
|
|
578
|
+
const byLevel = block.byLevel;
|
|
579
|
+
const val = byLevel.values[effectiveLevel] ?? byLevel.values[configuredLevel];
|
|
580
|
+
if (val !== undefined) {
|
|
581
|
+
out[byLevel.key] = val;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
function familyKwargsDeclaredUnsupported(quirks: LocalModelQuirks | undefined, runtimeId: string): boolean {
|
|
588
|
+
if (runtimeId !== "lmstudio") return false;
|
|
589
|
+
const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
|
|
590
|
+
return block?.lmstudio === "unsupported" || block?.byLevel?.lmstudio === "unsupported";
|
|
591
|
+
}
|
|
592
|
+
|
|
543
593
|
function resolveRequestCapability(
|
|
544
594
|
thinking: ResolvedThinkingCapability,
|
|
545
595
|
parser: ResponseParserKind,
|
|
546
596
|
runtimeId: string,
|
|
597
|
+
quirks?: LocalModelQuirks,
|
|
547
598
|
): ResolvedRequestCapability {
|
|
548
599
|
const request: ResolvedRequestCapability = { budgetEnforcement: thinking.budgetEnforcement };
|
|
600
|
+
const effortOnly = REASONING_EFFORT_ONLY_RUNTIMES.has(runtimeId);
|
|
601
|
+
const familyKwargs = resolveFamilyChatTemplateKwargs(quirks, thinking.effectiveLevel, thinking.configuredLevel);
|
|
602
|
+
if (familyKwargs && effortOnly) {
|
|
603
|
+
request.undeliverableChatTemplateKwargs = {
|
|
604
|
+
keys: Object.keys(familyKwargs),
|
|
605
|
+
declaredUnsupported: familyKwargsDeclaredUnsupported(quirks, runtimeId),
|
|
606
|
+
};
|
|
607
|
+
} else if (familyKwargs) {
|
|
608
|
+
request.chatTemplateKwargs = { ...familyKwargs };
|
|
609
|
+
}
|
|
549
610
|
if (thinking.mechanism === "effort-levels" && thinking.effort) {
|
|
550
611
|
request.reasoningEffort = thinking.effort;
|
|
551
612
|
}
|
|
@@ -556,15 +617,21 @@ function resolveRequestCapability(
|
|
|
556
617
|
request.budgetTokens = thinking.budgetTokens;
|
|
557
618
|
}
|
|
558
619
|
if (thinking.mechanism === "on-off" && thinking.chatTemplateKwargs) {
|
|
559
|
-
request.chatTemplateKwargs = { ...thinking.chatTemplateKwargs };
|
|
560
|
-
if (REASONING_EFFORT_ON_OFF_RUNTIMES.has(runtimeId)) {
|
|
561
|
-
request.reasoningEffort = onOffReasoningEffort(thinking.thinkingActive);
|
|
562
|
-
}
|
|
620
|
+
request.chatTemplateKwargs = { ...(request.chatTemplateKwargs ?? {}), ...thinking.chatTemplateKwargs };
|
|
563
621
|
}
|
|
564
622
|
if (parser === "harmony" && thinking.effort) {
|
|
565
623
|
request.reasoningEffort = thinking.effort;
|
|
566
624
|
request.chatTemplateKwargs = { ...(request.chatTemplateKwargs ?? {}), reasoning_effort: thinking.effort };
|
|
567
625
|
}
|
|
626
|
+
// Every mechanism that means "off" has to reach an effort-only runtime as
|
|
627
|
+
// reasoning_effort "none": the template flag above is what llama.cpp reads
|
|
628
|
+
// and what LM Studio drops. An interactive session with thinking "off" had
|
|
629
|
+
// spent 37k reasoning tokens before the effort-levels case reached the
|
|
630
|
+
// wire, and on-off and budget-tokens families reasoned on the same way.
|
|
631
|
+
if (effortOnly && thinking.mechanism !== "none" && thinking.mechanism !== "always-on") {
|
|
632
|
+
if (!thinking.thinkingActive) request.reasoningEffort = onOffReasoningEffort(false);
|
|
633
|
+
else if (thinking.mechanism === "on-off") request.reasoningEffort = onOffReasoningEffort(true);
|
|
634
|
+
}
|
|
568
635
|
return request;
|
|
569
636
|
}
|
|
570
637
|
|
|
@@ -583,7 +650,12 @@ export function resolveModelRuntimeCapabilities(
|
|
|
583
650
|
family,
|
|
584
651
|
capabilities: input.capabilities,
|
|
585
652
|
thinking,
|
|
586
|
-
request: resolveRequestCapability(
|
|
653
|
+
request: resolveRequestCapability(
|
|
654
|
+
thinking,
|
|
655
|
+
parser,
|
|
656
|
+
input.runtimeId === "litellm" ? (input.capabilities.thinkingControlRuntime ?? input.runtimeId) : input.runtimeId,
|
|
657
|
+
quirks,
|
|
658
|
+
),
|
|
587
659
|
response: {
|
|
588
660
|
parser,
|
|
589
661
|
stripTokenizerSentinels: true,
|
|
@@ -671,6 +743,7 @@ function thinkingFormatFromModelApi(api: Api): CapabilityFlags["thinkingFormat"]
|
|
|
671
743
|
|
|
672
744
|
function capabilitiesFromModel(model: Model<Api> & ClioRuntimeMetadata): CapabilityFlags {
|
|
673
745
|
const format = model.compat?.thinkingFormat ?? thinkingFormatFromModelApi(model.api);
|
|
746
|
+
const controlRuntime = (model.clioCoder ?? model.clio)?.thinkingControlRuntime;
|
|
674
747
|
const caps: CapabilityFlags = {
|
|
675
748
|
chat: true,
|
|
676
749
|
tools: true,
|
|
@@ -682,6 +755,7 @@ function capabilitiesFromModel(model: Model<Api> & ClioRuntimeMetadata): Capabil
|
|
|
682
755
|
fim: false,
|
|
683
756
|
contextWindow: model.contextWindow,
|
|
684
757
|
maxTokens: model.maxTokens,
|
|
758
|
+
...(controlRuntime ? { thinkingControlRuntime: controlRuntime } : {}),
|
|
685
759
|
};
|
|
686
760
|
if (
|
|
687
761
|
format === "qwen-chat-template" ||
|