@iowarp/clio-coder 0.3.4 → 0.3.7
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 +65 -2
- package/CONTRIBUTING.md +6 -6
- package/README.md +16 -5
- package/dist/{acp-S5R4RR5B.js → acp-SK4MD6MM.js} +11 -11
- package/dist/{agents-P6DMMVZY.js → agents-2FN2K6ME.js} +33 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-2XCZLPKS.js → auth-QIYZWM5I.js} +15 -15
- package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
- package/dist/{chunk-VAWWTKDP.js → chunk-3HAPLH5M.js} +11 -11
- package/dist/{chunk-YCWGATWI.js → chunk-465YSENW.js} +3 -3
- package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
- package/dist/{chunk-UZHIZC5S.js → chunk-4DWFMQDR.js} +61 -76
- package/dist/{chunk-ZWMF7253.js → chunk-5C3AQNDW.js} +328 -9
- package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
- package/dist/{chunk-WPQLXFOZ.js → chunk-5FR74PWO.js} +3 -2
- package/dist/{chunk-35MKKU5R.js → chunk-5UJ6ECTS.js} +18 -10
- package/dist/{chunk-BRXQQJFP.js → chunk-6M7VS3J3.js} +571 -50
- package/dist/{chunk-QQK64KLB.js → chunk-6TUKSZVF.js} +141 -23
- package/dist/{chunk-N4CZJQRK.js → chunk-AB4XIIVB.js} +8 -6
- package/dist/{chunk-KRPY7NTG.js → chunk-BMWK7ZIZ.js} +14 -20
- package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
- package/dist/{chunk-ZYKPLLNQ.js → chunk-CEYBNUGC.js} +821 -83
- package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
- package/dist/chunk-DJNLUABN.js +843 -0
- package/dist/{chunk-BP4OYD6A.js → chunk-DMD2AGVS.js} +21 -2
- package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
- package/dist/chunk-DQA7QLMD.js +123 -0
- package/dist/chunk-DR52UMZW.js +21 -0
- package/dist/{chunk-3HZ5RWN2.js → chunk-EBEFWSGL.js} +9 -7
- package/dist/{chunk-EDRHSCIE.js → chunk-EELBMBT6.js} +128 -13
- package/dist/{chunk-HV5X7OR2.js → chunk-EOOQZZDE.js} +16 -14
- package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
- package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
- package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
- package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
- package/dist/chunk-GWS3VEIW.js +195 -0
- package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
- package/dist/chunk-HWUFFB6L.js +83 -0
- package/dist/{chunk-X6COSD2O.js → chunk-J7PIKKWC.js} +8 -436
- package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
- package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
- package/dist/{chunk-K6WL7QZT.js → chunk-JTSEDYVQ.js} +7 -7
- package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
- package/dist/chunk-KZ2H5X4G.js +1026 -0
- package/dist/{chunk-A2GZF7DC.js → chunk-LADCF22A.js} +13 -13
- package/dist/chunk-LCGCVYZ4.js +57 -0
- package/dist/chunk-M4AKACEO.js +382 -0
- package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
- package/dist/{chunk-4JUF2NNX.js → chunk-MXI6J5JF.js} +7 -7
- package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
- package/dist/{chunk-TTNYS3EA.js → chunk-OB5HIGJY.js} +1 -1
- package/dist/{chunk-7RXG6QRZ.js → chunk-OBMAI2DP.js} +61 -840
- package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
- package/dist/chunk-PD3MESLB.js +242 -0
- package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
- package/dist/{chunk-VMNQ6OZA.js → chunk-QCTRSGHQ.js} +963 -786
- package/dist/chunk-RVG5JXAL.js +41 -0
- package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
- package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
- package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
- package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
- package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
- package/dist/chunk-UND3GU2L.js +103 -0
- package/dist/{chunk-QQL5RT5M.js → chunk-UUANF5CR.js} +2323 -2114
- package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
- package/dist/chunk-UVDSQ6LW.js +472 -0
- package/dist/{chunk-QWU7ZBO7.js → chunk-VQNODYQ4.js} +215 -56
- package/dist/chunk-VREKEFLL.js +37 -0
- package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
- package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
- package/dist/{chunk-MEQ45TQ4.js → chunk-WJHBC77E.js} +21 -7
- package/dist/{chunk-HXG4IURW.js → chunk-X2KV5FXT.js} +2 -2
- package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
- package/dist/{chunk-2LZI5CAG.js → chunk-XEGB6BCN.js} +228 -36
- package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
- package/dist/{verifiers-4UUM6TEE.js → chunk-YTYFXUI3.js} +121 -372
- package/dist/{chunk-3JLKSKD7.js → chunk-ZGH7FGS5.js} +17 -7
- package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
- package/dist/cli/index.js +34 -32
- package/dist/{clio-J5JIOIDS.js → clio-WBVQEBKO.js} +7 -7
- package/dist/{code-nav-AXCXSBHX.js → code-nav-FGGFIE7L.js} +7 -7
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/{components-KELWS457.js → components-F7OEATSO.js} +5 -5
- package/dist/{config-OEBMIN2U.js → config-TRBL3RCF.js} +48 -41
- package/dist/{configure-PUQOSIXQ.js → configure-OLCVPHNM.js} +17 -17
- package/dist/{context-URSXPBCK.js → context-MJIJ6GOX.js} +12 -12
- package/dist/{context-EKDCKUUZ.js → context-WFPKQSM6.js} +26 -9
- package/dist/{context-MGSE4Z2T.js → context-XEWE3MOJ.js} +44 -37
- package/dist/{context-clear-KDAJRNUK.js → context-clear-KNOS2JPB.js} +44 -37
- package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
- package/dist/{context-working-set-SBKMPPI2.js → context-working-set-EUXAZI6N.js} +14 -13
- package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-B7MTOVKL.js} +321 -60
- package/dist/{docs-2C2LTVT2.js → docs-FLJTIDSE.js} +5 -5
- package/dist/{doctor-7BSE27PJ.js → doctor-RN4YKO2X.js} +15 -15
- package/dist/{eval-IZGDOO4H.js → eval-RUBJVSNQ.js} +52 -236
- package/dist/{evidence-SR7WXB5B.js → evidence-JZNBUOQZ.js} +39 -33
- package/dist/{evolve-K7VE2CBX.js → evolve-FJVC4KKI.js} +39 -33
- package/dist/{extensions-QVDOHDGJ.js → extensions-IQL36S7K.js} +5 -5
- package/dist/{fleet-7XMJNQNF.js → fleet-BDKYJFCP.js} +243 -370
- package/dist/fleet-commands-ZFIWZSB3.js +70 -0
- package/dist/fleet-graph-Y6HPXIVF.js +125 -0
- package/dist/fleet-new-RDVJLHHH.js +48 -0
- package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
- package/dist/fleet-validate-BIYREGIK.js +79 -0
- package/dist/{init-JGNPAYXT.js → init-LQUB5COQ.js} +57 -48
- package/dist/library-NJAHIGG4.js +217 -0
- package/dist/memory-OG6HOYKM.js +472 -0
- package/dist/{models-ZMMLFJNN.js → models-5ZG5XY7J.js} +23 -22
- package/dist/{monitor-2F3T5KHP.js → monitor-TJ7AMTGB.js} +69 -35
- package/dist/{orchestrator-ORHT43JB.js → orchestrator-WZYB54DM.js} +4868 -1189
- package/dist/{paths-UXLN5YYZ.js → paths-XUC7GS6E.js} +5 -5
- package/dist/{reset-NXGTYNUO.js → reset-PXQT45IY.js} +8 -8
- package/dist/{run-RF4WJGMT.js → run-FQ74YF62.js} +82 -62
- package/dist/{share-UT3W6E4M.js → share-FW7SVCL3.js} +34 -10
- package/dist/{skills-PSACKC5Q.js → skills-7E7IRB3R.js} +25 -9
- package/dist/{skills-eval-WJSI55RZ.js → skills-eval-LI75W6OK.js} +43 -35
- package/dist/{targets-PIIRAOYS.js → targets-4CIFKCTW.js} +27 -24
- package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-WUZY7ZV5.js} +5 -4
- package/dist/{uninstall-FZCQCDKC.js → uninstall-7FV7IP4E.js} +5 -5
- package/dist/{upgrade-346TZ6AV.js → upgrade-K2HVIVMQ.js} +21 -20
- package/dist/{usage-6KKXR32N.js → usage-GTZELZQX.js} +159 -59
- package/dist/verifiers-RLAHT27O.js +336 -0
- package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
- package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-ASIFASCN.js} +58 -48
- package/dist/worker/entry.js +98 -84
- package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
- package/docs/README.md +4 -3
- package/docs/acp.md +1 -1
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-placement.md +1 -2
- package/docs/artifact-versions.md +10 -6
- package/docs/built-in-agents.md +26 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +90 -8
- package/docs/configuration-and-targets.md +90 -2
- package/docs/context-engine.md +4 -2
- package/docs/context-working-set.md +4 -4
- package/docs/development-pipeline.md +1 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +4 -4
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +4 -45
- package/docs/evidence-and-memory.md +70 -10
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +4 -1
- package/docs/extensions-and-sharing.md +6 -2
- package/docs/fleet-demo-runbook.md +2 -2
- package/docs/fleet-dispatch.md +224 -11
- package/docs/git-commit-provenance.md +2 -2
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +2 -2
- package/docs/middleware-and-components.md +20 -2
- package/docs/model-catalog.md +1 -1
- package/docs/observability.md +55 -8
- package/docs/proactive-memory.md +26 -16
- package/docs/prompt-envelope-and-tools.md +4 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +83 -65
- package/docs/resource-library.md +59 -0
- package/docs/safety-model.md +29 -7
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +37 -1
- package/docs/skills-marketplace.md +16 -3
- package/docs/tool-usage.md +14 -7
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +38 -4
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +7 -4
- package/src/cli/agents.ts +2 -3
- package/src/cli/argv.ts +14 -1
- package/src/cli/fleet-commands.ts +37 -0
- package/src/cli/fleet-graph.ts +102 -0
- package/src/cli/fleet-new.ts +36 -0
- package/src/cli/fleet-preflight.ts +121 -0
- package/src/cli/fleet-validate.ts +30 -0
- package/src/cli/fleet.ts +188 -335
- package/src/cli/index.ts +4 -2
- package/src/cli/library.ts +190 -0
- package/src/cli/memory.ts +272 -10
- package/src/cli/modes/json-stream.ts +2 -2
- package/src/cli/modes/print.ts +12 -1
- package/src/cli/run.ts +22 -2
- package/src/cli/share.ts +13 -1
- package/src/cli/targets.ts +12 -3
- package/src/cli/usage.ts +160 -20
- package/src/core/bus-events.ts +7 -0
- package/src/core/commit-attribution.ts +4 -4
- package/src/core/config.ts +130 -0
- package/src/core/defaults.ts +81 -0
- package/src/core/response-model-id.ts +134 -0
- package/src/core/toml.ts +62 -0
- package/src/core/workspace-files.ts +0 -1
- package/src/domains/agents/builtins/architect.md +2 -1
- package/src/domains/agents/builtins/oracle.md +33 -0
- package/src/domains/agents/catalog.ts +18 -5
- package/src/domains/agents/fleet-contract.ts +278 -16
- package/src/domains/agents/index.ts +14 -0
- package/src/domains/agents/recipe.ts +54 -14
- package/src/domains/agents/result-contract.ts +242 -5
- package/src/domains/config/classify.ts +4 -0
- package/src/domains/context/bootstrap.ts +36 -27
- package/src/domains/context/project-metadata.ts +19 -63
- package/src/domains/context/prompt-context.ts +8 -0
- package/src/domains/context/working-set/policies/index.ts +3 -4
- package/src/domains/dispatch/active-route-planner.ts +14 -0
- package/src/domains/dispatch/backoff.ts +2 -1
- package/src/domains/dispatch/budget-envelope.ts +396 -0
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
- package/src/domains/dispatch/contract.ts +36 -0
- package/src/domains/dispatch/delegation-plan.ts +167 -0
- package/src/domains/dispatch/execution-plan.ts +76 -5
- package/src/domains/dispatch/execution-role.ts +3 -1
- package/src/domains/dispatch/execution-scheduler.ts +183 -67
- package/src/domains/dispatch/extension.ts +339 -36
- package/src/domains/dispatch/fleet-gate.ts +14 -0
- package/src/domains/dispatch/fleet-plan.ts +63 -3
- package/src/domains/dispatch/fleet-run.ts +737 -0
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/host-verification.ts +178 -0
- package/src/domains/dispatch/index.ts +38 -0
- package/src/domains/dispatch/intent.ts +159 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-integrity.ts +12 -4
- package/src/domains/dispatch/state.ts +37 -3
- package/src/domains/dispatch/types.ts +61 -9
- package/src/domains/dispatch/validation.ts +80 -6
- package/src/domains/dispatch/worker-spawn.ts +14 -3
- package/src/domains/eval/metrics/evidence.ts +0 -116
- package/src/domains/eval/metrics/invariants.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +1 -10
- package/src/domains/eval/runners/external-command.ts +2 -29
- package/src/domains/eval/schema/suite.ts +0 -7
- package/src/domains/eval/suites/run.ts +1 -7
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/memory/index.ts +22 -0
- package/src/domains/memory/operations.ts +58 -1
- package/src/domains/memory/promotion.ts +281 -0
- package/src/domains/memory/prompt-section.ts +25 -5
- package/src/domains/memory/proposal.ts +51 -7
- package/src/domains/memory/task-bank.ts +3 -2
- package/src/domains/memory/task-memory-handoff.ts +181 -24
- package/src/domains/memory/task-memory-policy.ts +3 -1
- package/src/domains/memory/types.ts +37 -0
- package/src/domains/memory/validate.ts +178 -0
- package/src/domains/middleware/index.ts +15 -0
- package/src/domains/middleware/memory-intervention.ts +35 -25
- package/src/domains/middleware/runtime.ts +6 -0
- package/src/domains/middleware/skills-reminder.ts +19 -4
- package/src/domains/middleware/stalled-turn.ts +43 -1
- package/src/domains/middleware/types.ts +10 -0
- package/src/domains/middleware/watchdog.ts +281 -0
- package/src/domains/observability/contract.ts +9 -2
- package/src/domains/observability/cost.ts +31 -4
- package/src/domains/observability/extension.ts +2 -2
- package/src/domains/observability/index.ts +10 -0
- package/src/domains/observability/out-of-turn-usage.ts +223 -0
- package/src/domains/providers/index.ts +3 -0
- package/src/domains/providers/model-discovery.ts +9 -0
- package/src/domains/providers/runtime-resolution.ts +38 -1
- package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
- package/src/domains/providers/types/context-window-slots.ts +18 -0
- package/src/domains/providers/types/runtime-descriptor.ts +3 -1
- package/src/domains/resources/index.ts +20 -0
- package/src/domains/resources/library.ts +326 -0
- package/src/domains/resources/skills/marketplace.ts +37 -12
- package/src/domains/safety/call-target.ts +211 -14
- package/src/domains/safety/decision-presentation.ts +268 -0
- package/src/domains/safety/redaction.ts +73 -0
- package/src/domains/session/context-ledger.ts +10 -1
- package/src/domains/session/decision-board.ts +4 -0
- package/src/domains/session/entries.ts +3 -0
- package/src/domains/session/handoff.ts +629 -0
- package/src/domains/session/history.ts +68 -19
- package/src/domains/session/usage.ts +24 -7
- package/src/domains/share/archive.ts +67 -2
- package/src/engine/acp/event-mapper.ts +7 -0
- package/src/engine/acp/server.ts +29 -2
- package/src/engine/apis/lmstudio.ts +25 -4
- package/src/engine/apis/openai-completions.ts +147 -22
- package/src/engine/claude/sdk-runtime.ts +8 -2
- package/src/engine/claude/tool-safety.ts +13 -0
- package/src/engine/loop-guard.ts +27 -3
- package/src/engine/worker-events.ts +4 -3
- package/src/engine/worker-runtime.ts +59 -54
- package/src/entry/orchestrator.ts +55 -1
- package/src/interactive/bus-notices.ts +26 -0
- package/src/interactive/chat-loop-messages.ts +22 -0
- package/src/interactive/chat-loop.ts +248 -1
- package/src/interactive/chat-renderer.ts +41 -3
- package/src/interactive/clio-editor.ts +44 -7
- package/src/interactive/context-overlay.ts +43 -5
- package/src/interactive/cost-overlay.ts +70 -11
- package/src/interactive/council-dispatch.ts +30 -0
- package/src/interactive/council-grid.ts +213 -0
- package/src/interactive/council.ts +99 -0
- package/src/interactive/dispatch-board.ts +471 -50
- package/src/interactive/fleet-run-preview.ts +307 -0
- package/src/interactive/footer/notifications.ts +219 -0
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/handoff-round.ts +56 -0
- package/src/interactive/interactive-application.ts +49 -2
- package/src/interactive/interactive-event-projection.ts +9 -1
- package/src/interactive/interactive-input-runtime.ts +11 -1
- package/src/interactive/interactive-presentation.ts +11 -1
- package/src/interactive/interactive-slash-runtime.ts +52 -2
- package/src/interactive/interactive-subscriptions.ts +14 -2
- package/src/interactive/memory-overlay.ts +89 -4
- package/src/interactive/oracle.ts +179 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +7 -1
- package/src/interactive/overlay-frame.ts +5 -2
- package/src/interactive/overlay-general-openers.ts +230 -2
- package/src/interactive/overlay-key-routing.ts +58 -2
- package/src/interactive/overlay-lifecycle.ts +52 -5
- package/src/interactive/overlay-permission-lifecycle.ts +33 -8
- package/src/interactive/overlay-resource-openers.ts +11 -3
- package/src/interactive/overlay-session-lifecycle.ts +234 -2
- package/src/interactive/overlay-transitions.ts +11 -0
- package/src/interactive/overlays/ask-user.ts +74 -30
- package/src/interactive/overlays/decisions.ts +3 -1
- package/src/interactive/overlays/fleet-run-approval.ts +208 -0
- package/src/interactive/overlays/handoff-review.ts +185 -0
- package/src/interactive/overlays/library-install-confirm.ts +151 -0
- package/src/interactive/overlays/list-overlay.ts +168 -2
- package/src/interactive/overlays/settings.ts +101 -4
- package/src/interactive/overlays/side-question.ts +139 -0
- package/src/interactive/overlays/skills-hub.ts +401 -15
- package/src/interactive/permission-hint.ts +35 -0
- package/src/interactive/permission-overlay.ts +95 -45
- package/src/interactive/renderers/tool-execution.ts +19 -49
- package/src/interactive/session-last-turn.ts +8 -1
- package/src/interactive/session-usage-reseed.ts +36 -10
- package/src/interactive/side-question.ts +171 -0
- package/src/interactive/slash-commands.ts +434 -7
- package/src/interactive/slash-spec.ts +19 -6
- package/src/interactive/status/summary.ts +5 -0
- package/src/interactive/status/types.ts +5 -0
- package/src/interactive/terminal-lease.ts +1 -0
- package/src/interactive/theme/tokens.ts +30 -0
- package/src/interactive/turn-context.ts +96 -23
- package/src/interactive/turn-middleware.ts +16 -1
- package/src/interactive/turn-runtime.ts +37 -8
- package/src/interactive/turn-state.ts +3 -0
- package/src/interactive/watchdog-run.ts +75 -0
- package/src/interactive/worker-progress.ts +440 -0
- package/src/interactive/worker-share.ts +56 -1
- package/src/interactive/worker-stream.ts +58 -110
- package/src/tools/agent-tools.ts +28 -3
- package/src/tools/ask-user.ts +21 -1
- package/src/tools/bootstrap.ts +3 -0
- package/src/tools/compete-worktrees.ts +13 -79
- package/src/tools/context/index.ts +2 -2
- package/src/tools/dispatch-admission.ts +242 -8
- package/src/tools/dispatch-arguments.ts +65 -1
- package/src/tools/dispatch-event-text.ts +19 -0
- package/src/tools/dispatch-plan.ts +136 -6
- package/src/tools/dispatch-runner.ts +319 -13
- package/src/tools/dispatch-types.ts +20 -1
- package/src/tools/dispatch.ts +96 -3
- package/src/tools/monitor.ts +31 -0
- package/src/tools/profiles.ts +18 -4
- package/src/tools/registry.ts +15 -5
- package/src/tools/result-disposition.ts +156 -0
- package/src/tools/result-shaping.ts +59 -1
- package/src/tools/task-worktree.ts +238 -0
- package/src/tools/verify/authoring.ts +116 -55
- package/src/tools/verify/scripts.ts +62 -0
- package/src/tools/worker-evidence.ts +21 -1
- package/src/worker/spec-contract.ts +44 -3
- package/dist/chunk-EFADSJET.js +0 -18
- package/dist/chunk-HC4CLZ2Y.js +0 -68
- package/dist/memory-4ALKDJ4Q.js +0 -246
- package/src/domains/eval/metrics/chaos-stream.ts +0 -93
|
@@ -47,18 +47,16 @@ function truncateTail2(content, options = {}) {
|
|
|
47
47
|
return truncateTail(content, withClioDefaults(options));
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
// src/tools/observation.ts
|
|
51
|
-
init_esm_shims();
|
|
52
|
-
|
|
53
50
|
// src/tools/result-shaping.ts
|
|
54
51
|
init_esm_shims();
|
|
55
52
|
import { createHash as createHash2 } from "node:crypto";
|
|
56
|
-
import { mkdirSync, writeFileSync } from "node:fs";
|
|
53
|
+
import { mkdirSync, readdirSync, rmdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
57
54
|
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
58
55
|
|
|
59
56
|
// src/tools/result-disposition.ts
|
|
60
57
|
init_esm_shims();
|
|
61
58
|
import { createHash } from "node:crypto";
|
|
59
|
+
var TOOL_RESULT_DIGEST_MAX_BYTES = 240;
|
|
62
60
|
var ESSENTIAL_DETAIL_KEYS = /* @__PURE__ */ new Set([
|
|
63
61
|
"aborted",
|
|
64
62
|
"continuation",
|
|
@@ -158,6 +156,13 @@ function utf8Suffix(text, maxBytes) {
|
|
|
158
156
|
function capUtf8(text, maxBytes) {
|
|
159
157
|
return byteLength(text) <= maxBytes ? text : utf8Prefix(text, maxBytes);
|
|
160
158
|
}
|
|
159
|
+
function capDigestUtf8(text, maxBytes) {
|
|
160
|
+
if (byteLength(text) <= maxBytes) return text;
|
|
161
|
+
const marker = "\u2026";
|
|
162
|
+
const markerBytes = byteLength(marker);
|
|
163
|
+
if (markerBytes >= maxBytes) return utf8Prefix(text, maxBytes);
|
|
164
|
+
return `${utf8Prefix(text, maxBytes - markerBytes).trimEnd()}${marker}`;
|
|
165
|
+
}
|
|
161
166
|
function boundedToolResultExcerpt(text, maxBytes, bias = "head-tail") {
|
|
162
167
|
if (maxBytes <= 0) return "";
|
|
163
168
|
if (byteLength(text) <= maxBytes) return text;
|
|
@@ -349,6 +354,105 @@ ${trailer}`;
|
|
|
349
354
|
truncated: byteLength(header) + 1 + byteLength(body) > maxBytes || !capturedTextIsComplete
|
|
350
355
|
};
|
|
351
356
|
}
|
|
357
|
+
var DIGEST_FACT_KEYS = [
|
|
358
|
+
"outcome",
|
|
359
|
+
"exitCode",
|
|
360
|
+
"timedOut",
|
|
361
|
+
"aborted",
|
|
362
|
+
"outputCapped",
|
|
363
|
+
"signal",
|
|
364
|
+
"status",
|
|
365
|
+
"error",
|
|
366
|
+
"decision",
|
|
367
|
+
"next"
|
|
368
|
+
];
|
|
369
|
+
function digestFactText(details) {
|
|
370
|
+
if (details === void 0) return "";
|
|
371
|
+
const facts = [];
|
|
372
|
+
for (const key of DIGEST_FACT_KEYS) {
|
|
373
|
+
if (details[key] !== void 0) facts.push(`${key}=${stableJson(details[key])}`);
|
|
374
|
+
}
|
|
375
|
+
return facts.join(" ");
|
|
376
|
+
}
|
|
377
|
+
function projectionBody(input, projection) {
|
|
378
|
+
if (projection.appliedMode === "metadata-only") return "";
|
|
379
|
+
if (projection.appliedMode === "full") {
|
|
380
|
+
const trailer = fullTrailer(input);
|
|
381
|
+
return trailer.length > 0 && projection.text.endsWith(`
|
|
382
|
+
|
|
383
|
+
${trailer}`) ? projection.text.slice(0, -(trailer.length + 2)) : projection.text;
|
|
384
|
+
}
|
|
385
|
+
const header = contextHeader(input, projection.appliedMode, projection.truncated, projection.summaryProvenance);
|
|
386
|
+
const prefix = `${header}
|
|
387
|
+
`;
|
|
388
|
+
return projection.text.startsWith(prefix) ? projection.text.slice(prefix.length) : "";
|
|
389
|
+
}
|
|
390
|
+
function digestText(status, facts, body, redactions, maxBytes) {
|
|
391
|
+
const tally = createRedactionTally();
|
|
392
|
+
const safeStatus = redactSecretsText(status, tally);
|
|
393
|
+
const safeFacts = redactSecretsText(facts, tally);
|
|
394
|
+
const statusAndFacts = [safeStatus, safeFacts].filter((value) => value.length > 0).join(" ");
|
|
395
|
+
const bodyBudget = Math.max(0, maxBytes - byteLength(statusAndFacts) - 2);
|
|
396
|
+
const selected = deterministicDiagnosticSummary(body, bodyBudget, true);
|
|
397
|
+
const candidate = [statusAndFacts, selected.text.replace(/\s+/gu, " ").trim()].filter((value) => value.length > 0).join("; ");
|
|
398
|
+
return {
|
|
399
|
+
text: capDigestUtf8(candidate, maxBytes),
|
|
400
|
+
redactions: redactions + tally.count + selected.redactions
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
function deterministicToolResultDigest(input, maxBytes = TOOL_RESULT_DIGEST_MAX_BYTES) {
|
|
404
|
+
const projection = projectToolResultContext(input);
|
|
405
|
+
const status = [
|
|
406
|
+
`kind=${input.kind}`,
|
|
407
|
+
`mode=${projection.appliedMode}`,
|
|
408
|
+
`truncated=${String(projection.truncated)}`,
|
|
409
|
+
...projection.appliedMode === "metadata-only" || projection.truncated ? [`capturedBytes=${input.capturedBytes}`] : []
|
|
410
|
+
].join(" ");
|
|
411
|
+
const digest = digestText(
|
|
412
|
+
status,
|
|
413
|
+
digestFactText(input.details),
|
|
414
|
+
projectionBody(input, projection),
|
|
415
|
+
projection.summaryProvenance?.redactions ?? 0,
|
|
416
|
+
Math.max(1, Math.floor(maxBytes))
|
|
417
|
+
);
|
|
418
|
+
return {
|
|
419
|
+
text: digest.text,
|
|
420
|
+
provenance: {
|
|
421
|
+
producer: "code",
|
|
422
|
+
source: "canonical-result-disposition",
|
|
423
|
+
algorithm: "redacted-context-digest-v1",
|
|
424
|
+
contextMode: projection.appliedMode,
|
|
425
|
+
...projection.summaryProvenance === void 0 ? {} : { summaryAlgorithm: projection.summaryProvenance.algorithm },
|
|
426
|
+
...digest.redactions > 0 ? { redactions: digest.redactions } : {}
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
function legacyToolResultDigest(text, options) {
|
|
431
|
+
const maxBytes = Math.max(1, Math.floor(options.maxBytes ?? TOOL_RESULT_DIGEST_MAX_BYTES));
|
|
432
|
+
const fallback = options.outcome === "error" && text.trim().length === 0 ? "an unknown tool error" : text;
|
|
433
|
+
const digest = digestText("", "", fallback, 0, maxBytes);
|
|
434
|
+
return {
|
|
435
|
+
text: digest.text,
|
|
436
|
+
provenance: {
|
|
437
|
+
producer: "code",
|
|
438
|
+
source: "legacy-fallback",
|
|
439
|
+
algorithm: "redacted-legacy-digest-v1",
|
|
440
|
+
...digest.redactions > 0 ? { redactions: digest.redactions } : {}
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
function sanitizeToolResultDigest(digest, maxBytes = TOOL_RESULT_DIGEST_MAX_BYTES) {
|
|
445
|
+
const tally = createRedactionTally();
|
|
446
|
+
const safe = redactSecretsText(digest.text, tally).replace(/\s+/gu, " ").trim();
|
|
447
|
+
const redactions = (digest.provenance.redactions ?? 0) + tally.count;
|
|
448
|
+
return {
|
|
449
|
+
text: capDigestUtf8(safe, Math.max(1, Math.floor(maxBytes))),
|
|
450
|
+
provenance: {
|
|
451
|
+
...digest.provenance,
|
|
452
|
+
...redactions > 0 ? { redactions } : {}
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
}
|
|
352
456
|
function toolResultContextText(result) {
|
|
353
457
|
if (result.modelContext !== void 0) return result.modelContext;
|
|
354
458
|
return result.kind === "ok" ? result.output : result.message;
|
|
@@ -387,6 +491,7 @@ var DEFAULT_TOOL_RESULT_MAX_BYTES = DEFAULT_MAX_BYTES + 2 * 1024;
|
|
|
387
491
|
var RESULT_TRUNCATION_MARKER = "\n[tool result truncated]";
|
|
388
492
|
var RESULT_OFFLOAD_MAX_BYTES = 10 * 1024 * 1024;
|
|
389
493
|
var TAIL_NOTICE_RESERVE_BYTES = 512;
|
|
494
|
+
var TOOL_OFFLOAD_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1e3;
|
|
390
495
|
function mergeDetails(details, resultSize) {
|
|
391
496
|
return { ...details ?? {}, resultSize };
|
|
392
497
|
}
|
|
@@ -401,6 +506,25 @@ function offloadMaxBytesFor(spec) {
|
|
|
401
506
|
const configured = spec.metadata?.resultSizePolicy?.offloadMaxBytes;
|
|
402
507
|
return typeof configured === "number" && Number.isFinite(configured) && configured > 0 ? Math.floor(configured) : RESULT_OFFLOAD_MAX_BYTES;
|
|
403
508
|
}
|
|
509
|
+
function toolResultDigestFor(spec, result, requestedDisposition) {
|
|
510
|
+
const text = resultText(result);
|
|
511
|
+
const disposition = normalizeToolResultDisposition(spec, maxBytesFor(spec), requestedDisposition);
|
|
512
|
+
if (disposition === null) {
|
|
513
|
+
const projected = shapeLegacyToolResult(spec, result);
|
|
514
|
+
return legacyToolResultDigest(resultText(projected), { outcome: result.kind });
|
|
515
|
+
}
|
|
516
|
+
const capturedBytes = capturedBytesFor(result, text);
|
|
517
|
+
return deterministicToolResultDigest({
|
|
518
|
+
text,
|
|
519
|
+
kind: result.kind,
|
|
520
|
+
details: result.details,
|
|
521
|
+
disposition,
|
|
522
|
+
capturedBytes,
|
|
523
|
+
displayedBytes: Math.min(capturedBytes, disposition.presentation.maxBytes),
|
|
524
|
+
offloadPath: existingOffloadPath(result.details),
|
|
525
|
+
followUpHint: followUpHint(spec)
|
|
526
|
+
});
|
|
527
|
+
}
|
|
404
528
|
function detailsRecord(details, key) {
|
|
405
529
|
const candidate = details?.[key];
|
|
406
530
|
return candidate !== null && typeof candidate === "object" && !Array.isArray(candidate) ? candidate : null;
|
|
@@ -426,6 +550,33 @@ function offloadBody(text, bytes, maxBytes) {
|
|
|
426
550
|
const prefixBudget = maxBytes - byteLength(notice);
|
|
427
551
|
return `${truncateUtf8(text, Math.max(0, prefixBudget), "")}${notice}`;
|
|
428
552
|
}
|
|
553
|
+
function sweepExpiredToolOffloads(now = Date.now()) {
|
|
554
|
+
const root = join(clioStateDir(), "scratch");
|
|
555
|
+
const cutoff = now - TOOL_OFFLOAD_MAX_AGE_MS;
|
|
556
|
+
let removed = 0;
|
|
557
|
+
try {
|
|
558
|
+
for (const session of readdirSync(root, { withFileTypes: true })) {
|
|
559
|
+
if (!session.isDirectory()) continue;
|
|
560
|
+
const sessionDir = join(root, session.name);
|
|
561
|
+
for (const entry of readdirSync(sessionDir, { withFileTypes: true })) {
|
|
562
|
+
if (!entry.isFile()) continue;
|
|
563
|
+
const path = join(sessionDir, entry.name);
|
|
564
|
+
try {
|
|
565
|
+
if (statSync(path).mtimeMs >= cutoff) continue;
|
|
566
|
+
rmSync(path, { force: true });
|
|
567
|
+
removed += 1;
|
|
568
|
+
} catch {
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
try {
|
|
572
|
+
if (readdirSync(sessionDir).length === 0) rmdirSync(sessionDir);
|
|
573
|
+
} catch {
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
} catch {
|
|
577
|
+
}
|
|
578
|
+
return removed;
|
|
579
|
+
}
|
|
429
580
|
function writeToolOffload(text, context, maxBytes = RESULT_OFFLOAD_MAX_BYTES, digest = createHash2("sha256").update(text).digest("hex")) {
|
|
430
581
|
try {
|
|
431
582
|
const bytes = byteLength(text);
|
|
@@ -673,6 +824,7 @@ function shapeToolResult(spec, result, context, requestedDisposition) {
|
|
|
673
824
|
}
|
|
674
825
|
|
|
675
826
|
// src/tools/observation.ts
|
|
827
|
+
init_esm_shims();
|
|
676
828
|
var OBSERVATION_POLICY_SLACK_BYTES = 2 * 1024;
|
|
677
829
|
var OBSERVE_SELF_CAPS = {
|
|
678
830
|
grepContent: 16 * 1024,
|
|
@@ -904,6 +1056,8 @@ ${limitedBudgetNote(input.reservation)}`;
|
|
|
904
1056
|
|
|
905
1057
|
export {
|
|
906
1058
|
deterministicDiagnosticSummary,
|
|
1059
|
+
legacyToolResultDigest,
|
|
1060
|
+
sanitizeToolResultDigest,
|
|
907
1061
|
toolResultContextText,
|
|
908
1062
|
isDispositionedToolResultError,
|
|
909
1063
|
toolResultPresentationText,
|
|
@@ -913,6 +1067,8 @@ export {
|
|
|
913
1067
|
truncateHead2 as truncateHead,
|
|
914
1068
|
truncateTail2 as truncateTail,
|
|
915
1069
|
DEFAULT_TOOL_RESULT_MAX_BYTES,
|
|
1070
|
+
toolResultDigestFor,
|
|
1071
|
+
sweepExpiredToolOffloads,
|
|
916
1072
|
isSessionOffloadPath,
|
|
917
1073
|
shapeToolResult,
|
|
918
1074
|
OBSERVATION_POLICY_SLACK_BYTES,
|
|
@@ -923,4 +1079,4 @@ export {
|
|
|
923
1079
|
observationBudgetExhausted,
|
|
924
1080
|
finalizeObservation
|
|
925
1081
|
};
|
|
926
|
-
//# sourceMappingURL=chunk-
|
|
1082
|
+
//# sourceMappingURL=chunk-ODFEOB4F.js.map
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
runVectorTool
|
|
4
|
+
} from "./chunk-JNXPYBB4.js";
|
|
5
|
+
import {
|
|
6
|
+
PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
|
|
7
|
+
loadProjectVerifierCatalog,
|
|
8
|
+
packageDeclaredCheck,
|
|
9
|
+
resolveProjectVerifierExecutionCwd
|
|
10
|
+
} from "./chunk-GH5622CP.js";
|
|
11
|
+
import {
|
|
12
|
+
declaredVerificationScripts
|
|
13
|
+
} from "./chunk-UL3WSD3F.js";
|
|
14
|
+
import {
|
|
15
|
+
resolveSafeCwd
|
|
16
|
+
} from "./chunk-D4MDIG46.js";
|
|
17
|
+
import {
|
|
18
|
+
init_esm_shims
|
|
19
|
+
} from "./chunk-3R73A4XB.js";
|
|
20
|
+
|
|
21
|
+
// src/tools/verify/scripts.ts
|
|
22
|
+
init_esm_shims();
|
|
23
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
24
|
+
import path from "node:path";
|
|
25
|
+
function repositoryRelativeCwd(workspaceRoot, resolved) {
|
|
26
|
+
const relative = path.relative(workspaceRoot, resolved);
|
|
27
|
+
return relative.length === 0 ? "." : relative.split(path.sep).join("/");
|
|
28
|
+
}
|
|
29
|
+
function packageTag(id) {
|
|
30
|
+
const separator = id.search(/[:.-]/u);
|
|
31
|
+
return [separator === -1 ? id : id.slice(0, separator)];
|
|
32
|
+
}
|
|
33
|
+
function packageCheckSource(packageRoot, workspaceRoot) {
|
|
34
|
+
const packagePath = path.join(packageRoot, "package.json");
|
|
35
|
+
if (!existsSync(packagePath)) return null;
|
|
36
|
+
const pkg = parsePackageJson(packagePath);
|
|
37
|
+
if (!pkg.ok) return null;
|
|
38
|
+
const cwd = repositoryRelativeCwd(workspaceRoot, packageRoot);
|
|
39
|
+
const checks = declaredVerificationScripts(pkg.scripts).map(
|
|
40
|
+
(id) => packageDeclaredCheck(id, packagePath, cwd, packageTag(id))
|
|
41
|
+
);
|
|
42
|
+
return { kind: "package.json", path: packagePath, checks };
|
|
43
|
+
}
|
|
44
|
+
function discoverDeclaredProjectEntriesAtRoot(workspaceRoot) {
|
|
45
|
+
const entries = [];
|
|
46
|
+
const packagePath = path.join(workspaceRoot, "package.json");
|
|
47
|
+
if (existsSync(packagePath)) {
|
|
48
|
+
const pkg = parsePackageJson(packagePath);
|
|
49
|
+
if (pkg.ok) {
|
|
50
|
+
for (const name of Object.keys(pkg.scripts).sort()) {
|
|
51
|
+
if (typeof pkg.scripts[name] !== "string") continue;
|
|
52
|
+
entries.push({
|
|
53
|
+
id: name,
|
|
54
|
+
command: ["npm", "run", name],
|
|
55
|
+
path: "package.json",
|
|
56
|
+
detail: `package.json script '${name}'`,
|
|
57
|
+
kind: "package-script"
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const relative of ["justfile", "Justfile"]) {
|
|
63
|
+
const filePath = path.join(workspaceRoot, relative);
|
|
64
|
+
if (!existsSync(filePath)) continue;
|
|
65
|
+
const text = readFileSync(filePath, "utf8");
|
|
66
|
+
for (const match of text.matchAll(/^([A-Za-z0-9][A-Za-z0-9_-]*)\s*(?:[^:=\n]*)?:\s*(?:#.*)?$/gmu)) {
|
|
67
|
+
const name = match[1];
|
|
68
|
+
if (name === void 0 || name.startsWith("_")) continue;
|
|
69
|
+
entries.push({
|
|
70
|
+
id: name,
|
|
71
|
+
command: ["just", name],
|
|
72
|
+
path: relative,
|
|
73
|
+
detail: `just recipe '${name}'`,
|
|
74
|
+
kind: "just-recipe"
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
const makePath = path.join(workspaceRoot, "Makefile");
|
|
80
|
+
if (existsSync(makePath)) {
|
|
81
|
+
const text = readFileSync(makePath, "utf8");
|
|
82
|
+
for (const match of text.matchAll(/^([A-Za-z0-9][A-Za-z0-9_.-]*)\s*:(?![=])[^\n]*$/gmu)) {
|
|
83
|
+
const name = match[1];
|
|
84
|
+
if (name === void 0 || name.startsWith(".")) continue;
|
|
85
|
+
entries.push({
|
|
86
|
+
id: name,
|
|
87
|
+
command: ["make", name],
|
|
88
|
+
path: "Makefile",
|
|
89
|
+
detail: `Makefile target '${name}'`,
|
|
90
|
+
kind: "make-target"
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return entries;
|
|
95
|
+
}
|
|
96
|
+
function providerCollision(sources) {
|
|
97
|
+
const seen = /* @__PURE__ */ new Map();
|
|
98
|
+
for (const source of sources) {
|
|
99
|
+
for (const check of source.checks) {
|
|
100
|
+
const prior = seen.get(check.id);
|
|
101
|
+
if (prior !== void 0) {
|
|
102
|
+
return `duplicate declared check id '${check.id}' from ${prior.source.kind} (${prior.source.path}) and ${check.source.kind} (${check.source.path})`;
|
|
103
|
+
}
|
|
104
|
+
seen.set(check.id, check);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
function discoverDeclaredChecksAtRoot(workspaceRoot, cwdArg) {
|
|
110
|
+
let packageRoot;
|
|
111
|
+
try {
|
|
112
|
+
packageRoot = resolveSafeCwd(cwdArg, workspaceRoot);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
115
|
+
}
|
|
116
|
+
const sources = [];
|
|
117
|
+
const packageSource = packageCheckSource(packageRoot, workspaceRoot);
|
|
118
|
+
if (packageSource !== null) sources.push(packageSource);
|
|
119
|
+
const projectCatalog = loadProjectVerifierCatalog(workspaceRoot);
|
|
120
|
+
if (!projectCatalog.ok) return projectCatalog;
|
|
121
|
+
if (projectCatalog.source !== null) sources.push(projectCatalog.source);
|
|
122
|
+
const collision = providerCollision(sources);
|
|
123
|
+
if (collision !== null) return { ok: false, reason: collision };
|
|
124
|
+
return { ok: true, sources };
|
|
125
|
+
}
|
|
126
|
+
function discoverDeclaredChecks(cwdArg) {
|
|
127
|
+
return discoverDeclaredChecksAtRoot(process.cwd(), cwdArg);
|
|
128
|
+
}
|
|
129
|
+
function clonedSources(sources) {
|
|
130
|
+
return sources.map((source) => ({
|
|
131
|
+
kind: source.kind,
|
|
132
|
+
path: source.path,
|
|
133
|
+
checks: source.checks.map((check) => ({
|
|
134
|
+
...check,
|
|
135
|
+
command: [...check.command],
|
|
136
|
+
tags: [...check.tags],
|
|
137
|
+
source: { ...check.source }
|
|
138
|
+
}))
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
function listChecks(cwdArg) {
|
|
142
|
+
const discovery = discoverDeclaredChecks(cwdArg);
|
|
143
|
+
if (!discovery.ok) return { kind: "error", message: `verify: ${discovery.reason}` };
|
|
144
|
+
const lines = [];
|
|
145
|
+
if (discovery.sources.length === 0 || discovery.sources.every((source) => source.checks.length === 0)) {
|
|
146
|
+
lines.push(
|
|
147
|
+
`No declared verification checks found (no package.json verification scripts or ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH} entries).`,
|
|
148
|
+
"Run `clio-coder verifiers author` to inspect declared project tooling, preview exact argv checks, and create the catalog after confirmation."
|
|
149
|
+
);
|
|
150
|
+
} else {
|
|
151
|
+
lines.push("Declared verification checks:");
|
|
152
|
+
for (const source of discovery.sources) {
|
|
153
|
+
lines.push(source.kind === "package.json" ? "package.json:" : `${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH}:`);
|
|
154
|
+
for (const check of source.checks) {
|
|
155
|
+
const tags = check.tags.length > 0 ? ` [${check.tags.join(", ")}]` : "";
|
|
156
|
+
lines.push(`- ${check.id}${tags}: ${check.description}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
lines.push(
|
|
161
|
+
"",
|
|
162
|
+
'Run one with verify(check="<id>"). verify(check="frontend", path=<file>) validates an HTML/CSS/JS artifact.'
|
|
163
|
+
);
|
|
164
|
+
return {
|
|
165
|
+
kind: "ok",
|
|
166
|
+
output: lines.join("\n"),
|
|
167
|
+
details: { sources: clonedSources(discovery.sources) }
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function withDeclaredEvidence(result, check) {
|
|
171
|
+
return {
|
|
172
|
+
...result,
|
|
173
|
+
details: {
|
|
174
|
+
...result.details,
|
|
175
|
+
action: "verify",
|
|
176
|
+
check: check.id,
|
|
177
|
+
source: { ...check.source },
|
|
178
|
+
description: check.description,
|
|
179
|
+
declaredCommand: [...check.command],
|
|
180
|
+
declaredCwd: check.cwd,
|
|
181
|
+
declaredTimeoutMs: check.timeoutMs,
|
|
182
|
+
tags: [...check.tags]
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
async function runProjectCheck(check, options) {
|
|
187
|
+
const [file, ...vector] = check.command;
|
|
188
|
+
if (file === void 0) return { kind: "error", message: `verify: declared check '${check.id}' has empty argv` };
|
|
189
|
+
const cwd = resolveProjectVerifierExecutionCwd(check.cwd, process.cwd());
|
|
190
|
+
if (cwd instanceof Error) return { kind: "error", message: `verify: ${cwd.message}` };
|
|
191
|
+
const result = await runVectorTool("verify", file, vector, { cwd, timeout_ms: check.timeoutMs }, options);
|
|
192
|
+
return withDeclaredEvidence(result, check);
|
|
193
|
+
}
|
|
194
|
+
async function runScriptCheck(check, args, options) {
|
|
195
|
+
let cwd;
|
|
196
|
+
try {
|
|
197
|
+
cwd = resolveSafeCwd(typeof args.cwd === "string" && args.cwd.length > 0 ? args.cwd : void 0, process.cwd());
|
|
198
|
+
} catch (error) {
|
|
199
|
+
return { kind: "error", message: `verify: ${error instanceof Error ? error.message : String(error)}` };
|
|
200
|
+
}
|
|
201
|
+
const packagePath = path.join(cwd, "package.json");
|
|
202
|
+
if (!existsSync(packagePath)) return { kind: "error", message: `verify: package.json not found in ${cwd}` };
|
|
203
|
+
const pkg = parsePackageJson(packagePath);
|
|
204
|
+
if (!pkg.ok) return { kind: "error", message: `verify: ${pkg.reason}` };
|
|
205
|
+
if (!Object.hasOwn(pkg.scripts, check)) {
|
|
206
|
+
const declared = declaredVerificationScripts(pkg.scripts);
|
|
207
|
+
const list = declared.length > 0 ? declared.join(", ") : "(none)";
|
|
208
|
+
return {
|
|
209
|
+
kind: "error",
|
|
210
|
+
message: `verify: package.json has no '${check}' script. Declared verification checks: ${list}.`
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
const extraArgs = Array.isArray(args.args) ? args.args.filter((entry) => typeof entry === "string") : [];
|
|
214
|
+
const vector = ["run", check];
|
|
215
|
+
if (extraArgs.length > 0) vector.push("--", ...extraArgs);
|
|
216
|
+
return runVectorTool("verify", "npm", vector, { ...args, cwd }, options);
|
|
217
|
+
}
|
|
218
|
+
function parsePackageJson(packagePath) {
|
|
219
|
+
try {
|
|
220
|
+
const parsed = JSON.parse(readFileSync(packagePath, "utf8"));
|
|
221
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
222
|
+
return { ok: false, reason: "package.json root must be an object" };
|
|
223
|
+
}
|
|
224
|
+
const scripts = parsed.scripts;
|
|
225
|
+
if (!scripts || typeof scripts !== "object" || Array.isArray(scripts)) {
|
|
226
|
+
return { ok: false, reason: "package.json has no scripts object" };
|
|
227
|
+
}
|
|
228
|
+
return { ok: true, scripts };
|
|
229
|
+
} catch (error) {
|
|
230
|
+
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export {
|
|
235
|
+
discoverDeclaredProjectEntriesAtRoot,
|
|
236
|
+
discoverDeclaredChecksAtRoot,
|
|
237
|
+
discoverDeclaredChecks,
|
|
238
|
+
listChecks,
|
|
239
|
+
runProjectCheck,
|
|
240
|
+
runScriptCheck
|
|
241
|
+
};
|
|
242
|
+
//# sourceMappingURL=chunk-PD3MESLB.js.map
|
|
@@ -65,6 +65,13 @@ function globalFlagPositionHint(arg, command) {
|
|
|
65
65
|
if (usage === void 0) return null;
|
|
66
66
|
return `${arg} is a global option and must come before the subcommand: clio-coder ${usage} ${command} ...`;
|
|
67
67
|
}
|
|
68
|
+
function unknownGlobalOptionError(arg) {
|
|
69
|
+
const bare = arg.replace(/=.*$/u, "");
|
|
70
|
+
if (bare === "--resume" || bare === "--continue" || bare === "-r" || bare === "-c") {
|
|
71
|
+
return `unknown global option: ${arg}. Sessions are resumed from inside the app: start clio-coder, then type /resume to pick one.`;
|
|
72
|
+
}
|
|
73
|
+
return `unknown global option: ${arg}`;
|
|
74
|
+
}
|
|
68
75
|
function extractGlobalFlags(argv, isSubcommand = () => false) {
|
|
69
76
|
const rest = [];
|
|
70
77
|
let apiKey;
|
|
@@ -116,7 +123,7 @@ function extractGlobalFlags(argv, isSubcommand = () => false) {
|
|
|
116
123
|
noSkills,
|
|
117
124
|
skillPaths,
|
|
118
125
|
rest,
|
|
119
|
-
error:
|
|
126
|
+
error: unknownGlobalOptionError(arg),
|
|
120
127
|
...apiKey === void 0 ? {} : { apiKey }
|
|
121
128
|
};
|
|
122
129
|
}
|
|
@@ -140,4 +147,4 @@ export {
|
|
|
140
147
|
globalFlagPositionHint,
|
|
141
148
|
extractGlobalFlags
|
|
142
149
|
};
|
|
143
|
-
//# sourceMappingURL=chunk-
|
|
150
|
+
//# sourceMappingURL=chunk-PPAMZ32Z.js.map
|