@iowarp/clio-coder 0.4.3 → 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 +63 -0
- package/README.md +1 -1
- package/dist/{acp-H2NGRPWO.js → acp-WNAYYF4F.js} +4 -5
- package/dist/{agents-TL5LLUQP.js → agents-3OKXHLOI.js} +33 -31
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-E5SW4HMS.js → auth-VKNNMGPU.js} +10 -11
- package/dist/{builtins-IA7V7FUC.js → builtins-WGALA46I.js} +4 -4
- package/dist/{chunk-F5JHEYZM.js → chunk-23L32XTI.js} +10 -7
- package/dist/{chunk-DWUOQKRU.js → chunk-25QBEXRS.js} +2 -2
- package/dist/{chunk-LLDJM5XK.js → chunk-26QSH3EJ.js} +2 -2
- package/dist/{chunk-N2Z7HLVY.js → chunk-2ASED4PZ.js} +10 -10
- package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
- package/dist/chunk-2DSOYNFC.js +108 -0
- package/dist/{chunk-LDJG7DW3.js → chunk-2ZSONWVL.js} +4 -4
- package/dist/{chunk-GI7YYQ3F.js → chunk-36CT5VVL.js} +324 -41
- package/dist/{chunk-4UVU7BJ5.js → chunk-3GY4F45V.js} +2 -2
- package/dist/{chunk-PUVDKJ2Y.js → chunk-3ODX73FK.js} +3 -5
- package/dist/{chunk-IUE3Y34X.js → chunk-3UNOLWNZ.js} +2 -2
- package/dist/{chunk-6PTFB5VS.js → chunk-3UUXNFEX.js} +8 -4
- package/dist/{chunk-2APPQIER.js → chunk-4M6Z5QVF.js} +4 -4
- package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
- package/dist/{chunk-JGRC33J2.js → chunk-54X7T7DK.js} +12 -3
- package/dist/{chunk-YQWYVTMC.js → chunk-5636DCO5.js} +4 -4
- package/dist/{chunk-7E7I3WLS.js → chunk-57XXR6DR.js} +23 -22
- package/dist/{chunk-7ZYNNDKC.js → chunk-5TUB6SLS.js} +2 -2
- package/dist/{chunk-VW6DOEDG.js → chunk-6OSVSQL5.js} +11 -2
- package/dist/{chunk-L47TF46W.js → chunk-6PAZTBPA.js} +14 -2
- package/dist/{chunk-XIVNBFZS.js → chunk-6Q3CYFD3.js} +34 -16
- package/dist/{chunk-RSJ25QSL.js → chunk-6QOTUPRG.js} +155 -36
- package/dist/{chunk-JKKCYP3C.js → chunk-6UINWWS6.js} +10 -4
- package/dist/{chunk-WBKFA554.js → chunk-72YIHOZQ.js} +2 -2
- package/dist/{chunk-PAJQJ7BS.js → chunk-75W7L2E2.js} +246 -697
- package/dist/{chunk-RRNP2ANY.js → chunk-7UGL4MB5.js} +4 -4
- package/dist/{chunk-EKCHAPYA.js → chunk-AUPNRN7C.js} +2 -2
- package/dist/{chunk-ZDN3Y73Y.js → chunk-BJVFZO5U.js} +6 -48
- package/dist/{chunk-IWT4SF4R.js → chunk-CUSRQKPU.js} +64 -2
- package/dist/{chunk-SKHCAU7K.js → chunk-DQOVN6KV.js} +3 -2
- package/dist/{chunk-ZWPRK62N.js → chunk-DT3LWJOB.js} +4 -4
- package/dist/chunk-DXKJURES.js +671 -0
- package/dist/{chunk-BEPZRGGU.js → chunk-EL24TAU4.js} +2 -2
- package/dist/{chunk-OML5D5V5.js → chunk-ELWDPP3Y.js} +5 -5
- package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
- package/dist/chunk-EXLD33WO.js +381 -0
- package/dist/{chunk-IJNZMHLA.js → chunk-FEAXX7B6.js} +2 -2
- package/dist/{chunk-TM6LQDI3.js → chunk-FFUPXJC4.js} +74 -323
- package/dist/chunk-GX5WYQO4.js +59 -0
- package/dist/chunk-I2DWJ4GM.js +390 -0
- package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
- package/dist/chunk-IRXAATOX.js +539 -0
- package/dist/chunk-IXIY2H4R.js +44 -0
- package/dist/{chunk-KK4JZPBQ.js → chunk-IZXGRF7P.js} +76 -10
- package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
- package/dist/{chunk-INY6HTFL.js → chunk-JEIYHLOR.js} +2 -2
- package/dist/{chunk-MUW2BDDH.js → chunk-JQLNNIKT.js} +2 -2
- package/dist/{chunk-XPWWI35G.js → chunk-JSD46VO2.js} +19 -8
- package/dist/{chunk-VA5FNYMT.js → chunk-JT2RFCC5.js} +39 -2
- package/dist/{chunk-V2ANDPVT.js → chunk-K6T2ZAMZ.js} +168 -6
- package/dist/{chunk-B4OAX3SI.js → chunk-KFV5L5SK.js} +13 -6
- package/dist/{chunk-JEQ3XTHC.js → chunk-LLXSDWXS.js} +2 -2
- package/dist/{chunk-E3TPLWFX.js → chunk-LTIKRKFL.js} +3 -3
- package/dist/{chunk-NIQJ66N4.js → chunk-N56KALIC.js} +17 -17
- package/dist/{chunk-JDAY6FIL.js → chunk-NAI6ZFCY.js} +13 -9
- package/dist/{chunk-AF4YM7Z4.js → chunk-NRO2BJRH.js} +2490 -2182
- package/dist/{chunk-WRBAGUNF.js → chunk-NXIMQY5W.js} +2 -2
- package/dist/{chunk-I7ZPNEJM.js → chunk-NXYCB2VD.js} +5 -5
- package/dist/chunk-ODGTEFFI.js +50 -0
- package/dist/{chunk-2VIKGWFZ.js → chunk-OEJSLEPW.js} +2 -2
- package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
- package/dist/{chunk-54CBCGIR.js → chunk-Q4WO54TA.js} +132 -77
- package/dist/{chunk-B4VEBZKF.js → chunk-QUFRYSWI.js} +12 -6
- package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
- package/dist/{chunk-HEQY7ZFI.js → chunk-RAY4OVGZ.js} +2 -2
- package/dist/{chunk-G76U63X4.js → chunk-RQCKCSRL.js} +7 -7
- package/dist/{chunk-64I3JVYM.js → chunk-RXTN6AKH.js} +2 -2
- package/dist/{chunk-UPZU6GE4.js → chunk-RZDWV63N.js} +3 -3
- package/dist/{chunk-2UH2KFUP.js → chunk-S6PYF2XF.js} +2 -2
- package/dist/{chunk-JSC3U7TI.js → chunk-TOIVGRUX.js} +2 -2
- package/dist/{chunk-7DRAWPTZ.js → chunk-TQAHXW6Y.js} +1 -1
- package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
- package/dist/{chunk-AX2THNSA.js → chunk-UEPWCCTY.js} +4 -4
- package/dist/{chunk-QWGDJJYJ.js → chunk-USR47QNF.js} +4 -4
- package/dist/{chunk-Y3CBHOR6.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-2UG5F4C5.js → chunk-XULDXHTN.js} +24 -12
- package/dist/chunk-XXYSBZIQ.js +283 -0
- package/dist/{chunk-MWUZBSAQ.js → chunk-Y55JBDO5.js} +331 -51
- package/dist/{chunk-W6RRQCPQ.js → chunk-YD5GIKET.js} +4 -4
- package/dist/{chunk-CE5AX47J.js → chunk-YECAMM3D.js} +2 -2
- package/dist/{chunk-WCXUNS7U.js → chunk-YNFKXPEC.js} +6 -6
- package/dist/cli/index.js +36 -35
- package/dist/{clio-CMMK4KRR.js → clio-QLICPCF5.js} +2 -2
- package/dist/{code-nav-MDZNQS33.js → code-nav-IJR2DBPR.js} +6 -6
- package/dist/{components-UCUQ4QXW.js → components-2TGAI2RC.js} +3 -4
- package/dist/{config-SVM5P5YI.js → config-IUA6OYNS.js} +52 -47
- package/dist/{configure-LE3IK2TJ.js → configure-VEPX4NMX.js} +14 -15
- package/dist/{context-VNCR7KAG.js → context-2DKHWH2T.js} +23 -23
- package/dist/{context-2OHRKS42.js → context-4MPR7WKB.js} +48 -42
- package/dist/{context-E3VC7RX5.js → context-BOYF5EJM.js} +11 -11
- package/dist/{context-clear-BW4O37TG.js → context-clear-S4ZJCQUX.js} +48 -42
- package/dist/{context-working-set-VDS25HXZ.js → context-working-set-3I3FYX6Y.js} +8 -8
- package/dist/detail-A7JAVSIG.js +98 -0
- package/dist/{dispatch-runner-5AHT53RF.js → dispatch-runner-RJ5I2F2O.js} +71 -58
- package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
- package/dist/{doctor-WNNVO6FY.js → doctor-DKICC2SN.js} +54 -31
- package/dist/{eval-7G7SGAYO.js → eval-OQOQUDHK.js} +47 -56
- package/dist/{evidence-VD6736FQ.js → evidence-4DQ25GUQ.js} +53 -150
- package/dist/evidence-4F5USFKH.js +208 -0
- package/dist/{evolve-AL3NGVRL.js → evolve-GSS52E5J.js} +44 -41
- package/dist/{extensions-MOVJ32NM.js → extensions-G7MFLYHT.js} +4 -5
- package/dist/{fleet-QZHUMAGI.js → fleet-Q37YHHAQ.js} +74 -68
- package/dist/{fleet-commands-BAYT5FJZ.js → fleet-commands-G7E4N7SM.js} +14 -11
- package/dist/{fleet-decisions-IREVMRU4.js → fleet-decisions-O7M6QBA2.js} +6 -6
- package/dist/{fleet-graph-YCTT3HTI.js → fleet-graph-TOUBW6OW.js} +13 -13
- package/dist/{fleet-inspect-QVJTDAVB.js → fleet-inspect-SW33JJNI.js} +43 -39
- package/dist/{fleet-preflight-25QAFPK4.js → fleet-preflight-CV2655TW.js} +2 -3
- package/dist/{fleet-validate-5O57AAJ7.js → fleet-validate-KESZX2YH.js} +16 -16
- package/dist/{fleet-verify-CPH2W2T6.js → fleet-verify-UQPMTVE3.js} +42 -38
- package/dist/{fleet-view-SWBR3VGQ.js → fleet-view-MN2VG4MR.js} +43 -39
- package/dist/{init-J477LKZH.js → init-PXEXQSBF.js} +60 -54
- package/dist/{interop-3FCM6XLG.js → interop-ZG5T62U3.js} +6 -7
- package/dist/inventory-C26CFDRR.js +101 -0
- package/dist/{library-QUQEIUG6.js → library-B2W4N74O.js} +16 -17
- package/dist/{memory-SGGSEP65.js → memory-YCANYS5A.js} +45 -42
- package/dist/{models-HEKUAXXK.js → models-GERTU3YI.js} +20 -22
- package/dist/{monitor-HKU57TYQ.js → monitor-CPNIUULB.js} +50 -44
- package/dist/{orchestrator-VDFAEFAI.js → orchestrator-J4BSH4WQ.js} +491 -1182
- package/dist/{panes-DN2SSFOH.js → panes-BOHAEGYC.js} +3 -3
- package/dist/{panes-TALGNPZT.js → panes-NXSLDQZ2.js} +5 -6
- package/dist/{paths-NBMFAIEZ.js → paths-VSUWNC22.js} +3 -4
- package/dist/{reset-EAJFFJVB.js → reset-TNWTB5LU.js} +5 -6
- package/dist/{resources-OVKSEFVE.js → resources-4PXNMD5G.js} +14 -14
- package/dist/{run-7DP7ZF2J.js → run-D6XJ34CN.js} +79 -83
- package/dist/{share-WML67FT3.js → share-2NWMJJEE.js} +14 -15
- package/dist/{skills-SG662R2K.js → skills-KR7WON5G.js} +18 -19
- package/dist/{skills-eval-VVZEUU46.js → skills-eval-O2ZNOLDS.js} +49 -46
- package/dist/{skills-inventory-I2E23GET.js → skills-inventory-ZZOUBK7O.js} +14 -14
- package/dist/{slash-commands-S7MBJDQK.js → slash-commands-ZXPJD64J.js} +32 -23
- package/dist/{steer-2LQOMCPB.js → steer-XA25PSCS.js} +3 -3
- package/dist/{support-CC2UJBJ6.js → support-7EMVWYG2.js} +2 -2
- package/dist/{targets-4QC3HIEW.js → targets-OMH2XCSN.js} +25 -27
- package/dist/tasks-IPAGMEIX.js +36 -0
- package/dist/{terminal-lease-TUHIJ6Y2.js → terminal-lease-C2J3JYRE.js} +4 -4
- package/dist/{tools-TFGJICCU.js → tools-EFFEAIDP.js} +5 -6
- package/dist/{uninstall-5PEVOE5B.js → uninstall-HALS6BLF.js} +7 -8
- package/dist/{upgrade-M4WXY6KN.js → upgrade-MS72RJEP.js} +14 -11
- package/dist/{usage-N7ZNVLEM.js → usage-NHG6MCJM.js} +60 -51
- package/dist/{verifiers-DJTP4XX6.js → verifiers-7AUNVXDY.js} +150 -17
- package/dist/{verify-RWE4PPEK.js → verify-FWYGPKMR.js} +12 -10
- package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
- package/dist/{wiki-generate-C7IQOXSP.js → wiki-generate-743CIGJW.js} +63 -56
- package/dist/{with-panes-4GCGSL7J.js → with-panes-BDQEWBRT.js} +2 -2
- package/dist/worker/entry.js +36 -33
- package/docs/README.md +3 -2
- package/docs/architecture/acp.md +17 -0
- package/docs/architecture/artifact-versions.md +1 -1
- package/docs/architecture/dispatch-typed-intent.md +1 -1
- package/docs/architecture/evidence-and-memory.md +1 -1
- package/docs/architecture/observability.md +7 -1
- package/docs/architecture/prompt-envelope-and-tools.md +15 -5
- package/docs/architecture/safety-model.md +10 -17
- package/docs/architecture/tui-design.md +1 -1
- package/docs/guide/built-in-agents.md +8 -8
- package/docs/guide/commands-and-modes.md +17 -2
- package/docs/guide/configuration-and-targets.md +3 -1
- package/docs/guide/configuration-reference.md +10 -5
- package/docs/guide/environment-variables.md +2 -2
- package/docs/guide/tool-usage.md +78 -3
- package/docs/history/config-knobs-audit.md +2 -2
- package/docs/process/development-pipeline.md +6 -1
- 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/package.json +1 -1
- package/skills/coding/coding-standards/SKILL.md +14 -4
- package/skills/context/context-handoff/SKILL.md +3 -3
- package/skills/context/context-prime/SKILL.md +3 -3
- package/skills/planning/architecture/SKILL.md +5 -5
- package/skills/planning/backlog/SKILL.md +4 -4
- package/skills/planning/prd/SKILL.md +4 -3
- package/skills/planning/product-intent/SKILL.md +8 -8
- package/skills/planning/tech-spec/SKILL.md +4 -4
- package/skills/registry.yaml +32 -32
- package/skills/research/arxiv-literature/SKILL.md +3 -3
- package/skills/research/experiment-protocol/SKILL.md +3 -3
- package/skills/research/scientific-debugging/SKILL.md +3 -2
- package/skills/research/scientific-modernization/SKILL.md +3 -3
- package/skills/skill-marketplace.json +16 -16
- package/skills/workflow/cut-it/SKILL.md +3 -4
- package/skills/workflow/design-council/SKILL.md +5 -10
- package/skills/workflow/grill-me/SKILL.md +14 -15
- package/skills/workflow/workflow-distiller/SKILL.md +4 -4
- package/src/cli/args.ts +0 -8
- package/src/cli/configure.ts +2 -1
- 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 +2 -0
- package/src/cli/run.ts +0 -2
- package/src/cli/targets.ts +1 -1
- package/src/cli/tasks.ts +84 -0
- package/src/cli/upgrade.ts +10 -5
- package/src/cli/usage.ts +6 -0
- 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/git-commit-attribution.ts +46 -3
- package/src/core/run-overrides.ts +0 -5
- package/src/core/skill-activation.ts +3 -0
- 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/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/prompts.ts +43 -0
- package/src/domains/dispatch/active-route-planner.ts +4 -0
- package/src/domains/dispatch/code-step.ts +11 -4
- package/src/domains/dispatch/contract.ts +31 -7
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +50 -27
- 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 +17 -2
- package/src/domains/eval/runners/clio-run.ts +12 -9
- 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/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/middleware/marketplace-offer.ts +20 -1
- package/src/domains/middleware/runtime.ts +7 -3
- package/src/domains/mux/detect.ts +3 -6
- package/src/domains/observability/accountability.ts +15 -1
- package/src/domains/observability/contract.ts +52 -7
- package/src/domains/observability/evidence-index.ts +10 -0
- package/src/domains/observability/extension.ts +9 -5
- 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/model-discovery.ts +1 -4
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +16 -14
- package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
- package/src/domains/providers/support.ts +1 -1
- package/src/domains/providers/types/runtime-descriptor.ts +1 -1
- package/src/domains/safety/action-classifier.ts +7 -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 +20 -1
- package/src/domains/safety/policy-engine.ts +26 -6
- package/src/domains/safety/rigor.ts +53 -39
- package/src/domains/safety/validation-contract.ts +388 -0
- package/src/domains/session/archive-readers.ts +10 -1
- package/src/domains/session/decision-board.ts +101 -2
- package/src/domains/session/entries.ts +44 -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/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/apis/ollama-native.ts +15 -0
- package/src/engine/claude/subprocess-runtime.ts +107 -60
- package/src/engine/external-subprocess.ts +12 -4
- package/src/entry/orchestrator.ts +11 -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 +2 -1
- 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/slash-autocomplete.ts +4 -6
- package/src/interactive/slash-commands.ts +25 -39
- package/src/interactive/slash-spec.ts +28 -0
- package/src/interactive/view/artifacts.ts +2 -0
- package/src/interactive/worker-stream.ts +7 -3
- 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/core-bootstrap.ts +16 -0
- package/src/tools/decide.ts +136 -0
- package/src/tools/dispatch-admission.ts +21 -0
- package/src/tools/dispatch-plan.ts +5 -2
- package/src/tools/dispatch-runner.ts +15 -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 +1 -1
- 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/dist/chunk-7DICMOS6.js +0 -313
- package/dist/chunk-RVG5JXAL.js +0 -41
- package/dist/chunk-T56WDKA5.js +0 -183
- package/dist/chunk-VPKWYKEY.js +0 -169
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
appendOutOfTurnUsageRow,
|
|
4
|
-
|
|
4
|
+
readAccountabilitySummary,
|
|
5
5
|
writeEvidenceIndexRowQueued
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JT2RFCC5.js";
|
|
7
|
+
import {
|
|
8
|
+
createWorkerProgressFold
|
|
9
|
+
} from "./chunk-XXYSBZIQ.js";
|
|
10
|
+
import {
|
|
11
|
+
truncateToWidth
|
|
12
|
+
} from "./chunk-YAKGTXEV.js";
|
|
7
13
|
import {
|
|
8
|
-
FAILURE_CAUSE_TAGS,
|
|
9
14
|
buildEvidence,
|
|
10
15
|
createCostTracker
|
|
11
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-NRO2BJRH.js";
|
|
17
|
+
import {
|
|
18
|
+
summarizeTrustStatus
|
|
19
|
+
} from "./chunk-CUSRQKPU.js";
|
|
12
20
|
import {
|
|
13
21
|
createDispatchTraceMirror,
|
|
14
22
|
traceDatabasePath
|
|
@@ -16,9 +24,15 @@ import {
|
|
|
16
24
|
import {
|
|
17
25
|
uncachedPrefillTokens
|
|
18
26
|
} from "./chunk-3DPEIQKN.js";
|
|
27
|
+
import {
|
|
28
|
+
cloneRunToolBudgetEnvelope
|
|
29
|
+
} from "./chunk-75W7L2E2.js";
|
|
30
|
+
import {
|
|
31
|
+
sanitizeCallTargetText
|
|
32
|
+
} from "./chunk-NEDJ26B5.js";
|
|
19
33
|
import {
|
|
20
34
|
resolveCostProvenance
|
|
21
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-JSD46VO2.js";
|
|
22
36
|
import {
|
|
23
37
|
BusChannels
|
|
24
38
|
} from "./chunk-F4EKGO4N.js";
|
|
@@ -36,31 +50,6 @@ init_esm_shims();
|
|
|
36
50
|
// src/domains/observability/extension.ts
|
|
37
51
|
init_esm_shims();
|
|
38
52
|
|
|
39
|
-
// src/domains/observability/accountability.ts
|
|
40
|
-
init_esm_shims();
|
|
41
|
-
function summarizeEvidenceIndex(rows) {
|
|
42
|
-
const totalRuns = rows.length;
|
|
43
|
-
let firstPassRuns = 0;
|
|
44
|
-
const counts = /* @__PURE__ */ new Map();
|
|
45
|
-
for (const row of rows) {
|
|
46
|
-
if (row.firstPassSuccess) firstPassRuns += 1;
|
|
47
|
-
for (const tag of row.tags) {
|
|
48
|
-
if (!FAILURE_CAUSE_TAGS.has(tag)) continue;
|
|
49
|
-
counts.set(tag, (counts.get(tag) ?? 0) + 1);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const failureCauses = [...counts.entries()].map(([tag, count]) => ({ tag, count })).sort((a, b) => b.count !== a.count ? b.count - a.count : a.tag.localeCompare(b.tag));
|
|
53
|
-
return {
|
|
54
|
-
totalRuns,
|
|
55
|
-
firstPassRuns,
|
|
56
|
-
firstPassRate: totalRuns === 0 ? 0 : firstPassRuns / totalRuns,
|
|
57
|
-
failureCauses
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
function readAccountabilitySummary(stateDir) {
|
|
61
|
-
return summarizeEvidenceIndex(readEvidenceIndex(stateDir));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
53
|
// src/domains/observability/metrics.ts
|
|
65
54
|
init_esm_shims();
|
|
66
55
|
function percentile(sorted, p) {
|
|
@@ -87,6 +76,7 @@ function aggregateMetrics(snap) {
|
|
|
87
76
|
|
|
88
77
|
// src/domains/observability/projection.ts
|
|
89
78
|
init_esm_shims();
|
|
79
|
+
import { performance } from "node:perf_hooks";
|
|
90
80
|
|
|
91
81
|
// src/core/dispatch-outcome.ts
|
|
92
82
|
init_esm_shims();
|
|
@@ -125,8 +115,121 @@ function makeRef(parts) {
|
|
|
125
115
|
}
|
|
126
116
|
return Object.keys(ref).length > 0 ? ref : void 0;
|
|
127
117
|
}
|
|
118
|
+
var TASK_SUMMARY_MAX_WIDTH = 240;
|
|
119
|
+
function finiteOrZero(value) {
|
|
120
|
+
return num(value, 0);
|
|
121
|
+
}
|
|
122
|
+
function parseRuntimeKind(value) {
|
|
123
|
+
if (value === "sdk" || value === "subprocess" || value === "acp-delegation") return value;
|
|
124
|
+
return "http";
|
|
125
|
+
}
|
|
126
|
+
function parseAgentAudience(value, fallback) {
|
|
127
|
+
if (value === "base" || value === "shadow" || value === "custom" || value === "internal") return value;
|
|
128
|
+
return fallback;
|
|
129
|
+
}
|
|
130
|
+
function parseRequestOrigin(value, fallback) {
|
|
131
|
+
if (value === "user" || value === "agent" || value === "internal") return value;
|
|
132
|
+
return fallback;
|
|
133
|
+
}
|
|
134
|
+
function parseNonEmptyString(value) {
|
|
135
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
136
|
+
}
|
|
137
|
+
function parseTaskSummary(raw, fallback) {
|
|
138
|
+
return sanitizeDispatchTaskSummary(raw.task) ?? sanitizeDispatchTaskSummary(raw.taskSummary) ?? fallback;
|
|
139
|
+
}
|
|
140
|
+
function parsePositiveInt(value) {
|
|
141
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : void 0;
|
|
142
|
+
}
|
|
143
|
+
function parseGateBadge(value) {
|
|
144
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
145
|
+
const record = value;
|
|
146
|
+
if (typeof record.role !== "string" || record.role.length === 0) return void 0;
|
|
147
|
+
const cycle = parsePositiveInt(record.cycle) ?? 1;
|
|
148
|
+
return { role: record.role, cycle };
|
|
149
|
+
}
|
|
150
|
+
function parseEndpointCapacity(value) {
|
|
151
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
152
|
+
const record = value;
|
|
153
|
+
const key = parseNonEmptyString(record.key);
|
|
154
|
+
const label = parseNonEmptyString(record.label);
|
|
155
|
+
const limit = parsePositiveInt(record.limit);
|
|
156
|
+
return key === void 0 || label === void 0 || limit === void 0 ? void 0 : { key, label, limit };
|
|
157
|
+
}
|
|
158
|
+
function parseCouncilBadge(value) {
|
|
159
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
160
|
+
const record = value;
|
|
161
|
+
const group = parseNonEmptyString(record.group);
|
|
162
|
+
const label = parseNonEmptyString(record.label);
|
|
163
|
+
const round = parsePositiveInt(record.round);
|
|
164
|
+
if (group === void 0 || label === void 0 || round === void 0) return void 0;
|
|
165
|
+
return {
|
|
166
|
+
group,
|
|
167
|
+
label,
|
|
168
|
+
...typeof record.color === "string" && record.color.length > 0 ? { color: record.color } : {},
|
|
169
|
+
round
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function sanitizeDispatchTaskSummary(value) {
|
|
173
|
+
if (typeof value !== "string") return void 0;
|
|
174
|
+
const sanitized = sanitizeCallTargetText(value);
|
|
175
|
+
if (sanitized.length === 0) return void 0;
|
|
176
|
+
return sanitizeCallTargetText(truncateToWidth(sanitized, TASK_SUMMARY_MAX_WIDTH, "\u2026", false));
|
|
177
|
+
}
|
|
178
|
+
function parseRetrySnapshot(value) {
|
|
179
|
+
const attempt = parsePositiveInt(value.attempt);
|
|
180
|
+
const dueAtMs = Date.parse(value.dueAt);
|
|
181
|
+
if (attempt === void 0 || !Number.isFinite(dueAtMs)) return null;
|
|
182
|
+
return {
|
|
183
|
+
attempt,
|
|
184
|
+
dueAtMs,
|
|
185
|
+
reason: sanitizeCallTargetText(value.reason)
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function readRetrySnapshot(snapshot) {
|
|
189
|
+
const retrying = /* @__PURE__ */ new Map();
|
|
190
|
+
try {
|
|
191
|
+
for (const value of snapshot.retrying) {
|
|
192
|
+
const runId = asRunId(value.runId);
|
|
193
|
+
const agentId = parseNonEmptyString(value.agentId);
|
|
194
|
+
const retry = parseRetrySnapshot(value);
|
|
195
|
+
const taskSummary = sanitizeDispatchTaskSummary(value.task);
|
|
196
|
+
if (runId && agentId && retry) {
|
|
197
|
+
retrying.set(runId, {
|
|
198
|
+
agentId,
|
|
199
|
+
...taskSummary !== void 0 ? { taskSummary } : {},
|
|
200
|
+
retry
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
} catch {
|
|
205
|
+
}
|
|
206
|
+
return retrying;
|
|
207
|
+
}
|
|
208
|
+
function readRunningSnapshot(snapshot) {
|
|
209
|
+
const running = /* @__PURE__ */ new Map();
|
|
210
|
+
try {
|
|
211
|
+
for (const value of snapshot.running) {
|
|
212
|
+
const runId = asRunId(value.runId);
|
|
213
|
+
if (!runId) continue;
|
|
214
|
+
const budget = cloneRunToolBudgetEnvelope(value.budget);
|
|
215
|
+
running.set(runId, {
|
|
216
|
+
inputTokens: finiteOrZero(value.tokens.input),
|
|
217
|
+
outputTokens: finiteOrZero(value.tokens.output),
|
|
218
|
+
tokenCount: finiteOrZero(value.tokens.total),
|
|
219
|
+
costUsd: finiteOrZero(value.costUsd),
|
|
220
|
+
costProvenance: value.costProvenance ?? "unknown",
|
|
221
|
+
outcomePhase: value.outcomePhase,
|
|
222
|
+
...budget !== void 0 ? { budget } : {}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
} catch {
|
|
226
|
+
}
|
|
227
|
+
return running;
|
|
228
|
+
}
|
|
128
229
|
function createObservabilityProjection(bus, deps) {
|
|
129
230
|
const runs = /* @__PURE__ */ new Map();
|
|
231
|
+
const fleetPhases = /* @__PURE__ */ new Map();
|
|
232
|
+
let runReaders = deps;
|
|
130
233
|
const notices = [];
|
|
131
234
|
const providerHealth = /* @__PURE__ */ new Map();
|
|
132
235
|
const pendingEvidence = /* @__PURE__ */ new Set();
|
|
@@ -151,7 +254,14 @@ function createObservabilityProjection(bus, deps) {
|
|
|
151
254
|
accountability,
|
|
152
255
|
// Newest-first: Map preserves first-seen (enqueue) order, so reversing
|
|
153
256
|
// surfaces the most recently started runs at the head of the list.
|
|
154
|
-
runs: [...runs.values()].reverse()
|
|
257
|
+
runs: [...runs.values()].reverse().map((entry) => {
|
|
258
|
+
const { progressFold, startedAtClockMs: _clock, ...summary } = entry;
|
|
259
|
+
return structuredClone({
|
|
260
|
+
...summary,
|
|
261
|
+
status: entry.retry ? "retrying" : entry.status,
|
|
262
|
+
progress: progressFold.snapshot()
|
|
263
|
+
});
|
|
264
|
+
}),
|
|
155
265
|
providerHealth: providerHealthRecord,
|
|
156
266
|
notices: [...notices],
|
|
157
267
|
pendingEvidenceBuildRunIds: [...pendingEvidence]
|
|
@@ -185,12 +295,20 @@ function createObservabilityProjection(bus, deps) {
|
|
|
185
295
|
const oldest = runs.keys().next().value;
|
|
186
296
|
if (oldest === void 0) break;
|
|
187
297
|
runs.delete(oldest);
|
|
298
|
+
fleetPhases.delete(oldest);
|
|
188
299
|
}
|
|
189
300
|
}
|
|
190
301
|
function emptyRun(runId, now) {
|
|
302
|
+
const phase = fleetPhases.get(runId);
|
|
191
303
|
return {
|
|
192
304
|
runId,
|
|
193
305
|
agentId: "-",
|
|
306
|
+
runtimeKind: "http",
|
|
307
|
+
progressFold: createWorkerProgressFold(),
|
|
308
|
+
startedAtClockMs: null,
|
|
309
|
+
ttftMs: null,
|
|
310
|
+
lastContextTokens: 0,
|
|
311
|
+
...phase !== void 0 ? { phase: { ...phase } } : {},
|
|
194
312
|
status: "enqueued",
|
|
195
313
|
startedAtMs: now,
|
|
196
314
|
updatedAtMs: now,
|
|
@@ -202,11 +320,25 @@ function createObservabilityProjection(bus, deps) {
|
|
|
202
320
|
};
|
|
203
321
|
}
|
|
204
322
|
function applyIdentity(summary, id) {
|
|
323
|
+
delete summary.trust;
|
|
205
324
|
if (typeof id.agentId === "string" && id.agentId.length > 0) summary.agentId = id.agentId;
|
|
206
325
|
if (typeof id.targetId === "string" && id.targetId.length > 0) summary.targetId = id.targetId;
|
|
207
326
|
if (typeof id.wireModelId === "string" && id.wireModelId.length > 0) summary.modelId = id.wireModelId;
|
|
208
327
|
if (typeof id.runtimeId === "string" && id.runtimeId.length > 0) summary.runtimeId = id.runtimeId;
|
|
209
|
-
|
|
328
|
+
summary.runtimeKind = parseRuntimeKind(id.runtimeKind ?? summary.runtimeKind);
|
|
329
|
+
const additions = {
|
|
330
|
+
agentAudience: parseAgentAudience(id.agentAudience, summary.agentAudience),
|
|
331
|
+
requestOrigin: parseRequestOrigin(id.requestOrigin, summary.requestOrigin),
|
|
332
|
+
node: parseNonEmptyString(id.node) ?? summary.node,
|
|
333
|
+
endpoint: parseEndpointCapacity(id.endpoint) ?? summary.endpoint,
|
|
334
|
+
gate: parseGateBadge(id.gate) ?? summary.gate,
|
|
335
|
+
council: parseCouncilBadge(id.council) ?? summary.council,
|
|
336
|
+
rerouteCount: parsePositiveInt(id.rerouteCount) ?? summary.rerouteCount,
|
|
337
|
+
contextWindow: parsePositiveInt(id.contextWindow) ?? summary.contextWindow,
|
|
338
|
+
taskSummary: parseTaskSummary(id, summary.taskSummary),
|
|
339
|
+
budget: cloneRunToolBudgetEnvelope(id.budget) ?? summary.budget
|
|
340
|
+
};
|
|
341
|
+
Object.assign(summary, Object.fromEntries(Object.entries(additions).filter(([, value]) => value !== void 0)));
|
|
210
342
|
}
|
|
211
343
|
function applyTerminalTokens(summary, payload) {
|
|
212
344
|
summary.tokens.total = num(payload.tokenCount, summary.tokens.total);
|
|
@@ -233,6 +365,80 @@ function createObservabilityProjection(bus, deps) {
|
|
|
233
365
|
}
|
|
234
366
|
markChanged();
|
|
235
367
|
}
|
|
368
|
+
function settleFromReceipt(summary) {
|
|
369
|
+
try {
|
|
370
|
+
const facts = runReaders.readReceipt?.(summary.runId);
|
|
371
|
+
const text = facts?.trust?.artifactIntegrity.state === "verified" ? facts.text : void 0;
|
|
372
|
+
summary.progressFold.settle(typeof text === "string" && text.trim().length > 0 ? text : void 0);
|
|
373
|
+
if (facts?.trust !== void 0) summary.trust = summarizeTrustStatus(facts.trust);
|
|
374
|
+
} catch {
|
|
375
|
+
summary.progressFold.settle();
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
function applyTerminalDetail(summary, payload) {
|
|
379
|
+
const host = payload.hostVerification;
|
|
380
|
+
if (host === "verified" || host === "rejected" || host === "skipped" || host === "not_implicated")
|
|
381
|
+
summary.hostVerification = host;
|
|
382
|
+
if (payload.reason !== "retry_denied") summary.receiptId = summary.runId;
|
|
383
|
+
delete summary.retry;
|
|
384
|
+
settleFromReceipt(summary);
|
|
385
|
+
}
|
|
386
|
+
function reconcileRuns() {
|
|
387
|
+
if (!runReaders.dispatchSnapshot) return;
|
|
388
|
+
let current;
|
|
389
|
+
try {
|
|
390
|
+
current = runReaders.dispatchSnapshot();
|
|
391
|
+
} catch {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
if (!Array.isArray(current?.retrying) || !Array.isArray(current?.running)) return;
|
|
395
|
+
const retrying = readRetrySnapshot(current);
|
|
396
|
+
const running = readRunningSnapshot(current);
|
|
397
|
+
const now = Date.now();
|
|
398
|
+
let changed = false;
|
|
399
|
+
for (const entry of runs.values()) {
|
|
400
|
+
if (entry.retry && !retrying.has(entry.runId)) {
|
|
401
|
+
delete entry.retry;
|
|
402
|
+
changed = true;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
for (const [runId, retry] of retrying) {
|
|
406
|
+
const existing = runs.get(runId);
|
|
407
|
+
if (existing && existing.status !== "failed" && existing.status !== "dead") continue;
|
|
408
|
+
const entry = existing ?? emptyRun(runId, now);
|
|
409
|
+
if (!existing) {
|
|
410
|
+
entry.agentId = retry.agentId;
|
|
411
|
+
entry.status = "failed";
|
|
412
|
+
}
|
|
413
|
+
entry.retry = { ...retry.retry };
|
|
414
|
+
if (entry.taskSummary === void 0 && retry.taskSummary !== void 0) entry.taskSummary = retry.taskSummary;
|
|
415
|
+
putRun(runId, entry);
|
|
416
|
+
changed = true;
|
|
417
|
+
}
|
|
418
|
+
for (const [runId, live] of running) {
|
|
419
|
+
const entry = runs.get(runId);
|
|
420
|
+
if (!entry || isTerminal(entry.status) && live.outcomePhase !== "aborting") continue;
|
|
421
|
+
entry.tokens.input = live.inputTokens;
|
|
422
|
+
entry.tokens.output = live.outputTokens;
|
|
423
|
+
entry.tokens.total = live.tokenCount;
|
|
424
|
+
entry.costUsd = live.costUsd;
|
|
425
|
+
entry.costProvenance = live.costProvenance;
|
|
426
|
+
if (live.budget !== void 0) entry.budget = live.budget;
|
|
427
|
+
if (live.outcomePhase === "aborting" && entry.status !== "completed" && entry.status !== "aborted") {
|
|
428
|
+
entry.status = "cancelling";
|
|
429
|
+
delete entry.retry;
|
|
430
|
+
}
|
|
431
|
+
changed = true;
|
|
432
|
+
}
|
|
433
|
+
if (changed) markChanged();
|
|
434
|
+
}
|
|
435
|
+
function evidenceBuildSucceeded(runId, evidence) {
|
|
436
|
+
pendingEvidence.delete(runId);
|
|
437
|
+
const summary = runs.get(runId);
|
|
438
|
+
if (summary) summary.evidence = { ...evidence, tags: [...evidence.tags] };
|
|
439
|
+
accountability = deps.readAccountability();
|
|
440
|
+
markChanged();
|
|
441
|
+
}
|
|
236
442
|
const unsubscribes = [
|
|
237
443
|
bus.on(BusChannels.DispatchEnqueued, (raw) => {
|
|
238
444
|
const payload = raw ?? {};
|
|
@@ -242,6 +448,7 @@ function createObservabilityProjection(bus, deps) {
|
|
|
242
448
|
const summary = runs.get(runId) ?? emptyRun(runId, now);
|
|
243
449
|
applyIdentity(summary, payload);
|
|
244
450
|
summary.status = "enqueued";
|
|
451
|
+
delete summary.retry;
|
|
245
452
|
summary.updatedAtMs = now;
|
|
246
453
|
putRun(runId, summary);
|
|
247
454
|
markChanged();
|
|
@@ -255,6 +462,8 @@ function createObservabilityProjection(bus, deps) {
|
|
|
255
462
|
applyIdentity(summary, payload);
|
|
256
463
|
summary.status = "running";
|
|
257
464
|
summary.startedAtMs = now;
|
|
465
|
+
summary.startedAtClockMs = performance.now();
|
|
466
|
+
delete summary.retry;
|
|
258
467
|
summary.updatedAtMs = now;
|
|
259
468
|
summary.finishedAtMs = null;
|
|
260
469
|
summary.durationMs = null;
|
|
@@ -273,10 +482,46 @@ function createObservabilityProjection(bus, deps) {
|
|
|
273
482
|
const type = typeof event.type === "string" ? event.type : "";
|
|
274
483
|
if (type === "heartbeat_status") {
|
|
275
484
|
const status = resolveHeartbeat(event.status);
|
|
276
|
-
if (status && !isTerminal(summary.status)) summary.status = status;
|
|
485
|
+
if (status && !isTerminal(summary.status) && summary.status !== "cancelling") summary.status = status;
|
|
486
|
+
if (status === "dead") summary.progressFold.settle();
|
|
277
487
|
markChanged();
|
|
278
488
|
return;
|
|
279
489
|
}
|
|
490
|
+
if (type === "attempt_start") {
|
|
491
|
+
summary.failoverHops = (summary.failoverHops ?? 0) + 1;
|
|
492
|
+
summary.status = "running";
|
|
493
|
+
summary.finishedAtMs = null;
|
|
494
|
+
summary.durationMs = null;
|
|
495
|
+
summary.progressFold.restart();
|
|
496
|
+
delete summary.retry;
|
|
497
|
+
markChanged();
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
if (type === "agent_start") summary.startedAtClockMs = performance.now();
|
|
501
|
+
if (type === "message_update") {
|
|
502
|
+
const assistantEvent = event.assistantMessageEvent ?? {};
|
|
503
|
+
const hasDelta = ["text_delta", "thinking_delta", "toolcall_start", "toolcall_delta"].includes(
|
|
504
|
+
String(assistantEvent.type)
|
|
505
|
+
);
|
|
506
|
+
if (hasDelta && summary.ttftMs === null && summary.startedAtClockMs !== null)
|
|
507
|
+
summary.ttftMs = Math.round(performance.now() - summary.startedAtClockMs);
|
|
508
|
+
}
|
|
509
|
+
if (type === "clio_coder_write_record_downgraded") {
|
|
510
|
+
const detail = event.payload ?? {};
|
|
511
|
+
const tool = parseNonEmptyString(detail.tool);
|
|
512
|
+
const toolCallId = parseNonEmptyString(detail.toolCallId);
|
|
513
|
+
if (detail.reason === "opaque_tool_succeeded" && tool !== void 0 && toolCallId !== void 0)
|
|
514
|
+
summary.writeRecordDowngrade = {
|
|
515
|
+
reason: "opaque_tool_succeeded",
|
|
516
|
+
tool: sanitizeCallTargetText(tool),
|
|
517
|
+
toolCallId: sanitizeCallTargetText(toolCallId)
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
summary.progressFold.observe(payload.event);
|
|
521
|
+
if (type === "clio_coder_steer_received") {
|
|
522
|
+
const detail = event.payload ?? {};
|
|
523
|
+
summary.steerAcknowledgement = { receivedAtMs: now, chars: Math.max(0, Math.floor(num(detail.chars, 0))) };
|
|
524
|
+
}
|
|
280
525
|
if (type === "message_end" && !isTerminal(summary.status)) {
|
|
281
526
|
const message = event.message ?? {};
|
|
282
527
|
if (message.role === "assistant" && message.usage) {
|
|
@@ -285,8 +530,10 @@ function createObservabilityProjection(bus, deps) {
|
|
|
285
530
|
summary.tokens.input += input;
|
|
286
531
|
summary.tokens.output += output;
|
|
287
532
|
summary.tokens.total += input + output + num(message.usage.cacheWrite, 0);
|
|
533
|
+
summary.lastContextTokens = input + output;
|
|
288
534
|
}
|
|
289
535
|
}
|
|
536
|
+
if (type === "agent_end") summary.progressFold.settle();
|
|
290
537
|
markChanged();
|
|
291
538
|
}),
|
|
292
539
|
bus.on(BusChannels.DispatchCompleted, (raw) => {
|
|
@@ -301,6 +548,7 @@ function createObservabilityProjection(bus, deps) {
|
|
|
301
548
|
summary.finishedAtMs = now;
|
|
302
549
|
summary.durationMs = num(payload.durationMs, Math.max(0, now - summary.startedAtMs));
|
|
303
550
|
applyTerminalTokens(summary, payload);
|
|
551
|
+
applyTerminalDetail(summary, payload);
|
|
304
552
|
summary.outcome = str(payload.outcome, "succeeded");
|
|
305
553
|
summary.outcomeDetail = typeof payload.outcomeDetail === "string" ? payload.outcomeDetail : null;
|
|
306
554
|
putRun(runId, summary);
|
|
@@ -318,11 +566,34 @@ function createObservabilityProjection(bus, deps) {
|
|
|
318
566
|
summary.finishedAtMs = now;
|
|
319
567
|
summary.durationMs = num(payload.durationMs, Math.max(0, now - summary.startedAtMs));
|
|
320
568
|
applyTerminalTokens(summary, payload);
|
|
569
|
+
applyTerminalDetail(summary, payload);
|
|
321
570
|
summary.outcome = str(payload.outcome, str(payload.reason, "failed"));
|
|
322
571
|
summary.outcomeDetail = typeof payload.outcomeDetail === "string" ? payload.outcomeDetail : null;
|
|
323
572
|
putRun(runId, summary);
|
|
324
573
|
markChanged();
|
|
325
574
|
}),
|
|
575
|
+
bus.on(BusChannels.RunAborted, (raw) => {
|
|
576
|
+
const runId = asRunId(raw?.runId);
|
|
577
|
+
const summary = runId ? runs.get(runId) : void 0;
|
|
578
|
+
if (!summary) return;
|
|
579
|
+
const wasRetrying = summary.retry !== void 0;
|
|
580
|
+
delete summary.retry;
|
|
581
|
+
if (wasRetrying && raw.startedAt === null) {
|
|
582
|
+
summary.status = "aborted";
|
|
583
|
+
summary.finishedAtMs = Date.now();
|
|
584
|
+
summary.progressFold.settle();
|
|
585
|
+
} else {
|
|
586
|
+
if (isTerminal(summary.status) && !wasRetrying) return;
|
|
587
|
+
summary.status = "cancelling";
|
|
588
|
+
}
|
|
589
|
+
summary.outcomeDetail = typeof raw.reason === "string" ? raw.reason : summary.outcomeDetail ?? null;
|
|
590
|
+
summary.updatedAtMs = Date.now();
|
|
591
|
+
markChanged();
|
|
592
|
+
}),
|
|
593
|
+
bus.on(BusChannels.AccountabilityEvidenceReady, (payload) => {
|
|
594
|
+
const runId = asRunId(payload?.runId);
|
|
595
|
+
if (runId) evidenceBuildSucceeded(runId, payload);
|
|
596
|
+
}),
|
|
326
597
|
bus.on(BusChannels.ProviderHealth, (raw) => {
|
|
327
598
|
const payload = raw ?? {};
|
|
328
599
|
if (typeof payload.id !== "string" || payload.id.length === 0) return;
|
|
@@ -333,6 +604,24 @@ function createObservabilityProjection(bus, deps) {
|
|
|
333
604
|
];
|
|
334
605
|
return {
|
|
335
606
|
snapshot: buildSnapshot,
|
|
607
|
+
bindRunReaders(readers) {
|
|
608
|
+
runReaders = readers;
|
|
609
|
+
return () => {
|
|
610
|
+
if (runReaders === readers) runReaders = deps;
|
|
611
|
+
};
|
|
612
|
+
},
|
|
613
|
+
reconcileRuns,
|
|
614
|
+
setFleetPhase(runId, phase) {
|
|
615
|
+
fleetPhases.set(runId, { ...phase });
|
|
616
|
+
while (fleetPhases.size > MAX_PROJECTION_RUNS) {
|
|
617
|
+
const oldest = fleetPhases.keys().next().value;
|
|
618
|
+
if (oldest === void 0) break;
|
|
619
|
+
fleetPhases.delete(oldest);
|
|
620
|
+
}
|
|
621
|
+
const summary = runs.get(runId);
|
|
622
|
+
if (summary) summary.phase = { ...phase };
|
|
623
|
+
markChanged();
|
|
624
|
+
},
|
|
336
625
|
subscribe(listener) {
|
|
337
626
|
listeners.add(listener);
|
|
338
627
|
listener(buildSnapshot());
|
|
@@ -348,20 +637,6 @@ function createObservabilityProjection(bus, deps) {
|
|
|
348
637
|
pendingEvidence.add(runId);
|
|
349
638
|
markChanged();
|
|
350
639
|
},
|
|
351
|
-
evidenceBuildSucceeded(runId, evidence) {
|
|
352
|
-
pendingEvidence.delete(runId);
|
|
353
|
-
const summary = runs.get(runId);
|
|
354
|
-
if (summary) {
|
|
355
|
-
summary.evidence = {
|
|
356
|
-
evidenceId: evidence.evidenceId,
|
|
357
|
-
firstPassSuccess: evidence.firstPassSuccess,
|
|
358
|
-
findingCount: evidence.findingCount,
|
|
359
|
-
tags: [...evidence.tags]
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
accountability = deps.readAccountability();
|
|
363
|
-
markChanged();
|
|
364
|
-
},
|
|
365
640
|
evidenceBuildFailed(runId, message) {
|
|
366
641
|
pendingEvidence.delete(runId);
|
|
367
642
|
pushNotice(
|
|
@@ -491,6 +766,11 @@ function evidenceIndexRow(runId, result, succeeded, attempt) {
|
|
|
491
766
|
tags: [...tags],
|
|
492
767
|
firstPassSuccess,
|
|
493
768
|
findingCount: result.findings.length,
|
|
769
|
+
succeeded,
|
|
770
|
+
completionEvidenceWarning: result.findings.some(
|
|
771
|
+
(finding) => finding.tag === "completion-evidence" && finding.severity === "warn"
|
|
772
|
+
),
|
|
773
|
+
ungroundedClaims: result.ungroundedClaims,
|
|
494
774
|
generatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
495
775
|
};
|
|
496
776
|
}
|
|
@@ -517,7 +797,6 @@ function createObservabilityBundle(context, options = {}) {
|
|
|
517
797
|
projection.evidenceBuildStarted(runId);
|
|
518
798
|
const build = buildAndIndexEvidence(runId, succeeded, attempt, {
|
|
519
799
|
onReady: (id, evidence) => {
|
|
520
|
-
projection.evidenceBuildSucceeded(id, evidence);
|
|
521
800
|
context.bus.emit(BusChannels.AccountabilityEvidenceReady, { runId: id, ...evidence });
|
|
522
801
|
},
|
|
523
802
|
onFailed: (id, message) => projection.evidenceBuildFailed(id, message)
|
|
@@ -607,6 +886,9 @@ function createObservabilityBundle(context, options = {}) {
|
|
|
607
886
|
telemetry.record("histogram", "tokens.ttft_ms", snapshot.ttftMs ?? 0);
|
|
608
887
|
projection.refresh();
|
|
609
888
|
},
|
|
889
|
+
bindRunReaders: (readers) => projection.bindRunReaders(readers),
|
|
890
|
+
reconcileRuns: () => projection.reconcileRuns(),
|
|
891
|
+
setFleetPhase: (runId, phase) => projection.setFleetPhase(runId, phase),
|
|
610
892
|
snapshot: () => projection.snapshot(),
|
|
611
893
|
subscribe: (listener) => projection.subscribe(listener)
|
|
612
894
|
};
|
|
@@ -704,10 +986,8 @@ function createObservabilityDomainModule(options = {}) {
|
|
|
704
986
|
}
|
|
705
987
|
|
|
706
988
|
export {
|
|
707
|
-
readAccountabilitySummary,
|
|
708
|
-
resolveDispatchFailureStatus,
|
|
709
989
|
recordBackgroundMemoryStep,
|
|
710
990
|
ObservabilityDomainModule,
|
|
711
991
|
createObservabilityDomainModule
|
|
712
992
|
};
|
|
713
|
-
//# sourceMappingURL=chunk-
|
|
993
|
+
//# sourceMappingURL=chunk-Y55JBDO5.js.map
|
|
@@ -2,18 +2,18 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
|
|
|
2
2
|
import {
|
|
3
3
|
canonicalJson,
|
|
4
4
|
sha256
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CUSRQKPU.js";
|
|
6
6
|
import {
|
|
7
7
|
addResponseModelIdObservationCount,
|
|
8
8
|
emptyResponseModelIdObservationCounts,
|
|
9
9
|
responseModelIdObservationFromRecord
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6UINWWS6.js";
|
|
11
11
|
import {
|
|
12
12
|
uncachedPrefillTokens
|
|
13
13
|
} from "./chunk-3DPEIQKN.js";
|
|
14
14
|
import {
|
|
15
15
|
ToolNames
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-4NSRCOYP.js";
|
|
17
17
|
import {
|
|
18
18
|
ceilChars,
|
|
19
19
|
extractReasoningTokens
|
|
@@ -1194,4 +1194,4 @@ export {
|
|
|
1194
1194
|
readFileArgsAsync,
|
|
1195
1195
|
expandInlineFileReferencesAsync
|
|
1196
1196
|
};
|
|
1197
|
-
//# sourceMappingURL=chunk-
|
|
1197
|
+
//# sourceMappingURL=chunk-YD5GIKET.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
enabledExtensionResourceRoots
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-TQAHXW6Y.js";
|
|
5
5
|
import {
|
|
6
6
|
require_dist
|
|
7
7
|
} from "./chunk-APJ265NV.js";
|
|
@@ -120,4 +120,4 @@ export {
|
|
|
120
120
|
splitYamlFrontmatter,
|
|
121
121
|
stringField
|
|
122
122
|
};
|
|
123
|
-
//# sourceMappingURL=chunk-
|
|
123
|
+
//# sourceMappingURL=chunk-YECAMM3D.js.map
|
|
@@ -4,23 +4,23 @@ import {
|
|
|
4
4
|
loadProjectRules,
|
|
5
5
|
renderOperatorProfile,
|
|
6
6
|
selectActiveRules
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IZXGRF7P.js";
|
|
8
8
|
import {
|
|
9
9
|
loadFragments
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-V6HJFQZE.js";
|
|
11
11
|
import {
|
|
12
12
|
compile,
|
|
13
13
|
compileWorker
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-NRO2BJRH.js";
|
|
15
15
|
import {
|
|
16
16
|
sha256
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-CUSRQKPU.js";
|
|
18
18
|
import {
|
|
19
19
|
classifyProjectPreload
|
|
20
20
|
} from "./chunk-JVCV3ICN.js";
|
|
21
21
|
import {
|
|
22
22
|
isUserVisibleAgent
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-KFV5L5SK.js";
|
|
24
24
|
import {
|
|
25
25
|
BusChannels
|
|
26
26
|
} from "./chunk-F4EKGO4N.js";
|
|
@@ -720,4 +720,4 @@ export {
|
|
|
720
720
|
createPromptsDomainModule,
|
|
721
721
|
SchedulingDomainModule
|
|
722
722
|
};
|
|
723
|
-
//# sourceMappingURL=chunk-
|
|
723
|
+
//# sourceMappingURL=chunk-YNFKXPEC.js.map
|