@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
|
@@ -1,30 +1,34 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
loadProjectVerifierCatalog
|
|
4
|
-
} from "./chunk-VN3SHNBN.js";
|
|
5
|
-
import {
|
|
6
|
-
pathBoundaryCovers,
|
|
7
|
-
resolvePathBoundary
|
|
8
|
-
} from "./chunk-HHV2GANA.js";
|
|
9
2
|
import {
|
|
10
3
|
classify
|
|
11
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KFV5L5SK.js";
|
|
12
5
|
import {
|
|
13
|
-
|
|
6
|
+
extractCommandCdTargets,
|
|
14
7
|
extractCommandDeleteTargets,
|
|
15
8
|
extractCommandWriteTargets,
|
|
16
9
|
inlineShellScript,
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
invokesClioSkillMutation,
|
|
11
|
+
scanShellLike
|
|
12
|
+
} from "./chunk-NXYCB2VD.js";
|
|
19
13
|
import {
|
|
20
14
|
canonicalizeExistingPath
|
|
21
15
|
} from "./chunk-ECH6PKUQ.js";
|
|
16
|
+
import {
|
|
17
|
+
loadProjectVerifierCatalog
|
|
18
|
+
} from "./chunk-DXKJURES.js";
|
|
19
|
+
import {
|
|
20
|
+
pathBoundaryCovers,
|
|
21
|
+
resolvePathBoundary
|
|
22
|
+
} from "./chunk-HHV2GANA.js";
|
|
23
|
+
import {
|
|
24
|
+
artifactDefaultPath
|
|
25
|
+
} from "./chunk-GYV6VZOC.js";
|
|
22
26
|
import {
|
|
23
27
|
ToolNames
|
|
24
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-4NSRCOYP.js";
|
|
25
29
|
import {
|
|
26
30
|
foreignAgentDirs
|
|
27
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-KXDSS5WJ.js";
|
|
28
32
|
import {
|
|
29
33
|
resolvePackageRoot
|
|
30
34
|
} from "./chunk-IWHMRKLL.js";
|
|
@@ -48,7 +52,7 @@ function isSameOrDescendant(candidatePath, policyPath) {
|
|
|
48
52
|
const candidate = path.resolve(candidatePath);
|
|
49
53
|
const policy = path.resolve(policyPath);
|
|
50
54
|
const relative = path.relative(policy, candidate);
|
|
51
|
-
return relative === "" || !relative.startsWith(
|
|
55
|
+
return relative === "" || relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
|
|
52
56
|
}
|
|
53
57
|
function expandTilde(rawPath) {
|
|
54
58
|
if (rawPath === "~") return homedir();
|
|
@@ -145,7 +149,7 @@ function normalizeSeparators(value) {
|
|
|
145
149
|
// src/domains/safety/policy-engine.ts
|
|
146
150
|
init_esm_shims();
|
|
147
151
|
import { createHash as createHash2 } from "node:crypto";
|
|
148
|
-
import
|
|
152
|
+
import path4 from "node:path";
|
|
149
153
|
|
|
150
154
|
// src/domains/safety/default-path-policy.ts
|
|
151
155
|
init_esm_shims();
|
|
@@ -208,8 +212,10 @@ var DEFAULT_DAMAGE_CONTROL_PATH_POLICY = {
|
|
|
208
212
|
// widen its own permissions in two tool calls. Both are authored by the
|
|
209
213
|
// operator through the CLI (`clio-coder verifiers author` lands nothing
|
|
210
214
|
// before `--yes`), so model-side writes and deletes are refused.
|
|
215
|
+
// Skills also refuse model-side writes and deletes; installs go through `clio-coder skills install`.
|
|
211
216
|
".clio-coder/safety.yaml",
|
|
212
217
|
".clio-coder/verifiers.yaml",
|
|
218
|
+
".clio-coder/skills/",
|
|
213
219
|
"/etc/",
|
|
214
220
|
"/usr/",
|
|
215
221
|
"/bin/",
|
|
@@ -730,6 +736,42 @@ function getCachedDefaultRulePacks() {
|
|
|
730
736
|
return cachedPacks;
|
|
731
737
|
}
|
|
732
738
|
|
|
739
|
+
// src/domains/safety/skill-authority.ts
|
|
740
|
+
init_esm_shims();
|
|
741
|
+
import { homedir as homedir2 } from "node:os";
|
|
742
|
+
import path3 from "node:path";
|
|
743
|
+
function activeClioSkillRoots(cwd) {
|
|
744
|
+
return [path3.join(cwd, ".clio-coder", "skills"), path3.join(clioConfigDir(), "skills")];
|
|
745
|
+
}
|
|
746
|
+
function skillMutationReason(roots, targets, cwd, command) {
|
|
747
|
+
const workingDirs = [cwd];
|
|
748
|
+
if (command !== null) {
|
|
749
|
+
for (const destination of extractCommandCdTargets(command)) {
|
|
750
|
+
workingDirs.push(path3.resolve(workingDirs.at(-1) ?? cwd, expandHome(destination)));
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
for (const target of targets) {
|
|
754
|
+
if (target.operation === "read") continue;
|
|
755
|
+
for (const directory of workingDirs) {
|
|
756
|
+
const lexical = path3.resolve(directory, expandHome(target.path));
|
|
757
|
+
const resolved = canonicalizeExistingPath(lexical);
|
|
758
|
+
for (const root of roots) {
|
|
759
|
+
for (const boundary of [root, canonicalizeExistingPath(root)]) {
|
|
760
|
+
for (const candidate of [lexical, resolved]) {
|
|
761
|
+
if (isSameOrDescendant(candidate, boundary) || target.operation === "delete" && isSameOrDescendant(boundary, candidate)) {
|
|
762
|
+
return `active skill tree ${root} is operator-owned; draft changes outside active skill roots and ask the operator to install or update them`;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
return null;
|
|
770
|
+
}
|
|
771
|
+
function expandHome(value) {
|
|
772
|
+
return value === "~" ? homedir2() : value.startsWith("~/") ? path3.join(homedir2(), value.slice(2)) : value;
|
|
773
|
+
}
|
|
774
|
+
|
|
733
775
|
// src/domains/safety/policy-engine.ts
|
|
734
776
|
var BUILTIN_ALLOWLIST = [
|
|
735
777
|
{ id: "builtin:pwd", re: /^pwd$/ },
|
|
@@ -771,19 +813,23 @@ function evaluateWriteRoots(roots, writeRootCwd, call) {
|
|
|
771
813
|
if (roots.length === 0) return null;
|
|
772
814
|
const target = writeRootTargetPath(call);
|
|
773
815
|
if (target === null) return null;
|
|
774
|
-
const resolved =
|
|
816
|
+
const resolved = path4.resolve(writeRootCwd, target);
|
|
775
817
|
if (pathBoundaryCovers(roots, resolved)) return null;
|
|
776
818
|
return `write target '${target}' resolves to '${resolved}', which is outside the permitted write roots for this run: ${roots.join(", ")}`;
|
|
777
819
|
}
|
|
778
820
|
function createSafetyPolicyEngine(options = {}) {
|
|
779
|
-
const cwd = canonicalizeExistingPath(
|
|
780
|
-
const writeRootCwd =
|
|
821
|
+
const cwd = canonicalizeExistingPath(path4.resolve(options.cwd ?? process.cwd()));
|
|
822
|
+
const writeRootCwd = path4.resolve(options.cwd ?? process.cwd());
|
|
781
823
|
const writeRoots = (options.writeRoots ?? []).map((root) => resolvePathBoundary(writeRootCwd, root));
|
|
824
|
+
const skillRoots = activeClioSkillRoots(cwd);
|
|
782
825
|
const packs = options.rulePacks ?? getCachedDefaultRulePacks();
|
|
783
826
|
const projectPolicy = options.projectPolicy ?? loadProjectSafetyPolicy(cwd);
|
|
784
|
-
const projectPolicyRoot = projectPolicy.path === null ? cwd :
|
|
827
|
+
const projectPolicyRoot = projectPolicy.path === null ? cwd : path4.dirname(path4.dirname(canonicalizeExistingPath(projectPolicy.path)));
|
|
785
828
|
const pathPolicyInput = projectPolicy.disableDefaultPathPolicy ? projectPolicy.pathPolicy : mergePathPolicyInputs(DEFAULT_DAMAGE_CONTROL_PATH_POLICY, projectPolicy.pathPolicy);
|
|
786
|
-
const expandedDefaults = projectPolicy.disableDefaultPathPolicy ? pathPolicyInput : mergePathPolicyInputs(pathPolicyInput, {
|
|
829
|
+
const expandedDefaults = projectPolicy.disableDefaultPathPolicy ? pathPolicyInput : mergePathPolicyInputs(pathPolicyInput, {
|
|
830
|
+
zeroAccessPaths: clioCredentialStorePaths(),
|
|
831
|
+
readOnlyPaths: clioSkillsRootPaths()
|
|
832
|
+
});
|
|
787
833
|
const pathPolicy = compilePathPolicy(expandedDefaults, projectPolicyRoot);
|
|
788
834
|
const zeroAccessPolicy = {
|
|
789
835
|
root: pathPolicy.root,
|
|
@@ -843,6 +889,21 @@ function createSafetyPolicyEngine(options = {}) {
|
|
|
843
889
|
if (projectPolicy.path !== null) blockInput.projectPolicyPath = projectPolicy.path;
|
|
844
890
|
return blockDecision(base, blockInput);
|
|
845
891
|
}
|
|
892
|
+
const mutationCommand = call.tool === ToolNames.Bash ? command : catalogCommand;
|
|
893
|
+
const skillReason = mutationCommand !== null && invokesClioSkillMutation(mutationCommand) ? "skill installation and updates require the operator CLI or an explicit operator install choice; draft outside active skill roots" : skillMutationReason(
|
|
894
|
+
skillRoots,
|
|
895
|
+
pathPolicyTargets(catalogCommand === null ? call : { tool: ToolNames.Bash, args: { command: catalogCommand } }),
|
|
896
|
+
callCwd,
|
|
897
|
+
mutationCommand
|
|
898
|
+
);
|
|
899
|
+
if (skillReason !== null) {
|
|
900
|
+
return blockDecision(base, {
|
|
901
|
+
ruleId: "skill-authority",
|
|
902
|
+
reasonCode: "skill-authority",
|
|
903
|
+
reasons: [skillReason],
|
|
904
|
+
policySource: "builtin-classifier"
|
|
905
|
+
});
|
|
906
|
+
}
|
|
846
907
|
const pathBlock = evaluateProjectPathPolicy(pathPolicy, call, callCwd);
|
|
847
908
|
if (pathBlock !== null) {
|
|
848
909
|
const blockInput = {
|
|
@@ -940,7 +1001,14 @@ function createSafetyPolicyEngine(options = {}) {
|
|
|
940
1001
|
}
|
|
941
1002
|
function clioCredentialStorePaths() {
|
|
942
1003
|
try {
|
|
943
|
-
return [
|
|
1004
|
+
return [path4.join(clioConfigDir(), "credentials.yaml")];
|
|
1005
|
+
} catch {
|
|
1006
|
+
return [];
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
function clioSkillsRootPaths() {
|
|
1010
|
+
try {
|
|
1011
|
+
return [path4.join(clioConfigDir(), "skills")];
|
|
944
1012
|
} catch {
|
|
945
1013
|
return [];
|
|
946
1014
|
}
|
|
@@ -962,10 +1030,10 @@ function stripQuotes(token) {
|
|
|
962
1030
|
}
|
|
963
1031
|
function bashPathTokenCandidates(command) {
|
|
964
1032
|
const candidates = [];
|
|
965
|
-
for (const
|
|
1033
|
+
for (const scanned of scanShellLike(command)) {
|
|
1034
|
+
if (scanned.operator) continue;
|
|
1035
|
+
const token = scanned.value;
|
|
966
1036
|
if (token.length === 0) continue;
|
|
967
|
-
if (token === ";" || token === "&&" || token === "||" || token === "|" || token === ">" || token === ">>") continue;
|
|
968
|
-
if (token === "<" || token === "<<") continue;
|
|
969
1037
|
if (/\s/.test(token)) continue;
|
|
970
1038
|
if (token.startsWith("-") && !token.includes("/") && !token.includes("=")) continue;
|
|
971
1039
|
candidates.push(token);
|
|
@@ -1205,29 +1273,28 @@ function effectiveClassification(classification, match) {
|
|
|
1205
1273
|
}
|
|
1206
1274
|
function matchingProjectCommand(policy, command, cwd) {
|
|
1207
1275
|
if (!policy.valid || policy.path === null) return null;
|
|
1208
|
-
const policyRoot =
|
|
1276
|
+
const policyRoot = path4.dirname(path4.dirname(policy.path));
|
|
1209
1277
|
for (const entry of policy.commands) {
|
|
1210
1278
|
if (entry.command !== command) continue;
|
|
1211
1279
|
if (entry.shellOperators === "deny" && hasShellOperators(command)) continue;
|
|
1212
|
-
const allowedCwd = entry.cwd !== void 0 ?
|
|
1280
|
+
const allowedCwd = entry.cwd !== void 0 ? path4.resolve(policyRoot, entry.cwd) : policyRoot;
|
|
1213
1281
|
if (!isUnderOrSame(cwd, allowedCwd)) continue;
|
|
1214
1282
|
return entry;
|
|
1215
1283
|
}
|
|
1216
1284
|
return null;
|
|
1217
1285
|
}
|
|
1218
|
-
var CHAIN_BREAKING_TOKENS = /* @__PURE__ */ new Set([";", "|", "||", ">", ">>", "<", "<<"]);
|
|
1219
1286
|
var CHAIN_MAX_SEGMENTS = 6;
|
|
1220
1287
|
function recognizeCommandChain(command, callCwd, workspaceRoot, policy) {
|
|
1221
1288
|
const segments = [];
|
|
1222
1289
|
let current = [];
|
|
1223
|
-
for (const token of
|
|
1224
|
-
if (token === "&&") {
|
|
1290
|
+
for (const token of scanShellLike(command)) {
|
|
1291
|
+
if (token.operator && token.value === "&&") {
|
|
1225
1292
|
segments.push(current);
|
|
1226
1293
|
current = [];
|
|
1227
1294
|
continue;
|
|
1228
1295
|
}
|
|
1229
|
-
if (
|
|
1230
|
-
current.push(token);
|
|
1296
|
+
if (token.operator) return null;
|
|
1297
|
+
current.push(token.value);
|
|
1231
1298
|
}
|
|
1232
1299
|
segments.push(current);
|
|
1233
1300
|
if (segments.length < 2 || segments.length > CHAIN_MAX_SEGMENTS) return null;
|
|
@@ -1238,7 +1305,7 @@ function recognizeCommandChain(command, callCwd, workspaceRoot, policy) {
|
|
|
1238
1305
|
if (segment[0] === "cd") {
|
|
1239
1306
|
if (segment.length !== 2) return null;
|
|
1240
1307
|
const target = segment[1] ?? "";
|
|
1241
|
-
if (target.startsWith("~") || !isUnderOrSame(
|
|
1308
|
+
if (target.startsWith("~") || !isUnderOrSame(path4.resolve(callCwd, target), workspaceRoot)) return null;
|
|
1242
1309
|
ruleIds.push("builtin:cd-workspace");
|
|
1243
1310
|
continue;
|
|
1244
1311
|
}
|
|
@@ -1265,11 +1332,11 @@ function hasShellOperators(command) {
|
|
|
1265
1332
|
return hasSequencingOperators(command) || hasCommandSubstitution(command);
|
|
1266
1333
|
}
|
|
1267
1334
|
function isUnderOrSame(child, parent) {
|
|
1268
|
-
const rel =
|
|
1269
|
-
canonicalizeExistingPath(
|
|
1270
|
-
canonicalizeExistingPath(
|
|
1335
|
+
const rel = path4.relative(
|
|
1336
|
+
canonicalizeExistingPath(path4.resolve(parent)),
|
|
1337
|
+
canonicalizeExistingPath(path4.resolve(child))
|
|
1271
1338
|
);
|
|
1272
|
-
return rel === "" || !rel.startsWith("..") && !
|
|
1339
|
+
return rel === "" || !rel.startsWith("..") && !path4.isAbsolute(rel);
|
|
1273
1340
|
}
|
|
1274
1341
|
function commandArg(args) {
|
|
1275
1342
|
return typeof args?.command === "string" ? args.command : null;
|
|
@@ -1280,10 +1347,16 @@ function pathArg(args) {
|
|
|
1280
1347
|
return typeof candidate === "string" && candidate.length > 0 ? candidate : null;
|
|
1281
1348
|
}
|
|
1282
1349
|
function cwdArg(args, fallback) {
|
|
1283
|
-
const resolved = typeof args?.cwd === "string" && args.cwd.length > 0 ?
|
|
1350
|
+
const resolved = typeof args?.cwd === "string" && args.cwd.length > 0 ? path4.resolve(fallback, args.cwd) : fallback;
|
|
1284
1351
|
return canonicalizeExistingPath(resolved);
|
|
1285
1352
|
}
|
|
1286
|
-
var CONTENT_BEARING_TOOLS = /* @__PURE__ */ new Set([
|
|
1353
|
+
var CONTENT_BEARING_TOOLS = /* @__PURE__ */ new Set([
|
|
1354
|
+
ToolNames.Write,
|
|
1355
|
+
ToolNames.Edit,
|
|
1356
|
+
ToolNames.Artifact,
|
|
1357
|
+
ToolNames.Dispatch,
|
|
1358
|
+
ToolNames.Tasks
|
|
1359
|
+
]);
|
|
1287
1360
|
function damageControlScan(call) {
|
|
1288
1361
|
if (!CONTENT_BEARING_TOOLS.has(call.tool)) return serializeArgs(call.args);
|
|
1289
1362
|
const pathArg2 = call.args?.path;
|
|
@@ -1340,4 +1413,4 @@ export {
|
|
|
1340
1413
|
WRITE_ROOT_REFUSED_TOOLS,
|
|
1341
1414
|
createSafetyPolicyEngine
|
|
1342
1415
|
};
|
|
1343
|
-
//# sourceMappingURL=chunk-
|
|
1416
|
+
//# sourceMappingURL=chunk-6Q3CYFD3.js.map
|
|
@@ -4,33 +4,27 @@ import {
|
|
|
4
4
|
extractCommandDeleteTargets,
|
|
5
5
|
extractCommandWriteTargets,
|
|
6
6
|
toolMutationPaths
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-NXYCB2VD.js";
|
|
8
|
+
import {
|
|
9
|
+
PROJECT_VERIFIER_CATALOG_RELATIVE_PATH
|
|
10
|
+
} from "./chunk-DXKJURES.js";
|
|
8
11
|
import {
|
|
9
12
|
isProjectVerifierCheckId,
|
|
10
13
|
isVerificationScriptName
|
|
11
14
|
} from "./chunk-UL3WSD3F.js";
|
|
12
15
|
import {
|
|
13
16
|
ToolNames
|
|
14
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-4NSRCOYP.js";
|
|
15
18
|
import {
|
|
16
19
|
init_esm_shims
|
|
17
20
|
} from "./chunk-3R73A4XB.js";
|
|
18
21
|
|
|
19
22
|
// src/domains/safety/finish-contract.ts
|
|
20
23
|
init_esm_shims();
|
|
21
|
-
|
|
24
|
+
import { resolve } from "node:path";
|
|
25
|
+
var FINISH_CONTRACT_ADVISORY_MESSAGE = "[Clio Coder] finish-contract advisory: you changed files this turn without recording validation evidence or a limitation receipt. Run a verification command or call limitation with the scope and reason.";
|
|
22
26
|
var DEFAULT_RECENT_ENTRY_LIMIT = 80;
|
|
23
|
-
var LIMITATION_PATTERNS = [
|
|
24
|
-
/\b(?:blocked by|blocker|blockers|unable to|not able to|could not|couldn't|cannot|can't)\b/i,
|
|
25
|
-
/\b(?:did not|didn't|have not|haven't|has not|hasn't|was not able|wasn't able)\b/i,
|
|
26
|
-
/\b(?:not complete|incomplete)\b/i,
|
|
27
|
-
/\b(?:not|un)(?:\s|-)?(?:validated|verified|tested)\b/i,
|
|
28
|
-
/^\s*Tests\s*:\s*(?:not run|not executed|not available|failed|blocked|skipped)\b/im,
|
|
29
|
-
/^\s*Known gaps?\s*:\s*(?!\s*(?:none|no\b|n\/a|not applicable)\b).+/im,
|
|
30
|
-
/\bremaining(?:\s+\w+){0,3}\s+(?:work|issue|issues|gap|gaps|blocker|blockers)\b/i
|
|
31
|
-
];
|
|
32
27
|
function assessFinishContract(input) {
|
|
33
|
-
const assistantText = input.assistantText.trim();
|
|
34
28
|
const sessionEntries = input.sessionEntries ?? [];
|
|
35
29
|
const assistantTurnId = input.assistantTurnId ?? null;
|
|
36
30
|
const window = recentEntries(sessionEntries, assistantTurnId, input.recentEntryLimit ?? DEFAULT_RECENT_ENTRY_LIMIT);
|
|
@@ -38,12 +32,38 @@ function assessFinishContract(input) {
|
|
|
38
32
|
if (mutatedPaths.length === 0) {
|
|
39
33
|
return { kind: "ok", reason: "no_mutation", evidence: [], mutatedPaths };
|
|
40
34
|
}
|
|
41
|
-
const
|
|
35
|
+
const acceptanceChecks = new Set(input.activeAcceptance?.verification.map((item) => item.check) ?? []);
|
|
36
|
+
const evidence = collectValidationEvidence(window, acceptanceChecks, input.workspaceRoot);
|
|
37
|
+
const limitations = collectLimitationEvidence(window);
|
|
38
|
+
const required = input.rigor === "high" ? input.activeAcceptance?.verification ?? [] : [];
|
|
39
|
+
if (required.length > 0) {
|
|
40
|
+
const passes = new Set(
|
|
41
|
+
required.filter((check) => evidence.some((item) => acceptanceCheckPassed(item, check, input.workspaceRoot)))
|
|
42
|
+
);
|
|
43
|
+
const limited = new Set(limitations.flatMap((item) => item.paths ?? []));
|
|
44
|
+
const missing = [
|
|
45
|
+
...new Set(required.filter((check) => !passes.has(check) && !limited.has(check.check)).map((item) => item.check))
|
|
46
|
+
];
|
|
47
|
+
if (missing.length > 0)
|
|
48
|
+
return {
|
|
49
|
+
kind: "engage",
|
|
50
|
+
reason: "unvalidated_mutation",
|
|
51
|
+
message: `[Clio Coder] high-rigor finish gate: operator acceptance still requires passing validation for: ${missing.join(", ")}. Run each named check or include its exact id in limitation.paths.`,
|
|
52
|
+
evidence: [...evidence, ...limitations],
|
|
53
|
+
mutatedPaths
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
kind: "ok",
|
|
57
|
+
reason: passes.size === required.length ? "validation_evidence" : "explicit_limitation",
|
|
58
|
+
evidence: [...evidence, ...limitations],
|
|
59
|
+
mutatedPaths
|
|
60
|
+
};
|
|
61
|
+
}
|
|
42
62
|
if (evidence.length > 0) {
|
|
43
63
|
return { kind: "ok", reason: "validation_evidence", evidence, mutatedPaths };
|
|
44
64
|
}
|
|
45
|
-
if (
|
|
46
|
-
return { kind: "ok", reason: "explicit_limitation", evidence:
|
|
65
|
+
if (limitations.length > 0) {
|
|
66
|
+
return { kind: "ok", reason: "explicit_limitation", evidence: limitations, mutatedPaths };
|
|
47
67
|
}
|
|
48
68
|
return {
|
|
49
69
|
kind: "engage",
|
|
@@ -53,10 +73,59 @@ function assessFinishContract(input) {
|
|
|
53
73
|
mutatedPaths
|
|
54
74
|
};
|
|
55
75
|
}
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
76
|
+
function acceptanceCheckPassed(evidence, required, workspaceRoot) {
|
|
77
|
+
if (evidence.kind !== "validation_command" || evidence.check !== required.check || !workspaceRoot || !evidence.source)
|
|
78
|
+
return false;
|
|
79
|
+
if (evidence.durationMs !== void 0 && evidence.durationMs > required.timeoutMs) return false;
|
|
80
|
+
const root = resolve(workspaceRoot);
|
|
81
|
+
if (evidence.source.kind === "project-catalog")
|
|
82
|
+
return evidence.source.path === resolve(root, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH);
|
|
83
|
+
return evidence.source.path === resolve(root, "package.json") && evidence.cwd === root && validationCheckId(evidence.argv?.join(" ") ?? "") === required.check;
|
|
84
|
+
}
|
|
85
|
+
function collectLimitationEvidence(recent) {
|
|
86
|
+
const evidence = [];
|
|
87
|
+
const calls = /* @__PURE__ */ new Map();
|
|
88
|
+
const seen = /* @__PURE__ */ new Set();
|
|
89
|
+
for (const entry of recent) {
|
|
90
|
+
const call = limitationToolCall(entry);
|
|
91
|
+
if (call !== null) {
|
|
92
|
+
calls.set(call.toolCallId, call);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const resultId = successfulToolResultId(entry);
|
|
96
|
+
if (resultId === null) continue;
|
|
97
|
+
const candidate = calls.get(resultId);
|
|
98
|
+
if (candidate === void 0) continue;
|
|
99
|
+
const item = {
|
|
100
|
+
kind: "limitation",
|
|
101
|
+
summary: candidate.command,
|
|
102
|
+
...candidate.paths ? { paths: candidate.paths } : {}
|
|
103
|
+
};
|
|
104
|
+
if (candidate.turnId !== void 0) item.turnId = candidate.turnId;
|
|
105
|
+
pushEvidence(evidence, seen, item);
|
|
106
|
+
}
|
|
107
|
+
return evidence;
|
|
108
|
+
}
|
|
109
|
+
function limitationToolCall(entry) {
|
|
110
|
+
const record = asRecord(entry);
|
|
111
|
+
if (record?.kind !== "message" || record.role !== "tool_call") return null;
|
|
112
|
+
const payload = asRecord(record.payload);
|
|
113
|
+
if (payload === null) return null;
|
|
114
|
+
const toolName = stringFromFirst(payload, ["name", "toolName", "tool"]);
|
|
115
|
+
if (toolName !== ToolNames.Limitation) return null;
|
|
116
|
+
const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
|
|
117
|
+
if (toolCallId === null) return null;
|
|
118
|
+
const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
|
|
119
|
+
const scope = typeof args?.scope === "string" ? args.scope.trim() : "";
|
|
120
|
+
const reason = typeof args?.reason === "string" ? args.reason.trim() : "";
|
|
121
|
+
const candidate = {
|
|
122
|
+
toolCallId,
|
|
123
|
+
paths: Array.isArray(args?.paths) ? args.paths.filter((item) => typeof item === "string").map((item) => item.trim()) : [],
|
|
124
|
+
command: `limitation recorded: ${scope.length > 0 ? scope : "unspecified"} (reason=${reason.length > 0 ? reason : "unspecified"})`
|
|
125
|
+
};
|
|
126
|
+
const turnId = turnIdOf(entry);
|
|
127
|
+
if (turnId !== null) candidate.turnId = turnId;
|
|
128
|
+
return candidate;
|
|
60
129
|
}
|
|
61
130
|
function mutatingReceipts(recent) {
|
|
62
131
|
const mutationCalls = /* @__PURE__ */ new Map();
|
|
@@ -117,7 +186,7 @@ function pushPath(paths, seen, path) {
|
|
|
117
186
|
seen.add(path);
|
|
118
187
|
paths.push(path);
|
|
119
188
|
}
|
|
120
|
-
function collectValidationEvidence(recent) {
|
|
189
|
+
function collectValidationEvidence(recent, acceptanceChecks, workspaceRoot) {
|
|
121
190
|
const evidence = [];
|
|
122
191
|
const toolCalls = /* @__PURE__ */ new Map();
|
|
123
192
|
const dispatchCalls = /* @__PURE__ */ new Map();
|
|
@@ -128,7 +197,7 @@ function collectValidationEvidence(recent) {
|
|
|
128
197
|
pushEvidence(evidence, seen, protectedArtifact);
|
|
129
198
|
continue;
|
|
130
199
|
}
|
|
131
|
-
const call = bashValidationCall(entry);
|
|
200
|
+
const call = bashValidationCall(entry, acceptanceChecks, workspaceRoot);
|
|
132
201
|
if (call !== null) {
|
|
133
202
|
toolCalls.set(call.toolCallId, call);
|
|
134
203
|
continue;
|
|
@@ -153,11 +222,11 @@ function collectValidationEvidence(recent) {
|
|
|
153
222
|
}
|
|
154
223
|
const candidate = toolCalls.get(resultId);
|
|
155
224
|
if (candidate !== void 0) {
|
|
156
|
-
pushEvidence(evidence, seen, validationEvidence(candidate));
|
|
225
|
+
pushEvidence(evidence, seen, validationEvidence(candidate, entry));
|
|
157
226
|
}
|
|
158
227
|
continue;
|
|
159
228
|
}
|
|
160
|
-
const bashExecution = bashExecutionEvidence(entry);
|
|
229
|
+
const bashExecution = bashExecutionEvidence(entry, acceptanceChecks, workspaceRoot);
|
|
161
230
|
if (bashExecution !== null) pushEvidence(evidence, seen, bashExecution);
|
|
162
231
|
}
|
|
163
232
|
return evidence;
|
|
@@ -175,7 +244,7 @@ function recentEntries(entries, assistantTurnId, recentEntryLimit) {
|
|
|
175
244
|
}
|
|
176
245
|
return entries.slice(startInclusive, endExclusive);
|
|
177
246
|
}
|
|
178
|
-
function bashValidationCall(entry) {
|
|
247
|
+
function bashValidationCall(entry, acceptanceChecks, workspaceRoot) {
|
|
179
248
|
const record = asRecord(entry);
|
|
180
249
|
if (record?.kind !== "message" || record.role !== "tool_call") return null;
|
|
181
250
|
const payload = asRecord(record.payload);
|
|
@@ -185,13 +254,15 @@ function bashValidationCall(entry) {
|
|
|
185
254
|
const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
|
|
186
255
|
const command = typeof args?.command === "string" ? args.command : null;
|
|
187
256
|
if (command === null) return null;
|
|
188
|
-
const detected =
|
|
257
|
+
const detected = acceptanceValidationCommand(command, acceptanceChecks);
|
|
189
258
|
if (detected.kind !== "validation") return null;
|
|
190
259
|
const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
|
|
191
260
|
if (toolCallId === null) return null;
|
|
192
261
|
const candidate = {
|
|
193
262
|
toolCallId,
|
|
194
|
-
command: detected.matched
|
|
263
|
+
command: detected.matched,
|
|
264
|
+
...validationCheckFields(detected.matched),
|
|
265
|
+
execution: packageCommandExecution(command, args?.cwd, workspaceRoot)
|
|
195
266
|
};
|
|
196
267
|
const turnId = turnIdOf(entry);
|
|
197
268
|
if (turnId !== null) candidate.turnId = turnId;
|
|
@@ -245,7 +316,8 @@ function validationToolCall(entry) {
|
|
|
245
316
|
if (toolCallId === null) return null;
|
|
246
317
|
const candidate = {
|
|
247
318
|
toolCallId,
|
|
248
|
-
command: summary
|
|
319
|
+
command: summary,
|
|
320
|
+
...validationCheckFields(summary)
|
|
249
321
|
};
|
|
250
322
|
const turnId = turnIdOf(entry);
|
|
251
323
|
if (turnId !== null) candidate.turnId = turnId;
|
|
@@ -273,7 +345,8 @@ function successfulToolResultId(entry) {
|
|
|
273
345
|
if (payload.isError === true || payload.error === true) return null;
|
|
274
346
|
const result = asRecord(payload.result);
|
|
275
347
|
const details = asRecord(result?.details);
|
|
276
|
-
if (details?.kind === "error") return null;
|
|
348
|
+
if (result?.kind === "error" || details?.kind === "error") return null;
|
|
349
|
+
if (typeof details?.exitCode === "number" && details.exitCode !== 0) return null;
|
|
277
350
|
return stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]);
|
|
278
351
|
}
|
|
279
352
|
function dispatchReceiptEvidence(entry, candidate) {
|
|
@@ -318,18 +391,20 @@ function dispatchReceiptAgentId(receiptAgentId, candidate) {
|
|
|
318
391
|
if (receiptAgentId !== void 0 && receiptAgentId.length > 0) return receiptAgentId;
|
|
319
392
|
return candidate?.command.match(/^agent=([^\s]+)/)?.[1] ?? "unknown";
|
|
320
393
|
}
|
|
321
|
-
function bashExecutionEvidence(entry) {
|
|
394
|
+
function bashExecutionEvidence(entry, acceptanceChecks, workspaceRoot) {
|
|
322
395
|
const record = asRecord(entry);
|
|
323
396
|
if (record?.kind !== "bashExecution") return null;
|
|
324
397
|
if (typeof record.command !== "string") return null;
|
|
325
398
|
if (record.cancelled === true) return null;
|
|
326
399
|
if (record.exitCode !== 0) return null;
|
|
327
|
-
const detected =
|
|
400
|
+
const detected = acceptanceValidationCommand(record.command, acceptanceChecks);
|
|
328
401
|
if (detected.kind !== "validation") return null;
|
|
329
402
|
const contextMarker = record.excludeFromContext === true ? " [not sent to model]" : "";
|
|
330
403
|
const evidence = {
|
|
331
404
|
kind: "validation_command",
|
|
332
|
-
summary: `validation command passed: ${detected.matched}${contextMarker}
|
|
405
|
+
summary: `validation command passed: ${detected.matched}${contextMarker}`,
|
|
406
|
+
...validationCheckFields(detected.matched),
|
|
407
|
+
...packageCommandExecution(record.command, record.cwd, workspaceRoot)
|
|
333
408
|
};
|
|
334
409
|
const turnId = turnIdOf(entry);
|
|
335
410
|
if (turnId !== null) evidence.turnId = turnId;
|
|
@@ -349,16 +424,46 @@ function protectedArtifactEvidence(entry) {
|
|
|
349
424
|
if (turnId !== null) evidence.turnId = turnId;
|
|
350
425
|
return evidence;
|
|
351
426
|
}
|
|
352
|
-
function validationEvidence(candidate) {
|
|
427
|
+
function validationEvidence(candidate, entry) {
|
|
353
428
|
const evidence = {
|
|
354
429
|
kind: "validation_command",
|
|
355
|
-
summary: `validation command passed: ${candidate.command}
|
|
430
|
+
summary: `validation command passed: ${candidate.command}`,
|
|
431
|
+
...candidate.check ? { check: candidate.check } : {},
|
|
432
|
+
...candidate.execution ?? declaredCheckExecution(entry, candidate.check)
|
|
356
433
|
};
|
|
357
434
|
if (candidate.turnId !== void 0) evidence.turnId = candidate.turnId;
|
|
358
435
|
return evidence;
|
|
359
436
|
}
|
|
437
|
+
function declaredCheckExecution(entry, check) {
|
|
438
|
+
const payload = asRecord(asRecord(entry)?.payload);
|
|
439
|
+
const details = asRecord(asRecord(payload?.result)?.details);
|
|
440
|
+
const source = asRecord(details?.source);
|
|
441
|
+
if (!details || details.check !== check || details.exitCode !== 0 || details.aborted === true || details.timedOut === true || details.outputCapped === true || source?.kind !== "package.json" && source?.kind !== "project-catalog" || typeof source.path !== "string" || typeof details.cwd !== "string" || !Array.isArray(details.argv) || !details.argv.every((arg) => typeof arg === "string"))
|
|
442
|
+
return {};
|
|
443
|
+
if (source.kind === "project-catalog") {
|
|
444
|
+
const argv = details.argv;
|
|
445
|
+
if (!Array.isArray(details.declaredCommand) || details.declaredCommand.length !== details.argv.length || !details.declaredCommand.every((arg, index) => arg === argv[index]) || typeof details.declaredCwd !== "string" || typeof details.declaredTimeoutMs !== "number" || typeof details.durationMs !== "number" || details.durationMs > details.declaredTimeoutMs || resolve(source.path, "../..", details.declaredCwd) !== details.cwd)
|
|
446
|
+
return {};
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
source: { kind: source.kind, path: source.path },
|
|
450
|
+
cwd: details.cwd,
|
|
451
|
+
argv: details.argv,
|
|
452
|
+
...typeof details.durationMs === "number" ? { durationMs: details.durationMs } : {}
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
function packageCommandExecution(command, cwd, workspaceRoot) {
|
|
456
|
+
if (!workspaceRoot || !/^(?:npm|pnpm|yarn|bun) /u.test(command.trim()) || validationCheckId(command.trim()) === void 0)
|
|
457
|
+
return {};
|
|
458
|
+
const executionCwd = resolve(workspaceRoot, typeof cwd === "string" ? cwd : ".");
|
|
459
|
+
return {
|
|
460
|
+
source: { kind: "package.json", path: resolve(executionCwd, "package.json") },
|
|
461
|
+
cwd: executionCwd,
|
|
462
|
+
argv: command.trim().split(/\s+/u)
|
|
463
|
+
};
|
|
464
|
+
}
|
|
360
465
|
function pushEvidence(evidence, seen, item) {
|
|
361
|
-
const key =
|
|
466
|
+
const key = JSON.stringify(item);
|
|
362
467
|
if (seen.has(key)) return;
|
|
363
468
|
seen.add(key);
|
|
364
469
|
evidence.push(item);
|
|
@@ -383,6 +488,19 @@ function stringFromFirst(record, keys) {
|
|
|
383
488
|
function asRecord(value) {
|
|
384
489
|
return value !== null && typeof value === "object" ? value : null;
|
|
385
490
|
}
|
|
491
|
+
function validationCheckId(command) {
|
|
492
|
+
return /^(?:npm|pnpm|yarn|bun) (?:run )?([a-z0-9][a-z0-9._:-]*)$/.exec(command)?.[1] ?? /^verify ([a-z0-9][a-z0-9._:-]*)$/.exec(command)?.[1];
|
|
493
|
+
}
|
|
494
|
+
function validationCheckFields(command) {
|
|
495
|
+
const check = validationCheckId(command);
|
|
496
|
+
return check ? { check } : {};
|
|
497
|
+
}
|
|
498
|
+
function acceptanceValidationCommand(command, checks) {
|
|
499
|
+
const exact = command.trim();
|
|
500
|
+
const check = /^npm run ([a-z0-9][a-z0-9._:-]*)$/.exec(exact)?.[1];
|
|
501
|
+
if (check && checks.has(check)) return { kind: "validation", matched: exact };
|
|
502
|
+
return detectValidationCommand(command);
|
|
503
|
+
}
|
|
386
504
|
|
|
387
505
|
// src/domains/safety/loop-detector.ts
|
|
388
506
|
init_esm_shims();
|
|
@@ -487,6 +605,7 @@ export {
|
|
|
487
605
|
observe,
|
|
488
606
|
DEFAULT_RECENT_ENTRY_LIMIT,
|
|
489
607
|
assessFinishContract,
|
|
608
|
+
recentEntries,
|
|
490
609
|
typedValidationSummary
|
|
491
610
|
};
|
|
492
|
-
//# sourceMappingURL=chunk-
|
|
611
|
+
//# sourceMappingURL=chunk-6QOTUPRG.js.map
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
probeWorkspace
|
|
7
7
|
} from "./chunk-HVDIIIQW.js";
|
|
8
|
+
import {
|
|
9
|
+
protectArtifact
|
|
10
|
+
} from "./chunk-NXYCB2VD.js";
|
|
8
11
|
import {
|
|
9
12
|
isSessionEntry,
|
|
10
13
|
isSessionHeader
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import {
|
|
13
|
-
protectArtifact
|
|
14
|
-
} from "./chunk-IKOZFYBN.js";
|
|
14
|
+
} from "./chunk-54X7T7DK.js";
|
|
15
15
|
import {
|
|
16
16
|
stripTokenizerSentinels
|
|
17
17
|
} from "./chunk-CFGTUFWB.js";
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
readSessionMeta,
|
|
27
27
|
resumeSession,
|
|
28
28
|
sessionPaths
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-HAXOFFRH.js";
|
|
30
30
|
import {
|
|
31
31
|
BusChannels
|
|
32
32
|
} from "./chunk-F4EKGO4N.js";
|
|
@@ -1243,9 +1243,9 @@ function ledgerUsageCalls(entries, defaults = {}) {
|
|
|
1243
1243
|
const usage2 = entry.usage;
|
|
1244
1244
|
if (!usage2 || usage2.totalTokens <= 0) continue;
|
|
1245
1245
|
calls.push({
|
|
1246
|
-
providerId: currentTarget ?? "unknown",
|
|
1247
|
-
attributedModelId: currentModel ?? "unknown",
|
|
1248
|
-
requestedModelId: currentModel ?? "unknown",
|
|
1246
|
+
providerId: usage2.targetId ?? currentTarget ?? "unknown",
|
|
1247
|
+
attributedModelId: usage2.modelId ?? currentModel ?? "unknown",
|
|
1248
|
+
requestedModelId: usage2.modelId ?? currentModel ?? "unknown",
|
|
1249
1249
|
responseModelIdObservation: { state: "not-observed" },
|
|
1250
1250
|
input: usage2.input,
|
|
1251
1251
|
output: usage2.output,
|
|
@@ -1400,7 +1400,13 @@ async function readSessionEntriesForId(stateDir, sessionId) {
|
|
|
1400
1400
|
return { entries: [], missing: false, errors: [`${currentPath}: ${err.message ?? String(err)}`] };
|
|
1401
1401
|
}
|
|
1402
1402
|
}
|
|
1403
|
-
|
|
1403
|
+
const result = parseSessionEntries(raw, source);
|
|
1404
|
+
try {
|
|
1405
|
+
const meta = JSON.parse(await readFile(join3(root, cwdHash2, sessionId, "meta.json"), "utf8"));
|
|
1406
|
+
if (isRecord(meta) && typeof meta.pinnedLeafTurnId === "string") result.leafTurnId = meta.pinnedLeafTurnId;
|
|
1407
|
+
} catch {
|
|
1408
|
+
}
|
|
1409
|
+
return result;
|
|
1404
1410
|
}
|
|
1405
1411
|
return { entries: [], missing: true, errors: [] };
|
|
1406
1412
|
}
|
|
@@ -1481,4 +1487,4 @@ export {
|
|
|
1481
1487
|
ledgerUsageCalls,
|
|
1482
1488
|
SessionDomainModule
|
|
1483
1489
|
};
|
|
1484
|
-
//# sourceMappingURL=chunk-
|
|
1490
|
+
//# sourceMappingURL=chunk-6UINWWS6.js.map
|