@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
|
@@ -107,6 +107,27 @@ const PUMP_MAX_MS = 500;
|
|
|
107
107
|
* waiting or dispatching fewer runs is the way past it, so it retries the same
|
|
108
108
|
* shape and burns the deadline again.
|
|
109
109
|
*/
|
|
110
|
+
export function foregroundEndpointBlock(input: {
|
|
111
|
+
endpointKey?: string;
|
|
112
|
+
limits: CapacityLimits;
|
|
113
|
+
usage: {
|
|
114
|
+
endpoints: Readonly<Record<string, number>>;
|
|
115
|
+
endpointHolders?: Readonly<Record<string, EndpointCapacityHolders>>;
|
|
116
|
+
};
|
|
117
|
+
}): string | null {
|
|
118
|
+
if (input.endpointKey === undefined) return null;
|
|
119
|
+
const limit = input.limits.endpoints[input.endpointKey];
|
|
120
|
+
const active = input.usage.endpoints[input.endpointKey] ?? 0;
|
|
121
|
+
const holders = input.usage.endpointHolders?.[input.endpointKey];
|
|
122
|
+
if (limit === undefined || active < limit || !holders || holders.foregroundStreams < 1) return null;
|
|
123
|
+
return [
|
|
124
|
+
`dispatch: admission denied: endpoint '${endpointLabel(input.endpointKey)}' cannot open a worker slot`,
|
|
125
|
+
` while ${describeEndpointCapacityHolders(holders)} (${active}/${limit} slots).`,
|
|
126
|
+
" The foreground agent cannot release its slot until this tool call returns, so waiting here would deadlock.",
|
|
127
|
+
" Point workers at a second endpoint or raise this target's maxConcurrentRequests to the server's actual slot count.",
|
|
128
|
+
].join("");
|
|
129
|
+
}
|
|
130
|
+
|
|
110
131
|
function describeAdmissionFailure(input: {
|
|
111
132
|
state: "canceled" | "timed_out";
|
|
112
133
|
nodeId: string;
|
|
@@ -245,6 +266,14 @@ export function createCapacityAdmissionController(options: {
|
|
|
245
266
|
const controller: CapacityAdmissionController = {
|
|
246
267
|
async admit(input) {
|
|
247
268
|
if (draining) throw new Error("dispatch: admission denied: this process is shutting down");
|
|
269
|
+
const limits = options.limits();
|
|
270
|
+
const usage = options.usage?.() ?? capacityLeaseUsage({ nowMs: now() });
|
|
271
|
+
const foregroundBlock = foregroundEndpointBlock({
|
|
272
|
+
...(input.endpointKey !== undefined ? { endpointKey: input.endpointKey } : {}),
|
|
273
|
+
limits,
|
|
274
|
+
usage,
|
|
275
|
+
});
|
|
276
|
+
if (foregroundBlock !== null) throw new Error(foregroundBlock);
|
|
248
277
|
const queuedAt = now();
|
|
249
278
|
const requestId = `admit-${queuedAt.toString(36)}-${randomBytes(5).toString("hex")}`;
|
|
250
279
|
pending.set(input.assignmentId, requestId);
|
|
@@ -32,6 +32,7 @@ export type AgentTaskType =
|
|
|
32
32
|
| "docs"
|
|
33
33
|
| "config"
|
|
34
34
|
| "research"
|
|
35
|
+
| "world_knowledge"
|
|
35
36
|
| "unknown";
|
|
36
37
|
export type AgentTaskComplexity = "trivial" | "simple" | "moderate" | "complex";
|
|
37
38
|
export type AgentTaskDomain = "frontend" | "backend" | "infra" | "data" | "security" | "general";
|
|
@@ -53,6 +54,10 @@ const TASK_TYPE_RULES: ReadonlyArray<readonly [AgentTaskType, RegExp]> = [
|
|
|
53
54
|
["debug", /\b(debug|fix|bug|crash|failure|broken|regression)\b/i],
|
|
54
55
|
["refactor", /\b(refactor|clean ?up|restructure|rename|extract|simplify)\b/i],
|
|
55
56
|
["config", /\b(config|configuration|settings|setup|install|ci pipeline|workflow file)\b/i],
|
|
57
|
+
[
|
|
58
|
+
"world_knowledge",
|
|
59
|
+
/\b(?:open[- ]world|ecosystem landscape|industry landscape|state of (?:the )?art|current alternatives|latest alternatives|advisory second opinion)\b/i,
|
|
60
|
+
],
|
|
56
61
|
["research", /\b(research|investigate|explore|survey|compare|find out)\b/i],
|
|
57
62
|
["code_read", /\b(read|explain|understand|summarize|describe|walk through|map|locate|trace)\b/i],
|
|
58
63
|
["code_write", /\b(write|implement|add|create|build|develop|introduce)\b/i],
|
|
@@ -202,6 +207,11 @@ const TASK_SIGNALS: Readonly<
|
|
|
202
207
|
> = {
|
|
203
208
|
code_read: { ids: ["scout"], tags: ["reconnaissance", "symbols", "codewiki"], contracts: ["scout-report"] },
|
|
204
209
|
research: { ids: ["researcher"], tags: ["sources", "external-context", "papers"], contracts: ["research-report"] },
|
|
210
|
+
world_knowledge: {
|
|
211
|
+
ids: ["world-knowledge"],
|
|
212
|
+
tags: ["open-world", "ecosystem", "current-context", "second-opinion"],
|
|
213
|
+
contracts: ["world-knowledge-report"],
|
|
214
|
+
},
|
|
205
215
|
code_review: { ids: ["verifier"], tags: ["review", "verification"], contracts: ["verifier-report"] },
|
|
206
216
|
debug: { ids: ["debugger"], tags: ["debugging", "root-cause"], contracts: ["debugger-report"] },
|
|
207
217
|
test: { ids: ["verifier", "tester"], tags: ["tests", "validation", "regression"], contracts: ["verifier-report"] },
|
|
@@ -28,6 +28,17 @@ export interface BudgetEnvelopeReason {
|
|
|
28
28
|
|
|
29
29
|
export interface RunToolBudgetEnvelope {
|
|
30
30
|
version: 1;
|
|
31
|
+
enforcement:
|
|
32
|
+
| {
|
|
33
|
+
classification: "native-per-tool";
|
|
34
|
+
perTool: "enforced";
|
|
35
|
+
clioControls: ReadonlyArray<"tool-calls" | "read-reserve" | "synthesis" | "attempt-cap">;
|
|
36
|
+
}
|
|
37
|
+
| {
|
|
38
|
+
classification: "external-one-shot";
|
|
39
|
+
perTool: "unobserved-not-enforced";
|
|
40
|
+
clioControls: ReadonlyArray<"single-launch" | "wall-clock" | "output-cap" | "cancellation" | "result-contract">;
|
|
41
|
+
};
|
|
31
42
|
policy: {
|
|
32
43
|
recipeId: string;
|
|
33
44
|
default: AgentBudgetPhase & { synthesis: boolean };
|
|
@@ -39,6 +50,15 @@ export interface RunToolBudgetEnvelope {
|
|
|
39
50
|
reasons: ReadonlyArray<BudgetEnvelopeReason>;
|
|
40
51
|
}
|
|
41
52
|
|
|
53
|
+
const NATIVE_CLIO_CONTROLS = ["tool-calls", "read-reserve", "synthesis", "attempt-cap"] as const;
|
|
54
|
+
const EXTERNAL_CLIO_CONTROLS = [
|
|
55
|
+
"single-launch",
|
|
56
|
+
"wall-clock",
|
|
57
|
+
"output-cap",
|
|
58
|
+
"cancellation",
|
|
59
|
+
"result-contract",
|
|
60
|
+
] as const;
|
|
61
|
+
|
|
42
62
|
export type BudgetAdmissionDenialCode =
|
|
43
63
|
| "exact-recipe-policy"
|
|
44
64
|
| "recipe-maximum"
|
|
@@ -94,6 +114,8 @@ export function cloneDispatchBudgetRequest(value: unknown, prefix = "budget"): D
|
|
|
94
114
|
}
|
|
95
115
|
|
|
96
116
|
function freezeEnvelope(envelope: RunToolBudgetEnvelope): RunToolBudgetEnvelope {
|
|
117
|
+
Object.freeze(envelope.enforcement.clioControls);
|
|
118
|
+
Object.freeze(envelope.enforcement);
|
|
97
119
|
Object.freeze(envelope.policy.default);
|
|
98
120
|
Object.freeze(envelope.policy.maximum);
|
|
99
121
|
Object.freeze(envelope.policy);
|
|
@@ -172,6 +194,7 @@ export interface ResolveToolBudgetEnvelopeInput {
|
|
|
172
194
|
hasReadTool: boolean;
|
|
173
195
|
retry: boolean;
|
|
174
196
|
revision: boolean;
|
|
197
|
+
enforcement?: "native-per-tool" | "external-one-shot";
|
|
175
198
|
}
|
|
176
199
|
|
|
177
200
|
/** Resolve the one immutable envelope used by admission, enforcement, and evidence. */
|
|
@@ -253,6 +276,18 @@ export function resolveToolBudgetEnvelope(input: ResolveToolBudgetEnvelopeInput)
|
|
|
253
276
|
const authoredMaximum = input.policy.maximum ?? input.policy;
|
|
254
277
|
return freezeEnvelope({
|
|
255
278
|
version: 1,
|
|
279
|
+
enforcement:
|
|
280
|
+
input.enforcement === "external-one-shot"
|
|
281
|
+
? {
|
|
282
|
+
classification: "external-one-shot",
|
|
283
|
+
perTool: "unobserved-not-enforced",
|
|
284
|
+
clioControls: [...EXTERNAL_CLIO_CONTROLS],
|
|
285
|
+
}
|
|
286
|
+
: {
|
|
287
|
+
classification: "native-per-tool",
|
|
288
|
+
perTool: "enforced",
|
|
289
|
+
clioControls: [...NATIVE_CLIO_CONTROLS],
|
|
290
|
+
},
|
|
256
291
|
policy: {
|
|
257
292
|
recipeId: input.recipeId,
|
|
258
293
|
default: {
|
|
@@ -297,7 +332,11 @@ export function formatEffectiveBudget(envelope: RunToolBudgetEnvelope): string {
|
|
|
297
332
|
const revision = budget.revision
|
|
298
333
|
? `, result revision ${budget.revision.toolCalls}/${budget.revision.readReserve}`
|
|
299
334
|
: "";
|
|
300
|
-
|
|
335
|
+
const enforcement =
|
|
336
|
+
envelope.enforcement.classification === "external-one-shot"
|
|
337
|
+
? "external one-shot; per-tool unobserved/not enforced"
|
|
338
|
+
: "native per-tool enforced";
|
|
339
|
+
return `${budget.toolCalls}/${budget.readReserve}${revision}, lifetime cap ${budget.hardCap}, synthesis=${budget.synthesis ? "on" : "off"}; ${enforcement}`;
|
|
301
340
|
}
|
|
302
341
|
|
|
303
342
|
export function formatBudgetReasons(envelope: RunToolBudgetEnvelope): string {
|
|
@@ -314,6 +353,10 @@ const BUDGET_REASON_CODES: ReadonlySet<string> = new Set<BudgetEnvelopeReasonCod
|
|
|
314
353
|
"revision-growth-denied",
|
|
315
354
|
]);
|
|
316
355
|
|
|
356
|
+
function isExactStringArray(value: unknown[], expected: readonly string[]): boolean {
|
|
357
|
+
return value.length === expected.length && value.every((item, index) => item === expected[index]);
|
|
358
|
+
}
|
|
359
|
+
|
|
317
360
|
/** Safely project an envelope that crossed a persistence or event boundary. */
|
|
318
361
|
export function cloneRunToolBudgetEnvelope(value: unknown): RunToolBudgetEnvelope | undefined {
|
|
319
362
|
try {
|
|
@@ -373,8 +416,50 @@ export function cloneRunToolBudgetEnvelope(value: unknown): RunToolBudgetEnvelop
|
|
|
373
416
|
}
|
|
374
417
|
reasons.push({ code: reason.code as BudgetEnvelopeReasonCode, detail: reason.detail });
|
|
375
418
|
}
|
|
419
|
+
const enforcement = (() => {
|
|
420
|
+
if (value.enforcement === undefined) {
|
|
421
|
+
return {
|
|
422
|
+
classification: "native-per-tool" as const,
|
|
423
|
+
perTool: "enforced" as const,
|
|
424
|
+
clioControls: [...NATIVE_CLIO_CONTROLS],
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
if (!isRecord(value.enforcement) || !Array.isArray(value.enforcement.clioControls)) return null;
|
|
428
|
+
if (
|
|
429
|
+
Object.keys(value.enforcement).some(
|
|
430
|
+
(key) => key !== "classification" && key !== "perTool" && key !== "clioControls",
|
|
431
|
+
)
|
|
432
|
+
) {
|
|
433
|
+
return null;
|
|
434
|
+
}
|
|
435
|
+
if (
|
|
436
|
+
value.enforcement.classification === "external-one-shot" &&
|
|
437
|
+
value.enforcement.perTool === "unobserved-not-enforced" &&
|
|
438
|
+
isExactStringArray(value.enforcement.clioControls, EXTERNAL_CLIO_CONTROLS)
|
|
439
|
+
) {
|
|
440
|
+
return {
|
|
441
|
+
classification: "external-one-shot" as const,
|
|
442
|
+
perTool: "unobserved-not-enforced" as const,
|
|
443
|
+
clioControls: [...EXTERNAL_CLIO_CONTROLS],
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
if (
|
|
447
|
+
value.enforcement.classification === "native-per-tool" &&
|
|
448
|
+
value.enforcement.perTool === "enforced" &&
|
|
449
|
+
isExactStringArray(value.enforcement.clioControls, NATIVE_CLIO_CONTROLS)
|
|
450
|
+
) {
|
|
451
|
+
return {
|
|
452
|
+
classification: "native-per-tool" as const,
|
|
453
|
+
perTool: "enforced" as const,
|
|
454
|
+
clioControls: [...NATIVE_CLIO_CONTROLS],
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
return null;
|
|
458
|
+
})();
|
|
459
|
+
if (enforcement === null) return undefined;
|
|
376
460
|
return freezeEnvelope({
|
|
377
461
|
version: 1,
|
|
462
|
+
enforcement,
|
|
378
463
|
policy: {
|
|
379
464
|
recipeId,
|
|
380
465
|
default: { ...defaultPhase, synthesis: value.policy.default.synthesis },
|
|
@@ -481,6 +481,23 @@ export function capacityLeaseUsage(options?: { nowMs?: number; probe?: LeaseOwne
|
|
|
481
481
|
return { global: leases.length, nodes, endpoints, endpointHolders };
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
+
/** Coherent current endpoint occupancy, including held reservation waves.
|
|
485
|
+
* The caller still owns admission; process-local streams are not global leases.
|
|
486
|
+
*/
|
|
487
|
+
export function endpointCapacityUsage(): Readonly<Record<string, number>> {
|
|
488
|
+
return withStateFileLockSync(capacityStateLockPath(), () => {
|
|
489
|
+
const file = readCapacityStateUnsafe();
|
|
490
|
+
reclaim(file, Date.now(), defaultProbe);
|
|
491
|
+
const held = heldReservationUsage(file.reservations);
|
|
492
|
+
const usage: Record<string, number> = { ...foregroundStreamUsage() };
|
|
493
|
+
for (const [key, count] of Object.entries(held.endpoints)) usage[key] = (usage[key] ?? 0) + count;
|
|
494
|
+
for (const lease of file.leases) {
|
|
495
|
+
if (lease.endpointKey !== undefined) usage[lease.endpointKey] = (usage[lease.endpointKey] ?? 0) + 1;
|
|
496
|
+
}
|
|
497
|
+
return usage;
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
|
|
484
501
|
/**
|
|
485
502
|
* Per-node lease counts for display and for advisory placement spreading. Every
|
|
486
503
|
* read takes the admission state lock, so a render loop or a multi-node
|
|
@@ -107,6 +107,8 @@ export interface CodeStepRecord {
|
|
|
107
107
|
export interface CodeStepOutcome {
|
|
108
108
|
report: CodeReportResult;
|
|
109
109
|
record: CodeStepRecord;
|
|
110
|
+
/** Stdout retained within the shared capture cap, for structured command judgments. */
|
|
111
|
+
stdout: string;
|
|
110
112
|
/** Canonical JSON of the report; this is the text that crosses plan edges. */
|
|
111
113
|
output: string;
|
|
112
114
|
}
|
|
@@ -210,6 +212,7 @@ interface SpawnOutcome {
|
|
|
210
212
|
signal: string | null;
|
|
211
213
|
timedOut: boolean;
|
|
212
214
|
captured: Buffer;
|
|
215
|
+
stdout: Buffer;
|
|
213
216
|
outputBytes: number;
|
|
214
217
|
spawnError: string | null;
|
|
215
218
|
}
|
|
@@ -226,6 +229,7 @@ async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: Readonly
|
|
|
226
229
|
});
|
|
227
230
|
reportCommitAttributionDiagnostic(attribution.diagnostic);
|
|
228
231
|
const chunks: Buffer[] = [];
|
|
232
|
+
const stdoutChunks: Buffer[] = [];
|
|
229
233
|
let outputBytes = 0;
|
|
230
234
|
let captured = 0;
|
|
231
235
|
let settled = false;
|
|
@@ -239,16 +243,17 @@ async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: Readonly
|
|
|
239
243
|
// whole tree rather than orphaning a test runner's children.
|
|
240
244
|
detached: process.platform !== "win32",
|
|
241
245
|
});
|
|
242
|
-
const collect = (chunk: Buffer): void => {
|
|
246
|
+
const collect = (chunk: Buffer, stdout: boolean): void => {
|
|
243
247
|
outputBytes += chunk.length;
|
|
244
248
|
if (captured >= CODE_STEP_CAPTURE_MAX_BYTES) return;
|
|
245
249
|
const room = CODE_STEP_CAPTURE_MAX_BYTES - captured;
|
|
246
250
|
const slice = chunk.length <= room ? chunk : chunk.subarray(0, room);
|
|
247
251
|
chunks.push(slice);
|
|
252
|
+
if (stdout) stdoutChunks.push(slice);
|
|
248
253
|
captured += slice.length;
|
|
249
254
|
};
|
|
250
|
-
child.stdout?.on("data", collect);
|
|
251
|
-
child.stderr?.on("data", collect);
|
|
255
|
+
child.stdout?.on("data", (chunk: Buffer) => collect(chunk, true));
|
|
256
|
+
child.stderr?.on("data", (chunk: Buffer) => collect(chunk, false));
|
|
252
257
|
const kill = (): void => {
|
|
253
258
|
if (child.pid === undefined) return;
|
|
254
259
|
try {
|
|
@@ -276,6 +281,7 @@ async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: Readonly
|
|
|
276
281
|
signal,
|
|
277
282
|
timedOut,
|
|
278
283
|
captured: Buffer.concat(chunks),
|
|
284
|
+
stdout: Buffer.concat(stdoutChunks),
|
|
279
285
|
outputBytes,
|
|
280
286
|
spawnError,
|
|
281
287
|
});
|
|
@@ -317,6 +323,7 @@ export async function runCodeStep(input: CodeStepRunInput): Promise<CodeStepOutc
|
|
|
317
323
|
signal: null,
|
|
318
324
|
timedOut: false,
|
|
319
325
|
captured: Buffer.from(`${CODE_STEP_EMPTY_DIFF_MESSAGE}\n`, "utf8"),
|
|
326
|
+
stdout: Buffer.alloc(0),
|
|
320
327
|
outputBytes: 0,
|
|
321
328
|
spawnError: null,
|
|
322
329
|
}
|
|
@@ -383,5 +390,5 @@ export async function runCodeStep(input: CodeStepRunInput): Promise<CodeStepOutc
|
|
|
383
390
|
artifactPaths,
|
|
384
391
|
reportDigest: codeReportDigest(report),
|
|
385
392
|
};
|
|
386
|
-
return { report, record, output: canonicalCodeReport(report) };
|
|
393
|
+
return { report, record, stdout: spawned.stdout.toString("utf8"), output: canonicalCodeReport(report) };
|
|
387
394
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { SafeEventBus } from "../../core/event-bus.js";
|
|
2
|
+
import type { DeclaredCheckKind } from "../../tools/verify/catalog.js";
|
|
3
|
+
import type { NumericTolerance } from "../../tools/verify/numeric.js";
|
|
4
|
+
import type { PerfBudgetSpec } from "../../tools/verify/perf.js";
|
|
2
5
|
import type { ResultContract } from "../agents/result-contract.js";
|
|
3
6
|
import type { AgentAutomationAuthority, AgentSpec } from "../agents/spec.js";
|
|
4
7
|
import type { CostProvenance } from "../providers/index.js";
|
|
@@ -15,6 +18,19 @@ import type { RunEnvelope, RunLineage, RunNodeIdentity, RunPhaseDurations, RunRe
|
|
|
15
18
|
import type { DispatchFailoverCandidate, JobSpec } from "./validation.js";
|
|
16
19
|
import type { WriteBoundaryAttribution } from "./write-boundary.js";
|
|
17
20
|
|
|
21
|
+
export interface ResolvedVerificationCheck {
|
|
22
|
+
check: string;
|
|
23
|
+
argv: ReadonlyArray<string>;
|
|
24
|
+
cwd: string;
|
|
25
|
+
timeoutMs: number;
|
|
26
|
+
/** Absent means `command`, the exit-code check every receipt carried before kinds existed. */
|
|
27
|
+
kind?: DeclaredCheckKind;
|
|
28
|
+
/** Sealed at admission with the reference as an absolute path. */
|
|
29
|
+
numeric?: { reference: string; tolerance: NumericTolerance };
|
|
30
|
+
/** Sealed at admission with the baseline as an absolute path. */
|
|
31
|
+
perf?: { budget?: PerfBudgetSpec; baseline?: string; tolerance?: { relative?: number } };
|
|
32
|
+
}
|
|
33
|
+
|
|
18
34
|
export interface DispatchRequest extends JobSpec {
|
|
19
35
|
/** Coordinator-owned result contract override for a fleet plan step. */
|
|
20
36
|
resultContractOverride?: ResultContract;
|
|
@@ -33,13 +49,13 @@ export interface DispatchRequest extends JobSpec {
|
|
|
33
49
|
runIdHint?: string;
|
|
34
50
|
/** Parent checkout frozen by plan approval for task worktree application. */
|
|
35
51
|
taskWorktreeDestination?: string;
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Admission-resolved commands. Model text never enters these argv vectors.
|
|
54
|
+
* A numeric-compare or perf-budget check also seals its kind and the
|
|
55
|
+
* absolute reference or baseline path it will judge against, so host
|
|
56
|
+
* verification runs exactly the check the catalog declared at admission.
|
|
57
|
+
*/
|
|
58
|
+
resolvedVerification?: ReadonlyArray<ResolvedVerificationCheck>;
|
|
43
59
|
/**
|
|
44
60
|
* Semantic role this request's first attempt runs under. Derived once by
|
|
45
61
|
* `execution-role.ts` at request construction, never authored by a model, and
|
|
@@ -79,6 +95,14 @@ export interface DispatchRequest extends JobSpec {
|
|
|
79
95
|
* validation projection strips it like the reservation and ledger refs.
|
|
80
96
|
*/
|
|
81
97
|
parentToolCallId?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Decision refs (`<interviewId>/<key>`) active on the parent session's
|
|
100
|
+
* decision board when this request was built. Sealed by the orchestrator
|
|
101
|
+
* from the board snapshot, never by model arguments: the validation
|
|
102
|
+
* projection strips it like `reservation` and `ledger`. Copied onto the run
|
|
103
|
+
* envelope and receipt so a receipt names the decisions it worked under.
|
|
104
|
+
*/
|
|
105
|
+
decisionRefs?: ReadonlyArray<string>;
|
|
82
106
|
}
|
|
83
107
|
|
|
84
108
|
/** Internal, non-serializable admission hook for transactional resource owners. */
|
|
@@ -86,6 +110,12 @@ export interface DispatchAdmissionObserver {
|
|
|
86
110
|
onAdmitted(run: { runId: string; pid: number | null; runtimeKind: RunEnvelope["runtimeKind"] }): void;
|
|
87
111
|
}
|
|
88
112
|
|
|
113
|
+
/** Invocation-owned admission bounds; never serialized into model-authored requests. */
|
|
114
|
+
export interface DispatchPreparationOptions {
|
|
115
|
+
signal?: AbortSignal;
|
|
116
|
+
deadlineAt?: number;
|
|
117
|
+
}
|
|
118
|
+
|
|
89
119
|
/** Side-effect-free effective routing used to construct a dispatch approval artifact. */
|
|
90
120
|
export interface DispatchPlanTaskResolution {
|
|
91
121
|
agentId: string;
|
|
@@ -225,6 +255,7 @@ export interface DispatchContract {
|
|
|
225
255
|
dispatch(
|
|
226
256
|
req: DispatchRequest,
|
|
227
257
|
observer?: DispatchAdmissionObserver,
|
|
258
|
+
preparation?: DispatchPreparationOptions,
|
|
228
259
|
): Promise<{
|
|
229
260
|
runId: string;
|
|
230
261
|
events: AsyncIterableIterator<unknown>;
|
|
@@ -232,7 +263,10 @@ export interface DispatchContract {
|
|
|
232
263
|
}>;
|
|
233
264
|
|
|
234
265
|
/** Spawn a group of dispatches and expose one merged batch event stream. */
|
|
235
|
-
dispatchBatch(
|
|
266
|
+
dispatchBatch(
|
|
267
|
+
reqs: ReadonlyArray<DispatchRequest>,
|
|
268
|
+
preparation?: DispatchPreparationOptions,
|
|
269
|
+
): Promise<{
|
|
236
270
|
batchId: string;
|
|
237
271
|
/** Logical work ids, one per request in admission order. */
|
|
238
272
|
assignmentIds: ReadonlyArray<string>;
|
|
@@ -13,6 +13,8 @@ import {
|
|
|
13
13
|
export interface ExecutionStepResult extends ExecutionHandoff {
|
|
14
14
|
succeeded: boolean;
|
|
15
15
|
integrityValid: boolean;
|
|
16
|
+
/** Decision refs the step's sealed receipt was made under; absent for code steps and decision-free runs. */
|
|
17
|
+
decisionRefs?: ReadonlyArray<string>;
|
|
16
18
|
/**
|
|
17
19
|
* The step changed the workspace outside its declared boundary. Sealed by
|
|
18
20
|
* the orchestrator after the fact, never by the step: a run that reports on
|