@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,22 +1,22 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
discoverAgentRecipes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7UGL4MB5.js";
|
|
5
5
|
import {
|
|
6
6
|
compileFleetExecutionPlan
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-LTIKRKFL.js";
|
|
8
8
|
import {
|
|
9
9
|
loadFleetCommands,
|
|
10
10
|
loadFleetContract,
|
|
11
11
|
renderFleetPrompt
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-OEJSLEPW.js";
|
|
13
13
|
import {
|
|
14
14
|
requestExecutionRole,
|
|
15
15
|
withAttemptRole
|
|
16
16
|
} from "./chunk-H7IXIC72.js";
|
|
17
17
|
import {
|
|
18
18
|
normalizeAgentSpec
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-KFV5L5SK.js";
|
|
20
20
|
import {
|
|
21
21
|
readSettings
|
|
22
22
|
} from "./chunk-GHS5EBTQ.js";
|
|
@@ -105,4 +105,4 @@ function inspectFleet(name, vars) {
|
|
|
105
105
|
export {
|
|
106
106
|
inspectFleet
|
|
107
107
|
};
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-ELWDPP3Y.js.map
|
|
@@ -20,7 +20,7 @@ var import_yaml = __toESM(require_dist(), 1);
|
|
|
20
20
|
import { existsSync } from "node:fs";
|
|
21
21
|
import { isAbsolute, join, normalize, relative } from "node:path";
|
|
22
22
|
var FRONTMATTER_BLOCK = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;
|
|
23
|
-
var LIST_FIELDS = ["sources", "symbols", "tests", "invariants", "validate"];
|
|
23
|
+
var LIST_FIELDS = ["sources", "symbols", "tests", "invariants", "validate", "decisions"];
|
|
24
24
|
var SUMMARY_MAX_CHARS = 240;
|
|
25
25
|
function isRecord(value) {
|
|
26
26
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -92,7 +92,8 @@ ${block}`, { schema: "core", uniqueKeys: true });
|
|
|
92
92
|
symbols: stringList(authored.symbols),
|
|
93
93
|
tests: [],
|
|
94
94
|
invariants: stringList(authored.invariants),
|
|
95
|
-
validate: stringList(authored.validate)
|
|
95
|
+
validate: stringList(authored.validate),
|
|
96
|
+
...authored.decisions === void 0 ? {} : { decisions: stringList(authored.decisions) }
|
|
96
97
|
};
|
|
97
98
|
const unresolvedPaths = [];
|
|
98
99
|
for (const field of ["sources", "tests"]) {
|
|
@@ -113,7 +114,7 @@ function renderList(name, values) {
|
|
|
113
114
|
function renderFrontmatter(metadata) {
|
|
114
115
|
const lines = [`title: ${JSON.stringify(metadata.title)}`];
|
|
115
116
|
if (metadata.summary.length > 0) lines.push(`summary: ${JSON.stringify(metadata.summary)}`);
|
|
116
|
-
for (const field of LIST_FIELDS) lines.push(...renderList(field, metadata[field]));
|
|
117
|
+
for (const field of LIST_FIELDS) lines.push(...renderList(field, metadata[field] ?? []));
|
|
117
118
|
return `---
|
|
118
119
|
${lines.join("\n")}
|
|
119
120
|
---
|
|
@@ -638,4 +639,4 @@ export {
|
|
|
638
639
|
wikiStaleness,
|
|
639
640
|
wikiStalenessAsync
|
|
640
641
|
};
|
|
641
|
-
//# sourceMappingURL=chunk-
|
|
642
|
+
//# sourceMappingURL=chunk-ELZVTCGV.js.map
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
discoverDeclaredChecksAtRoot,
|
|
4
|
+
discoverDeclaredProjectEntriesAtRoot
|
|
5
|
+
} from "./chunk-K6T2ZAMZ.js";
|
|
6
|
+
import {
|
|
7
|
+
printError
|
|
8
|
+
} from "./chunk-JCI2ROMZ.js";
|
|
9
|
+
import {
|
|
10
|
+
DISPATCH_INTENT_TIMEOUT_MIN_MS,
|
|
11
|
+
normalizeIntentExpectedOutputs,
|
|
12
|
+
normalizeIntentVerification
|
|
13
|
+
} from "./chunk-IRXAATOX.js";
|
|
14
|
+
import {
|
|
15
|
+
packageDeclaredCheck
|
|
16
|
+
} from "./chunk-DXKJURES.js";
|
|
17
|
+
import {
|
|
18
|
+
CLIO_PROJECT_DIR
|
|
19
|
+
} from "./chunk-GYV6VZOC.js";
|
|
20
|
+
import {
|
|
21
|
+
atomicWrite
|
|
22
|
+
} from "./chunk-HAXOFFRH.js";
|
|
23
|
+
import {
|
|
24
|
+
init_esm_shims
|
|
25
|
+
} from "./chunk-3R73A4XB.js";
|
|
26
|
+
|
|
27
|
+
// src/cli/tasks.ts
|
|
28
|
+
init_esm_shims();
|
|
29
|
+
|
|
30
|
+
// src/domains/user-tasks/store.ts
|
|
31
|
+
init_esm_shims();
|
|
32
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
33
|
+
import { join } from "node:path";
|
|
34
|
+
|
|
35
|
+
// src/domains/user-tasks/acceptance.ts
|
|
36
|
+
init_esm_shims();
|
|
37
|
+
function normalizeUserTaskAcceptance(raw) {
|
|
38
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
39
|
+
throw new Error("acceptance must be an object");
|
|
40
|
+
}
|
|
41
|
+
const value = raw;
|
|
42
|
+
if (Object.keys(value).some((key) => key !== "expectedOutputs" && key !== "verification")) {
|
|
43
|
+
throw new Error("acceptance contains an unknown field");
|
|
44
|
+
}
|
|
45
|
+
if (!Array.isArray(value.expectedOutputs) || !Array.isArray(value.verification)) {
|
|
46
|
+
throw new Error("acceptance requires expectedOutputs and verification arrays");
|
|
47
|
+
}
|
|
48
|
+
const checks = /* @__PURE__ */ new Map();
|
|
49
|
+
const rawVerification = value.verification.map((entry) => {
|
|
50
|
+
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
51
|
+
throw new Error("acceptance verification must contain check and timeoutMs");
|
|
52
|
+
}
|
|
53
|
+
const item = entry;
|
|
54
|
+
if (Object.keys(item).some((key) => key !== "check" && key !== "timeoutMs")) {
|
|
55
|
+
throw new Error("acceptance verification contains an unknown field");
|
|
56
|
+
}
|
|
57
|
+
if (typeof item.check !== "string" || typeof item.timeoutMs !== "number" || !Number.isSafeInteger(item.timeoutMs) || item.timeoutMs <= 0) {
|
|
58
|
+
throw new Error("acceptance verification requires a check and a positive integer timeoutMs");
|
|
59
|
+
}
|
|
60
|
+
checks.set(item.check.trim(), {
|
|
61
|
+
id: item.check.trim(),
|
|
62
|
+
timeoutMs: Math.max(DISPATCH_INTENT_TIMEOUT_MIN_MS, item.timeoutMs, checks.get(item.check.trim())?.timeoutMs ?? 0)
|
|
63
|
+
});
|
|
64
|
+
return { check: item.check, timeout_ms: item.timeoutMs };
|
|
65
|
+
});
|
|
66
|
+
const expectedOutputs = normalizeIntentExpectedOutputs(value.expectedOutputs);
|
|
67
|
+
if (!Array.isArray(expectedOutputs))
|
|
68
|
+
throw new Error(expectedOutputs.ok ? "invalid acceptance outputs" : expectedOutputs.message);
|
|
69
|
+
const verification = normalizeIntentVerification(rawVerification, checks);
|
|
70
|
+
if (!Array.isArray(verification))
|
|
71
|
+
throw new Error(verification.ok ? "invalid acceptance verification" : verification.message);
|
|
72
|
+
return { expectedOutputs, verification };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// src/domains/user-tasks/store.ts
|
|
76
|
+
var USER_TASKS_FILE_VERSION = 1;
|
|
77
|
+
var USER_TASKS_RELATIVE_PATH = `${CLIO_PROJECT_DIR}/user-tasks.json`;
|
|
78
|
+
var UserTasksStoreError = class extends Error {
|
|
79
|
+
constructor(message, options) {
|
|
80
|
+
super(message, options);
|
|
81
|
+
this.name = "UserTasksStoreError";
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
var USER_TASK_STATUSES = ["open", "handed", "picked", "done", "dropped"];
|
|
85
|
+
var FILE_KEYS = /* @__PURE__ */ new Set(["version", "nextId", "tasks"]);
|
|
86
|
+
var TASK_KEYS = /* @__PURE__ */ new Set([
|
|
87
|
+
"id",
|
|
88
|
+
"title",
|
|
89
|
+
"note",
|
|
90
|
+
"acceptance",
|
|
91
|
+
"status",
|
|
92
|
+
"createdAt",
|
|
93
|
+
"updatedAt",
|
|
94
|
+
"handedSessionId",
|
|
95
|
+
"boardTaskId"
|
|
96
|
+
]);
|
|
97
|
+
function isRecord(value) {
|
|
98
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
99
|
+
}
|
|
100
|
+
function hasOnlyKeys(value, allowed) {
|
|
101
|
+
return Object.keys(value).every((key) => allowed.has(key));
|
|
102
|
+
}
|
|
103
|
+
function isOptionalString(value) {
|
|
104
|
+
return value === void 0 || typeof value === "string";
|
|
105
|
+
}
|
|
106
|
+
function isUserTask(value) {
|
|
107
|
+
if (!isRecord(value) || !hasOnlyKeys(value, TASK_KEYS)) return false;
|
|
108
|
+
if (value.acceptance !== void 0) {
|
|
109
|
+
try {
|
|
110
|
+
normalizeUserTaskAcceptance(value.acceptance);
|
|
111
|
+
} catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return typeof value.id === "string" && /^u[1-9]\d*$/.test(value.id) && typeof value.title === "string" && value.title.trim().length > 0 && typeof value.status === "string" && USER_TASK_STATUSES.includes(value.status) && typeof value.createdAt === "string" && typeof value.updatedAt === "string" && isOptionalString(value.note) && isOptionalString(value.handedSessionId) && isOptionalString(value.boardTaskId);
|
|
116
|
+
}
|
|
117
|
+
function parseFile(body, path) {
|
|
118
|
+
let parsed;
|
|
119
|
+
try {
|
|
120
|
+
parsed = JSON.parse(body);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
throw new UserTasksStoreError(`user tasks file is corrupt JSON: ${path}`, { cause: error });
|
|
123
|
+
}
|
|
124
|
+
if (!isRecord(parsed) || !hasOnlyKeys(parsed, FILE_KEYS)) {
|
|
125
|
+
throw new UserTasksStoreError(`user tasks file has an invalid top-level shape: ${path}`);
|
|
126
|
+
}
|
|
127
|
+
if (parsed.version !== USER_TASKS_FILE_VERSION || !Number.isSafeInteger(parsed.nextId) || parsed.nextId < 1 || !Array.isArray(parsed.tasks) || !parsed.tasks.every(isUserTask)) {
|
|
128
|
+
throw new UserTasksStoreError(`user tasks file failed schema validation: ${path}`);
|
|
129
|
+
}
|
|
130
|
+
const ids = /* @__PURE__ */ new Set();
|
|
131
|
+
let maxId = 0;
|
|
132
|
+
for (const task of parsed.tasks) {
|
|
133
|
+
if (ids.has(task.id)) throw new UserTasksStoreError(`user tasks file contains duplicate id ${task.id}: ${path}`);
|
|
134
|
+
ids.add(task.id);
|
|
135
|
+
maxId = Math.max(maxId, Number(task.id.slice(1)));
|
|
136
|
+
}
|
|
137
|
+
if (parsed.nextId <= maxId) {
|
|
138
|
+
throw new UserTasksStoreError(`user tasks file nextId would reuse an existing id: ${path}`);
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
version: USER_TASKS_FILE_VERSION,
|
|
142
|
+
nextId: parsed.nextId,
|
|
143
|
+
tasks: parsed.tasks.map(copyTask)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function copyTask(task) {
|
|
147
|
+
return { ...task, ...task.acceptance ? { acceptance: normalizeUserTaskAcceptance(task.acceptance) } : {} };
|
|
148
|
+
}
|
|
149
|
+
function initialFile() {
|
|
150
|
+
return { version: USER_TASKS_FILE_VERSION, nextId: 1, tasks: [] };
|
|
151
|
+
}
|
|
152
|
+
function createUserTasksStore(deps) {
|
|
153
|
+
const path = join(deps.cwd, USER_TASKS_RELATIVE_PATH);
|
|
154
|
+
const exists = deps.exists ?? existsSync;
|
|
155
|
+
const read = deps.read ?? ((target) => readFileSync(target, "utf8"));
|
|
156
|
+
const write = deps.write ?? ((target, body) => atomicWrite(target, body));
|
|
157
|
+
const now = () => (deps.now?.() ?? /* @__PURE__ */ new Date()).toISOString();
|
|
158
|
+
const load = () => {
|
|
159
|
+
if (!exists(path)) return initialFile();
|
|
160
|
+
try {
|
|
161
|
+
return parseFile(read(path), path);
|
|
162
|
+
} catch (error) {
|
|
163
|
+
if (error instanceof UserTasksStoreError) throw error;
|
|
164
|
+
throw new UserTasksStoreError(`could not read user tasks file: ${path}`, { cause: error });
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const save = (file) => {
|
|
168
|
+
try {
|
|
169
|
+
write(path, `${JSON.stringify(file, null, 2)}
|
|
170
|
+
`);
|
|
171
|
+
} catch (error) {
|
|
172
|
+
throw new UserTasksStoreError(`could not write user tasks file: ${path}`, { cause: error });
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
const mutate = (id, allowed, status, sessionId) => {
|
|
176
|
+
const file = load();
|
|
177
|
+
const index = file.tasks.findIndex((task) => task.id === id);
|
|
178
|
+
const current = file.tasks[index];
|
|
179
|
+
if (!current) throw new UserTasksStoreError(`operator task ${id} was not found`);
|
|
180
|
+
if (!allowed.includes(current.status)) {
|
|
181
|
+
throw new UserTasksStoreError(`operator task ${id} is ${current.status}; it cannot move to ${status}`);
|
|
182
|
+
}
|
|
183
|
+
const updated = { ...current, status, updatedAt: now() };
|
|
184
|
+
if (status === "handed" && sessionId) updated.handedSessionId = sessionId;
|
|
185
|
+
file.tasks[index] = updated;
|
|
186
|
+
save(file);
|
|
187
|
+
return copyTask(updated);
|
|
188
|
+
};
|
|
189
|
+
const recordLink = (id, status, sessionId, boardTaskId) => {
|
|
190
|
+
const file = load();
|
|
191
|
+
const index = file.tasks.findIndex((task) => task.id === id);
|
|
192
|
+
const current = file.tasks[index];
|
|
193
|
+
if (!current) throw new UserTasksStoreError(`operator task ${id} was not found`);
|
|
194
|
+
if (current.status === "done" || current.status === "dropped") {
|
|
195
|
+
throw new UserTasksStoreError(`operator task ${id} is ${current.status}; it cannot move to ${status}`);
|
|
196
|
+
}
|
|
197
|
+
const updated = {
|
|
198
|
+
...current,
|
|
199
|
+
status,
|
|
200
|
+
updatedAt: now(),
|
|
201
|
+
handedSessionId: sessionId,
|
|
202
|
+
boardTaskId
|
|
203
|
+
};
|
|
204
|
+
file.tasks[index] = updated;
|
|
205
|
+
save(file);
|
|
206
|
+
return copyTask(updated);
|
|
207
|
+
};
|
|
208
|
+
return {
|
|
209
|
+
path,
|
|
210
|
+
snapshot() {
|
|
211
|
+
return load().tasks.map(copyTask);
|
|
212
|
+
},
|
|
213
|
+
get(id) {
|
|
214
|
+
const task = load().tasks.find((candidate) => candidate.id === id);
|
|
215
|
+
return task ? copyTask(task) : null;
|
|
216
|
+
},
|
|
217
|
+
add(title, note, acceptance) {
|
|
218
|
+
const normalizedAcceptance = acceptance === void 0 ? void 0 : normalizeAcceptance(acceptance);
|
|
219
|
+
const normalizedTitle = title.trim();
|
|
220
|
+
if (normalizedTitle.length === 0) throw new UserTasksStoreError("operator task title cannot be empty");
|
|
221
|
+
const normalizedNote = note?.trim();
|
|
222
|
+
const file = load();
|
|
223
|
+
const timestamp = now();
|
|
224
|
+
const task = {
|
|
225
|
+
id: `u${file.nextId}`,
|
|
226
|
+
title: normalizedTitle,
|
|
227
|
+
...normalizedNote ? { note: normalizedNote } : {},
|
|
228
|
+
...normalizedAcceptance ? { acceptance: normalizedAcceptance } : {},
|
|
229
|
+
status: "open",
|
|
230
|
+
createdAt: timestamp,
|
|
231
|
+
updatedAt: timestamp
|
|
232
|
+
};
|
|
233
|
+
file.nextId += 1;
|
|
234
|
+
file.tasks.push(task);
|
|
235
|
+
save(file);
|
|
236
|
+
return copyTask(task);
|
|
237
|
+
},
|
|
238
|
+
setAcceptance(id, acceptance) {
|
|
239
|
+
const normalized = normalizeAcceptance(acceptance);
|
|
240
|
+
const file = load();
|
|
241
|
+
const task = file.tasks.find((item) => item.id === id);
|
|
242
|
+
if (!task) throw new UserTasksStoreError(`operator task ${id} was not found`);
|
|
243
|
+
task.acceptance = normalized;
|
|
244
|
+
task.updatedAt = now();
|
|
245
|
+
save(file);
|
|
246
|
+
return copyTask(task);
|
|
247
|
+
},
|
|
248
|
+
hand(id, sessionId) {
|
|
249
|
+
return mutate(id, ["open"], "handed", sessionId);
|
|
250
|
+
},
|
|
251
|
+
done(id) {
|
|
252
|
+
return mutate(id, ["open", "handed", "picked"], "done");
|
|
253
|
+
},
|
|
254
|
+
drop(id) {
|
|
255
|
+
return mutate(id, ["open", "handed", "picked"], "dropped");
|
|
256
|
+
},
|
|
257
|
+
recordPicked(id, sessionId, boardTaskId) {
|
|
258
|
+
return recordLink(id, "picked", sessionId, boardTaskId);
|
|
259
|
+
},
|
|
260
|
+
recordDone(id, sessionId, boardTaskId) {
|
|
261
|
+
return recordLink(id, "done", sessionId, boardTaskId);
|
|
262
|
+
},
|
|
263
|
+
reconcile(links, sessionId) {
|
|
264
|
+
const file = load();
|
|
265
|
+
let changed = false;
|
|
266
|
+
for (const [index, current] of file.tasks.entries()) {
|
|
267
|
+
if (current.status === "done" || current.status === "dropped") continue;
|
|
268
|
+
const candidates = links.filter((link2) => link2.userTaskId === current.id);
|
|
269
|
+
const completed = candidates.find((link2) => link2.status === "completed");
|
|
270
|
+
const open = candidates.find((link2) => link2.status === "active" || link2.status === "pending");
|
|
271
|
+
const link = completed ?? open;
|
|
272
|
+
if (link) {
|
|
273
|
+
const status = completed ? "done" : "picked";
|
|
274
|
+
if (current.status !== status || current.boardTaskId !== link.boardTaskId || current.handedSessionId !== sessionId) {
|
|
275
|
+
file.tasks[index] = {
|
|
276
|
+
...current,
|
|
277
|
+
status,
|
|
278
|
+
boardTaskId: link.boardTaskId,
|
|
279
|
+
handedSessionId: sessionId,
|
|
280
|
+
updatedAt: now()
|
|
281
|
+
};
|
|
282
|
+
changed = true;
|
|
283
|
+
}
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (current.status === "picked" && current.handedSessionId === sessionId) {
|
|
287
|
+
const repaired = { ...current, status: "handed", updatedAt: now() };
|
|
288
|
+
delete repaired.boardTaskId;
|
|
289
|
+
file.tasks[index] = repaired;
|
|
290
|
+
changed = true;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (changed) save(file);
|
|
294
|
+
return file.tasks.map(copyTask);
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
function normalizeAcceptance(raw) {
|
|
299
|
+
try {
|
|
300
|
+
return normalizeUserTaskAcceptance(raw);
|
|
301
|
+
} catch (error) {
|
|
302
|
+
throw new UserTasksStoreError(error instanceof Error ? error.message : String(error), { cause: error });
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// src/cli/tasks.ts
|
|
307
|
+
function acceptanceFromTaskFlags(cwd, expectedOutputs, verify) {
|
|
308
|
+
if (expectedOutputs.length === 0 && verify.length === 0) return void 0;
|
|
309
|
+
const discovery = discoverDeclaredChecksAtRoot(cwd, void 0);
|
|
310
|
+
if (!discovery.ok) throw new Error(discovery.reason);
|
|
311
|
+
const checks = new Map(
|
|
312
|
+
discovery.sources.flatMap((source) => source.checks.map((check) => [check.id, check]))
|
|
313
|
+
);
|
|
314
|
+
for (const entry of discoverDeclaredProjectEntriesAtRoot(cwd)) {
|
|
315
|
+
if (entry.kind === "package-script" && !checks.has(entry.id))
|
|
316
|
+
checks.set(entry.id, packageDeclaredCheck(entry.id, entry.path, ".", []));
|
|
317
|
+
}
|
|
318
|
+
const verification = verify.map((value) => {
|
|
319
|
+
const suffix = checks.has(value) ? null : /^(.*):([0-9]+)$/.exec(value);
|
|
320
|
+
const check = suffix?.[1] ?? value;
|
|
321
|
+
if (!checks.has(check))
|
|
322
|
+
throw new Error(
|
|
323
|
+
`Unknown verification check '${check}'. Known ids: ${[...checks.keys()].sort().join(", ") || "(none)"}`
|
|
324
|
+
);
|
|
325
|
+
return { check, ...suffix ? { timeout_ms: Number(suffix[2]) } : {} };
|
|
326
|
+
});
|
|
327
|
+
const outputs = normalizeIntentExpectedOutputs(expectedOutputs);
|
|
328
|
+
if (!Array.isArray(outputs)) throw new Error(outputs.ok ? "invalid expected outputs" : outputs.message);
|
|
329
|
+
const normalized = normalizeIntentVerification(verification, checks);
|
|
330
|
+
if (!Array.isArray(normalized)) throw new Error(normalized.ok ? "invalid verification" : normalized.message);
|
|
331
|
+
return { expectedOutputs: outputs, verification: normalized };
|
|
332
|
+
}
|
|
333
|
+
var HELP = `Usage:
|
|
334
|
+
clio-coder tasks [list]
|
|
335
|
+
clio-coder tasks add [--expect <path>] [--verify <checkId>[:timeoutMs]] <text>
|
|
336
|
+
clio-coder tasks hand|done|drop <uN>
|
|
337
|
+
|
|
338
|
+
--expect and --verify are repeatable. Check ids must be declared in package.json or .clio-coder/verifiers.yaml.`;
|
|
339
|
+
function runTasksCommand(args) {
|
|
340
|
+
try {
|
|
341
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
342
|
+
console.log(HELP);
|
|
343
|
+
return 0;
|
|
344
|
+
}
|
|
345
|
+
const store = createUserTasksStore({ cwd: process.cwd() });
|
|
346
|
+
const [action = "list", ...rest] = args;
|
|
347
|
+
if (action === "add") {
|
|
348
|
+
const expected = [], verify = [], title = [];
|
|
349
|
+
for (let index = 0; index < rest.length; index++) {
|
|
350
|
+
const token = rest[index] ?? "";
|
|
351
|
+
if (token === "--") {
|
|
352
|
+
title.push(...rest.slice(index + 1));
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
if (token === "--expect" || token === "--verify") {
|
|
356
|
+
const value = rest[++index];
|
|
357
|
+
if (!value || value.startsWith("--")) throw new Error(`${token} requires a value`);
|
|
358
|
+
(token === "--expect" ? expected : verify).push(value);
|
|
359
|
+
} else if (token.startsWith("--")) throw new Error(`Unknown flag ${token}`);
|
|
360
|
+
else title.push(token);
|
|
361
|
+
}
|
|
362
|
+
const task = store.add(title.join(" "), void 0, acceptanceFromTaskFlags(process.cwd(), expected, verify));
|
|
363
|
+
console.log(`logged operator task ${task.id}: ${task.title}`);
|
|
364
|
+
} else if (action === "list" && rest.length === 0) {
|
|
365
|
+
console.log(JSON.stringify(store.snapshot(), null, 2));
|
|
366
|
+
} else if ((action === "hand" || action === "done" || action === "drop") && rest.length === 1) {
|
|
367
|
+
console.log(JSON.stringify(store[action](rest[0] ?? ""), null, 2));
|
|
368
|
+
} else throw new Error(HELP);
|
|
369
|
+
return 0;
|
|
370
|
+
} catch (error) {
|
|
371
|
+
printError(error instanceof Error ? error.message : String(error));
|
|
372
|
+
return 1;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export {
|
|
377
|
+
createUserTasksStore,
|
|
378
|
+
acceptanceFromTaskFlags,
|
|
379
|
+
runTasksCommand
|
|
380
|
+
};
|
|
381
|
+
//# sourceMappingURL=chunk-EXLD33WO.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
|
appendOutOfTurnUsageRow
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JT2RFCC5.js";
|
|
5
5
|
import {
|
|
6
6
|
extractReasoningTokens
|
|
7
7
|
} from "./chunk-NZMNUPZZ.js";
|
|
@@ -98,4 +98,4 @@ export {
|
|
|
98
98
|
recordFailedCompactionCalls,
|
|
99
99
|
summarizeFailedCompactionUsage
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
101
|
+
//# sourceMappingURL=chunk-FEAXX7B6.js.map
|