@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,17 +1,30 @@
|
|
|
1
1
|
import { type ChildProcessByStdio, spawn } from "node:child_process";
|
|
2
|
-
import {
|
|
3
|
-
import type { Readable } from "node:stream";
|
|
2
|
+
import type { Readable, Writable } from "node:stream";
|
|
4
3
|
|
|
4
|
+
import { boundedExternalDiagnostic } from "../../core/external-diagnostic.js";
|
|
5
|
+
import { buildSafeToolEnv, resolveSafeCwd } from "../../core/safe-exec.js";
|
|
5
6
|
import type { AutonomyLevel } from "../../domains/safety/autonomy.js";
|
|
6
7
|
import { assertToolProfileEnforceable } from "../../tools/profiles.js";
|
|
7
|
-
import { readStderr, waitForClose } from "../external-subprocess.js";
|
|
8
|
+
import { createProcessTreeTerminator, readBoundedLines, readStderr, waitForClose } from "../external-subprocess.js";
|
|
8
9
|
import type { AgentEvent, AgentMessage, Usage } from "../types.js";
|
|
9
10
|
import type { WorkerEventEmit, WorkerRunHandle, WorkerRunInput, WorkerRunResult } from "../worker-runtime.js";
|
|
10
11
|
import { isClaudeCodeSessionId } from "./session-id.js";
|
|
11
12
|
|
|
12
13
|
const READ_ONLY_CLAUDE_TOOLS = ["Read", "Grep", "Glob", "LS", "WebFetch", "WebSearch"] as const;
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
/** Official CLI binary, resolved from the operator's PATH. */
|
|
16
|
+
const CLAUDE_BINARY = "claude";
|
|
17
|
+
export const CLAUDE_MAX_STREAM_LINE_BYTES = 1024 * 1024;
|
|
18
|
+
export const CLAUDE_MAX_STREAM_BYTES = 8 * 1024 * 1024;
|
|
19
|
+
|
|
20
|
+
type ClaudeChildProcess = ChildProcessByStdio<Writable, Readable, Readable>;
|
|
21
|
+
|
|
22
|
+
export interface ClaudeRuntimeDependencies {
|
|
23
|
+
binary?: string;
|
|
24
|
+
workspaceRoot?: string;
|
|
25
|
+
environment?: NodeJS.ProcessEnv;
|
|
26
|
+
killGraceMs?: number;
|
|
27
|
+
}
|
|
15
28
|
|
|
16
29
|
export interface ClaudeSubprocessPermissionConfig {
|
|
17
30
|
permissionMode: "plan" | "dontAsk" | "acceptEdits" | "default" | "bypassPermissions";
|
|
@@ -48,15 +61,20 @@ export function claudeSubprocessPermissionConfigForAutonomy(
|
|
|
48
61
|
return { permissionMode: "default", extraArgs: [], dangerousBypass: false };
|
|
49
62
|
}
|
|
50
63
|
|
|
51
|
-
function buildClaudeCodePrompt(input: WorkerRunInput): string {
|
|
64
|
+
export function buildClaudeCodePrompt(input: WorkerRunInput): string {
|
|
52
65
|
const parts = (input.dynamicPromptMessages ?? []).map((message) => message.body.trim()).filter(Boolean);
|
|
53
66
|
parts.push(input.task);
|
|
54
67
|
return parts.join("\n\n");
|
|
55
68
|
}
|
|
56
69
|
|
|
57
|
-
|
|
70
|
+
/**
|
|
71
|
+
* `claude -p` reads the user prompt from stdin when no positional prompt is
|
|
72
|
+
* given, so the prompt never appears in argv. The system prompt stays on
|
|
73
|
+
* `--append-system-prompt`: stdin carries only the user turn.
|
|
74
|
+
*/
|
|
75
|
+
export function buildClaudeCodeArgs(input: WorkerRunInput, gateEnv: NodeJS.ProcessEnv = process.env): string[] {
|
|
58
76
|
assertToolProfileEnforceable(input.toolProfile, "claude-code");
|
|
59
|
-
const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy);
|
|
77
|
+
const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy, gateEnv);
|
|
60
78
|
const args = [
|
|
61
79
|
"-p",
|
|
62
80
|
"--output-format",
|
|
@@ -71,7 +89,6 @@ function buildClaudeCodeArgs(input: WorkerRunInput): string[] {
|
|
|
71
89
|
const systemPrompt = input.systemPrompt.trim();
|
|
72
90
|
if (systemPrompt.length > 0) args.push("--append-system-prompt", systemPrompt);
|
|
73
91
|
if (isClaudeCodeSessionId(input.sessionId)) args.push("--session-id", input.sessionId.trim());
|
|
74
|
-
args.push(buildClaudeCodePrompt(input));
|
|
75
92
|
return args;
|
|
76
93
|
}
|
|
77
94
|
|
|
@@ -170,8 +187,11 @@ function buildAssistantMessage(input: {
|
|
|
170
187
|
exitCode: number;
|
|
171
188
|
aborted: boolean;
|
|
172
189
|
stderr: string;
|
|
190
|
+
transportError?: string;
|
|
173
191
|
}): AgentMessage & { role: "assistant" } {
|
|
174
|
-
const
|
|
192
|
+
const transportError = input.transportError ?? "";
|
|
193
|
+
const failed = input.exitCode !== 0 || transportError.length > 0;
|
|
194
|
+
const errorMessage = !failed ? "" : transportError || resultError(input.result, input.stderr);
|
|
175
195
|
const message: AgentMessage & { role: "assistant" } = {
|
|
176
196
|
role: "assistant",
|
|
177
197
|
content: [{ type: "text", text: input.text }],
|
|
@@ -179,12 +199,12 @@ function buildAssistantMessage(input: {
|
|
|
179
199
|
provider: "anthropic",
|
|
180
200
|
model: input.model,
|
|
181
201
|
usage: normalizeUsage(input.result?.usage, finite(input.result?.total_cost_usd)),
|
|
182
|
-
stopReason: input.aborted ? "aborted" :
|
|
202
|
+
stopReason: input.aborted ? "aborted" : failed ? "error" : "stop",
|
|
183
203
|
timestamp: Date.now(),
|
|
184
204
|
} as AgentMessage & { role: "assistant" };
|
|
185
205
|
if (typeof input.result?.request_id === "string") message.responseId = input.result.request_id;
|
|
186
206
|
if (typeof input.result?.model === "string") message.responseModel = input.result.model;
|
|
187
|
-
if (errorMessage.length > 0) message.errorMessage = errorMessage;
|
|
207
|
+
if (errorMessage.length > 0) message.errorMessage = boundedExternalDiagnostic(errorMessage);
|
|
188
208
|
return message;
|
|
189
209
|
}
|
|
190
210
|
|
|
@@ -224,9 +244,14 @@ async function readJsonLines(
|
|
|
224
244
|
emit: WorkerEventEmit,
|
|
225
245
|
state: { started: boolean; text: string; model: string; result: Record<string, unknown> | null },
|
|
226
246
|
): Promise<void> {
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
247
|
+
for await (const bounded of readBoundedLines(child.stdout, {
|
|
248
|
+
maxLineBytes: CLAUDE_MAX_STREAM_LINE_BYTES,
|
|
249
|
+
maxTotalBytes: CLAUDE_MAX_STREAM_BYTES,
|
|
250
|
+
})) {
|
|
251
|
+
if (bounded.kind === "oversized") {
|
|
252
|
+
throw new Error(`claude stream-json line exceeded ${CLAUDE_MAX_STREAM_LINE_BYTES} bytes`);
|
|
253
|
+
}
|
|
254
|
+
const trimmed = bounded.line.trim();
|
|
230
255
|
if (trimmed.length === 0) continue;
|
|
231
256
|
let parsed: unknown;
|
|
232
257
|
try {
|
|
@@ -250,12 +275,21 @@ async function readJsonLines(
|
|
|
250
275
|
}
|
|
251
276
|
}
|
|
252
277
|
|
|
253
|
-
export function startClaudeCodeWorkerRun(
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
278
|
+
export function startClaudeCodeWorkerRun(
|
|
279
|
+
input: WorkerRunInput,
|
|
280
|
+
emit: WorkerEventEmit,
|
|
281
|
+
dependencies: ClaudeRuntimeDependencies = {},
|
|
282
|
+
): WorkerRunHandle {
|
|
283
|
+
const sourceEnv = dependencies.environment ?? process.env;
|
|
284
|
+
const args = buildClaudeCodeArgs(input, sourceEnv);
|
|
285
|
+
const prompt = buildClaudeCodePrompt(input);
|
|
286
|
+
const workspaceRoot = dependencies.workspaceRoot ?? process.cwd();
|
|
287
|
+
const cwd = resolveSafeCwd(input.cwd, workspaceRoot);
|
|
288
|
+
const child: ClaudeChildProcess = spawn(dependencies.binary ?? CLAUDE_BINARY, args, {
|
|
289
|
+
cwd,
|
|
290
|
+
env: buildSafeToolEnv({}, sourceEnv),
|
|
291
|
+
detached: process.platform !== "win32",
|
|
292
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
259
293
|
});
|
|
260
294
|
const streamState = {
|
|
261
295
|
started: false,
|
|
@@ -264,53 +298,66 @@ export function startClaudeCodeWorkerRun(input: WorkerRunInput, emit: WorkerEven
|
|
|
264
298
|
result: null as Record<string, unknown> | null,
|
|
265
299
|
};
|
|
266
300
|
let aborted = false;
|
|
267
|
-
let
|
|
268
|
-
|
|
301
|
+
let settled = false;
|
|
302
|
+
let transportError = "";
|
|
303
|
+
const terminator = createProcessTreeTerminator(child, dependencies.killGraceMs ?? 1500);
|
|
269
304
|
const abort = (): void => {
|
|
305
|
+
if (settled) return;
|
|
270
306
|
aborted = true;
|
|
271
|
-
|
|
272
|
-
child.kill("SIGTERM");
|
|
273
|
-
killTimer = setTimeout(() => {
|
|
274
|
-
if (!child.killed) child.kill("SIGKILL");
|
|
275
|
-
}, 1500);
|
|
307
|
+
terminator.terminate();
|
|
276
308
|
};
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
309
|
+
const onAbort = (): void => abort();
|
|
310
|
+
if (input.signal?.aborted) abort();
|
|
311
|
+
else input.signal?.addEventListener("abort", onAbort, { once: true });
|
|
312
|
+
child.once("error", (cause) => {
|
|
313
|
+
transportError ||=
|
|
314
|
+
(cause as NodeJS.ErrnoException).code === "ENOENT"
|
|
315
|
+
? "Claude Code CLI (`claude`) is not installed or not on PATH."
|
|
316
|
+
: cause.message;
|
|
317
|
+
});
|
|
318
|
+
child.stdin.on("error", (cause) => {
|
|
319
|
+
if (!aborted) transportError ||= `could not send prompt to Claude Code CLI: ${cause.message}`;
|
|
320
|
+
});
|
|
321
|
+
child.stdin.end(prompt);
|
|
281
322
|
|
|
282
323
|
const promise = (async (): Promise<WorkerRunResult> => {
|
|
283
324
|
emit({ type: "agent_start" } as AgentEvent);
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
325
|
+
try {
|
|
326
|
+
const stderrPromise = readStderr(child);
|
|
327
|
+
const stdoutPromise = readJsonLines(child, emit, streamState).catch((cause) => {
|
|
328
|
+
transportError ||= cause instanceof Error ? cause.message : String(cause);
|
|
329
|
+
terminator.terminate();
|
|
330
|
+
});
|
|
331
|
+
const exitCode = await waitForClose(child);
|
|
332
|
+
await stdoutPromise;
|
|
333
|
+
const stderr = await stderrPromise.catch(() => "");
|
|
334
|
+
const finalText =
|
|
335
|
+
streamState.text ||
|
|
336
|
+
resultText(streamState.result) ||
|
|
337
|
+
(exitCode === 0 ? "" : resultError(streamState.result, stderr));
|
|
338
|
+
const finalMessage = buildAssistantMessage({
|
|
339
|
+
model: streamState.model,
|
|
340
|
+
text: finalText,
|
|
341
|
+
result: streamState.result,
|
|
342
|
+
exitCode,
|
|
343
|
+
aborted,
|
|
344
|
+
stderr,
|
|
345
|
+
transportError,
|
|
346
|
+
});
|
|
347
|
+
if (!streamState.started) emit({ type: "message_start", message: finalMessage } as AgentEvent);
|
|
348
|
+
emit({ type: "message_end", message: finalMessage } as AgentEvent);
|
|
349
|
+
const messages: AgentMessage[] = [finalMessage];
|
|
350
|
+
emit({ type: "agent_end", messages } as AgentEvent);
|
|
351
|
+
if (finalMessage.stopReason === "error" && finalMessage.errorMessage && !aborted) {
|
|
352
|
+
process.stderr.write(`[worker:claude-code] ${finalMessage.errorMessage}\n`);
|
|
353
|
+
}
|
|
354
|
+
return { messages, exitCode: finalMessage.stopReason === "stop" ? 0 : 1 };
|
|
355
|
+
} finally {
|
|
356
|
+
settled = true;
|
|
357
|
+
terminator.cleanup();
|
|
358
|
+
input.signal?.removeEventListener("abort", onAbort);
|
|
308
359
|
}
|
|
309
|
-
return { messages, exitCode: exitCode === 0 ? 0 : 1 };
|
|
310
360
|
})();
|
|
311
361
|
|
|
312
|
-
return {
|
|
313
|
-
promise,
|
|
314
|
-
abort,
|
|
315
|
-
};
|
|
362
|
+
return { promise, abort };
|
|
316
363
|
}
|
|
@@ -89,7 +89,6 @@ export function createProcessTreeTerminator(
|
|
|
89
89
|
let sent = false;
|
|
90
90
|
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
91
91
|
const signal = (name: NodeJS.Signals): void => {
|
|
92
|
-
if (child.exitCode !== null) return;
|
|
93
92
|
if (child.pid && process.platform !== "win32") {
|
|
94
93
|
try {
|
|
95
94
|
process.kill(-child.pid, name);
|
|
@@ -98,6 +97,7 @@ export function createProcessTreeTerminator(
|
|
|
98
97
|
// The child may not have established its group yet.
|
|
99
98
|
}
|
|
100
99
|
}
|
|
100
|
+
if (child.exitCode !== null) return;
|
|
101
101
|
child.kill(name);
|
|
102
102
|
};
|
|
103
103
|
return {
|
|
@@ -105,11 +105,19 @@ export function createProcessTreeTerminator(
|
|
|
105
105
|
if (sent) return;
|
|
106
106
|
sent = true;
|
|
107
107
|
signal("SIGTERM");
|
|
108
|
-
timer = setTimeout(() =>
|
|
108
|
+
timer = setTimeout(() => {
|
|
109
|
+
timer = null;
|
|
110
|
+
signal("SIGKILL");
|
|
111
|
+
}, graceMs);
|
|
109
112
|
},
|
|
110
113
|
cleanup() {
|
|
111
|
-
if (timer)
|
|
112
|
-
|
|
114
|
+
if (timer) {
|
|
115
|
+
clearTimeout(timer);
|
|
116
|
+
timer = null;
|
|
117
|
+
// A closed leader can leave descendants with independent stdio.
|
|
118
|
+
// Finish the requested cancellation before releasing its escalation.
|
|
119
|
+
signal("SIGKILL");
|
|
120
|
+
}
|
|
113
121
|
},
|
|
114
122
|
};
|
|
115
123
|
}
|
|
@@ -12,7 +12,7 @@ import { DEFAULT_DELEGATION_PERMISSION_TIMEOUT_MS } from "../core/defaults.js";
|
|
|
12
12
|
import { loadDomains } from "../core/domain-loader.js";
|
|
13
13
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
14
14
|
import { expandInlineFileReferencesAsync } from "../core/file-references.js";
|
|
15
|
-
import { setGitCommitAttributionEnabled } from "../core/git-commit-attribution.js";
|
|
15
|
+
import { setCommitDecisionRefsProvider, setGitCommitAttributionEnabled } from "../core/git-commit-attribution.js";
|
|
16
16
|
import { configureGuardrails, guardrailValuesFromSettings } from "../core/guardrails.js";
|
|
17
17
|
import { HEADLESS_PERMISSION_DENIED_REASON } from "../core/headless-permission.js";
|
|
18
18
|
import { rememberRecentModel } from "../core/recent-models.js";
|
|
@@ -162,7 +162,7 @@ import { collectSessionEntries } from "../domains/session/compaction/session-ent
|
|
|
162
162
|
import { estimateTokens } from "../domains/session/compaction/tokens.js";
|
|
163
163
|
import { ceilChars } from "../domains/session/context-accounting.js";
|
|
164
164
|
import type { SessionContract, SessionMeta } from "../domains/session/contract.js";
|
|
165
|
-
import { createDecisionBoardStore } from "../domains/session/decision-board.js";
|
|
165
|
+
import { activeDecisionRefs, createDecisionBoardStore } from "../domains/session/decision-board.js";
|
|
166
166
|
import type { CompactionSummaryEntry, CompactionTrigger, SessionEntry } from "../domains/session/entries.js";
|
|
167
167
|
import { SessionDomainModule } from "../domains/session/index.js";
|
|
168
168
|
import {
|
|
@@ -178,6 +178,7 @@ import { createTaskBoardStore } from "../domains/session/task-board.js";
|
|
|
178
178
|
import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
|
|
179
179
|
import { type ShareContract, ShareDomainModule } from "../domains/share/index.js";
|
|
180
180
|
import { ToolchainDomainModule } from "../domains/toolchain/index.js";
|
|
181
|
+
import { activeUserTaskAcceptance } from "../domains/user-tasks/active-acceptance.js";
|
|
181
182
|
import { createUserTasksStore } from "../domains/user-tasks/store.js";
|
|
182
183
|
import { type AcpSafeSettingsPatch, type AcpSafeSettingsSnapshot, serveClioAcpAgent } from "../engine/acp/server.js";
|
|
183
184
|
import { createStdioServerTransport } from "../engine/acp/transport.js";
|
|
@@ -1550,6 +1551,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1550
1551
|
if (resources) {
|
|
1551
1552
|
middleware.registerHook(
|
|
1552
1553
|
createMarketplaceOfferRegistration({
|
|
1554
|
+
interactive,
|
|
1553
1555
|
listInstalledSkillNames: () => resources.skills(process.cwd()).items.map((skill) => skill.name),
|
|
1554
1556
|
listMarketplaceEntries: () => discoverMarketplaceSkills({ cwd: process.cwd() }).skills,
|
|
1555
1557
|
installEntry: (entry, scope) => {
|
|
@@ -1627,6 +1629,9 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1627
1629
|
session.appendEntry(entry);
|
|
1628
1630
|
},
|
|
1629
1631
|
});
|
|
1632
|
+
// Every Clio-spawned commit from this session is stamped with the decisions
|
|
1633
|
+
// active on the board at spawn time, the same way it is stamped as assisted.
|
|
1634
|
+
setCommitDecisionRefsProvider(() => activeDecisionRefs(decisionBoard.snapshot()));
|
|
1630
1635
|
// getSessionId alone never notices a /tree switch: it moves the active
|
|
1631
1636
|
// append point inside the same session, so the id-keyed cache above kept
|
|
1632
1637
|
// showing the abandoned branch's board (issue #94). SessionTurnSwitched is
|
|
@@ -1686,6 +1691,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1686
1691
|
}
|
|
1687
1692
|
: {}),
|
|
1688
1693
|
taskBoard,
|
|
1694
|
+
decisionBoard,
|
|
1695
|
+
getDecisionBoard: () => decisionBoard.snapshot(),
|
|
1689
1696
|
userTasks,
|
|
1690
1697
|
dispatch,
|
|
1691
1698
|
bus,
|
|
@@ -2016,6 +2023,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2016
2023
|
},
|
|
2017
2024
|
resolveRigor: () =>
|
|
2018
2025
|
resolveRigor({ cwd: process.cwd(), override: parseRigorOverride(process.env.CLIO_CODER_RIGOR) }),
|
|
2026
|
+
readActiveAcceptance: (window) =>
|
|
2027
|
+
activeUserTaskAcceptance(userTasks.snapshot(), taskBoard.snapshot(), session.current()?.id ?? null, window),
|
|
2019
2028
|
recordDecision: (record) => safety.audit.recordCompletionContract?.(record),
|
|
2020
2029
|
}),
|
|
2021
2030
|
);
|