@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
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { SessionPromptInputs } from "../domains/prompts/compiler.js";
|
|
2
|
+
import { canonicalJson, sha256 } from "../domains/prompts/hash.js";
|
|
3
|
+
import type { ContextWindowSource } from "../domains/providers/index.js";
|
|
4
|
+
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
5
|
+
|
|
6
|
+
/** The exact schema bytes pi attaches to a provider request for one tool. */
|
|
7
|
+
export interface AttachedToolSchema {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
parameters: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Project the live agent tools onto the schema fields sent to the provider.
|
|
15
|
+
* Array order is preserved because providers serialize the attached tools in
|
|
16
|
+
* that order, so reordering them changes prompt-prefix bytes too.
|
|
17
|
+
*/
|
|
18
|
+
export function attachedToolSchemasFromState(tools: ReadonlyArray<unknown>): AttachedToolSchema[] {
|
|
19
|
+
const schemas: AttachedToolSchema[] = [];
|
|
20
|
+
for (const tool of tools) {
|
|
21
|
+
if (!tool || typeof tool !== "object" || Array.isArray(tool)) continue;
|
|
22
|
+
const record = tool as Record<string, unknown>;
|
|
23
|
+
schemas.push({
|
|
24
|
+
name: typeof record.name === "string" ? record.name : "",
|
|
25
|
+
description: typeof record.description === "string" ? record.description : "",
|
|
26
|
+
parameters: record.parameters ?? null,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return schemas;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Serialize the exact ordered schema sequence attached to a provider request.
|
|
34
|
+
*
|
|
35
|
+
* `canonicalJson` is deliberately not used here: provider JSON preserves tool
|
|
36
|
+
* array order and nested object insertion order, so canonicalizing parameters
|
|
37
|
+
* can alias two byte-distinct request prefixes. Standard `JSON.stringify`
|
|
38
|
+
* matches the request serialization boundary and throws for unsupported
|
|
39
|
+
* values such as circular references and bigint.
|
|
40
|
+
*/
|
|
41
|
+
export function attachedToolSchemaBytes(schemas: ReadonlyArray<AttachedToolSchema>): string {
|
|
42
|
+
try {
|
|
43
|
+
const bytes = JSON.stringify(schemas);
|
|
44
|
+
if (bytes === undefined) throw new Error("JSON.stringify returned undefined");
|
|
45
|
+
return bytes;
|
|
46
|
+
} catch (err) {
|
|
47
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
48
|
+
throw new Error(`attached tool schemas are not JSON-serializable: ${reason}`, { cause: err });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface MainPromptCacheIdentityInput {
|
|
53
|
+
targetId: string;
|
|
54
|
+
runtimeId: string;
|
|
55
|
+
wireModelId: string;
|
|
56
|
+
autonomy: AutonomyLevel;
|
|
57
|
+
sessionId: string;
|
|
58
|
+
cwd: string;
|
|
59
|
+
workingContextPaths: ReadonlyArray<string>;
|
|
60
|
+
contextWindowSource: ContextWindowSource | null;
|
|
61
|
+
promptInputEpoch: string;
|
|
62
|
+
sessionInputs: SessionPromptInputs;
|
|
63
|
+
attachedToolSchemas: ReadonlyArray<AttachedToolSchema>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Canonical identity for the interactive session-prompt compile cache.
|
|
68
|
+
* Config hot reload explicitly invalidates compiler-owned fragments and
|
|
69
|
+
* rosters; this identity covers every live/caller input resolved per turn.
|
|
70
|
+
*/
|
|
71
|
+
export function mainPromptCacheIdentity(input: MainPromptCacheIdentityInput): string {
|
|
72
|
+
return sha256(
|
|
73
|
+
canonicalJson({
|
|
74
|
+
version: 2,
|
|
75
|
+
targetId: input.targetId,
|
|
76
|
+
runtimeId: input.runtimeId,
|
|
77
|
+
wireModelId: input.wireModelId,
|
|
78
|
+
autonomy: input.autonomy,
|
|
79
|
+
sessionId: input.sessionId,
|
|
80
|
+
cwd: input.cwd,
|
|
81
|
+
workingContextPaths: [...input.workingContextPaths].sort((a, b) => a.localeCompare(b)),
|
|
82
|
+
contextWindowSource: input.contextWindowSource,
|
|
83
|
+
promptInputEpoch: input.promptInputEpoch,
|
|
84
|
+
sessionInputs: input.sessionInputs,
|
|
85
|
+
attachedToolSchemaBytes: attachedToolSchemaBytes(input.attachedToolSchemas),
|
|
86
|
+
}),
|
|
87
|
+
);
|
|
88
|
+
}
|
|
@@ -206,6 +206,36 @@ function researchReport(value: Record<string, unknown>): PresentedContractAnswer
|
|
|
206
206
|
return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `source ${value.source}` };
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
+
function worldKnowledgeReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
210
|
+
if (
|
|
211
|
+
(value.discovery !== "performed" &&
|
|
212
|
+
value.discovery !== "caller-supplied-only" &&
|
|
213
|
+
value.discovery !== "unavailable") ||
|
|
214
|
+
!Array.isArray(value.facts) ||
|
|
215
|
+
!isStringArray(value.synthesis) ||
|
|
216
|
+
!isStringArray(value.uncertainties) ||
|
|
217
|
+
!isStringArray(value.followUpVerification)
|
|
218
|
+
) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
const lines: string[] = [];
|
|
222
|
+
for (const raw of value.facts) {
|
|
223
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
224
|
+
const fact = raw as Record<string, unknown>;
|
|
225
|
+
const claim = reportString(fact.claim);
|
|
226
|
+
const evidence = reportString(fact.evidence);
|
|
227
|
+
if (claim === null || evidence === null || !isStringArray(fact.sources)) return null;
|
|
228
|
+
lines.push(`- ${claim}`, ` support: ${evidence}`);
|
|
229
|
+
if (fact.sources.length > 0) lines.push(` sources: ${fact.sources.join(", ")}`);
|
|
230
|
+
}
|
|
231
|
+
if (value.synthesis.length > 0) lines.push("Synthesis:", ...value.synthesis.map((item) => `- ${item}`));
|
|
232
|
+
if (value.uncertainties.length > 0) lines.push("Uncertainties:", ...value.uncertainties.map((item) => `- ${item}`));
|
|
233
|
+
if (value.followUpVerification.length > 0) {
|
|
234
|
+
lines.push("Verify next:", ...value.followUpVerification.map((item) => `- ${item}`));
|
|
235
|
+
}
|
|
236
|
+
return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `discovery ${value.discovery}` };
|
|
237
|
+
}
|
|
238
|
+
|
|
209
239
|
function scoutReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
210
240
|
if (!Array.isArray(value.findings) || typeof value.needsSplit !== "boolean") return null;
|
|
211
241
|
const lines: string[] = [];
|
|
@@ -250,6 +280,8 @@ function presentedContractAnswer(entry: WorkerEntryState): PresentedContractAnsw
|
|
|
250
280
|
return verifierReport(value);
|
|
251
281
|
case "research-report":
|
|
252
282
|
return researchReport(value);
|
|
283
|
+
case "world-knowledge-report":
|
|
284
|
+
return worldKnowledgeReport(value);
|
|
253
285
|
case "scout-report":
|
|
254
286
|
return scoutReport(value);
|
|
255
287
|
}
|
|
@@ -13,12 +13,12 @@ import type { ReceiptIntegrityOutcome } from "../domains/evidence/trust-status.j
|
|
|
13
13
|
import type { InstalledExtension } from "../domains/extensions/index.js";
|
|
14
14
|
import type { InteropAgentId, InteropProposal, InteropReport } from "../domains/interop/index.js";
|
|
15
15
|
import {
|
|
16
|
-
isPanesPresetId,
|
|
17
16
|
PANES_PRESET_IDS,
|
|
18
17
|
PANES_PRESETS,
|
|
19
18
|
type PanesOperations,
|
|
20
19
|
type PanesPresetId,
|
|
21
20
|
type PanesStatus,
|
|
21
|
+
resolvePanesPresetId,
|
|
22
22
|
} from "../domains/mux/operations.js";
|
|
23
23
|
import type { ProvidersContract, ResolvedModelRef } from "../domains/providers/index.js";
|
|
24
24
|
import { resolveModelReference } from "../domains/providers/index.js";
|
|
@@ -28,9 +28,10 @@ import type {
|
|
|
28
28
|
PromptTemplateExpansion,
|
|
29
29
|
ResourceList,
|
|
30
30
|
} from "../domains/resources/index.js";
|
|
31
|
-
import { parseSkillCommand } from "../domains/resources/index.js";
|
|
31
|
+
import { parseSkillCommand, SKILL_SURFACE_CLEAR_ARG } from "../domains/resources/index.js";
|
|
32
32
|
import type { ShareImportPlan } from "../domains/share/index.js";
|
|
33
33
|
import type { UserTask } from "../domains/user-tasks/store.js";
|
|
34
|
+
import type { ExtensionReloadOutcome } from "../entry/extension-reload.js";
|
|
34
35
|
import { isToolProfileName, TOOL_PROFILE_NAMES, type ToolProfileName } from "../tools/profiles.js";
|
|
35
36
|
import type { NoticeLevel } from "./command-output.js";
|
|
36
37
|
import {
|
|
@@ -115,8 +116,10 @@ type SlashCommandVariant =
|
|
|
115
116
|
/** `ref` is the turnId an `[evicted ...]` marker names. */
|
|
116
117
|
| { kind: "context-recall"; ref: string }
|
|
117
118
|
| { kind: "skill-selector" }
|
|
118
|
-
| { kind: "resources"; family?: "skills" | "prompts" | "extensions"; tab?: LibraryEntryKind }
|
|
119
|
+
| { kind: "resources"; family?: "skills" | "prompts" | "extensions"; tab?: LibraryEntryKind; action?: "reload" }
|
|
119
120
|
| { kind: "skill-invocation"; text: string }
|
|
121
|
+
/** `/skill off`: drop the tool surface an activated skill armed for the session. */
|
|
122
|
+
| { kind: "skill-surface-clear" }
|
|
120
123
|
| ShareCommandVariant
|
|
121
124
|
| ArchiveCommandVariant
|
|
122
125
|
/** `source` is the line the operator typed, echoed above the run's transcript block. */
|
|
@@ -161,6 +164,9 @@ type SlashCommandVariant =
|
|
|
161
164
|
| { kind: "panes-zoom"; target: string }
|
|
162
165
|
| { kind: "panes-close"; target: string }
|
|
163
166
|
| { kind: "panes-usage"; reason?: string }
|
|
167
|
+
/** `/files`: toggle the files pane; `pick` borrows it for one selection; `close` closes it. */
|
|
168
|
+
| { kind: "files"; action: "toggle" | "open" | "close" | "pick" }
|
|
169
|
+
| { kind: "files-usage"; reason: string }
|
|
164
170
|
| { kind: "thinking-set"; level: string }
|
|
165
171
|
| { kind: "thinking-picker" }
|
|
166
172
|
| { kind: "output-set"; verbosity: string }
|
|
@@ -591,6 +597,12 @@ export interface SlashCommandContext {
|
|
|
591
597
|
*/
|
|
592
598
|
runContextRecall?: (ref: string) => void;
|
|
593
599
|
openSkillsHub?: (tab?: LibraryEntryKind) => void;
|
|
600
|
+
/**
|
|
601
|
+
* `/skill off`: drop the tool surface an activated skill armed for the
|
|
602
|
+
* session. Returns the names that were armed. Absent on a host with no
|
|
603
|
+
* chat loop, where nothing can be armed in the first place.
|
|
604
|
+
*/
|
|
605
|
+
clearSkillSurface?: () => ReadonlyArray<string>;
|
|
594
606
|
listPrompts: () => ResourceList<PromptTemplate>;
|
|
595
607
|
/**
|
|
596
608
|
* Resolve a `/name` against the loaded prompt templates. Absent when the host
|
|
@@ -599,6 +611,13 @@ export interface SlashCommandContext {
|
|
|
599
611
|
*/
|
|
600
612
|
expandPromptTemplate?: (text: string) => PromptTemplateExpansion;
|
|
601
613
|
listExtensions?: () => ReadonlyArray<InstalledExtension>;
|
|
614
|
+
/**
|
|
615
|
+
* `/resources extensions reload`: build, validate, and commit the next
|
|
616
|
+
* extension generation together with its user hooks, or report why it was
|
|
617
|
+
* refused. Absent on a host without the reload coordinator, in which case
|
|
618
|
+
* the command says so instead of pretending.
|
|
619
|
+
*/
|
|
620
|
+
reloadExtensions?: () => ExtensionReloadOutcome;
|
|
602
621
|
/** Detection report, pending proposals, and the two consent actions `/interop` drives. */
|
|
603
622
|
interop?: {
|
|
604
623
|
report: () => InteropReport | null;
|
|
@@ -901,9 +920,9 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
901
920
|
},
|
|
902
921
|
{
|
|
903
922
|
name: "skill",
|
|
904
|
-
description: "Open the Skills Hub
|
|
923
|
+
description: "Open the Skills Hub, invoke a skill, or `off` to drop an active skill's tool surface",
|
|
905
924
|
group: "Work",
|
|
906
|
-
kinds: ["skill-selector", "skill-invocation"],
|
|
925
|
+
kinds: ["skill-selector", "skill-invocation", "skill-surface-clear"],
|
|
907
926
|
args: {
|
|
908
927
|
positionals: [
|
|
909
928
|
{ name: "name", required: false },
|
|
@@ -915,16 +934,26 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
915
934
|
return { kind: "skill-selector" };
|
|
916
935
|
}
|
|
917
936
|
const command = parseSkillCommand(trimmed);
|
|
918
|
-
if (command)
|
|
919
|
-
|
|
937
|
+
if (!command) return null;
|
|
938
|
+
// `off` is the one reserved name: an installed skill called `off`
|
|
939
|
+
// would still be reachable from the hub, and clearing the armed
|
|
940
|
+
// surface has to stay typeable without a second command.
|
|
941
|
+
if (command.name === SKILL_SURFACE_CLEAR_ARG && command.args.length === 0) {
|
|
942
|
+
return { kind: "skill-surface-clear" };
|
|
920
943
|
}
|
|
921
|
-
return
|
|
944
|
+
return { kind: "skill-invocation", text: trimmed };
|
|
922
945
|
},
|
|
923
946
|
handle(command, ctx) {
|
|
924
947
|
if (command.kind === "skill-selector") {
|
|
925
948
|
ctx.openSkillsHub?.();
|
|
926
949
|
} else if (command.kind === "skill-invocation") {
|
|
927
950
|
ctx.submitChat(command.text);
|
|
951
|
+
} else if (command.kind === "skill-surface-clear") {
|
|
952
|
+
const cleared = ctx.clearSkillSurface?.() ?? [];
|
|
953
|
+
ctx.notice(
|
|
954
|
+
"info",
|
|
955
|
+
cleared.length > 0 ? `Skill tool surface cleared: ${cleared.join(", ")}.` : "No skill tool surface is active.",
|
|
956
|
+
);
|
|
928
957
|
}
|
|
929
958
|
},
|
|
930
959
|
},
|
|
@@ -937,22 +966,27 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
937
966
|
skills: "Browse installed skills",
|
|
938
967
|
prompts: "Browse prompt templates",
|
|
939
968
|
library: "Browse resource libraries",
|
|
940
|
-
extensions: "Browse installed extensions",
|
|
969
|
+
extensions: "Browse installed extensions; `reload` commits a new extension generation",
|
|
941
970
|
},
|
|
942
971
|
args: {
|
|
943
972
|
subcommands: {
|
|
944
973
|
skills: {},
|
|
945
974
|
prompts: {},
|
|
946
975
|
library: { positionals: [{ name: "kind", required: false }] },
|
|
947
|
-
extensions: {},
|
|
976
|
+
extensions: { positionals: [{ name: "action", required: false, values: ["reload"] }] },
|
|
948
977
|
},
|
|
949
978
|
},
|
|
950
979
|
fromArgs(parsed) {
|
|
951
980
|
if (parsed.error) return { kind: "usage-error", command: "resources", reason: parsed.error };
|
|
952
981
|
if (parsed.subcommand === undefined || parsed.subcommand === "skills")
|
|
953
982
|
return { kind: "resources", family: "skills" };
|
|
954
|
-
if (parsed.subcommand === "prompts"
|
|
955
|
-
|
|
983
|
+
if (parsed.subcommand === "prompts") return { kind: "resources", family: "prompts" };
|
|
984
|
+
if (parsed.subcommand === "extensions") {
|
|
985
|
+
const action = parsed.positionals[0];
|
|
986
|
+
if (action === undefined) return { kind: "resources", family: "extensions" };
|
|
987
|
+
if (action === "reload") return { kind: "resources", family: "extensions", action: "reload" };
|
|
988
|
+
return { kind: "usage-error", command: "resources", reason: `Unknown action: ${action} (one of reload)` };
|
|
989
|
+
}
|
|
956
990
|
const tab = parsed.positionals[0];
|
|
957
991
|
if (tab === undefined) return { kind: "resources" };
|
|
958
992
|
if (!isLibraryTab(tab)) {
|
|
@@ -964,8 +998,10 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
964
998
|
handle(command, ctx) {
|
|
965
999
|
if (command.kind !== "resources") return;
|
|
966
1000
|
if (command.family === "prompts") ctx.openPrompts();
|
|
967
|
-
else if (command.family === "extensions")
|
|
968
|
-
|
|
1001
|
+
else if (command.family === "extensions") {
|
|
1002
|
+
if (command.action === "reload") reloadExtensionsCommand(ctx);
|
|
1003
|
+
else ctx.openExtensions();
|
|
1004
|
+
} else ctx.openSkillsHub?.(command.tab);
|
|
969
1005
|
},
|
|
970
1006
|
},
|
|
971
1007
|
{
|
|
@@ -1643,7 +1679,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1643
1679
|
},
|
|
1644
1680
|
subcommandDescriptions: {
|
|
1645
1681
|
show: "watch a live run or agent in the watch pane",
|
|
1646
|
-
open: `open a utility pane (${PANES_PRESET_IDS.join(", ")}, or a command)`,
|
|
1682
|
+
open: `open a utility pane (${PANES_PRESET_IDS.join(", ")}, \`files --once\` for one pick, or a command)`,
|
|
1647
1683
|
zoom: "toggle zoom on a Clio-owned pane (default: the watch pane)",
|
|
1648
1684
|
close: "close a Clio-owned pane, or all of them",
|
|
1649
1685
|
},
|
|
@@ -1659,9 +1695,10 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1659
1695
|
const first = argv[0] ?? "";
|
|
1660
1696
|
// A bare preset name is a preset; anything else is operator argv,
|
|
1661
1697
|
// which the tool surface deliberately cannot ask for.
|
|
1662
|
-
|
|
1663
|
-
if (argv.length ===
|
|
1664
|
-
|
|
1698
|
+
const preset = resolvePanesPresetId(first);
|
|
1699
|
+
if (argv.length === 1 && preset !== null) return { kind: "panes-open", preset };
|
|
1700
|
+
if (argv.length === 2 && preset === "files" && argv[1] === "--once") {
|
|
1701
|
+
return { kind: "panes-open", preset: "files", once: true };
|
|
1665
1702
|
}
|
|
1666
1703
|
return { kind: "panes-open", argv };
|
|
1667
1704
|
}
|
|
@@ -1691,7 +1728,7 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1691
1728
|
// every `--with-panes` session, even one where no pane host answered.
|
|
1692
1729
|
ctx.notice(
|
|
1693
1730
|
"info",
|
|
1694
|
-
"panes are inactive: this session started without them. Restart with `clio-coder --with-panes`, or set panes.enabled=auto",
|
|
1731
|
+
"panes are inactive: this session started without them. Restart with `clio-coder --with-panes`, or set interface.panes.enabled=auto",
|
|
1695
1732
|
);
|
|
1696
1733
|
return;
|
|
1697
1734
|
}
|
|
@@ -1728,7 +1765,14 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1728
1765
|
// The in-terminal chooser has already restored the TUI by the
|
|
1729
1766
|
// time this resolves. A pick emitted its composer notice; an empty
|
|
1730
1767
|
// chooser was cancellation and deliberately stays silent.
|
|
1731
|
-
if (result.paneId !== null)
|
|
1768
|
+
if (result.paneId !== null) {
|
|
1769
|
+
ctx.notice(
|
|
1770
|
+
"success",
|
|
1771
|
+
result.existing
|
|
1772
|
+
? `focused pane ${result.label} (${result.paneId})`
|
|
1773
|
+
: `opened pane ${result.label} (${result.paneId})`,
|
|
1774
|
+
);
|
|
1775
|
+
}
|
|
1732
1776
|
} else if (result.status === "missing-binary") {
|
|
1733
1777
|
// This is a synchronous slash-surface line, not a transient pane-host
|
|
1734
1778
|
// notification. It remains visible when no pane was ever created and
|
|
@@ -1768,6 +1812,62 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1768
1812
|
});
|
|
1769
1813
|
},
|
|
1770
1814
|
},
|
|
1815
|
+
{
|
|
1816
|
+
name: "files",
|
|
1817
|
+
description: "Toggle the files pane; picks land in the composer as @ mentions",
|
|
1818
|
+
group: "Inspect",
|
|
1819
|
+
kinds: ["files", "files-usage"],
|
|
1820
|
+
args: { positionals: [{ name: "action", required: false }] },
|
|
1821
|
+
subcommandDescriptions: {
|
|
1822
|
+
open: "open the files pane, or focus it when it is already open",
|
|
1823
|
+
close: "close the files pane",
|
|
1824
|
+
pick: "borrow the files pane for one selection, then close it",
|
|
1825
|
+
},
|
|
1826
|
+
fromArgs(parsed) {
|
|
1827
|
+
if (parsed.error) return { kind: "files-usage", reason: parsed.error };
|
|
1828
|
+
const action = parsed.positionals[0];
|
|
1829
|
+
if (action === undefined) return { kind: "files", action: "toggle" };
|
|
1830
|
+
if (action === "open" || action === "close" || action === "pick" || action === "toggle") {
|
|
1831
|
+
return { kind: "files", action };
|
|
1832
|
+
}
|
|
1833
|
+
return { kind: "files-usage", reason: `Unexpected argument: ${action}` };
|
|
1834
|
+
},
|
|
1835
|
+
handle(command, ctx) {
|
|
1836
|
+
if (command.kind === "files-usage") {
|
|
1837
|
+
ctx.notice("info", `${command.reason}\nusage: /files [open|close|pick]`);
|
|
1838
|
+
return;
|
|
1839
|
+
}
|
|
1840
|
+
if (command.kind !== "files") return;
|
|
1841
|
+
const panes = ctx.panes;
|
|
1842
|
+
if (!panes) {
|
|
1843
|
+
ctx.notice(
|
|
1844
|
+
"info",
|
|
1845
|
+
"the files pane is inactive: this session started without panes. Restart with `clio-coder --with-panes`, or set interface.panes.enabled=auto",
|
|
1846
|
+
);
|
|
1847
|
+
return;
|
|
1848
|
+
}
|
|
1849
|
+
const runLocal = ctx.runLocalOperation ?? ((operation: () => Promise<void>) => void operation());
|
|
1850
|
+
runLocal(async () => {
|
|
1851
|
+
const result = await panes.files(command.action);
|
|
1852
|
+
if (result.status === "opened") {
|
|
1853
|
+
// The in-terminal chooser reports through its own composer notice.
|
|
1854
|
+
if (result.paneId !== null) {
|
|
1855
|
+
ctx.notice(
|
|
1856
|
+
"success",
|
|
1857
|
+
result.existing ? `files pane focused (${result.paneId})` : `files pane opened (${result.paneId})`,
|
|
1858
|
+
);
|
|
1859
|
+
}
|
|
1860
|
+
} else if (result.status === "closed") {
|
|
1861
|
+
ctx.notice("info", "files pane closed");
|
|
1862
|
+
} else if (result.status === "missing-binary") {
|
|
1863
|
+
ctx.io.stdout(`${result.detail}\n`);
|
|
1864
|
+
ctx.render();
|
|
1865
|
+
} else {
|
|
1866
|
+
ctx.notice("warn", result.reason);
|
|
1867
|
+
}
|
|
1868
|
+
});
|
|
1869
|
+
},
|
|
1870
|
+
},
|
|
1771
1871
|
{
|
|
1772
1872
|
name: "thinking",
|
|
1773
1873
|
description: "Set the chat thinking level",
|
|
@@ -2069,6 +2169,39 @@ function retiredCommandHint(token: string): string | undefined {
|
|
|
2069
2169
|
}
|
|
2070
2170
|
|
|
2071
2171
|
/** Pure slash-command parser: no I/O, no side effects. Walks the registry in order. */
|
|
2172
|
+
/**
|
|
2173
|
+
* One notice line for a reload outcome. Success when the generation committed
|
|
2174
|
+
* cleanly; warn when it committed with dropped hooks or declaration issues;
|
|
2175
|
+
* error when it was refused and the previous generation stays active.
|
|
2176
|
+
*/
|
|
2177
|
+
export function formatExtensionReloadNotice(outcome: ExtensionReloadOutcome): [NoticeLevel, string] {
|
|
2178
|
+
if (outcome.status !== "committed") {
|
|
2179
|
+
return ["error", `extensions: reload rejected (${outcome.reason}); generation ${outcome.generation} stays active`];
|
|
2180
|
+
}
|
|
2181
|
+
const delta = outcome.changed
|
|
2182
|
+
? `changed: +${outcome.added.length} -${outcome.removed.length} ~${outcome.modified.length}`
|
|
2183
|
+
: "unchanged";
|
|
2184
|
+
const issueCount = outcome.hooks.fileIssues + outcome.hooks.issues;
|
|
2185
|
+
const hookParts = [`${outcome.hooks.registered} registered`];
|
|
2186
|
+
if (outcome.hooks.dropped > 0) hookParts.push(`${outcome.hooks.dropped} dropped`);
|
|
2187
|
+
if (issueCount > 0) hookParts.push(`${issueCount} issue${issueCount === 1 ? "" : "s"}`);
|
|
2188
|
+
if (outcome.hooks.overridden > 0) hookParts.push(`${outcome.hooks.overridden} overridden`);
|
|
2189
|
+
const level: NoticeLevel = outcome.hooks.dropped > 0 || issueCount > 0 ? "warn" : "success";
|
|
2190
|
+
return [level, `extensions: generation ${outcome.generation} committed (${delta}); hooks: ${hookParts.join(", ")}`];
|
|
2191
|
+
}
|
|
2192
|
+
|
|
2193
|
+
function reloadExtensionsCommand(ctx: SlashCommandContext): void {
|
|
2194
|
+
if (!ctx.reloadExtensions) {
|
|
2195
|
+
ctx.notice("warn", "extensions: reload is unavailable in this session; restart to pick up installed changes");
|
|
2196
|
+
return;
|
|
2197
|
+
}
|
|
2198
|
+
const outcome = ctx.reloadExtensions();
|
|
2199
|
+
const [level, text] = formatExtensionReloadNotice(outcome);
|
|
2200
|
+
ctx.notice(level, text);
|
|
2201
|
+
for (const line of outcome.lines) ctx.notice("warn", line);
|
|
2202
|
+
if (outcome.status === "committed") ctx.openExtensions();
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2072
2205
|
export function parseSlashCommand(input: string): SlashCommand {
|
|
2073
2206
|
const trimmed = input.trim();
|
|
2074
2207
|
if (trimmed.length === 0) return { kind: "empty" };
|
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
import type { SmoothStreaming } from "../core/defaults.js";
|
|
2
|
-
|
|
3
|
-
export const SMOOTH_STREAM_ENV = "CLIO_CODER_SMOOTH_STREAM";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* One-process override precedence: a valid environment value wins, while an
|
|
7
|
-
* invalid value can never accidentally enable animation. `0` is the immediate
|
|
8
|
-
* escape hatch; `1` is accepted as the explicit `on` spelling.
|
|
9
|
-
*/
|
|
10
|
-
export function resolveSmoothStreamingMode(
|
|
11
|
-
configured: SmoothStreaming,
|
|
12
|
-
env: NodeJS.ProcessEnv = process.env,
|
|
13
|
-
): SmoothStreaming {
|
|
14
|
-
const raw = env[SMOOTH_STREAM_ENV]?.trim().toLowerCase();
|
|
15
|
-
if (!raw) return configured;
|
|
16
|
-
if (raw === "0" || raw === "off" || raw === "false") return "off";
|
|
17
|
-
if (raw === "auto") return "auto";
|
|
18
|
-
if (raw === "1" || raw === "on" || raw === "true") return "on";
|
|
19
|
-
return "off";
|
|
20
|
-
}
|
|
21
|
-
|
|
22
1
|
export interface AutoPacingEnvironment {
|
|
23
2
|
isTTY: boolean;
|
|
24
3
|
term?: string;
|
|
25
|
-
termProgram?: string;
|
|
26
4
|
sshConnection?: string;
|
|
27
5
|
sshTty?: string;
|
|
28
6
|
tmux?: string;
|
|
@@ -53,7 +31,6 @@ export function processAutoPacingAllowed(backpressureObserved: boolean, env: Nod
|
|
|
53
31
|
return autoPacingAllowed({
|
|
54
32
|
isTTY: process.stdout.isTTY === true,
|
|
55
33
|
...(env.TERM === undefined ? {} : { term: env.TERM }),
|
|
56
|
-
...(env.TERM_PROGRAM === undefined ? {} : { termProgram: env.TERM_PROGRAM }),
|
|
57
34
|
...(env.SSH_CONNECTION === undefined ? {} : { sshConnection: env.SSH_CONNECTION }),
|
|
58
35
|
...(env.SSH_TTY === undefined ? {} : { sshTty: env.SSH_TTY }),
|
|
59
36
|
...(env.TMUX === undefined ? {} : { tmux: env.TMUX }),
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Abbreviate a wire model id for chips and dashboards without amputating a
|
|
3
|
-
* version suffix.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `qwen3-coder-30b`. A single part longer than 18 characters is hard-clipped.
|
|
3
|
+
* meaningful placement prefix or version suffix. `dynamo/qwen3.8-27b` remains
|
|
4
|
+
* visible as selected; only the leaf is shortened when the complete route is
|
|
5
|
+
* wider than 24 characters.
|
|
7
6
|
*/
|
|
8
7
|
export function abbreviateModelId(modelId: string | null | undefined): string {
|
|
9
|
-
const
|
|
8
|
+
const segments = (modelId ?? "").trim().split("/").filter(Boolean);
|
|
9
|
+
const base = segments.pop() ?? "";
|
|
10
10
|
if (base.length === 0) return "model";
|
|
11
|
+
const prefix = segments[0];
|
|
12
|
+
const maxLeaf = prefix ? Math.max(8, 24 - prefix.length - 1) : 18;
|
|
11
13
|
const parts = base.split("-").filter((part) => part.length > 0);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
let leaf: string;
|
|
15
|
+
if (parts.length <= 1) leaf = base.length > maxLeaf ? base.slice(0, maxLeaf) : base;
|
|
16
|
+
else {
|
|
17
|
+
const kept: string[] = [];
|
|
18
|
+
for (const part of parts) {
|
|
19
|
+
const next = [...kept, part].join("-");
|
|
20
|
+
if (kept.length > 0 && next.length > maxLeaf) break;
|
|
21
|
+
kept.push(part);
|
|
22
|
+
}
|
|
23
|
+
const joined = kept.join("-");
|
|
24
|
+
leaf = joined.length > maxLeaf ? joined.slice(0, maxLeaf) : joined;
|
|
18
25
|
}
|
|
19
|
-
|
|
20
|
-
return joined.length > 18 ? joined.slice(0, 18) : joined;
|
|
26
|
+
return prefix ? `${prefix}/${leaf}` : leaf;
|
|
21
27
|
}
|
|
22
28
|
|
|
23
29
|
export interface TargetLabelOptions {
|
|
@@ -81,7 +81,7 @@ import {
|
|
|
81
81
|
type SessionPromptCompileRecord,
|
|
82
82
|
} from "../domains/session/prompt-manifest.js";
|
|
83
83
|
import type { AgentMessage, Usage } from "../engine/types.js";
|
|
84
|
-
import type
|
|
84
|
+
import { resolveToolPromptHint, type ToolRegistry } from "../tools/registry.js";
|
|
85
85
|
import {
|
|
86
86
|
backendCacheVerdict,
|
|
87
87
|
extractUserText,
|
|
@@ -90,6 +90,7 @@ import {
|
|
|
90
90
|
toolNamesFromAgentState,
|
|
91
91
|
} from "./chat-loop-messages.js";
|
|
92
92
|
import { buildModelReplayAgentMessagesFromTurns } from "./model-session-replay.js";
|
|
93
|
+
import { attachedToolSchemasFromState, mainPromptCacheIdentity } from "./prompt-cache-identity.js";
|
|
93
94
|
import { renderCompactionSummaryLine, renderEvictionSkipLine } from "./renderers/compaction-summary.js";
|
|
94
95
|
import type { TurnMiddleware } from "./turn-middleware.js";
|
|
95
96
|
import type { AgentRuntime, ChatTurnState } from "./turn-state.js";
|
|
@@ -270,8 +271,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
270
271
|
// before the operator did.
|
|
271
272
|
let lastPrewarm: PrewarmStats | null = null;
|
|
272
273
|
// The session system prompt, compiled once per session. Recompiles happen
|
|
273
|
-
// only
|
|
274
|
-
//
|
|
274
|
+
// only when the canonical identity of every live compile input changes, or
|
|
275
|
+
// a config hot-reload invalidates compiler-owned inputs. A
|
|
275
276
|
// recompile that changes the prompt text appends a "promptRecompiled"
|
|
276
277
|
// ledger entry so a cold provider cache is always explainable.
|
|
277
278
|
let sessionPrompt: CompiledSessionPrompt | null = null;
|
|
@@ -640,8 +641,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
640
641
|
if (!usage || !deps.observability) return;
|
|
641
642
|
if (usage.totalTokens <= 0 && usage.cost.total <= 0) return;
|
|
642
643
|
deps.observability.recordTokens(
|
|
643
|
-
agentRuntime.targetId,
|
|
644
|
-
agentRuntime.wireModelId,
|
|
644
|
+
usage.targetId ?? agentRuntime.targetId,
|
|
645
|
+
usage.modelId ?? agentRuntime.wireModelId,
|
|
645
646
|
usage.totalTokens,
|
|
646
647
|
usage.cost.total,
|
|
647
648
|
{
|
|
@@ -653,7 +654,11 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
653
654
|
totalTokens: usage.totalTokens,
|
|
654
655
|
apiCalls: Math.max(1, Math.round(usage.apiCalls)),
|
|
655
656
|
},
|
|
656
|
-
|
|
657
|
+
usage.targetId === undefined && usage.modelId === undefined
|
|
658
|
+
? agentRuntime.runtimeResolution.costProvenance
|
|
659
|
+
: usage.cost.total > 0
|
|
660
|
+
? "estimated"
|
|
661
|
+
: "unknown",
|
|
657
662
|
);
|
|
658
663
|
};
|
|
659
664
|
|
|
@@ -914,8 +919,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
914
919
|
if (!summaryLifecycleStarted) startSummaryLifecycle();
|
|
915
920
|
deps.bus?.emit(BusChannels.CompactionEnd, { trigger, at: Date.now() });
|
|
916
921
|
|
|
917
|
-
// The
|
|
918
|
-
//
|
|
922
|
+
// The checkpoint identifies the selected summary route; older results
|
|
923
|
+
// fall back to the active chat route. The ledger carries usage for reseed; this is the
|
|
919
924
|
// live sink, so `/cost` and the footer move the moment /context compact
|
|
920
925
|
// returns instead of staying byte-identical to before it ran.
|
|
921
926
|
recordCompactionUsage(agentRuntime, result);
|
|
@@ -1021,8 +1026,8 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1021
1026
|
|
|
1022
1027
|
/**
|
|
1023
1028
|
* Ensure the session system prompt is compiled and applied to the live
|
|
1024
|
-
* agent. Compiles only when the
|
|
1025
|
-
*
|
|
1029
|
+
* agent. Compiles only when the canonical live-input identity changes
|
|
1030
|
+
* or a config hot-reload invalidated compiler-owned inputs in the
|
|
1026
1031
|
* cache; every other submit reuses the cached prompt byte-for-byte. A
|
|
1027
1032
|
* compile whose text differs from the previous prompt queues a
|
|
1028
1033
|
* "promptRecompiled" ledger entry (written once the session exists).
|
|
@@ -1032,14 +1037,9 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1032
1037
|
const settings = deps.getSettings();
|
|
1033
1038
|
const autonomy = settings.safety.autonomy ?? "auto-edit";
|
|
1034
1039
|
const sessionId = deps.session?.current()?.id ?? "";
|
|
1035
|
-
const
|
|
1036
|
-
const key = `${agentRuntime.targetId}|${agentRuntime.wireModelId}|${autonomy}|${sessionId}|${workingContextKey}`;
|
|
1037
|
-
if (sessionPrompt && sessionPromptKey === key) {
|
|
1038
|
-
lastSystemPromptReused = true;
|
|
1039
|
-
return sessionPrompt;
|
|
1040
|
-
}
|
|
1040
|
+
const cwd = process.cwd();
|
|
1041
1041
|
const modelState = agentRuntime.agent.state.model as
|
|
1042
|
-
| (typeof agentRuntime.agent.state.model & {
|
|
1042
|
+
| (typeof agentRuntime.agent.state.model & { clioCoder?: { quirks?: LocalModelQuirks } })
|
|
1043
1043
|
| undefined;
|
|
1044
1044
|
// `Context window: N` is the window the backend will actually serve
|
|
1045
1045
|
// this session, taken from the resolution the turn already ran rather
|
|
@@ -1057,13 +1057,14 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1057
1057
|
const contextWindow = typeof resolvedWindow === "number" && resolvedWindow > 0 ? resolvedWindow : null;
|
|
1058
1058
|
const contextWindowSource: ContextWindowSource | null =
|
|
1059
1059
|
contextWindow === null ? null : windowDetails.contextWindowSource;
|
|
1060
|
-
const guidance = modelState?.
|
|
1060
|
+
const guidance = modelState?.clioCoder?.quirks?.thinking?.guidance;
|
|
1061
1061
|
// Per-tool prompt hints come from registry metadata, derived once from
|
|
1062
1062
|
// the frozen surface per compile. The compiler renders them sorted by
|
|
1063
1063
|
// tool name, so the compiled text stays byte-stable for a given surface.
|
|
1064
1064
|
const toolNames = toolNamesFromAgentState(agentRuntime.agent.state.tools);
|
|
1065
|
+
const attachedToolSchemas = attachedToolSchemasFromState(agentRuntime.agent.state.tools);
|
|
1065
1066
|
const toolPromptHints = toolNames.flatMap((name) => {
|
|
1066
|
-
const hint = deps.toolRegistry?.get(name as ToolName)?.metadata?.promptHint;
|
|
1067
|
+
const hint = resolveToolPromptHint(deps.toolRegistry?.get(name as ToolName)?.metadata?.promptHint, "session");
|
|
1067
1068
|
return hint ? [{ tool: name, hint }] : [];
|
|
1068
1069
|
});
|
|
1069
1070
|
const sessionInputs: SessionPromptInputs = {
|
|
@@ -1085,11 +1086,29 @@ export function createTurnContext(deps: TurnContextDeps): TurnContext {
|
|
|
1085
1086
|
);
|
|
1086
1087
|
}
|
|
1087
1088
|
}
|
|
1089
|
+
const key = mainPromptCacheIdentity({
|
|
1090
|
+
targetId: agentRuntime.targetId,
|
|
1091
|
+
runtimeId: agentRuntime.runtimeId,
|
|
1092
|
+
wireModelId: agentRuntime.wireModelId,
|
|
1093
|
+
autonomy,
|
|
1094
|
+
sessionId,
|
|
1095
|
+
cwd,
|
|
1096
|
+
workingContextPaths: [...sessionWorkingContextPaths],
|
|
1097
|
+
contextWindowSource,
|
|
1098
|
+
promptInputEpoch: deps.prompts.inputEpoch(),
|
|
1099
|
+
sessionInputs,
|
|
1100
|
+
attachedToolSchemas,
|
|
1101
|
+
});
|
|
1102
|
+
if (sessionPrompt && sessionPromptKey === key) {
|
|
1103
|
+
lastSystemPromptReused = true;
|
|
1104
|
+
return sessionPrompt;
|
|
1105
|
+
}
|
|
1088
1106
|
try {
|
|
1089
1107
|
const result = await deps.prompts.compileSessionPrompt({
|
|
1108
|
+
sessionId,
|
|
1090
1109
|
sessionInputs,
|
|
1091
1110
|
autonomy,
|
|
1092
|
-
cwd
|
|
1111
|
+
cwd,
|
|
1093
1112
|
workingContextPaths: [...sessionWorkingContextPaths],
|
|
1094
1113
|
});
|
|
1095
1114
|
const previousHash = sessionPromptHash ?? lastRecordedPromptHash();
|