@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,11 +1,14 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
EVAL_SUITE_V2_VERSION
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4IUZQIJ3.js";
|
|
5
5
|
import {
|
|
6
6
|
loadFragments,
|
|
7
7
|
renderCodewikiDigest
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-V6HJFQZE.js";
|
|
9
|
+
import {
|
|
10
|
+
discoverAgentRecipes
|
|
11
|
+
} from "./chunk-7UGL4MB5.js";
|
|
9
12
|
import {
|
|
10
13
|
EvalTaskFileError,
|
|
11
14
|
TRUST_STATUS_AXES,
|
|
@@ -20,12 +23,11 @@ import {
|
|
|
20
23
|
loadEvalTaskFile,
|
|
21
24
|
summarizeTrustStatus,
|
|
22
25
|
verifyReceiptIntegrity
|
|
23
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-CUSRQKPU.js";
|
|
24
27
|
import {
|
|
25
28
|
listSessionLedgerRefs,
|
|
26
29
|
parseSessionEntries
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import "./chunk-3DPEIQKN.js";
|
|
30
|
+
} from "./chunk-6UINWWS6.js";
|
|
29
31
|
import {
|
|
30
32
|
EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1,
|
|
31
33
|
EVAL_EXECUTION_ENVELOPE_SCHEMA_V1,
|
|
@@ -46,38 +48,57 @@ import {
|
|
|
46
48
|
renderEvalServingConfiguration,
|
|
47
49
|
sameEvalServingConfiguration,
|
|
48
50
|
writeEvalArtifactV4
|
|
49
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-FTMGRKEF.js";
|
|
50
52
|
import "./chunk-W6GROXXM.js";
|
|
51
|
-
import
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
import "./chunk-RKKLTLYB.js";
|
|
54
|
+
import "./chunk-2ZSONWVL.js";
|
|
55
|
+
import "./chunk-NDDGJUXD.js";
|
|
56
|
+
import "./chunk-YECAMM3D.js";
|
|
57
|
+
import "./chunk-3DPEIQKN.js";
|
|
58
|
+
import "./chunk-TQAHXW6Y.js";
|
|
59
|
+
import "./chunk-5MEZN6CB.js";
|
|
60
|
+
import "./chunk-3ODX73FK.js";
|
|
54
61
|
import "./chunk-HVDIIIQW.js";
|
|
55
62
|
import {
|
|
56
|
-
|
|
57
|
-
} from "./chunk-
|
|
58
|
-
import "./chunk-
|
|
59
|
-
import "./chunk-
|
|
60
|
-
import "./chunk-XGDPUNND.js";
|
|
61
|
-
import "./chunk-RKKLTLYB.js";
|
|
62
|
-
import "./chunk-HLAFFSEK.js";
|
|
63
|
-
import "./chunk-77QIVUZB.js";
|
|
64
|
-
import "./chunk-HIICAHCJ.js";
|
|
65
|
-
import "./chunk-Q4XWMHX6.js";
|
|
63
|
+
printError
|
|
64
|
+
} from "./chunk-JCI2ROMZ.js";
|
|
65
|
+
import "./chunk-AUPNRN7C.js";
|
|
66
|
+
import "./chunk-6PAZTBPA.js";
|
|
66
67
|
import {
|
|
67
68
|
createSafetyPolicyEngine
|
|
68
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-6Q3CYFD3.js";
|
|
69
70
|
import "./chunk-H7IXIC72.js";
|
|
70
|
-
import "./chunk-VN3SHNBN.js";
|
|
71
|
-
import "./chunk-FSP7CMNU.js";
|
|
72
|
-
import "./chunk-HHV2GANA.js";
|
|
73
71
|
import {
|
|
74
72
|
agentSpecFingerprint,
|
|
75
73
|
normalizeAgentSpec
|
|
76
|
-
} from "./chunk-
|
|
77
|
-
import "./chunk-
|
|
78
|
-
import "./chunk-UL3WSD3F.js";
|
|
74
|
+
} from "./chunk-KFV5L5SK.js";
|
|
75
|
+
import "./chunk-NXYCB2VD.js";
|
|
79
76
|
import "./chunk-ECH6PKUQ.js";
|
|
80
|
-
import "./chunk-
|
|
77
|
+
import "./chunk-DXKJURES.js";
|
|
78
|
+
import "./chunk-HHV2GANA.js";
|
|
79
|
+
import "./chunk-GYV6VZOC.js";
|
|
80
|
+
import "./chunk-UL3WSD3F.js";
|
|
81
|
+
import "./chunk-54X7T7DK.js";
|
|
82
|
+
import "./chunk-I5FWO7L5.js";
|
|
83
|
+
import "./chunk-4NSRCOYP.js";
|
|
84
|
+
import "./chunk-CFGTUFWB.js";
|
|
85
|
+
import {
|
|
86
|
+
extractReasoningTokens
|
|
87
|
+
} from "./chunk-NZMNUPZZ.js";
|
|
88
|
+
import "./chunk-KXDSS5WJ.js";
|
|
89
|
+
import "./chunk-GHS5EBTQ.js";
|
|
90
|
+
import {
|
|
91
|
+
namingCompatibilityEnvironment
|
|
92
|
+
} from "./chunk-D7E7WCDF.js";
|
|
93
|
+
import "./chunk-HAXOFFRH.js";
|
|
94
|
+
import {
|
|
95
|
+
InvalidIdError
|
|
96
|
+
} from "./chunk-R346GLFC.js";
|
|
97
|
+
import {
|
|
98
|
+
normalizeClioCoderEventRecord,
|
|
99
|
+
normalizeClioCoderEventType
|
|
100
|
+
} from "./chunk-BTK3SSSK.js";
|
|
101
|
+
import "./chunk-F4EKGO4N.js";
|
|
81
102
|
import {
|
|
82
103
|
readCodewiki,
|
|
83
104
|
structuralCodewikiHash
|
|
@@ -90,50 +111,27 @@ import {
|
|
|
90
111
|
} from "./chunk-33YXPOE3.js";
|
|
91
112
|
import "./chunk-7CR24IG7.js";
|
|
92
113
|
import "./chunk-XPLRXC72.js";
|
|
93
|
-
import "./chunk-ZW55JB7N.js";
|
|
94
|
-
import {
|
|
95
|
-
printError
|
|
96
|
-
} from "./chunk-VPKWYKEY.js";
|
|
97
|
-
import "./chunk-5TSRNF4G.js";
|
|
98
|
-
import "./chunk-CFGTUFWB.js";
|
|
99
|
-
import {
|
|
100
|
-
extractReasoningTokens
|
|
101
|
-
} from "./chunk-CWVRRIEI.js";
|
|
102
|
-
import "./chunk-MQXIVJ35.js";
|
|
103
|
-
import {
|
|
104
|
-
InvalidIdError
|
|
105
|
-
} from "./chunk-R346GLFC.js";
|
|
106
|
-
import {
|
|
107
|
-
normalizeClioCoderEventRecord,
|
|
108
|
-
normalizeClioCoderEventType
|
|
109
|
-
} from "./chunk-BTK3SSSK.js";
|
|
110
|
-
import "./chunk-IHXBNWMM.js";
|
|
111
|
-
import "./chunk-34BHNEE3.js";
|
|
112
|
-
import {
|
|
113
|
-
namingCompatibilityEnvironment
|
|
114
|
-
} from "./chunk-D7E7WCDF.js";
|
|
115
|
-
import "./chunk-HJWWJ6IL.js";
|
|
116
|
-
import "./chunk-F4EKGO4N.js";
|
|
117
|
-
import "./chunk-JIEGK6UF.js";
|
|
118
|
-
import "./chunk-EBY63B7G.js";
|
|
119
|
-
import "./chunk-6EJMN2Y3.js";
|
|
120
114
|
import "./chunk-IWHMRKLL.js";
|
|
121
115
|
import "./chunk-UXCU4E3T.js";
|
|
122
116
|
import "./chunk-LL4KHSZI.js";
|
|
123
117
|
import "./chunk-S66XZJOF.js";
|
|
124
|
-
import "./chunk-
|
|
118
|
+
import "./chunk-TOIVGRUX.js";
|
|
119
|
+
import "./chunk-U6TMQNSI.js";
|
|
120
|
+
import "./chunk-EBY63B7G.js";
|
|
121
|
+
import "./chunk-6EJMN2Y3.js";
|
|
122
|
+
import "./chunk-ID64D7PE.js";
|
|
125
123
|
import "./chunk-336NSSKI.js";
|
|
126
124
|
import "./chunk-IKCO5N3L.js";
|
|
127
125
|
import "./chunk-3I7MS7N2.js";
|
|
128
126
|
import {
|
|
129
127
|
require_dist
|
|
130
128
|
} from "./chunk-APJ265NV.js";
|
|
129
|
+
import "./chunk-WEPFGWHJ.js";
|
|
130
|
+
import "./chunk-YXLYO42X.js";
|
|
131
131
|
import {
|
|
132
132
|
clioDataDir,
|
|
133
133
|
clioStateDir
|
|
134
134
|
} from "./chunk-BYP5D4HI.js";
|
|
135
|
-
import "./chunk-WEPFGWHJ.js";
|
|
136
|
-
import "./chunk-YXLYO42X.js";
|
|
137
135
|
import {
|
|
138
136
|
__toESM,
|
|
139
137
|
init_esm_shims
|
|
@@ -1466,7 +1464,15 @@ function artifactMatrixIdentity(targets) {
|
|
|
1466
1464
|
}
|
|
1467
1465
|
function resolveTargets(targets, options) {
|
|
1468
1466
|
const filtered = options.target === void 0 ? [...targets] : targets.filter((target) => target.id === options.target);
|
|
1469
|
-
const selected = filtered.length > 0 ? filtered : options.target === void 0 ? [...targets] : [
|
|
1467
|
+
const selected = filtered.length > 0 ? filtered : options.target === void 0 ? [...targets] : [
|
|
1468
|
+
{
|
|
1469
|
+
id: options.target,
|
|
1470
|
+
// A one-row suite still owns its thinking dimension when the CLI
|
|
1471
|
+
// substitutes the target/model pair. Dropping it silently changes
|
|
1472
|
+
// an off baseline into the target's configured default.
|
|
1473
|
+
...targets.length === 1 && targets[0]?.thinking !== void 0 ? { thinking: targets[0].thinking } : {}
|
|
1474
|
+
}
|
|
1475
|
+
];
|
|
1470
1476
|
return selected.map((target) => ({
|
|
1471
1477
|
...target,
|
|
1472
1478
|
...options.model === void 0 ? {} : { model: options.model }
|
|
@@ -2285,6 +2291,16 @@ function zeroToolCallMetrics() {
|
|
|
2285
2291
|
init_esm_shims();
|
|
2286
2292
|
import { readFile as readFile2 } from "node:fs/promises";
|
|
2287
2293
|
import { dirname as dirname2, join as join2 } from "node:path";
|
|
2294
|
+
function selectEvalLedgerEntries(durable, stream) {
|
|
2295
|
+
const sessionCalls = assistantCalls(durable).length;
|
|
2296
|
+
const streamCalls = assistantCalls(stream).length;
|
|
2297
|
+
return {
|
|
2298
|
+
entries: sessionCalls > 0 ? durable : [...durable, ...stream],
|
|
2299
|
+
source: sessionCalls > 0 ? "session" : "stream",
|
|
2300
|
+
sessionCalls,
|
|
2301
|
+
streamCalls
|
|
2302
|
+
};
|
|
2303
|
+
}
|
|
2288
2304
|
async function readEvalLedgerSnapshot(stateDir) {
|
|
2289
2305
|
const refs = await listSessionLedgerRefs(stateDir);
|
|
2290
2306
|
const entries = [];
|
|
@@ -2384,7 +2400,7 @@ function emptyEvalTrackedMetrics(source = "estimated") {
|
|
|
2384
2400
|
reasoningTokens: { value: null, source },
|
|
2385
2401
|
toolCalls: zero(),
|
|
2386
2402
|
toolErrors: zero(),
|
|
2387
|
-
ttftMsFirstCall:
|
|
2403
|
+
ttftMsFirstCall: { value: null, source: "estimated" },
|
|
2388
2404
|
wallClockMs: zero(),
|
|
2389
2405
|
contextTokensAtEnd: zero(),
|
|
2390
2406
|
compactions: zero(),
|
|
@@ -2400,6 +2416,7 @@ function assistantCalls(entries) {
|
|
|
2400
2416
|
if (promptCache === null && timing === null && usage === null) return [];
|
|
2401
2417
|
return [
|
|
2402
2418
|
{
|
|
2419
|
+
timestamp: entry.payload.timestampEstimated === true ? null : entry.timestamp,
|
|
2403
2420
|
payload: entry.payload,
|
|
2404
2421
|
promptCache,
|
|
2405
2422
|
backend: promptCache === null ? null : recordField(promptCache, "backend"),
|
|
@@ -2459,9 +2476,19 @@ function reasoningMetric(receipt, calls, compactionUsage) {
|
|
|
2459
2476
|
return measured ? { value: total, source: "ledger" } : { value: null, source: "estimated" };
|
|
2460
2477
|
}
|
|
2461
2478
|
function firstCallTtft(calls) {
|
|
2462
|
-
|
|
2479
|
+
let first;
|
|
2480
|
+
let firstAt = Number.POSITIVE_INFINITY;
|
|
2481
|
+
for (const call of calls) {
|
|
2482
|
+
if (call.timestamp === null) return { value: null, source: "estimated" };
|
|
2483
|
+
const at = Date.parse(call.timestamp);
|
|
2484
|
+
if (!Number.isFinite(at)) return { value: null, source: "estimated" };
|
|
2485
|
+
if (at < firstAt) {
|
|
2486
|
+
first = call;
|
|
2487
|
+
firstAt = at;
|
|
2488
|
+
}
|
|
2489
|
+
}
|
|
2463
2490
|
const value = first?.timing === null || first?.timing === void 0 ? null : nonNegativeNumber(first.timing.ttftMs);
|
|
2464
|
-
return value === null ? { value:
|
|
2491
|
+
return value === null ? { value: null, source: "estimated" } : { value, source: "ledger" };
|
|
2465
2492
|
}
|
|
2466
2493
|
function wallClockMetric(receipt, fallback) {
|
|
2467
2494
|
if (receipt !== null) {
|
|
@@ -2665,13 +2692,15 @@ init_esm_shims();
|
|
|
2665
2692
|
var UNMEASURED_TOKEN_USAGE = {
|
|
2666
2693
|
measured: false,
|
|
2667
2694
|
tokens: { input: 0, output: 0, total: 0, cacheRead: 0, cacheWrite: 0 },
|
|
2668
|
-
costUsd: 0
|
|
2695
|
+
costUsd: 0,
|
|
2696
|
+
provider: emptyProviderObservation()
|
|
2669
2697
|
};
|
|
2670
2698
|
function createTokenUsageFold() {
|
|
2671
2699
|
const tokens = { input: 0, output: 0, total: 0, cacheRead: 0, cacheWrite: 0 };
|
|
2672
2700
|
let costUsd = 0;
|
|
2673
2701
|
let measured = false;
|
|
2674
2702
|
let pending = "";
|
|
2703
|
+
const provider = emptyProviderObservation();
|
|
2675
2704
|
const consume = (line) => {
|
|
2676
2705
|
if (line.trim().length === 0) return;
|
|
2677
2706
|
let event;
|
|
@@ -2680,23 +2709,16 @@ function createTokenUsageFold() {
|
|
|
2680
2709
|
} catch {
|
|
2681
2710
|
return;
|
|
2682
2711
|
}
|
|
2683
|
-
if (!isRecord6(event)
|
|
2684
|
-
|
|
2685
|
-
if (
|
|
2686
|
-
const usage =
|
|
2687
|
-
if (usage ===
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
const totalTokens = numberField2(usage, "totalTokens");
|
|
2694
|
-
tokens.input += input;
|
|
2695
|
-
tokens.output += output;
|
|
2696
|
-
tokens.cacheRead += cacheRead;
|
|
2697
|
-
tokens.cacheWrite += cacheWrite;
|
|
2698
|
-
tokens.total += totalTokens > 0 ? totalTokens : input + output + cacheRead + cacheWrite;
|
|
2699
|
-
if (isRecord6(usage.cost)) costUsd += numberField2(usage.cost, "total");
|
|
2712
|
+
if (!isRecord6(event)) return;
|
|
2713
|
+
observeProviderEvent(provider, event);
|
|
2714
|
+
if (event.type !== "message_end" || !isRecord6(event.message) || event.message.role !== "assistant") return;
|
|
2715
|
+
const usage = readMessageUsage(event.message);
|
|
2716
|
+
if (usage === null) return;
|
|
2717
|
+
if (Object.keys(usage.tokens).length > 0) {
|
|
2718
|
+
measured = true;
|
|
2719
|
+
for (const field of TOKEN_FIELDS) tokens[field] += usage.tokens[field] ?? 0;
|
|
2720
|
+
}
|
|
2721
|
+
costUsd += usage.costUsd ?? 0;
|
|
2700
2722
|
};
|
|
2701
2723
|
return {
|
|
2702
2724
|
push(chunk) {
|
|
@@ -2713,7 +2735,7 @@ function createTokenUsageFold() {
|
|
|
2713
2735
|
consume(pending.replace(/\r$/u, ""));
|
|
2714
2736
|
pending = "";
|
|
2715
2737
|
}
|
|
2716
|
-
return { measured, tokens: { ...tokens }, costUsd };
|
|
2738
|
+
return { measured, tokens: { ...tokens }, costUsd, provider: structuredClone(provider) };
|
|
2717
2739
|
}
|
|
2718
2740
|
};
|
|
2719
2741
|
}
|
|
@@ -2727,24 +2749,145 @@ function addTokenStreamUsage(left, right) {
|
|
|
2727
2749
|
cacheRead: left.tokens.cacheRead + right.tokens.cacheRead,
|
|
2728
2750
|
cacheWrite: left.tokens.cacheWrite + right.tokens.cacheWrite
|
|
2729
2751
|
},
|
|
2730
|
-
costUsd: left.costUsd + right.costUsd
|
|
2752
|
+
costUsd: left.costUsd + right.costUsd,
|
|
2753
|
+
provider: addProviderObservations(left.provider, right.provider)
|
|
2731
2754
|
};
|
|
2732
2755
|
}
|
|
2733
2756
|
function tokenMetricEntries(usage) {
|
|
2734
|
-
if (!usage.measured) return { "tokens.measured": false };
|
|
2735
2757
|
return {
|
|
2736
|
-
|
|
2737
|
-
"tokens.
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2758
|
+
...providerMetricEntries(usage.provider),
|
|
2759
|
+
"tokens.measured": usage.measured,
|
|
2760
|
+
...usage.measured ? {
|
|
2761
|
+
"tokens.input": usage.tokens.input,
|
|
2762
|
+
"tokens.output": usage.tokens.output,
|
|
2763
|
+
"tokens.total": usage.tokens.total,
|
|
2764
|
+
"tokens.cacheRead": usage.tokens.cacheRead,
|
|
2765
|
+
"tokens.cacheWrite": usage.tokens.cacheWrite
|
|
2766
|
+
} : {},
|
|
2742
2767
|
...usage.costUsd > 0 ? { "cost.usd": usage.costUsd } : {}
|
|
2743
2768
|
};
|
|
2744
2769
|
}
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2770
|
+
var TOKEN_FIELDS = ["input", "output", "total", "cacheRead", "cacheWrite"];
|
|
2771
|
+
var STOP_REASONS = ["stop", "toolUse", "length", "error", "aborted", "other"];
|
|
2772
|
+
var RETRY_PHASES = {
|
|
2773
|
+
scheduled: "retryScheduled",
|
|
2774
|
+
retrying: "retryStarted",
|
|
2775
|
+
cancelled: "retryCancelled",
|
|
2776
|
+
exhausted: "retryExhausted",
|
|
2777
|
+
recovered: "retryRecovered"
|
|
2778
|
+
};
|
|
2779
|
+
function emptyProviderObservation() {
|
|
2780
|
+
return {
|
|
2781
|
+
measured: false,
|
|
2782
|
+
stops: { stop: 0, toolUse: 0, length: 0, error: 0, aborted: 0, other: 0 },
|
|
2783
|
+
retries: { scheduled: 0, retrying: 0, cancelled: 0, exhausted: 0, recovered: 0 },
|
|
2784
|
+
errorUsageObservedCalls: 0,
|
|
2785
|
+
errorUsageUnobservedCalls: 0,
|
|
2786
|
+
errorUsageIncompleteCalls: 0,
|
|
2787
|
+
errorCostUnobservedCalls: 0,
|
|
2788
|
+
errorReasoningUnobservedCalls: 0,
|
|
2789
|
+
errorReasoningTokens: null,
|
|
2790
|
+
errorTokens: {},
|
|
2791
|
+
errorCostUsd: null
|
|
2792
|
+
};
|
|
2793
|
+
}
|
|
2794
|
+
function readMessageUsage(message) {
|
|
2795
|
+
if (!isRecord6(message.usage)) return null;
|
|
2796
|
+
const usage = message.usage;
|
|
2797
|
+
const failed = message.stopReason === "error" || message.stopReason === "aborted";
|
|
2798
|
+
const raw = {};
|
|
2799
|
+
for (const field of TOKEN_FIELDS) {
|
|
2800
|
+
const value = nonNegativeNumber2(usage[field === "total" ? "totalTokens" : field]);
|
|
2801
|
+
if (value !== null && (!failed || value > 0)) raw[field] = value;
|
|
2802
|
+
}
|
|
2803
|
+
const cost = isRecord6(usage.cost) ? nonNegativeNumber2(usage.cost.total) : null;
|
|
2804
|
+
const costUsd = cost !== null && cost > 0 ? cost : null;
|
|
2805
|
+
const reportedReasoning = extractReasoningTokens({ ...usage, reasoningTokens: void 0 });
|
|
2806
|
+
const reasoningTokens = reportedReasoning !== null && reportedReasoning > 0 ? reportedReasoning : null;
|
|
2807
|
+
const tokens = raw;
|
|
2808
|
+
if (Object.keys(tokens).length === 0 && costUsd === null && reasoningTokens === null) return null;
|
|
2809
|
+
const completeTokens = Object.keys(tokens).length === TOKEN_FIELDS.length;
|
|
2810
|
+
if (Object.keys(tokens).length > 0 && !(tokens.total !== void 0 && tokens.total > 0)) {
|
|
2811
|
+
tokens.total = (tokens.input ?? 0) + (tokens.output ?? 0) + (tokens.cacheRead ?? 0) + (tokens.cacheWrite ?? 0);
|
|
2812
|
+
}
|
|
2813
|
+
return { tokens, costUsd, completeTokens, reasoningTokens };
|
|
2814
|
+
}
|
|
2815
|
+
function observeProviderEvent(provider, event) {
|
|
2816
|
+
if (event.type === "retry_status" && isRecord6(event.status)) {
|
|
2817
|
+
const phase = event.status.phase;
|
|
2818
|
+
if (typeof phase === "string" && Object.hasOwn(RETRY_PHASES, phase)) {
|
|
2819
|
+
provider.measured = true;
|
|
2820
|
+
provider.retries[phase] += 1;
|
|
2821
|
+
}
|
|
2822
|
+
return;
|
|
2823
|
+
}
|
|
2824
|
+
if (event.type !== "message_end" || !isRecord6(event.message) || event.message.role !== "assistant") return;
|
|
2825
|
+
const reason = event.message.stopReason;
|
|
2826
|
+
if (typeof reason !== "string" || reason.length === 0 || reason === "pending") return;
|
|
2827
|
+
provider.measured = true;
|
|
2828
|
+
const stop = STOP_REASONS.includes(reason) ? reason : "other";
|
|
2829
|
+
provider.stops[stop] += 1;
|
|
2830
|
+
if (reason !== "error") return;
|
|
2831
|
+
const usage = readMessageUsage(event.message);
|
|
2832
|
+
if (usage === null) provider.errorUsageUnobservedCalls += 1;
|
|
2833
|
+
else {
|
|
2834
|
+
provider.errorUsageObservedCalls += 1;
|
|
2835
|
+
for (const field of TOKEN_FIELDS) {
|
|
2836
|
+
const value = usage.tokens[field];
|
|
2837
|
+
if (value !== void 0) provider.errorTokens[field] = (provider.errorTokens[field] ?? 0) + value;
|
|
2838
|
+
}
|
|
2839
|
+
}
|
|
2840
|
+
if (usage?.completeTokens !== true) provider.errorUsageIncompleteCalls += 1;
|
|
2841
|
+
if (usage?.costUsd === void 0 || usage.costUsd === null) provider.errorCostUnobservedCalls += 1;
|
|
2842
|
+
else provider.errorCostUsd = (provider.errorCostUsd ?? 0) + usage.costUsd;
|
|
2843
|
+
if (usage?.reasoningTokens === void 0 || usage.reasoningTokens === null)
|
|
2844
|
+
provider.errorReasoningUnobservedCalls += 1;
|
|
2845
|
+
else provider.errorReasoningTokens = (provider.errorReasoningTokens ?? 0) + usage.reasoningTokens;
|
|
2846
|
+
}
|
|
2847
|
+
function addProviderObservations(left, right) {
|
|
2848
|
+
const result = emptyProviderObservation();
|
|
2849
|
+
result.measured = left.measured || right.measured;
|
|
2850
|
+
for (const reason of STOP_REASONS) result.stops[reason] = left.stops[reason] + right.stops[reason];
|
|
2851
|
+
for (const phase of Object.keys(RETRY_PHASES))
|
|
2852
|
+
result.retries[phase] = left.retries[phase] + right.retries[phase];
|
|
2853
|
+
result.errorUsageObservedCalls = left.errorUsageObservedCalls + right.errorUsageObservedCalls;
|
|
2854
|
+
result.errorUsageUnobservedCalls = left.errorUsageUnobservedCalls + right.errorUsageUnobservedCalls;
|
|
2855
|
+
result.errorUsageIncompleteCalls = left.errorUsageIncompleteCalls + right.errorUsageIncompleteCalls;
|
|
2856
|
+
result.errorCostUnobservedCalls = left.errorCostUnobservedCalls + right.errorCostUnobservedCalls;
|
|
2857
|
+
result.errorReasoningUnobservedCalls = left.errorReasoningUnobservedCalls + right.errorReasoningUnobservedCalls;
|
|
2858
|
+
if (left.errorReasoningTokens !== null || right.errorReasoningTokens !== null)
|
|
2859
|
+
result.errorReasoningTokens = (left.errorReasoningTokens ?? 0) + (right.errorReasoningTokens ?? 0);
|
|
2860
|
+
for (const field of TOKEN_FIELDS) {
|
|
2861
|
+
if (left.errorTokens[field] !== void 0 || right.errorTokens[field] !== void 0) {
|
|
2862
|
+
result.errorTokens[field] = (left.errorTokens[field] ?? 0) + (right.errorTokens[field] ?? 0);
|
|
2863
|
+
}
|
|
2864
|
+
}
|
|
2865
|
+
if (left.errorCostUsd !== null || right.errorCostUsd !== null)
|
|
2866
|
+
result.errorCostUsd = (left.errorCostUsd ?? 0) + (right.errorCostUsd ?? 0);
|
|
2867
|
+
return result;
|
|
2868
|
+
}
|
|
2869
|
+
function providerMetricEntries(provider) {
|
|
2870
|
+
if (!provider.measured) return { "provider.measured": false };
|
|
2871
|
+
const metrics = { "provider.measured": true };
|
|
2872
|
+
for (const reason of STOP_REASONS) metrics[`provider.stopReason.${reason}`] = provider.stops[reason];
|
|
2873
|
+
for (const phase of Object.keys(RETRY_PHASES))
|
|
2874
|
+
metrics[`provider.${RETRY_PHASES[phase]}`] = provider.retries[phase];
|
|
2875
|
+
if (provider.stops.error === 0) return metrics;
|
|
2876
|
+
metrics["provider.errorUsageObservedCalls"] = provider.errorUsageObservedCalls;
|
|
2877
|
+
metrics["provider.errorUsageUnobservedCalls"] = provider.errorUsageUnobservedCalls;
|
|
2878
|
+
metrics["provider.errorUsageIncompleteCalls"] = provider.errorUsageIncompleteCalls;
|
|
2879
|
+
metrics["provider.errorCostUnobservedCalls"] = provider.errorCostUnobservedCalls;
|
|
2880
|
+
metrics["provider.errorReasoningUnobservedCalls"] = provider.errorReasoningUnobservedCalls;
|
|
2881
|
+
if (provider.errorReasoningTokens !== null) metrics["provider.errorReasoningTokens"] = provider.errorReasoningTokens;
|
|
2882
|
+
for (const field of TOKEN_FIELDS) {
|
|
2883
|
+
const value = provider.errorTokens[field];
|
|
2884
|
+
if (value !== void 0) metrics[`provider.errorTokens.${field}`] = value;
|
|
2885
|
+
}
|
|
2886
|
+
if (provider.errorCostUsd !== null) metrics["provider.errorCostUsd"] = provider.errorCostUsd;
|
|
2887
|
+
return metrics;
|
|
2888
|
+
}
|
|
2889
|
+
function nonNegativeNumber2(value) {
|
|
2890
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
|
|
2748
2891
|
}
|
|
2749
2892
|
function isRecord6(value) {
|
|
2750
2893
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -2771,7 +2914,7 @@ function createEvalCallLedgerFold(now = () => performance.now()) {
|
|
|
2771
2914
|
activeFirstOutputAt = null;
|
|
2772
2915
|
return;
|
|
2773
2916
|
}
|
|
2774
|
-
if (event
|
|
2917
|
+
if (isAssistantOutput(event) && activeStartedAt !== null && activeFirstOutputAt === null) {
|
|
2775
2918
|
activeFirstOutputAt = now();
|
|
2776
2919
|
return;
|
|
2777
2920
|
}
|
|
@@ -2785,24 +2928,28 @@ function createEvalCallLedgerFold(now = () => performance.now()) {
|
|
|
2785
2928
|
}
|
|
2786
2929
|
const endedAt = now();
|
|
2787
2930
|
const promptCache = {
|
|
2788
|
-
input:
|
|
2789
|
-
cacheRead:
|
|
2790
|
-
cacheWrite:
|
|
2931
|
+
input: nonNegativeNumber3(usage.input) ?? 0,
|
|
2932
|
+
cacheRead: nonNegativeNumber3(usage.cacheRead) ?? 0,
|
|
2933
|
+
cacheWrite: nonNegativeNumber3(usage.cacheWrite) ?? 0,
|
|
2791
2934
|
backendVerdict: "unknown"
|
|
2792
2935
|
};
|
|
2793
2936
|
if (isRecord7(message.backendTimings)) promptCache.backend = structuredClone(message.backendTimings);
|
|
2794
2937
|
const previous = entries.at(-1);
|
|
2938
|
+
const timestamp = messageTimestamp(message.timestamp);
|
|
2795
2939
|
entries.push({
|
|
2796
2940
|
kind: "message",
|
|
2797
2941
|
role: "assistant",
|
|
2798
2942
|
turnId: `eval-call-${entries.length + 1}`,
|
|
2799
2943
|
parentTurnId: previous?.turnId ?? null,
|
|
2800
|
-
timestamp:
|
|
2944
|
+
timestamp: timestamp ?? (/* @__PURE__ */ new Date(0)).toISOString(),
|
|
2801
2945
|
payload: {
|
|
2946
|
+
// Retain the legacy ISO placeholder without treating it as observed
|
|
2947
|
+
// chronology. Per-call monotonic timing remains usable on its own.
|
|
2948
|
+
...timestamp === null ? { timestampEstimated: true } : {},
|
|
2802
2949
|
promptCache,
|
|
2803
|
-
timing: {
|
|
2804
|
-
ttftMs:
|
|
2805
|
-
apiMs:
|
|
2950
|
+
timing: activeStartedAt === null ? null : {
|
|
2951
|
+
ttftMs: activeFirstOutputAt === null ? null : Math.round(Math.max(0, activeFirstOutputAt - activeStartedAt)),
|
|
2952
|
+
apiMs: Math.round(Math.max(0, endedAt - activeStartedAt))
|
|
2806
2953
|
},
|
|
2807
2954
|
usage: structuredClone(usage)
|
|
2808
2955
|
}
|
|
@@ -2829,16 +2976,22 @@ function createEvalCallLedgerFold(now = () => performance.now()) {
|
|
|
2829
2976
|
}
|
|
2830
2977
|
};
|
|
2831
2978
|
}
|
|
2979
|
+
function isAssistantOutput(event) {
|
|
2980
|
+
const output = event.type === "message_update" ? event.assistantMessageEvent : event;
|
|
2981
|
+
if (!isRecord7(output)) return false;
|
|
2982
|
+
if (output.type === "toolcall_start") return event.type === "message_update";
|
|
2983
|
+
return (output.type === "text_delta" || output.type === "thinking_delta" || output.type === "toolcall_delta") && typeof output.delta === "string" && output.delta.length > 0;
|
|
2984
|
+
}
|
|
2832
2985
|
function isAssistantMessage(value) {
|
|
2833
2986
|
return isRecord7(value) && value.role === "assistant";
|
|
2834
2987
|
}
|
|
2835
2988
|
function messageTimestamp(value) {
|
|
2836
|
-
const milliseconds =
|
|
2837
|
-
if (milliseconds === null) return
|
|
2989
|
+
const milliseconds = nonNegativeNumber3(value);
|
|
2990
|
+
if (milliseconds === null) return null;
|
|
2838
2991
|
const date = new Date(milliseconds);
|
|
2839
|
-
return Number.isFinite(date.getTime()) ? date.toISOString() :
|
|
2992
|
+
return Number.isFinite(date.getTime()) ? date.toISOString() : null;
|
|
2840
2993
|
}
|
|
2841
|
-
function
|
|
2994
|
+
function nonNegativeNumber3(value) {
|
|
2842
2995
|
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
|
|
2843
2996
|
}
|
|
2844
2997
|
function parseRecord(line) {
|
|
@@ -2860,6 +3013,7 @@ var OUTPUT_HEAD_LIMIT = 2e4;
|
|
|
2860
3013
|
var OUTPUT_TRUNCATION_MARKER = "\n[output middle truncated; tail preserved]\n";
|
|
2861
3014
|
var METRIC_JSONL_LIMIT = 256e3;
|
|
2862
3015
|
var METRIC_JSONL_LINE_LIMIT = 64e3;
|
|
3016
|
+
var TIMEOUT_KILL_GRACE_MS = 5e3;
|
|
2863
3017
|
async function runExternalCommandRunner(runner, cwd, timeoutMs, env) {
|
|
2864
3018
|
const runnerCommands = runner.commands ?? [];
|
|
2865
3019
|
const commands = runnerCommands.length > 0 ? runnerCommands : runner.command === void 0 ? [] : [runner.command];
|
|
@@ -2929,14 +3083,10 @@ function runShellCommand(command, cwd, timeoutMs, env) {
|
|
|
2929
3083
|
const callLedgerFold = createEvalCallLedgerFold();
|
|
2930
3084
|
let timedOut = false;
|
|
2931
3085
|
let settled = false;
|
|
2932
|
-
const
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
// The overlay is additive: an eval item pins where Clio writes its
|
|
2937
|
-
// journal, and inherits everything else the operator's shell provides.
|
|
2938
|
-
env: env === void 0 ? process.env : { ...process.env, ...env }
|
|
2939
|
-
});
|
|
3086
|
+
const spawnEnv = env === void 0 ? process.env : { ...process.env, ...env };
|
|
3087
|
+
const [file, args, shell] = typeof command === "string" ? [command, [], true] : [command[0], command.slice(1), false];
|
|
3088
|
+
const child = spawn(file, args, { cwd, shell, stdio: ["ignore", "pipe", "pipe"], env: spawnEnv });
|
|
3089
|
+
const commandLine = typeof command === "string" ? command : command.join(" ");
|
|
2940
3090
|
child.stdout.setEncoding("utf8");
|
|
2941
3091
|
child.stderr.setEncoding("utf8");
|
|
2942
3092
|
child.stdout.on("data", (chunk) => {
|
|
@@ -2953,14 +3103,14 @@ function runShellCommand(command, cwd, timeoutMs, env) {
|
|
|
2953
3103
|
const timer = setTimeout(() => {
|
|
2954
3104
|
timedOut = true;
|
|
2955
3105
|
child.kill("SIGTERM");
|
|
2956
|
-
setTimeout(() => child.kill("SIGKILL"),
|
|
3106
|
+
setTimeout(() => child.kill("SIGKILL"), TIMEOUT_KILL_GRACE_MS);
|
|
2957
3107
|
}, timeoutMs);
|
|
2958
3108
|
const finish = (exitCode) => {
|
|
2959
3109
|
if (settled) return;
|
|
2960
3110
|
settled = true;
|
|
2961
3111
|
clearTimeout(timer);
|
|
2962
3112
|
resolve9({
|
|
2963
|
-
command,
|
|
3113
|
+
command: commandLine,
|
|
2964
3114
|
exitCode,
|
|
2965
3115
|
stdout,
|
|
2966
3116
|
metricJsonl: metricCapture.finish(),
|
|
@@ -3096,18 +3246,19 @@ function stringField(record, field) {
|
|
|
3096
3246
|
async function runClioRunRunner(runner, cwd, clioEntry, timeoutMs, target, env, readObservation) {
|
|
3097
3247
|
const prompt = runner.prompt ?? "";
|
|
3098
3248
|
const args = [
|
|
3099
|
-
|
|
3249
|
+
process.execPath,
|
|
3250
|
+
clioEntry,
|
|
3100
3251
|
"run",
|
|
3101
3252
|
"--json",
|
|
3102
|
-
...runner.agent === void 0 ? [] : ["--agent",
|
|
3253
|
+
...runner.agent === void 0 ? [] : ["--agent", runner.agent],
|
|
3103
3254
|
"--target",
|
|
3104
|
-
|
|
3105
|
-
...target.model === void 0 ? [] : ["--model",
|
|
3106
|
-
...target.thinking === void 0 ? [] : ["--thinking",
|
|
3255
|
+
target.id,
|
|
3256
|
+
...target.model === void 0 ? [] : ["--model", target.model],
|
|
3257
|
+
...target.thinking === void 0 ? [] : ["--thinking", target.thinking],
|
|
3107
3258
|
...runner.autonomy === void 0 ? [] : ["--autonomy", runner.autonomy],
|
|
3108
|
-
|
|
3259
|
+
prompt
|
|
3109
3260
|
];
|
|
3110
|
-
const result = await runShellCommand(
|
|
3261
|
+
const result = await runShellCommand(args, cwd, runner.timeoutMs ?? timeoutMs, env);
|
|
3111
3262
|
const tokens = result.usage;
|
|
3112
3263
|
const toolMetricStream = result.metricJsonl.length > 0 ? result.metricJsonl : result.stdout;
|
|
3113
3264
|
const tools = toolCallMetricsFromJsonl(toolMetricStream);
|
|
@@ -3227,16 +3378,19 @@ function toolBehaviorMetricEntriesFromJsonl(stdout, cwd, readObservation) {
|
|
|
3227
3378
|
}
|
|
3228
3379
|
const terminals = canonicalFinishes.length > 0 ? canonicalFinishes : executionEnds;
|
|
3229
3380
|
const calls = /* @__PURE__ */ new Map();
|
|
3381
|
+
const succeeded = /* @__PURE__ */ new Map();
|
|
3230
3382
|
const blocked = /* @__PURE__ */ new Map();
|
|
3231
3383
|
for (const terminal of terminals) {
|
|
3232
3384
|
const tool = metricToolName(terminal.tool);
|
|
3233
3385
|
calls.set(tool, (calls.get(tool) ?? 0) + 1);
|
|
3386
|
+
if (terminal.outcome === "ok") succeeded.set(tool, (succeeded.get(tool) ?? 0) + 1);
|
|
3234
3387
|
if (terminal.outcome === "blocked") blocked.set(tool, (blocked.get(tool) ?? 0) + 1);
|
|
3235
3388
|
}
|
|
3236
|
-
const namedTools = /* @__PURE__ */ new Set(["bash", "dispatch", "read", ...calls.keys(), ...blocked.keys()]);
|
|
3389
|
+
const namedTools = /* @__PURE__ */ new Set(["bash", "dispatch", "read", ...calls.keys(), ...succeeded.keys(), ...blocked.keys()]);
|
|
3237
3390
|
const entries = { "tools.read.distinctPaths": readPaths.size };
|
|
3238
3391
|
for (const tool of [...namedTools].sort()) {
|
|
3239
3392
|
entries[`tools.calls.${tool}`] = calls.get(tool) ?? 0;
|
|
3393
|
+
entries[`tools.succeeded.${tool}`] = succeeded.get(tool) ?? 0;
|
|
3240
3394
|
entries[`tools.blocked.${tool}`] = blocked.get(tool) ?? 0;
|
|
3241
3395
|
}
|
|
3242
3396
|
if (readObservation !== void 0) {
|
|
@@ -3290,12 +3444,8 @@ function isRecord9(value) {
|
|
|
3290
3444
|
// src/domains/eval/runners/context-index.ts
|
|
3291
3445
|
init_esm_shims();
|
|
3292
3446
|
async function runContextIndexRunner(cwd, clioEntry, timeoutMs, target, env) {
|
|
3293
|
-
const
|
|
3294
|
-
|
|
3295
|
-
cwd,
|
|
3296
|
-
timeoutMs,
|
|
3297
|
-
env
|
|
3298
|
-
);
|
|
3447
|
+
const args = [process.execPath, clioEntry, "context", "index", "--json"];
|
|
3448
|
+
const result = await runShellCommand(args, cwd, timeoutMs, env);
|
|
3299
3449
|
const parsed = parseContextIndexOutput(result.stdout);
|
|
3300
3450
|
return {
|
|
3301
3451
|
assignmentId: null,
|
|
@@ -3337,7 +3487,7 @@ import { existsSync as existsSync2, statSync } from "node:fs";
|
|
|
3337
3487
|
import { join as join4 } from "node:path";
|
|
3338
3488
|
async function runContextInitRunner(runner, cwd, clioEntry, timeoutMs, target, env) {
|
|
3339
3489
|
const extraArgs = runner.args ?? [];
|
|
3340
|
-
const
|
|
3490
|
+
const args = [
|
|
3341
3491
|
process.execPath,
|
|
3342
3492
|
clioEntry,
|
|
3343
3493
|
"context",
|
|
@@ -3349,8 +3499,8 @@ async function runContextInitRunner(runner, cwd, clioEntry, timeoutMs, target, e
|
|
|
3349
3499
|
...target.model === void 0 ? [] : ["--model", target.model],
|
|
3350
3500
|
...target.thinking === void 0 ? [] : ["--thinking", target.thinking],
|
|
3351
3501
|
...extraArgs
|
|
3352
|
-
]
|
|
3353
|
-
const result = await runShellCommand(
|
|
3502
|
+
];
|
|
3503
|
+
const result = await runShellCommand(args, cwd, runner.timeoutMs ?? timeoutMs, env);
|
|
3354
3504
|
const payload = parseInitPayload(result.stdout);
|
|
3355
3505
|
const candidateGeneration = recordField2(payload, "generation");
|
|
3356
3506
|
const generation = isValidGenerationPayload(payload, candidateGeneration) ? candidateGeneration : null;
|
|
@@ -3378,21 +3528,21 @@ async function runContextInitRunner(runner, cwd, clioEntry, timeoutMs, target, e
|
|
|
3378
3528
|
wallTimeMs: result.wallTimeMs,
|
|
3379
3529
|
metrics: {
|
|
3380
3530
|
"latency.wallMs": result.wallTimeMs,
|
|
3381
|
-
"latency.modelMs":
|
|
3382
|
-
"tokens.input":
|
|
3383
|
-
"tokens.output":
|
|
3384
|
-
"tokens.total":
|
|
3385
|
-
"tokens.cacheRead":
|
|
3386
|
-
"tokens.cacheWrite":
|
|
3387
|
-
"tools.totalCalls":
|
|
3388
|
-
"tools.failed":
|
|
3389
|
-
"tools.blocked":
|
|
3531
|
+
"latency.modelMs": numberField2(run, "durationMs"),
|
|
3532
|
+
"tokens.input": numberField2(tokens, "input"),
|
|
3533
|
+
"tokens.output": numberField2(tokens, "output"),
|
|
3534
|
+
"tokens.total": numberField2(tokens, "total"),
|
|
3535
|
+
"tokens.cacheRead": numberField2(tokens, "cacheRead"),
|
|
3536
|
+
"tokens.cacheWrite": numberField2(tokens, "cacheWrite"),
|
|
3537
|
+
"tools.totalCalls": numberField2(run, "toolCalls"),
|
|
3538
|
+
"tools.failed": numberField2(run, "toolFailures"),
|
|
3539
|
+
"tools.blocked": numberField2(run, "toolBlocked"),
|
|
3390
3540
|
"context.clioMdBytes": clioMdBytes,
|
|
3391
3541
|
"context.initMode": stringField3(generation, "mode") ?? "unknown",
|
|
3392
3542
|
"context.initParserOutcome": stringField3(generation, "parserOutcome") ?? "unknown",
|
|
3393
3543
|
"context.initFallback": stringField3(generation, "fallbackReason") !== null,
|
|
3394
|
-
"context.initPromptBytes":
|
|
3395
|
-
"context.initOutputBytes":
|
|
3544
|
+
"context.initPromptBytes": numberField2(run, "promptBytes"),
|
|
3545
|
+
"context.initOutputBytes": numberField2(run, "outputBytes"),
|
|
3396
3546
|
"context.initTargetId": effectiveTarget,
|
|
3397
3547
|
"context.initModelId": effectiveModel,
|
|
3398
3548
|
"context.initRuntimeId": effectiveRuntime,
|
|
@@ -3491,7 +3641,7 @@ function recordField2(value, field) {
|
|
|
3491
3641
|
const selected = field && typeof value === "object" && value !== null && !Array.isArray(value) ? value[field] : value;
|
|
3492
3642
|
return typeof selected === "object" && selected !== null && !Array.isArray(selected) ? selected : null;
|
|
3493
3643
|
}
|
|
3494
|
-
function
|
|
3644
|
+
function numberField2(value, field) {
|
|
3495
3645
|
const record = recordField2(value);
|
|
3496
3646
|
const selected = record?.[field];
|
|
3497
3647
|
return typeof selected === "number" && Number.isFinite(selected) ? selected : null;
|
|
@@ -3916,11 +4066,23 @@ async function runMatrixItem(loaded, task, target, repeatIndex, clioEntry, fresh
|
|
|
3916
4066
|
}
|
|
3917
4067
|
};
|
|
3918
4068
|
const snapshot = await readEvalLedgerSnapshot(stateDir);
|
|
3919
|
-
const
|
|
4069
|
+
const selected = selectEvalLedgerEntries(snapshot.entries, runner.ledgerEntries ?? []);
|
|
4070
|
+
result.artifacts.trackedMetricSources = JSON.stringify({
|
|
4071
|
+
assistantCalls: selected.source,
|
|
4072
|
+
sessionCalls: selected.sessionCalls,
|
|
4073
|
+
streamCalls: selected.streamCalls,
|
|
4074
|
+
compactions: "session"
|
|
4075
|
+
});
|
|
4076
|
+
if (selected.sessionCalls > 0 && selected.streamCalls > 0) {
|
|
4077
|
+
result.artifacts.callLedger ??= JSON.stringify(runner.ledgerEntries);
|
|
4078
|
+
if (selected.sessionCalls !== selected.streamCalls || task.runner.kind === "external-command") {
|
|
4079
|
+
result.artifacts.trackedMetricWarning = "Session and stream call coverage may differ; tracked metrics use session calls, not a reconciled union. Inspect callLedger before treating these counts as complete: no shared call identity proves overlap.";
|
|
4080
|
+
}
|
|
4081
|
+
}
|
|
3920
4082
|
result.verdict = adaptSuiteV2ResultToVerdictV1(
|
|
3921
4083
|
result,
|
|
3922
4084
|
buildEvalTrackedMetrics({
|
|
3923
|
-
ledgerEntries,
|
|
4085
|
+
ledgerEntries: selected.entries,
|
|
3924
4086
|
receipt: receipt ?? null,
|
|
3925
4087
|
fallbackWallClockMs: runner.wallTimeMs
|
|
3926
4088
|
})
|
|
@@ -4326,7 +4488,7 @@ function parseEvalArgs(args) {
|
|
|
4326
4488
|
}
|
|
4327
4489
|
async function runEvalCommand(args) {
|
|
4328
4490
|
if (args[0] === "inventory") {
|
|
4329
|
-
const { runEvalInventory } = await import("./eval-inventory-
|
|
4491
|
+
const { runEvalInventory } = await import("./eval-inventory-Y6QRFOH5.js");
|
|
4330
4492
|
return runEvalInventory(args.slice(1));
|
|
4331
4493
|
}
|
|
4332
4494
|
let parsed;
|
|
@@ -4501,4 +4663,4 @@ function comparisonFormat(value) {
|
|
|
4501
4663
|
export {
|
|
4502
4664
|
runEvalCommand
|
|
4503
4665
|
};
|
|
4504
|
-
//# sourceMappingURL=eval-
|
|
4666
|
+
//# sourceMappingURL=eval-OQOQUDHK.js.map
|