@iowarp/clio-coder 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +98 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
- package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
- package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
- package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
- package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
- package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
- package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
- package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
- package/dist/chunk-2DSOYNFC.js +108 -0
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
- package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
- package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
- package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
- package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
- package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
- package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
- package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
- package/dist/chunk-57XXR6DR.js +3763 -0
- package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
- package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
- package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
- package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
- package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
- package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
- package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
- package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
- package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
- package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
- package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
- package/dist/chunk-DQOVN6KV.js +386 -0
- package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
- package/dist/chunk-DXKJURES.js +671 -0
- package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
- package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
- package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
- package/dist/chunk-EXLD33WO.js +381 -0
- package/dist/chunk-FEAXX7B6.js +101 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GX5WYQO4.js +59 -0
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/chunk-I2DWJ4GM.js +390 -0
- package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IRXAATOX.js +539 -0
- package/dist/chunk-IXIY2H4R.js +44 -0
- package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
- package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
- package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
- package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
- package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
- package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
- package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
- package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
- package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
- package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
- package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
- package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
- package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
- package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/chunk-ODGTEFFI.js +50 -0
- package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
- package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
- package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
- package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
- package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
- package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
- package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
- package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
- package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
- package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
- package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
- package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
- package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
- package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
- package/dist/chunk-V76WTFTW.js +318 -0
- package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
- package/dist/chunk-XXYSBZIQ.js +283 -0
- package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
- package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
- package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
- package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/cli/index.js +42 -40
- package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
- package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
- package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
- package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
- package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
- package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
- package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
- package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
- package/dist/detail-A7JAVSIG.js +98 -0
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
- package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
- package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
- package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
- package/dist/evidence-4F5USFKH.js +208 -0
- package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
- package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
- package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
- package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
- package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
- package/dist/inventory-C26CFDRR.js +101 -0
- package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
- package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
- package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
- package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
- package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
- package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
- package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
- package/dist/reset-TNWTB5LU.js +343 -0
- package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
- package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
- package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
- package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
- package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
- package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
- package/dist/tasks-IPAGMEIX.js +36 -0
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
- package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-HALS6BLF.js +407 -0
- package/dist/upgrade-MS72RJEP.js +306 -0
- package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
- package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
- package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
- package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
- package/dist/worker/entry.js +72 -68
- package/docs/README.md +3 -2
- package/docs/architecture/acp.md +17 -0
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +2 -2
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/dispatch-typed-intent.md +1 -1
- package/docs/architecture/evidence-and-memory.md +1 -1
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +19 -2
- package/docs/architecture/prompt-envelope-and-tools.md +17 -5
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +25 -22
- package/docs/architecture/tui-design.md +1 -1
- package/docs/guide/built-in-agents.md +25 -11
- package/docs/guide/commands-and-modes.md +18 -3
- package/docs/guide/configuration-and-targets.md +100 -10
- package/docs/guide/configuration-reference.md +17 -7
- package/docs/guide/environment-variables.md +4 -2
- package/docs/guide/installation-and-lifecycle.md +37 -4
- package/docs/guide/proactive-memory.md +66 -55
- package/docs/guide/skills-marketplace.md +18 -0
- package/docs/guide/tool-usage.md +78 -3
- package/docs/history/config-knobs-audit.md +2 -2
- package/docs/process/development-pipeline.md +40 -2
- package/docs/process/eval-runner.md +67 -3
- package/docs/process/git-commit-provenance.md +15 -0
- package/docs/process/release-cut-checklist.md +207 -0
- package/docs/process/scientific-validation.md +18 -17
- package/evals/behavioral-machinery-support.ts +1 -0
- package/evals/behavioral-machinery.yaml +1 -1
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +2 -2
- package/skills/README.md +7 -5
- package/skills/coding/ast-grep/SKILL.md +101 -30
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +47 -2
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +87 -28
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +80 -53
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +43 -2
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +45 -15
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +77 -63
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +87 -64
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +61 -12
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +130 -14
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -6
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +57 -2
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +53 -2
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +58 -50
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +76 -18
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +20 -1
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -1
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +26 -1
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +63 -28
- package/skills/workflow/cut-it/SKILL.md +64 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +112 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +85 -10
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +76 -17
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +0 -8
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1084 -529
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/doctor-state-size.ts +1 -12
- package/src/cli/doctor-validation-contract.ts +28 -0
- package/src/cli/doctor.ts +5 -0
- package/src/cli/evidence-detail.ts +1 -75
- package/src/cli/evidence-inventory.ts +1 -167
- package/src/cli/index.ts +3 -0
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +7 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/tasks.ts +84 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +210 -150
- package/src/cli/usage.ts +92 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/verifiers.ts +147 -1
- package/src/cli/wiki-generate.ts +1 -0
- package/src/core/commit-attribution.ts +41 -1
- package/src/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/git-commit-attribution.ts +46 -3
- package/src/core/run-overrides.ts +0 -5
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +92 -2
- package/src/core/tool-names.ts +5 -2
- package/src/domains/agents/builtins/architect.md +1 -1
- package/src/domains/agents/builtins/coder.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/provenance.md +7 -7
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +4 -3
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +1 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/context/extension.ts +31 -7
- package/src/domains/context/refresh.ts +3 -0
- package/src/domains/context/wiki/frontmatter.ts +5 -2
- package/src/domains/context/wiki/generate.ts +6 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/wiki/prompts.ts +43 -0
- package/src/domains/dispatch/active-route-planner.ts +4 -0
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/code-step.ts +11 -4
- package/src/domains/dispatch/contract.ts +42 -8
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +184 -56
- package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/host-verification.ts +114 -13
- package/src/domains/dispatch/intent.ts +28 -18
- package/src/domains/dispatch/orphan-recovery.ts +2 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/reservation-store.ts +5 -3
- package/src/domains/dispatch/state.ts +15 -2
- package/src/domains/dispatch/types.ts +20 -2
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +17 -11
- package/src/domains/eval/runners/context-index.ts +2 -7
- package/src/domains/eval/runners/context-init.ts +3 -6
- package/src/domains/eval/runners/external-command.ts +29 -11
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/build.ts +102 -15
- package/src/domains/evidence/detail.ts +69 -0
- package/src/domains/evidence/eval.ts +13 -1
- package/src/domains/evidence/finish-contract-map.ts +5 -1
- package/src/domains/evidence/inventory.ts +167 -0
- package/src/domains/evidence/store.ts +16 -0
- package/src/domains/evidence/types.ts +12 -0
- package/src/domains/extensions/resources.ts +7 -0
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/index.ts +4 -0
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +0 -1
- package/src/domains/middleware/marketplace-offer.ts +22 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/runtime.ts +7 -3
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/mux/detect.ts +3 -6
- package/src/domains/observability/accountability.ts +15 -1
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +52 -7
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/evidence-index.ts +10 -0
- package/src/domains/observability/extension.ts +15 -6
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +394 -45
- package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
- package/src/domains/prompts/fragments/operating/contract.md +2 -0
- package/src/domains/prompts/fragments/wiki/page.md +8 -0
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +3 -4
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +7 -0
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/action-classifier.ts +7 -0
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/default-path-policy.ts +2 -0
- package/src/domains/safety/finish-contract-registration.ts +29 -14
- package/src/domains/safety/finish-contract.ts +252 -40
- package/src/domains/safety/index.ts +21 -1
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +60 -17
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/rigor.ts +53 -39
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/safety/validation-contract.ts +388 -0
- package/src/domains/session/archive-readers.ts +10 -1
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/decision-board.ts +101 -2
- package/src/domains/session/entries.ts +50 -7
- package/src/domains/session/extension.ts +4 -4
- package/src/domains/session/handoff.ts +2 -1
- package/src/domains/session/manager.ts +2 -3
- package/src/domains/session/task-board.ts +14 -1
- package/src/domains/session/tree/fork.ts +1 -2
- package/src/domains/session/tree/navigator.ts +1 -1
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/user-tasks/acceptance.ts +56 -0
- package/src/domains/user-tasks/active-acceptance.ts +40 -0
- package/src/domains/user-tasks/store.ts +34 -3
- package/src/engine/acp/adapter.ts +24 -6
- package/src/engine/acp/server.ts +21 -4
- package/src/engine/acp/transport.ts +53 -8
- package/src/engine/acp/types.ts +4 -0
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/ollama-native.ts +15 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/claude/subprocess-runtime.ts +107 -60
- package/src/engine/external-subprocess.ts +122 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +416 -218
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/chat-loop-messages.ts +13 -4
- package/src/interactive/chat-loop.ts +65 -2
- package/src/interactive/chat-renderer.ts +1 -0
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +46 -717
- package/src/interactive/fleet-run-preview.ts +2 -1
- package/src/interactive/interactive-application.ts +3 -2
- package/src/interactive/interactive-presentation.ts +55 -12
- package/src/interactive/interactive-slash-runtime.ts +4 -2
- package/src/interactive/oracle.ts +5 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -2
- package/src/interactive/overlays/message-picker.ts +2 -2
- package/src/interactive/overlays/settings.ts +2 -2
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/renderers/branch-summary.ts +1 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-autocomplete.ts +4 -6
- package/src/interactive/slash-commands.ts +49 -45
- package/src/interactive/slash-spec.ts +28 -0
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +9 -5
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/view/artifacts.ts +2 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +13 -4
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +31 -0
- package/src/tools/compete-worktrees.ts +7 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/core-bootstrap.ts +16 -0
- package/src/tools/decide.ts +136 -0
- package/src/tools/dispatch-admission.ts +21 -0
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +6 -2
- package/src/tools/dispatch-runner.ts +27 -1
- package/src/tools/dispatch-types.ts +6 -0
- package/src/tools/evidence.ts +96 -0
- package/src/tools/limitation.ts +76 -0
- package/src/tools/policy.ts +9 -0
- package/src/tools/presentation.ts +3 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/result-shaping.ts +17 -5
- package/src/tools/task-worktree.ts +13 -3
- package/src/tools/tasks.ts +10 -1
- package/src/tools/verify/authoring.ts +170 -83
- package/src/tools/verify/catalog.ts +122 -5
- package/src/tools/verify/index.ts +2 -1
- package/src/tools/verify/numeric.ts +298 -0
- package/src/tools/verify/perf.ts +143 -0
- package/src/tools/verify/scripts.ts +229 -2
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/chunk-2Z2IKEXI.js +0 -1554
- package/dist/chunk-RVG5JXAL.js +0 -41
- package/dist/chunk-T56WDKA5.js +0 -183
- package/dist/chunk-VN3SHNBN.js +0 -313
- package/dist/chunk-VPKWYKEY.js +0 -169
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { CLIO_ARTIFACT_DIR } from "../core/artifact-paths.js";
|
|
5
|
+
import { readCodewiki } from "../domains/context/codewiki/artifact.js";
|
|
6
|
+
import { buildArchitectureSeed, serializeArchitectureSeed } from "../domains/context/wiki/map-seed.js";
|
|
7
|
+
|
|
8
|
+
const HELP = `Usage:
|
|
9
|
+
clio-coder context map [--out <path>] [--json]
|
|
10
|
+
|
|
11
|
+
Write an archify architecture seed for the current repository from the codewiki
|
|
12
|
+
index, without model calls. The seed is the starting spec for the archify skill:
|
|
13
|
+
components are the largest directory areas, connections are collapsed import
|
|
14
|
+
edges, and sources point at indexed files and lines.
|
|
15
|
+
|
|
16
|
+
Options:
|
|
17
|
+
--out <path> where to write the seed (default: ${CLIO_ARTIFACT_DIR}/maps/<repo>.architecture.json)
|
|
18
|
+
--json print machine-readable details about the written seed
|
|
19
|
+
`;
|
|
20
|
+
|
|
21
|
+
/** Where the seed lands when the operator names no path: a human-transient map artifact. */
|
|
22
|
+
function defaultMapSeedPath(cwd: string): string {
|
|
23
|
+
return path.join(cwd, CLIO_ARTIFACT_DIR, "maps", `${path.basename(cwd)}.architecture.json`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function gitValue(cwd: string, args: string[]): string | null {
|
|
27
|
+
try {
|
|
28
|
+
const out = execFileSync("git", args, { cwd, timeout: 5000, stdio: ["ignore", "pipe", "ignore"] })
|
|
29
|
+
.toString("utf8")
|
|
30
|
+
.trim();
|
|
31
|
+
return out.length > 0 ? out : null;
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** The origin remote as an https URL and HEAD as a full sha, when git can say. */
|
|
38
|
+
function repositoryFacts(cwd: string): { url: string; revision: string } | undefined {
|
|
39
|
+
const remote = gitValue(cwd, ["remote", "get-url", "origin"]);
|
|
40
|
+
const revision = gitValue(cwd, ["rev-parse", "--verify", "HEAD"]);
|
|
41
|
+
if (!remote || !revision) return undefined;
|
|
42
|
+
let url = remote.endsWith(".git") ? remote.slice(0, -4) : remote;
|
|
43
|
+
const ssh = /^git@([^:]+):(.+)$/.exec(url);
|
|
44
|
+
if (ssh) url = `https://${ssh[1]}/${ssh[2]}`;
|
|
45
|
+
return { url, revision };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export async function runContextMapCommand(args: string[]): Promise<number> {
|
|
49
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
50
|
+
process.stdout.write(HELP);
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
let out: string | null = null;
|
|
54
|
+
let json = false;
|
|
55
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
56
|
+
const arg = args[index] as string;
|
|
57
|
+
if (arg === "--json") {
|
|
58
|
+
json = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (arg === "--out") {
|
|
62
|
+
const value = args[index + 1];
|
|
63
|
+
if (!value || value.startsWith("--")) {
|
|
64
|
+
process.stderr.write("clio-coder context map: --out requires a path\n");
|
|
65
|
+
return 2;
|
|
66
|
+
}
|
|
67
|
+
out = value;
|
|
68
|
+
index += 1;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
process.stderr.write(`clio-coder context map: unknown flag ${arg}\n`);
|
|
72
|
+
return 2;
|
|
73
|
+
}
|
|
74
|
+
const cwd = process.cwd();
|
|
75
|
+
const codewiki = readCodewiki(cwd);
|
|
76
|
+
if (!codewiki) {
|
|
77
|
+
process.stderr.write(
|
|
78
|
+
"clio-coder context map: no codewiki index in .clio-coder/codewiki.json; run `clio-coder context index` first\n",
|
|
79
|
+
);
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
82
|
+
const seed = buildArchitectureSeed(codewiki, {
|
|
83
|
+
title: path.basename(cwd),
|
|
84
|
+
repository: repositoryFacts(cwd),
|
|
85
|
+
});
|
|
86
|
+
const target = out ? path.resolve(cwd, out) : defaultMapSeedPath(cwd);
|
|
87
|
+
mkdirSync(path.dirname(target), { recursive: true });
|
|
88
|
+
writeFileSync(target, serializeArchitectureSeed(seed), "utf8");
|
|
89
|
+
const payload = {
|
|
90
|
+
path: target,
|
|
91
|
+
components: seed.components.length,
|
|
92
|
+
connections: seed.connections.length,
|
|
93
|
+
repository: seed.meta.repository ?? null,
|
|
94
|
+
};
|
|
95
|
+
if (json) {
|
|
96
|
+
process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
process.stdout.write(
|
|
100
|
+
[
|
|
101
|
+
`clio-coder context map wrote ${target}`,
|
|
102
|
+
` ${payload.components} components, ${payload.connections} connections${
|
|
103
|
+
payload.repository
|
|
104
|
+
? `, sources pinned at ${payload.repository.revision.slice(0, 12)}`
|
|
105
|
+
: "; no GitHub origin at a full revision, so no source citations"
|
|
106
|
+
}`,
|
|
107
|
+
payload.repository
|
|
108
|
+
? " next: validate and deliver it with the archify skill, passing --repo-root ."
|
|
109
|
+
: " next: validate and deliver it with the archify skill (without --repo-root)",
|
|
110
|
+
"",
|
|
111
|
+
].join("\n"),
|
|
112
|
+
);
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
package/src/cli/context.ts
CHANGED
|
@@ -10,6 +10,7 @@ const HELP = `Usage:
|
|
|
10
10
|
[--target <id>] [--model <id>] [--thinking off|low|medium|high]
|
|
11
11
|
clio-coder context reset [--all] [--yes]
|
|
12
12
|
clio-coder context index [--json]
|
|
13
|
+
clio-coder context map [--out <path>] [--json]
|
|
13
14
|
clio-coder context replay --sessions <path>... [options]
|
|
14
15
|
clio-coder context working-set --session <id|path>
|
|
15
16
|
|
|
@@ -20,6 +21,7 @@ Project context commands:
|
|
|
20
21
|
clio-coder context wiki generate or inspect the agent-authored Markdown wiki
|
|
21
22
|
clio-coder context reset clear accumulated project context artifacts
|
|
22
23
|
clio-coder context index build the codewiki index without model calls
|
|
24
|
+
clio-coder context map write an archify architecture seed from the codewiki index
|
|
23
25
|
clio-coder context replay compare working-set policies over Clio ledgers
|
|
24
26
|
clio-coder context working-set inspect one session's working-set fold and path index
|
|
25
27
|
`;
|
|
@@ -317,6 +319,8 @@ export async function runContextCommand(args: string[]): Promise<number> {
|
|
|
317
319
|
return (await import("./context-clear.js")).runContextClearCommand(rest);
|
|
318
320
|
case "index":
|
|
319
321
|
return (await import("./context-index.js")).runContextIndexCommand(rest);
|
|
322
|
+
case "map":
|
|
323
|
+
return (await import("./context-map.js")).runContextMapCommand(rest);
|
|
320
324
|
case "replay":
|
|
321
325
|
return (await import("./context-working-set.js")).runContextReplayCommand(rest);
|
|
322
326
|
case "working-set":
|
|
@@ -2,6 +2,7 @@ import { lstatSync, readdirSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { resolveClioDirs } from "../core/xdg.js";
|
|
4
4
|
import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
|
|
5
|
+
import { formatBytes } from "./lifecycle-presenter.js";
|
|
5
6
|
|
|
6
7
|
interface MeasuredEntry {
|
|
7
8
|
bytes: number;
|
|
@@ -68,15 +69,3 @@ function measureEntry(path: string): MeasuredEntry {
|
|
|
68
69
|
}
|
|
69
70
|
return { bytes, error: null };
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
-
function formatBytes(bytes: number): string {
|
|
73
|
-
if (bytes < 1024) return `${bytes} B`;
|
|
74
|
-
const units = ["KiB", "MiB", "GiB", "TiB"];
|
|
75
|
-
let value = bytes;
|
|
76
|
-
let unit = -1;
|
|
77
|
-
do {
|
|
78
|
-
value /= 1024;
|
|
79
|
-
unit += 1;
|
|
80
|
-
} while (value >= 1024 && unit < units.length - 1);
|
|
81
|
-
return `${value.toFixed(value >= 10 ? 1 : 2)} ${units[unit]}`;
|
|
82
|
-
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
|
|
2
|
+
import { describeValidationContract, loadValidationContract } from "../domains/safety/validation-contract.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* One row for the workspace's scientific validation contract: absent, parsed
|
|
6
|
+
* (and so raising the rigor default to high), Markdown-only advisory, or
|
|
7
|
+
* invalid with the parse fault. Reads the workspace root only; creates nothing.
|
|
8
|
+
*/
|
|
9
|
+
export function validationContractFinding(workspaceRoot = process.cwd()): DoctorFinding {
|
|
10
|
+
const name = "validation contract";
|
|
11
|
+
const loaded = loadValidationContract(workspaceRoot);
|
|
12
|
+
if (!loaded.ok) {
|
|
13
|
+
return { ok: false, name, detail: `invalid: ${describeValidationContract(loaded)}; rigor default stays normal` };
|
|
14
|
+
}
|
|
15
|
+
if (loaded.contract === null) {
|
|
16
|
+
if ("advisory" in loaded) {
|
|
17
|
+
return { ok: true, name, level: "warn", detail: `markdown-only: ${describeValidationContract(loaded)}` };
|
|
18
|
+
}
|
|
19
|
+
return { ok: true, name, detail: "none at the workspace root; rigor default normal" };
|
|
20
|
+
}
|
|
21
|
+
const artifacts = loaded.contract.artifacts?.length ?? 0;
|
|
22
|
+
const validators = loaded.contract.validators?.length ?? 0;
|
|
23
|
+
return {
|
|
24
|
+
ok: true,
|
|
25
|
+
name,
|
|
26
|
+
detail: `valid: ${loaded.path} (version ${loaded.contract.version}, ${artifacts} artifact(s), ${validators} validator(s)); rigor default high`,
|
|
27
|
+
};
|
|
28
|
+
}
|
package/src/cli/doctor.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { namingFootprintFindings } from "./doctor-naming.js";
|
|
|
12
12
|
import { panesFindings } from "./doctor-panes.js";
|
|
13
13
|
import { stateStorageFinding } from "./doctor-state-size.js";
|
|
14
14
|
import { toolchainFindings } from "./doctor-toolchain.js";
|
|
15
|
+
import { validationContractFinding } from "./doctor-validation-contract.js";
|
|
15
16
|
import { printError } from "./shared.js";
|
|
16
17
|
|
|
17
18
|
const HELP = `clio-coder doctor [--fix] [--json]
|
|
@@ -72,6 +73,9 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
72
73
|
// has already agreed not to build on an untouched home.
|
|
73
74
|
const paneChecks = untouched ? [] : await panesFindings();
|
|
74
75
|
const namingChecks = namingFootprintFindings({ fix, yaziEnabled: filesEnabled });
|
|
76
|
+
// The validation contract lives in the workspace, not the home, so it is
|
|
77
|
+
// checked on every run: a broken contract is why rigor stayed normal.
|
|
78
|
+
const contractChecks = [validationContractFinding()];
|
|
75
79
|
const all = [
|
|
76
80
|
...findings,
|
|
77
81
|
...storageChecks,
|
|
@@ -82,6 +86,7 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
82
86
|
...toolChecks,
|
|
83
87
|
...paneChecks,
|
|
84
88
|
...namingChecks,
|
|
89
|
+
...contractChecks,
|
|
85
90
|
];
|
|
86
91
|
const ok = all.every((f) => f.ok);
|
|
87
92
|
if (json) {
|
|
@@ -1,78 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Fixed machine-readable projection of one evidence bundle's trust record.
|
|
3
|
-
*
|
|
4
|
-
* `evidence inspect <id>` prints an operator record that quotes the task text,
|
|
5
|
-
* the bundle's file list, and per-finding prose. This is the same bundle read
|
|
6
|
-
* down to the one thing a GUI can carry safely and usefully: which runs the
|
|
7
|
-
* bundle covers, what verdict each run earned, and which axis produced it.
|
|
8
|
-
*
|
|
9
|
-
* Every value here comes from a closed vocabulary. The axis names, the axis
|
|
10
|
-
* states, and the verdicts are all enumerations the harness owns, so there is
|
|
11
|
-
* no free-form text on this surface at all, which is what lets it answer the
|
|
12
|
-
* question the inventory raises without reopening the boundary the inventory
|
|
13
|
-
* closed.
|
|
14
|
-
*
|
|
15
|
-
* Unlike the other fixed reads this one takes an identifier, because an
|
|
16
|
-
* operator names the bundle. The GUI host may only pass back an id it served
|
|
17
|
-
* inside its current bounded window; see `apps/workbench/artifact-allowlist.ts`.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { clioDataDir } from "../core/xdg.js";
|
|
21
|
-
import {
|
|
22
|
-
inspectEvidence,
|
|
23
|
-
TRUST_STATUS_AXES,
|
|
24
|
-
type TrustStatusAxis,
|
|
25
|
-
type TrustVerdict,
|
|
26
|
-
trustVerdict,
|
|
27
|
-
} from "../domains/evidence/index.js";
|
|
28
|
-
|
|
29
|
-
export const EVIDENCE_DETAIL_MAX_RUNS = 16;
|
|
30
|
-
|
|
31
|
-
export interface EvidenceDetailRun {
|
|
32
|
-
readonly runId: string;
|
|
33
|
-
readonly verdict: TrustVerdict;
|
|
34
|
-
/** Every axis, always all six, so an absent axis is stated rather than missing. */
|
|
35
|
-
readonly axes: Readonly<Record<TrustStatusAxis, string>>;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface EvidenceDetailSnapshot {
|
|
39
|
-
readonly version: 1;
|
|
40
|
-
readonly generatedAt: string;
|
|
41
|
-
readonly evidenceId: string;
|
|
42
|
-
readonly sourceKind: "run" | "session" | "eval";
|
|
43
|
-
/** False when the bundle predates the canonical trust projection. */
|
|
44
|
-
readonly canonical: boolean;
|
|
45
|
-
readonly runs: readonly EvidenceDetailRun[];
|
|
46
|
-
readonly runsTruncated: boolean;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async function evidenceDetailSnapshot(
|
|
50
|
-
evidenceId: string,
|
|
51
|
-
now: () => number = Date.now,
|
|
52
|
-
dataDir: string = clioDataDir(),
|
|
53
|
-
): Promise<EvidenceDetailSnapshot> {
|
|
54
|
-
const inspected = await inspectEvidence(dataDir, evidenceId);
|
|
55
|
-
const all = inspected.trustStatus.runs;
|
|
56
|
-
const window = all.slice(0, EVIDENCE_DETAIL_MAX_RUNS);
|
|
57
|
-
return {
|
|
58
|
-
version: 1,
|
|
59
|
-
generatedAt: new Date(now()).toISOString(),
|
|
60
|
-
evidenceId: inspected.overview.evidenceId,
|
|
61
|
-
sourceKind: inspected.overview.source.kind,
|
|
62
|
-
canonical: inspected.trustStatus.projection === "canonical",
|
|
63
|
-
runs: window.map(
|
|
64
|
-
(run): EvidenceDetailRun => ({
|
|
65
|
-
runId: run.runId,
|
|
66
|
-
verdict: trustVerdict(run.status),
|
|
67
|
-
axes: Object.fromEntries(TRUST_STATUS_AXES.map((axis) => [axis, run.status[axis].state])) as Record<
|
|
68
|
-
TrustStatusAxis,
|
|
69
|
-
string
|
|
70
|
-
>,
|
|
71
|
-
}),
|
|
72
|
-
),
|
|
73
|
-
runsTruncated: all.length > window.length,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
1
|
+
import { evidenceDetailSnapshot } from "../domains/evidence/detail.js";
|
|
76
2
|
|
|
77
3
|
/**
|
|
78
4
|
* `clio-coder evidence inspect <id> --json`.
|
|
@@ -1,170 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Fixed machine-readable projection of recent evidence artifacts.
|
|
3
|
-
*
|
|
4
|
-
* `evidence list` is an operator table and `evidence inspect <id>` needs an id,
|
|
5
|
-
* so neither is a transport a GUI host can invoke blind. This command accepts
|
|
6
|
-
* no identifier, path, or limit, selects a bounded newest-first window itself,
|
|
7
|
-
* and emits provenance, tags, totals, and a trust verdict.
|
|
8
|
-
*
|
|
9
|
-
* An overview carries the working directories the runs executed in, the task
|
|
10
|
-
* text the operator typed, and the file names inside the bundle. None of that
|
|
11
|
-
* appears here. What does is the shape of the artifact and how far it can be
|
|
12
|
-
* trusted, which is what an operator picks a bundle by.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { clioDataDir } from "../core/xdg.js";
|
|
16
|
-
import {
|
|
17
|
-
EVIDENCE_TAGS,
|
|
18
|
-
type EvidenceOverview,
|
|
19
|
-
type EvidenceTag,
|
|
20
|
-
listEvidenceOverviews,
|
|
21
|
-
loadEvidenceTrustStatus,
|
|
22
|
-
type TrustVerdict,
|
|
23
|
-
trustVerdict,
|
|
24
|
-
} from "../domains/evidence/index.js";
|
|
25
|
-
import { sanitizeCallTargetText } from "../domains/safety/call-target.js";
|
|
26
|
-
import { truncateToWidth } from "../engine/tui-primitives.js";
|
|
27
|
-
|
|
28
|
-
export const EVIDENCE_INVENTORY_MAX_ARTIFACTS = 12;
|
|
29
|
-
export const EVIDENCE_INVENTORY_MAX_IDS = 8;
|
|
30
|
-
|
|
31
|
-
const IDENTITY_WIDTH = 128;
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Worst verdict first.
|
|
35
|
-
*
|
|
36
|
-
* An artifact covering several runs is only as trustworthy as its weakest run,
|
|
37
|
-
* so the fold takes the worst rather than the newest or the most common. A
|
|
38
|
-
* `compromised` run inside an otherwise clean bundle is the fact the operator
|
|
39
|
-
* needs, and averaging it away would be the one summary worth not printing.
|
|
40
|
-
*/
|
|
41
|
-
const VERDICT_SEVERITY: ReadonlyArray<TrustVerdict> = ["compromised", "unverified", "unknown", "grounded", "reviewed"];
|
|
42
|
-
|
|
43
|
-
export interface EvidenceInventoryArtifact {
|
|
44
|
-
readonly evidenceId: string;
|
|
45
|
-
readonly sourceKind: "run" | "session" | "eval";
|
|
46
|
-
readonly generatedAt: string;
|
|
47
|
-
readonly startedAt: string | null;
|
|
48
|
-
readonly endedAt: string | null;
|
|
49
|
-
readonly runIds: readonly string[];
|
|
50
|
-
readonly runIdsTruncated: boolean;
|
|
51
|
-
readonly agentIds: readonly string[];
|
|
52
|
-
readonly statuses: readonly string[];
|
|
53
|
-
readonly tags: readonly EvidenceTag[];
|
|
54
|
-
readonly totals: Readonly<{
|
|
55
|
-
runs: number;
|
|
56
|
-
receipts: number;
|
|
57
|
-
toolCalls: number;
|
|
58
|
-
toolErrors: number;
|
|
59
|
-
blockedToolCalls: number;
|
|
60
|
-
protectedArtifacts: number;
|
|
61
|
-
tokens: number;
|
|
62
|
-
costUsd: number;
|
|
63
|
-
wallTimeMs: number;
|
|
64
|
-
}>;
|
|
65
|
-
/** Secret-shaped values the builder replaced across the bundle's exports. */
|
|
66
|
-
readonly redactionCount: number;
|
|
67
|
-
readonly trust: Readonly<{
|
|
68
|
-
verdict: TrustVerdict;
|
|
69
|
-
/** Runs whose canonical trust status the bundle actually recorded. */
|
|
70
|
-
runsCovered: number;
|
|
71
|
-
/** True when the bundle predates the canonical trust projection. */
|
|
72
|
-
historical: boolean;
|
|
73
|
-
}>;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export interface EvidenceInventorySnapshot {
|
|
77
|
-
readonly version: 1;
|
|
78
|
-
readonly generatedAt: string;
|
|
79
|
-
readonly artifacts: readonly EvidenceInventoryArtifact[];
|
|
80
|
-
readonly truncated: boolean;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function bounded(value: string, width: number): string {
|
|
84
|
-
const sanitized = sanitizeCallTargetText(value);
|
|
85
|
-
if (sanitized.length === 0) return "unavailable";
|
|
86
|
-
return sanitizeCallTargetText(truncateToWidth(sanitized, width, "…", false));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/** Distinct, sanitized, bounded, in first-seen order. */
|
|
90
|
-
function identities(values: ReadonlyArray<string>): string[] {
|
|
91
|
-
const seen: string[] = [];
|
|
92
|
-
for (const value of values) {
|
|
93
|
-
const text = bounded(value, IDENTITY_WIDTH);
|
|
94
|
-
if (!seen.includes(text)) seen.push(text);
|
|
95
|
-
if (seen.length >= EVIDENCE_INVENTORY_MAX_IDS) break;
|
|
96
|
-
}
|
|
97
|
-
return seen;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function tally(value: number | undefined): number {
|
|
101
|
-
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.trunc(value) : 0;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function amount(value: number | undefined): number {
|
|
105
|
-
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : 0;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/** Newest generation first. An unparseable stamp sorts oldest rather than throwing. */
|
|
109
|
-
function byNewest(a: EvidenceOverview, b: EvidenceOverview): number {
|
|
110
|
-
return (Date.parse(b.generatedAt) || 0) - (Date.parse(a.generatedAt) || 0);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async function evidenceInventorySnapshot(
|
|
114
|
-
now: () => number = Date.now,
|
|
115
|
-
dataDir: string = clioDataDir(),
|
|
116
|
-
): Promise<EvidenceInventorySnapshot> {
|
|
117
|
-
const all = (await listEvidenceOverviews(dataDir)).sort(byNewest);
|
|
118
|
-
const window = all.slice(0, EVIDENCE_INVENTORY_MAX_ARTIFACTS);
|
|
119
|
-
const artifacts: EvidenceInventoryArtifact[] = [];
|
|
120
|
-
for (const overview of window) {
|
|
121
|
-
// One unreadable trust file costs that artifact its verdict, never the
|
|
122
|
-
// whole inventory: the bundle itself is still the thing being listed.
|
|
123
|
-
let verdict: TrustVerdict = "unknown";
|
|
124
|
-
let runsCovered = 0;
|
|
125
|
-
let historical = true;
|
|
126
|
-
try {
|
|
127
|
-
const status = await loadEvidenceTrustStatus(dataDir, overview.evidenceId);
|
|
128
|
-
historical = status.projection !== "canonical";
|
|
129
|
-
runsCovered = status.runs.length;
|
|
130
|
-
const verdicts = status.runs.map((run) => trustVerdict(run.status));
|
|
131
|
-
verdict = VERDICT_SEVERITY.find((candidate) => verdicts.includes(candidate)) ?? "unknown";
|
|
132
|
-
} catch {
|
|
133
|
-
verdict = "unknown";
|
|
134
|
-
}
|
|
135
|
-
artifacts.push({
|
|
136
|
-
evidenceId: bounded(overview.evidenceId, IDENTITY_WIDTH),
|
|
137
|
-
sourceKind: overview.source.kind,
|
|
138
|
-
generatedAt: overview.generatedAt,
|
|
139
|
-
startedAt: overview.startedAt,
|
|
140
|
-
endedAt: overview.endedAt,
|
|
141
|
-
runIds: identities(overview.runIds),
|
|
142
|
-
runIdsTruncated: overview.runIds.length > EVIDENCE_INVENTORY_MAX_IDS,
|
|
143
|
-
agentIds: identities(overview.agentIds),
|
|
144
|
-
statuses: identities(overview.statuses),
|
|
145
|
-
tags: overview.tags.filter((tag) => EVIDENCE_TAGS.includes(tag)),
|
|
146
|
-
totals: {
|
|
147
|
-
runs: tally(overview.totals.runs),
|
|
148
|
-
receipts: tally(overview.totals.receipts),
|
|
149
|
-
toolCalls: tally(overview.totals.toolCalls),
|
|
150
|
-
toolErrors: tally(overview.totals.toolErrors),
|
|
151
|
-
blockedToolCalls: tally(overview.totals.blockedToolCalls),
|
|
152
|
-
protectedArtifacts: tally(overview.totals.protectedArtifacts),
|
|
153
|
-
tokens: tally(overview.totals.tokens),
|
|
154
|
-
costUsd: amount(overview.totals.costUsd),
|
|
155
|
-
wallTimeMs: tally(overview.totals.wallTimeMs),
|
|
156
|
-
},
|
|
157
|
-
redactionCount: tally(overview.redactionCount),
|
|
158
|
-
trust: { verdict, runsCovered, historical },
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
return {
|
|
162
|
-
version: 1,
|
|
163
|
-
generatedAt: new Date(now()).toISOString(),
|
|
164
|
-
artifacts,
|
|
165
|
-
truncated: all.length > window.length,
|
|
166
|
-
};
|
|
167
|
-
}
|
|
1
|
+
import { evidenceInventorySnapshot } from "../domains/evidence/inventory.js";
|
|
168
2
|
|
|
169
3
|
/**
|
|
170
4
|
* `clio-coder evidence inventory --json`, and nothing else.
|
package/src/cli/index.ts
CHANGED
|
@@ -56,6 +56,7 @@ Usage:
|
|
|
56
56
|
clio-coder context wiki [--update] [--status] [--depth auto|simple|medium|detailed] [--target <id>] [--model <id>]
|
|
57
57
|
clio-coder context reset [--all] [--yes] clear accumulated project context artifacts
|
|
58
58
|
clio-coder context index [--json] build the codewiki index without model calls
|
|
59
|
+
clio-coder context map [--out <path>] [--json] write an archify architecture seed from the codewiki index
|
|
59
60
|
clio-coder context replay --sessions <path>... compare working-set policies over Clio ledgers
|
|
60
61
|
clio-coder context working-set --session <id|path> inspect one session's working-set state
|
|
61
62
|
clio-coder uninstall remove all Clio Coder state; --remove-binary also unlinks the launcher
|
|
@@ -70,6 +71,7 @@ Usage:
|
|
|
70
71
|
clio-coder extensions install, list, enable, disable, or remove extension packages
|
|
71
72
|
clio-coder skills list, inspect, validate, or install skills
|
|
72
73
|
clio-coder library list, search, add, or sync agents, prompts, fleets, and skills from catalogs
|
|
74
|
+
clio-coder tasks list, add, hand, finish, or drop project operator tasks
|
|
73
75
|
clio-coder verifiers discover, inspect, author, validate, edit, or dry-run project checks
|
|
74
76
|
clio-coder tools list|status|install|remove <id> pinned external programs Clio can drive
|
|
75
77
|
clio-coder interop inspect --json detected external coding agents and how far each one is wired
|
|
@@ -258,6 +260,7 @@ const COMMAND_HANDLERS = new Map<string, CommandHandler>([
|
|
|
258
260
|
["fleet", async (subArgs) => (await import("./fleet.js")).runFleetCommand(subArgs)],
|
|
259
261
|
["skills", async (subArgs) => (await import("./skills.js")).runSkillsCommand(subArgs)],
|
|
260
262
|
["library", async (subArgs) => (await import("./library.js")).runLibraryCommand(subArgs)],
|
|
263
|
+
["tasks", async (subArgs) => (await import("./tasks.js")).runTasksCommand(subArgs)],
|
|
261
264
|
["verifiers", async (subArgs) => (await import("./verifiers.js")).runVerifiersCommand(subArgs)],
|
|
262
265
|
["docs", async (subArgs) => (await import("./docs.js")).runDocsCommand(subArgs)],
|
|
263
266
|
["share", async (subArgs) => (await import("./share.js")).runShareCommand(subArgs)],
|