@iowarp/clio-coder 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +131 -0
- package/CONTRIBUTING.md +59 -36
- package/README.md +407 -375
- package/SECURITY.md +2 -1
- package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
- package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
- package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
- package/dist/chunk-2X4RYJTJ.js +39 -0
- package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/chunk-34BHNEE3.js +1846 -0
- package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
- package/dist/chunk-3KIPBMUA.js +308 -0
- package/dist/chunk-3M6DQK6S.js +362 -0
- package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
- package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
- package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
- package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
- package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
- package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/chunk-77QIVUZB.js +1334 -0
- package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
- package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
- package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
- package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
- package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
- package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-F2I26BDK.js +66 -0
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
- package/dist/chunk-HLAFFSEK.js +360 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
- package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
- package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
- package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
- package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
- package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
- package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
- package/dist/chunk-KPXDY6QF.js +47 -0
- package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
- package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
- package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
- package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/chunk-NMJXSHBJ.js +283 -0
- package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
- package/dist/chunk-PJX3WQUQ.js +42 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
- package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
- package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
- package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
- package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
- package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
- package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
- package/dist/chunk-UXCU4E3T.js +303 -0
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
- package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
- package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
- package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
- package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
- package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
- package/dist/chunk-XQRY4DTA.js +657 -0
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
- package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
- package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +38 -37
- package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
- package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
- package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
- package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
- package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
- package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
- package/dist/doctor-LHBD36VU.js +773 -0
- package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
- package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
- package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
- package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
- package/dist/fleet-view-TWHJKCN6.js +96 -0
- package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
- package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
- package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
- package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
- package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
- package/dist/panes-IXKLOKA2.js +75 -0
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
- package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
- package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
- package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
- package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
- package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
- package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
- package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
- package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
- package/dist/worker/entry.js +83 -63
- 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} +26 -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} +25 -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} +40 -17
- package/docs/{observability.md → architecture/observability.md} +26 -13
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
- package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
- 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} +26 -13
- 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} +70 -46
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
- package/docs/guide/configuration-reference.md +1158 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
- package/docs/history/release-cut-checklist.md +207 -0
- package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
- 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} +41 -50
- 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} +17 -10
- 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 +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +13 -21
- package/skills/README.md +51 -42
- package/skills/coding/ast-grep/SKILL.md +9 -3
- package/skills/coding/coding-standards/SKILL.md +9 -3
- package/skills/coding/prototype/SKILL.md +9 -3
- package/skills/coding/tdd/SKILL.md +9 -3
- package/skills/context/context-handoff/SKILL.md +13 -4
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +9 -3
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +10 -5
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +10 -4
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +8 -3
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +8 -3
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
- package/skills/meta/clio-coder-test/SKILL.md +146 -0
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
- package/skills/meta/clio-coder-test/references/harness.md +102 -0
- package/skills/meta/clio-coder-test/references/test-map.md +96 -0
- package/skills/meta/credentials/SKILL.md +10 -3
- package/skills/meta/find-skills/SKILL.md +9 -3
- package/skills/meta/herdr/SKILL.md +9 -3
- package/skills/meta/skill-craft/SKILL.md +39 -16
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +9 -3
- package/skills/planning/prd/SKILL.md +9 -3
- package/skills/planning/product-intent/SKILL.md +9 -3
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +9 -3
- package/skills/research/experiment-protocol/SKILL.md +10 -3
- package/skills/research/scientific-debugging/SKILL.md +10 -3
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +10 -3
- package/skills/skill-marketplace.json +285 -66
- package/skills/workflow/cut-it/SKILL.md +11 -3
- package/skills/workflow/design-council/SKILL.md +12 -3
- package/skills/workflow/grill-me/SKILL.md +9 -3
- package/skills/workflow/workflow-distiller/SKILL.md +9 -3
- package/src/cli/acp.ts +2 -2
- package/src/cli/args.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +6 -6
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +68 -15
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -31
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +28 -20
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +31 -10
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/eval.ts +1 -2
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +9 -6
- package/src/cli/index.ts +2 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +13 -17
- package/src/cli/share.ts +6 -2
- package/src/cli/skills-eval.ts +14 -14
- package/src/cli/targets.ts +25 -30
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +96 -4
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +6 -6
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +132 -87
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +51 -6
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1066 -886
- package/src/core/defaults.ts +326 -530
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +33 -52
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- 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/catalog.ts +14 -26
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +26 -4
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +56 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -6
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capability-match.ts +10 -0
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +169 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- 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/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +220 -70
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +9 -19
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +47 -40
- package/src/domains/dispatch/types.ts +58 -6
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +10 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +20 -3
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- 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/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +22 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +276 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +86 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- 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 +35 -4
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +30 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +195 -25
- package/src/domains/mux/detect.ts +23 -6
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +21 -1
- package/src/domains/mux/operations.ts +72 -5
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +79 -7
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/extension.ts +12 -4
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +15 -91
- package/src/domains/observability/trace-store.ts +65 -19
- package/src/domains/prompts/compiler.ts +75 -55
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +100 -12
- package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
- 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 +11 -18
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +99 -23
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +87 -39
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +41 -18
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/share/archive.ts +249 -43
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +89 -35
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +4 -23
- package/src/engine/apis/lmstudio.ts +4 -9
- package/src/engine/apis/ollama-native.ts +9 -9
- package/src/engine/apis/openai-completions.ts +30 -27
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +10 -35
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -17
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +54 -24
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +163 -120
- package/src/interactive/application-controller.ts +23 -22
- package/src/interactive/bus-notices.ts +10 -3
- package/src/interactive/chat-loop-messages.ts +3 -13
- package/src/interactive/chat-loop.ts +18 -9
- package/src/interactive/chat-panel.ts +37 -14
- package/src/interactive/chat-renderer.ts +71 -7
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +36 -44
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +15 -44
- package/src/interactive/interactive-application.ts +116 -61
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +6 -2
- package/src/interactive/interactive-presentation.ts +22 -17
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +65 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +360 -303
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +145 -43
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +401 -190
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -24
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +41 -26
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +72 -11
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +6 -6
- package/src/tools/bash.ts +2 -2
- 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/compete-worktrees.ts +27 -17
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +44 -13
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +6 -2
- package/src/tools/dispatch-plan.ts +48 -15
- package/src/tools/dispatch-run-events.ts +13 -11
- package/src/tools/dispatch-runner.ts +11 -6
- 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/find.ts +1 -6
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +4 -5
- package/src/tools/observers.ts +0 -33
- 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 +30 -7
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-36EJLSQQ.js +0 -814
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUCTJL45.js +0 -45
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-TZ3SGWZZ.js +0 -48
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/dist/fleet-view-ZCON35AG.js +0 -102
- package/dist/panes-HMABYVO4.js +0 -58
- package/docs/artifact-versions.md +0 -67
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/release-cut-checklist.md +0 -193
- package/docs/time-conventions.md +0 -101
- package/skills/meta/clio-test/SKILL.md +0 -133
- package/skills/meta/clio-test/references/harness.md +0 -126
- package/skills/meta/clio-test/references/test-map.md +0 -69
- package/src/engine/apis/degraded-inference.ts +0 -95
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
1
2
|
import {
|
|
2
3
|
asDirectoryPathBoundary,
|
|
3
4
|
normalizePathBoundaryEntry,
|
|
@@ -14,6 +15,7 @@ const POSIX_ABSOLUTE_TOKEN_RE = /(?:^|[\s("'])((?:\/[\w.~+-]+)+)/gu;
|
|
|
14
15
|
const WINDOWS_ABSOLUTE_TOKEN_RE = /(?:^|[\s("'])([A-Za-z]:[\\/][^\s"']+)/gu;
|
|
15
16
|
const BACKSLASH_PATH_RE = /\b[A-Za-z_.-][\w.-]*\\(?:(?:[\w.-]+\\)+[\w.-]+|[\w-]+\.[A-Za-z0-9]{1,8})\b/gu;
|
|
16
17
|
const DOUBLE_SEPARATOR_PATH_RE = /\b[\w.-]+\/\/[\w./-]+/gu;
|
|
18
|
+
const PARENT_PREFIX_RE = /^(?:\.\.\/)+/u;
|
|
17
19
|
|
|
18
20
|
export type DispatchPathProvenanceKind = "declared" | "derived" | "inferred";
|
|
19
21
|
export type DispatchPathConfidence = "certain" | "high" | "medium" | "low";
|
|
@@ -49,11 +51,24 @@ export interface DispatchPathScopeProvenance {
|
|
|
49
51
|
writeBoundaries: DispatchPathProvenanceEntry[];
|
|
50
52
|
}
|
|
51
53
|
|
|
54
|
+
/**
|
|
55
|
+
* A prose token whose leading "../" run inference had to reinterpret, kept so
|
|
56
|
+
* the notice can name the raw token beside the scope it produced. `resolved` is
|
|
57
|
+
* the repository path the stripped remainder anchored to, or null when nothing
|
|
58
|
+
* under the dispatch root carried it and the token took no part in scope.
|
|
59
|
+
*/
|
|
60
|
+
export interface DispatchInferredParentToken {
|
|
61
|
+
token: string;
|
|
62
|
+
resolved: string | null;
|
|
63
|
+
source: "task" | "briefing";
|
|
64
|
+
}
|
|
65
|
+
|
|
52
66
|
export interface DispatchPathScope {
|
|
53
67
|
source: "declared" | "inferred";
|
|
54
68
|
workingContextPaths: ReadonlyArray<string>;
|
|
55
69
|
writeBoundaries: ReadonlyArray<string>;
|
|
56
70
|
inferredOnlyPaths: ReadonlyArray<string>;
|
|
71
|
+
parentTokens: ReadonlyArray<DispatchInferredParentToken>;
|
|
57
72
|
provenance: DispatchPathScopeProvenance;
|
|
58
73
|
}
|
|
59
74
|
|
|
@@ -64,15 +79,15 @@ export interface DeclaredScopeReplacementNotice {
|
|
|
64
79
|
message: string;
|
|
65
80
|
}
|
|
66
81
|
|
|
67
|
-
export interface
|
|
68
|
-
code: "legacy_scope_inferred"
|
|
82
|
+
export interface InferredScopeParentTokenNotice {
|
|
83
|
+
code: "legacy_scope_inferred";
|
|
69
84
|
level: "warning";
|
|
70
85
|
paths: ReadonlyArray<{
|
|
71
86
|
path: string;
|
|
72
|
-
policy: "working-context"
|
|
73
|
-
provenance:
|
|
74
|
-
source:
|
|
75
|
-
confidence:
|
|
87
|
+
policy: "working-context";
|
|
88
|
+
provenance: "inferred";
|
|
89
|
+
source: "task" | "briefing";
|
|
90
|
+
confidence: "low";
|
|
76
91
|
}>;
|
|
77
92
|
message: string;
|
|
78
93
|
}
|
|
@@ -152,19 +167,78 @@ export function declaredIntentPathProvenance(input: {
|
|
|
152
167
|
return sortedEntries(entries);
|
|
153
168
|
}
|
|
154
169
|
|
|
155
|
-
|
|
170
|
+
/** One prose token read as a repository path, as an anchored "../" quote, or as neither. */
|
|
171
|
+
type InferredPathToken =
|
|
172
|
+
| { kind: "token"; token: string }
|
|
173
|
+
| { kind: "anchored"; token: string; resolved: string }
|
|
174
|
+
| { kind: "dropped"; token: string };
|
|
175
|
+
|
|
176
|
+
function inferredPaths(
|
|
177
|
+
req: Pick<DispatchRequest, "task" | "briefing">,
|
|
178
|
+
root: string,
|
|
179
|
+
): { paths: string[]; droppedTokens: string[] } {
|
|
156
180
|
const paths = new Set<string>();
|
|
181
|
+
const droppedTokens = new Set<string>();
|
|
157
182
|
const text = `${req.task}\n${req.briefing ?? ""}`;
|
|
158
183
|
for (const match of text.matchAll(DISPATCH_PATH_TOKEN_RE)) {
|
|
159
|
-
const
|
|
184
|
+
const inferred = inferredPathToken(match[0], root);
|
|
185
|
+
if (inferred.kind === "dropped") {
|
|
186
|
+
droppedTokens.add(inferred.token);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const token = inferred.kind === "anchored" ? inferred.resolved : inferred.token;
|
|
160
190
|
if (token.startsWith("http://") || token.startsWith("https://")) continue;
|
|
161
191
|
paths.add(token);
|
|
162
192
|
}
|
|
163
|
-
return [...paths];
|
|
193
|
+
return { paths: [...paths], droppedTokens: [...droppedTokens] };
|
|
164
194
|
}
|
|
165
195
|
|
|
166
|
-
|
|
167
|
-
|
|
196
|
+
/**
|
|
197
|
+
* A leading "./" is how prose quotes an import specifier ("./parser.js"); it
|
|
198
|
+
* names the same repository path without the prefix, and the boundary grammar
|
|
199
|
+
* would otherwise refuse the whole dispatch for a dot segment.
|
|
200
|
+
*
|
|
201
|
+
* A leading "../" run is that same quote copied out of a file whose location
|
|
202
|
+
* this function never sees. Both callers, strictInferredPaths and
|
|
203
|
+
* inferredPaths, are handed the task or briefing text and nothing else, so the
|
|
204
|
+
* origin the run is measured against is unknowable here and no arithmetic on
|
|
205
|
+
* the run's length can decide whether it escapes. What is decidable is whether
|
|
206
|
+
* the remainder names something under the dispatch root, so the run is
|
|
207
|
+
* stripped and the remainder probed: "../src/store.js" quoted out of
|
|
208
|
+
* test/store.test.ts anchors to src/store.js, and "../../../etc/passwd"
|
|
209
|
+
* anchors to nothing in a checkout that holds no etc/passwd.
|
|
210
|
+
*
|
|
211
|
+
* That is a deliberate reading of issue #266, recorded here because it is the
|
|
212
|
+
* one place the choice is made. Criterion 1 ("never rejects the dispatch") and
|
|
213
|
+
* criterion 2 ("a prose token whose .. segments would leave the repository
|
|
214
|
+
* root is still refused") ask for opposite answers on a leading run, and only
|
|
215
|
+
* criterion 1 is decidable without an origin, so a run that names nothing is
|
|
216
|
+
* dropped rather than refused. Neither outcome widens authority: an inferred
|
|
217
|
+
* path selects project rules and compiles context but never becomes a write
|
|
218
|
+
* boundary, and an anchored remainder carries no ".." so path.resolve keeps it
|
|
219
|
+
* under the root. Both outcomes are named to the operator by
|
|
220
|
+
* inferredScopeParentTokenNotice, so the reinterpretation is never silent.
|
|
221
|
+
*
|
|
222
|
+
* The probe costs one existsSync per "../"-leading token (3 microseconds on a
|
|
223
|
+
* hit and 2 on a miss over 5,000 warm calls on this checkout) and no stat at
|
|
224
|
+
* all for the ordinary token, which the grammar matches dozens of per dispatch
|
|
225
|
+
* (the 27 tokens per task measured for REPORTABLE_OMITTED_PATH_RE below).
|
|
226
|
+
*
|
|
227
|
+
* A ".." or "." outside the leading run ("../src/../../b.ts", "../src/./b.ts")
|
|
228
|
+
* walks back out of a segment it already anchored, which is decidable without
|
|
229
|
+
* an origin, so it falls through to the boundary grammar and keeps its
|
|
230
|
+
* refusal, as does a run that leaves no remainder at all ("../..").
|
|
231
|
+
*/
|
|
232
|
+
function inferredPathToken(raw: string, root: string): InferredPathToken {
|
|
233
|
+
const token = raw.replace(/^\.\//u, "").replace(/\.+$/u, "");
|
|
234
|
+
const parents = PARENT_PREFIX_RE.exec(token)?.[0];
|
|
235
|
+
if (parents === undefined) return { kind: "token", token };
|
|
236
|
+
const rest = token.slice(parents.length);
|
|
237
|
+
const segments = rest.split("/");
|
|
238
|
+
if (rest.length === 0 || segments.includes("..") || segments.includes(".")) return { kind: "token", token };
|
|
239
|
+
return existsSync(resolvePathBoundary(root, rest))
|
|
240
|
+
? { kind: "anchored", token, resolved: rest }
|
|
241
|
+
: { kind: "dropped", token };
|
|
168
242
|
}
|
|
169
243
|
|
|
170
244
|
function failMalformedText(text: string, source: "task" | "briefing"): void {
|
|
@@ -201,18 +275,31 @@ function failMalformedText(text: string, source: "task" | "briefing"): void {
|
|
|
201
275
|
function strictInferredPaths(
|
|
202
276
|
text: string,
|
|
203
277
|
source: "task" | "briefing",
|
|
204
|
-
|
|
278
|
+
root: string,
|
|
279
|
+
): {
|
|
280
|
+
paths: Array<{ path: string; evidence: DispatchPathProvenanceEvidence }>;
|
|
281
|
+
parentTokens: DispatchInferredParentToken[];
|
|
282
|
+
} {
|
|
205
283
|
failMalformedText(text, source);
|
|
206
284
|
const withoutUrls = text.replace(HTTP_URL_RE, (url) => " ".repeat(url.length));
|
|
207
285
|
const evidence: DispatchPathProvenanceEvidence =
|
|
208
286
|
source === "task"
|
|
209
287
|
? { provenance: "inferred", source, confidence: "medium", reason: "task_path_token" }
|
|
210
288
|
: { provenance: "inferred", source, confidence: "low", reason: "briefing_path_token" };
|
|
211
|
-
const
|
|
289
|
+
const paths: Array<{ path: string; evidence: DispatchPathProvenanceEvidence }> = [];
|
|
290
|
+
const parentTokens: DispatchInferredParentToken[] = [];
|
|
212
291
|
for (const match of withoutUrls.matchAll(DISPATCH_PATH_TOKEN_RE)) {
|
|
213
|
-
const
|
|
292
|
+
const inferred = inferredPathToken(match[0], root);
|
|
293
|
+
if (inferred.kind === "dropped") {
|
|
294
|
+
parentTokens.push({ token: inferred.token, resolved: null, source });
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
if (inferred.kind === "anchored") {
|
|
298
|
+
parentTokens.push({ token: inferred.token, resolved: inferred.resolved, source });
|
|
299
|
+
}
|
|
300
|
+
const token = inferred.kind === "anchored" ? inferred.resolved : inferred.token;
|
|
214
301
|
try {
|
|
215
|
-
|
|
302
|
+
paths.push({ path: normalizePathBoundaryEntry(token), evidence });
|
|
216
303
|
} catch (error) {
|
|
217
304
|
const code =
|
|
218
305
|
error instanceof PathBoundaryError && error.code === "absolute"
|
|
@@ -226,7 +313,7 @@ function strictInferredPaths(
|
|
|
226
313
|
);
|
|
227
314
|
}
|
|
228
315
|
}
|
|
229
|
-
return
|
|
316
|
+
return { paths, parentTokens };
|
|
230
317
|
}
|
|
231
318
|
|
|
232
319
|
function legacyPathScope(req: DispatchRequest, cwd: string): DispatchPathScope {
|
|
@@ -242,13 +329,21 @@ function legacyPathScope(req: DispatchRequest, cwd: string): DispatchPathScope {
|
|
|
242
329
|
addProvenance(workingEntries, root, writeEvidence);
|
|
243
330
|
addProvenance(writeEntries, asDirectoryPathBoundary(resolvePathBoundary(cwd, root)), writeEvidence);
|
|
244
331
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
332
|
+
// One map across both fields, first field winning: an orchestrator that
|
|
333
|
+
// restates the file it is asking about quotes the same specifier in the task
|
|
334
|
+
// and in the briefing, and the notice must name it once rather than spend two
|
|
335
|
+
// of its twelve render slots on the same token.
|
|
336
|
+
const parentTokens = new Map<string, DispatchInferredParentToken>();
|
|
337
|
+
const recordParentTokens = (entries: ReadonlyArray<DispatchInferredParentToken>): void => {
|
|
338
|
+
for (const entry of entries) if (!parentTokens.has(entry.token)) parentTokens.set(entry.token, entry);
|
|
339
|
+
};
|
|
340
|
+
const taskScope = strictInferredPaths(req.task, "task", cwd);
|
|
341
|
+
for (const candidate of taskScope.paths) addProvenance(workingEntries, candidate.path, candidate.evidence);
|
|
342
|
+
recordParentTokens(taskScope.parentTokens);
|
|
248
343
|
if (req.briefing !== undefined) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
344
|
+
const briefingScope = strictInferredPaths(req.briefing, "briefing", cwd);
|
|
345
|
+
for (const candidate of briefingScope.paths) addProvenance(workingEntries, candidate.path, candidate.evidence);
|
|
346
|
+
recordParentTokens(briefingScope.parentTokens);
|
|
252
347
|
}
|
|
253
348
|
const workingContext = [...workingEntries.values()].map((entry) => ({
|
|
254
349
|
path: entry.path,
|
|
@@ -263,6 +358,7 @@ function legacyPathScope(req: DispatchRequest, cwd: string): DispatchPathScope {
|
|
|
263
358
|
workingContextPaths: workingContext.map((entry) => entry.path),
|
|
264
359
|
writeBoundaries: writeBoundaries.map((entry) => entry.path),
|
|
265
360
|
inferredOnlyPaths: [],
|
|
361
|
+
parentTokens: [...parentTokens.values()],
|
|
266
362
|
provenance: {
|
|
267
363
|
version: 1,
|
|
268
364
|
mode: "legacy-inferred",
|
|
@@ -279,7 +375,15 @@ export function resolveDispatchPathScope(req: DispatchRequest): DispatchPathScop
|
|
|
279
375
|
|
|
280
376
|
const declaredProvenance = declaredIntentPathProvenance(req.intent);
|
|
281
377
|
const declaredPaths = declaredProvenance.map((entry) => entry.path);
|
|
282
|
-
const
|
|
378
|
+
const inferred = inferredPaths(req, cwd);
|
|
379
|
+
// A dropped token cannot be covered by a declaration, so it is always listed.
|
|
380
|
+
// An anchored one is listed under the path it anchored to and goes through
|
|
381
|
+
// the same coverage test the notice has always applied, which is why
|
|
382
|
+
// "../src/store.js" under a declared "src/" stops reading as an omitted path.
|
|
383
|
+
const inferredOnlyPaths = [
|
|
384
|
+
...inferred.paths.filter((candidate) => !pathBoundaryCovers(declaredPaths, candidate)),
|
|
385
|
+
...inferred.droppedTokens,
|
|
386
|
+
];
|
|
283
387
|
const writeEvidence = DECLARED_EVIDENCE.writeRoots;
|
|
284
388
|
const writeBoundaries = req.intent.writeRoots.map((root) => ({
|
|
285
389
|
path: resolvePathBoundary(cwd, root),
|
|
@@ -290,6 +394,11 @@ export function resolveDispatchPathScope(req: DispatchRequest): DispatchPathScop
|
|
|
290
394
|
workingContextPaths: declaredPaths,
|
|
291
395
|
writeBoundaries: writeBoundaries.map((entry) => entry.path),
|
|
292
396
|
inferredOnlyPaths,
|
|
397
|
+
// Empty on purpose: the declaration is the scope here, so no "../" token
|
|
398
|
+
// changed what the worker sees and there is nothing for the legacy notice
|
|
399
|
+
// to report. A dropped one still reaches the operator through
|
|
400
|
+
// inferredOnlyPaths above.
|
|
401
|
+
parentTokens: [],
|
|
293
402
|
provenance: {
|
|
294
403
|
version: 1,
|
|
295
404
|
mode: "declared",
|
|
@@ -299,72 +408,113 @@ export function resolveDispatchPathScope(req: DispatchRequest): DispatchPathScop
|
|
|
299
408
|
};
|
|
300
409
|
}
|
|
301
410
|
|
|
411
|
+
/**
|
|
412
|
+
* The prose token grammar also matches version numbers, ratios, and Latin
|
|
413
|
+
* abbreviations ("0.5", "v24.9", "e.g", "dead/raw"). Those never select a rule
|
|
414
|
+
* or a boundary, so the replacement notice names only tokens that read as
|
|
415
|
+
* repository paths: a segment with a source or document file extension, or
|
|
416
|
+
* a trailing directory separator. Method names (`Store.fromText`, `store.set`)
|
|
417
|
+
* share the dotted shape and are excluded by the extension list. A live three-task dispatch printed 27
|
|
418
|
+
* "omitted paths" per task, most of them numbers, three times over.
|
|
419
|
+
*/
|
|
420
|
+
const REPORTABLE_OMITTED_PATH_RE =
|
|
421
|
+
/\.(?:[cm]?[jt]sx?|json|ya?ml|md|txt|py|go|rs|c|h|cc|cpp|hpp|java|rb|sh|toml|css|html|sql|lock)(?:\/|$)|\/$/u;
|
|
422
|
+
const OMITTED_PATH_REPORT_CAP = 12;
|
|
423
|
+
|
|
424
|
+
/** Omitted prose paths worth telling the operator about, capped for the transcript. */
|
|
425
|
+
function reportableOmittedPaths(scope: DispatchPathScope): string[] {
|
|
426
|
+
return scope.inferredOnlyPaths.filter((path) => REPORTABLE_OMITTED_PATH_RE.test(path));
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
function renderOmittedPaths(paths: ReadonlyArray<string>): string {
|
|
430
|
+
if (paths.length <= OMITTED_PATH_REPORT_CAP) return paths.join(", ");
|
|
431
|
+
return `${paths.slice(0, OMITTED_PATH_REPORT_CAP).join(", ")} and ${paths.length - OMITTED_PATH_REPORT_CAP} more`;
|
|
432
|
+
}
|
|
433
|
+
|
|
302
434
|
/** Render the named diagnostic for the declared-scope replacement tradeoff. */
|
|
303
435
|
export function declaredScopeReplacementDiagnostic(scope: DispatchPathScope): string | null {
|
|
304
|
-
if (scope.source !== "declared"
|
|
305
|
-
|
|
306
|
-
|
|
436
|
+
if (scope.source !== "declared") return null;
|
|
437
|
+
const omitted = reportableOmittedPaths(scope);
|
|
438
|
+
if (omitted.length === 0) return null;
|
|
439
|
+
return `typed_scope_replaced_inferred_paths: typed intent omitted prose-inferred paths ${renderOmittedPaths(
|
|
440
|
+
omitted,
|
|
307
441
|
)}; those paths did not select project rules or expand worker authority`;
|
|
308
442
|
}
|
|
309
443
|
|
|
310
444
|
/** Render the interactive warning for the declared-scope replacement tradeoff. */
|
|
311
445
|
export function declaredScopeReplacementNotice(scope: DispatchPathScope): DeclaredScopeReplacementNotice | null {
|
|
312
|
-
if (scope.source !== "declared"
|
|
313
|
-
const omittedPaths =
|
|
446
|
+
if (scope.source !== "declared") return null;
|
|
447
|
+
const omittedPaths = reportableOmittedPaths(scope);
|
|
448
|
+
if (omittedPaths.length === 0) return null;
|
|
314
449
|
return {
|
|
315
450
|
code: "typed_scope_replaced_inferred_paths",
|
|
316
451
|
level: "warning",
|
|
317
452
|
omittedPaths,
|
|
318
|
-
message: `[dispatch scope] typed intent replaced prose path inference; omitted paths: ${
|
|
319
|
-
|
|
453
|
+
message: `[dispatch scope] typed intent replaced prose path inference; omitted paths: ${renderOmittedPaths(
|
|
454
|
+
omittedPaths,
|
|
320
455
|
)}. Those paths did not select project rules or expand worker authority.`,
|
|
321
456
|
};
|
|
322
457
|
}
|
|
323
458
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
459
|
+
/**
|
|
460
|
+
* A reinterpreted "../" token is the one legacy-mode scope fact worth the
|
|
461
|
+
* transcript. It fires only where a leading "../" run made inference choose
|
|
462
|
+
* between a path the prose never literally spelled and no path at all, which
|
|
463
|
+
* before this release failed the whole dispatch, so unlike a per-dispatch
|
|
464
|
+
* inference notice it cannot warn on the ordinary case that
|
|
465
|
+
* `publishDispatchPathScope` deliberately keeps quiet. The anchored token earns
|
|
466
|
+
* the line more than the dropped one: dropping subtracts from scope, while
|
|
467
|
+
* anchoring puts "src/store.js" in working context because prose said
|
|
468
|
+
* "../src/store.js", and a rewrite the operator cannot see is one nobody can
|
|
469
|
+
* check.
|
|
470
|
+
*
|
|
471
|
+
* Declared mode records none. The declaration is the scope there, and a prose
|
|
472
|
+
* token that never entered it is already the subject of
|
|
473
|
+
* `declaredScopeReplacementNotice`. That notice filters by
|
|
474
|
+
* REPORTABLE_OMITTED_PATH_RE, so a declared-mode drop of "../data/blob.bin" or
|
|
475
|
+
* "../src/helper" is in fact named nowhere; that is the accepted cost of not
|
|
476
|
+
* spending a second per-dispatch notice on a token that took no part in a scope
|
|
477
|
+
* the intent had already fixed.
|
|
478
|
+
*
|
|
479
|
+
* The legacy list is not filtered by REPORTABLE_OMITTED_PATH_RE, because the
|
|
480
|
+
* "../" prefix is itself the filter: the version numbers, ratios, and Latin
|
|
481
|
+
* abbreviations that filter exists for ("0.5", "v24.9", "e.g", "4/10") cannot
|
|
482
|
+
* carry one.
|
|
483
|
+
*
|
|
484
|
+
* Both notices render one `<raw token> -> <anchored path or "dropped">` pair
|
|
485
|
+
* per entry, under the same twelve-entry cap the replacement notice uses.
|
|
486
|
+
*/
|
|
487
|
+
function renderParentTokens(tokens: ReadonlyArray<DispatchInferredParentToken>): string {
|
|
488
|
+
return renderOmittedPaths(tokens.map((entry) => `${entry.token} -> ${entry.resolved ?? "dropped"}`));
|
|
343
489
|
}
|
|
344
490
|
|
|
345
|
-
/** Render the
|
|
346
|
-
export function
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
const rendered = paths
|
|
359
|
-
.map(
|
|
360
|
-
(entry) =>
|
|
361
|
-
`${entry.policy} ${entry.path} (provenance=${entry.provenance} source=${entry.source} confidence=${entry.confidence})`,
|
|
362
|
-
)
|
|
363
|
-
.join("; ");
|
|
491
|
+
/** Render the named diagnostic for prose tokens whose leading "../" run was reinterpreted. */
|
|
492
|
+
export function inferredScopeParentTokenDiagnostic(scope: DispatchPathScope): string | null {
|
|
493
|
+
const tokens = scope.parentTokens;
|
|
494
|
+
if (tokens.length === 0) return null;
|
|
495
|
+
return `legacy_scope_inferred: prose inference resolved path tokens carrying a leading '../' run against the dispatch root ${renderParentTokens(
|
|
496
|
+
tokens,
|
|
497
|
+
)}; an anchored token selects project rules without expanding worker authority and a dropped one took no part in scope`;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/** Render the interactive warning for prose tokens whose leading "../" run was reinterpreted. */
|
|
501
|
+
export function inferredScopeParentTokenNotice(scope: DispatchPathScope): InferredScopeParentTokenNotice | null {
|
|
502
|
+
const tokens = scope.parentTokens;
|
|
503
|
+
if (tokens.length === 0) return null;
|
|
364
504
|
return {
|
|
365
505
|
code: "legacy_scope_inferred",
|
|
366
506
|
level: "warning",
|
|
367
|
-
|
|
368
|
-
|
|
507
|
+
// Every entry names the raw prose token, the one spelling both outcomes
|
|
508
|
+
// share; the message carries what each one resolved to.
|
|
509
|
+
paths: tokens.map((entry) => ({
|
|
510
|
+
path: entry.token,
|
|
511
|
+
policy: "working-context",
|
|
512
|
+
provenance: "inferred",
|
|
513
|
+
source: entry.source,
|
|
514
|
+
confidence: "low",
|
|
515
|
+
})),
|
|
516
|
+
message: `[dispatch scope] prose inference resolved path tokens carrying a leading '../' run against the dispatch root: ${renderParentTokens(
|
|
517
|
+
tokens,
|
|
518
|
+
)}. An anchored token selects project rules without expanding worker authority; a dropped one took no part in scope.`,
|
|
369
519
|
};
|
|
370
520
|
}
|
|
@@ -61,9 +61,9 @@ function completedReroutes(
|
|
|
61
61
|
|
|
62
62
|
function requestedNodeId(req: DispatchRequest, settings: Readonly<ClioSettings> | undefined): string | null {
|
|
63
63
|
if (req.node !== undefined && req.node.trim().length > 0) return req.node.trim();
|
|
64
|
-
const workers = settings?.
|
|
64
|
+
const workers = settings?.fleet;
|
|
65
65
|
if (!workers) return null;
|
|
66
|
-
const profileName = req.workerProfile ?? workers.
|
|
66
|
+
const profileName = req.workerProfile ?? workers.agentProfiles?.[req.agentId];
|
|
67
67
|
if (!profileName) return null;
|
|
68
68
|
const pin = workers.profiles?.[profileName]?.node;
|
|
69
69
|
return pin !== undefined && pin.trim().length > 0 ? pin.trim() : null;
|
|
@@ -49,7 +49,7 @@ function canonicalJson(value: unknown): string {
|
|
|
49
49
|
throw new Error(`response schema digest cannot represent ${typeof value}`);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
function canonicalResponseSchemaDigest(schema: Record<string, unknown>): string {
|
|
53
53
|
return createHash("sha256").update(canonicalJson(schema), "utf8").digest("hex");
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -123,7 +123,7 @@ export const RECEIPT_INTEGRITY_FIELD_COVERAGE = {
|
|
|
123
123
|
dynamicHash: true,
|
|
124
124
|
promptSignature: true,
|
|
125
125
|
toolSignature: true,
|
|
126
|
-
|
|
126
|
+
clioCoderVersion: true,
|
|
127
127
|
piMonoVersion: true,
|
|
128
128
|
platform: true,
|
|
129
129
|
nodeVersion: true,
|
|
@@ -172,8 +172,14 @@ function selectedReceiptFields(
|
|
|
172
172
|
return result;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
function receiptDigestFields(receipt: RunReceipt | RunReceiptDraft): Record<string, unknown> {
|
|
175
|
+
function receiptDigestFields(receipt: RunReceipt | RunReceiptDraft, legacyNaming = false): Record<string, unknown> {
|
|
176
176
|
const result = selectedReceiptFields(receipt, RECEIPT_FIELDS);
|
|
177
|
+
if (legacyNaming) {
|
|
178
|
+
const source = receipt as unknown as Record<string, unknown>;
|
|
179
|
+
const version = source.clioVersion ?? source.clioCoderVersion;
|
|
180
|
+
delete result.clioCoderVersion;
|
|
181
|
+
if (version !== undefined) result.clioVersion = version;
|
|
182
|
+
}
|
|
177
183
|
result.briefing = receipt.briefing ?? null;
|
|
178
184
|
result.outcomeCode = receipt.outcomeCode ?? null;
|
|
179
185
|
result.steering = receipt.steering ?? null;
|
|
@@ -227,24 +233,29 @@ function ledgerDigestFields(envelope: RunEnvelope): Record<string, unknown> {
|
|
|
227
233
|
};
|
|
228
234
|
}
|
|
229
235
|
|
|
230
|
-
function integrityPayload(
|
|
236
|
+
function integrityPayload(
|
|
237
|
+
receipt: RunReceipt | RunReceiptDraft,
|
|
238
|
+
envelope: RunEnvelope,
|
|
239
|
+
legacyNaming = false,
|
|
240
|
+
): Record<string, unknown> {
|
|
231
241
|
return {
|
|
232
|
-
contract: "clio.runReceipt.integrity",
|
|
242
|
+
contract: legacyNaming ? "clio.runReceipt.integrity" : "clio-coder.runReceipt.integrity",
|
|
233
243
|
version: RUN_RECEIPT_INTEGRITY_VERSION,
|
|
234
244
|
sources: ["receipt", "run-ledger"],
|
|
235
|
-
receipt: receiptDigestFields(receipt),
|
|
245
|
+
receipt: receiptDigestFields(receipt, legacyNaming),
|
|
236
246
|
ledger: ledgerDigestFields(envelope),
|
|
237
247
|
};
|
|
238
248
|
}
|
|
239
249
|
|
|
240
|
-
|
|
250
|
+
function computeReceiptIntegrity(
|
|
241
251
|
receipt: RunReceipt | RunReceiptDraft,
|
|
242
252
|
envelope: RunEnvelope,
|
|
253
|
+
legacyNaming = false,
|
|
243
254
|
): RunReceiptIntegrity {
|
|
244
255
|
return {
|
|
245
256
|
version: RUN_RECEIPT_INTEGRITY_VERSION,
|
|
246
257
|
algorithm: RUN_RECEIPT_INTEGRITY_ALGORITHM,
|
|
247
|
-
digest: sha256(canonicalJson(integrityPayload(receipt, envelope))),
|
|
258
|
+
digest: sha256(canonicalJson(integrityPayload(receipt, envelope, legacyNaming))),
|
|
248
259
|
};
|
|
249
260
|
}
|
|
250
261
|
|
|
@@ -385,7 +396,8 @@ export function verifyReceiptIntegrity(receipt: RunReceipt, envelope: RunEnvelop
|
|
|
385
396
|
return { ok: false, reason: `ledger mismatch: ${mismatch}` };
|
|
386
397
|
}
|
|
387
398
|
const expected = computeReceiptIntegrity(receipt, envelope);
|
|
388
|
-
|
|
399
|
+
const legacyExpected = computeReceiptIntegrity(receipt, envelope, true);
|
|
400
|
+
if (expected.digest !== receipt.integrity.digest && legacyExpected.digest !== receipt.integrity.digest) {
|
|
389
401
|
return { ok: false, reason: "integrity mismatch" };
|
|
390
402
|
}
|
|
391
403
|
return { ok: true };
|
|
@@ -599,31 +599,8 @@ export function getDispatchReservation(ownerId: string): DispatchReservationReco
|
|
|
599
599
|
return record ? copyRecord(record) : null;
|
|
600
600
|
}
|
|
601
601
|
|
|
602
|
-
export function listDispatchReservations(): ReadonlyArray<DispatchReservationRecord> {
|
|
603
|
-
return readStore();
|
|
604
|
-
}
|
|
605
|
-
|
|
606
602
|
export function reservedBudgetUsd(): number {
|
|
607
603
|
return readStore()
|
|
608
604
|
.filter((record) => record.status === "active")
|
|
609
605
|
.reduce((sum, record) => sum + outstandingBudget(record), 0);
|
|
610
606
|
}
|
|
611
|
-
|
|
612
|
-
export function reservedCapacity(): {
|
|
613
|
-
globalSlots: number;
|
|
614
|
-
nodeSlots: Readonly<Record<string, number>>;
|
|
615
|
-
endpointSlots: Readonly<Record<string, number>>;
|
|
616
|
-
} {
|
|
617
|
-
let globalSlots = 0;
|
|
618
|
-
const nodeSlots: Record<string, number> = {};
|
|
619
|
-
const endpointSlots: Record<string, number> = {};
|
|
620
|
-
for (const record of readStore().filter((entry) => entry.status === "active")) {
|
|
621
|
-
const allocation = reservationAllocation(outstandingTasks(record));
|
|
622
|
-
globalSlots += allocation.globalSlots;
|
|
623
|
-
for (const [nodeId, count] of Object.entries(allocation.nodeSlots))
|
|
624
|
-
nodeSlots[nodeId] = (nodeSlots[nodeId] ?? 0) + count;
|
|
625
|
-
for (const [endpointKey, count] of Object.entries(allocation.endpointSlots))
|
|
626
|
-
endpointSlots[endpointKey] = (endpointSlots[endpointKey] ?? 0) + count;
|
|
627
|
-
}
|
|
628
|
-
return { globalSlots, nodeSlots, endpointSlots };
|
|
629
|
-
}
|
|
@@ -597,7 +597,7 @@ function readinessHashProjection(report: RouteReadinessReport): readonly [boolea
|
|
|
597
597
|
* `decisionDurationMs`, which is a measurement of the decision rather than an
|
|
598
598
|
* input to it, so a replay on a faster machine still reproduces the hash.
|
|
599
599
|
*/
|
|
600
|
-
|
|
600
|
+
function routeDecisionHash(input: RouteDecisionInput): string {
|
|
601
601
|
// Arrays give every field an explicit position, so native JSON serialization
|
|
602
602
|
// is deterministic without recursively sorting hundreds of short-lived
|
|
603
603
|
// objects at the maximum universe bound. Candidate identity uses the same
|
|
@@ -137,7 +137,7 @@ function retireHistory(path: string, version: unknown): void {
|
|
|
137
137
|
const retired = `${path}.v${String(version)}.${stamp}.retired`;
|
|
138
138
|
renameSync(path, retired);
|
|
139
139
|
process.stderr.write(
|
|
140
|
-
`[clio:dispatch] route history v${String(version)} is retired; starting empty at v${ROUTE_HISTORY_VERSION}. Prior observations: ${retired}\n`,
|
|
140
|
+
`[clio-coder:dispatch] route history v${String(version)} is retired; starting empty at v${ROUTE_HISTORY_VERSION}. Prior observations: ${retired}\n`,
|
|
141
141
|
);
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -146,7 +146,7 @@ function rate(values: ReadonlyArray<boolean>, fallback = 0): number {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
/** Conservative 95% Wilson lower confidence bound for a Bernoulli success rate. */
|
|
149
|
-
|
|
149
|
+
function wilsonLowerBound(successes: number, observations: number, z = 1.96): number {
|
|
150
150
|
if (observations <= 0) return 0;
|
|
151
151
|
const proportion = successes / observations;
|
|
152
152
|
const z2 = z * z;
|
|
@@ -90,31 +90,3 @@ export function evaluateRouteReadiness(input: RouteReadinessInput): RouteReadine
|
|
|
90
90
|
labelsNeeded: Math.max(0, MINIMUM_ACTIVE_QUALITY_LABELS - estimate.qualityLabeledCount),
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Human-readable one-liners for a refusal message. The wording names the
|
|
96
|
-
* missing evidence, so an operator who sees an active refusal can tell whether
|
|
97
|
-
* to wait for measurements or to fix a stale fact.
|
|
98
|
-
*/
|
|
99
|
-
export function describeReadinessGap(gap: ReadinessGap): string {
|
|
100
|
-
switch (gap) {
|
|
101
|
-
case "hard-constraint-validity-below-one":
|
|
102
|
-
return "hard-constraint evaluation was not consistently valid over the retained window";
|
|
103
|
-
case "integrity-failures-in-window":
|
|
104
|
-
return "the retained window contains receipt or source integrity failures";
|
|
105
|
-
case "insufficient-quality-labels":
|
|
106
|
-
return `fewer than ${MINIMUM_ACTIVE_QUALITY_LABELS} quality-labeled outcomes for this route and role`;
|
|
107
|
-
case "quality-lower-bound-below-posture-floor":
|
|
108
|
-
return "the conservative quality lower bound is below the posture floor";
|
|
109
|
-
case "quality-lower-bound-below-requested-minimum":
|
|
110
|
-
return "the conservative quality lower bound is below the request's minimumQuality";
|
|
111
|
-
case "reliability-below-posture-floor":
|
|
112
|
-
return "route-attributable reliability is below the posture floor";
|
|
113
|
-
case "cost-upper-bound-unknown":
|
|
114
|
-
return "the route has no conservative cost upper bound";
|
|
115
|
-
case "route-facts-stale":
|
|
116
|
-
return "node, endpoint, resource, capacity, or settings facts are stale";
|
|
117
|
-
case "decision-latency-above-budget":
|
|
118
|
-
return `shadow decision p95 exceeds ${DECISION_LATENCY_BUDGET_MS} ms at the configured universe bound`;
|
|
119
|
-
}
|
|
120
|
-
}
|