@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
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
parseAgentRecipeSchema
|
|
4
|
+
} from "./chunk-UVDSQ6LW.js";
|
|
5
|
+
import {
|
|
6
|
+
parseFleetContract,
|
|
7
|
+
parseFrontmatter
|
|
8
|
+
} from "./chunk-KCMKRQX4.js";
|
|
9
|
+
import {
|
|
10
|
+
assertAgentSpecPolicy,
|
|
11
|
+
normalizeAgentSpec
|
|
12
|
+
} from "./chunk-AOCYTWAV.js";
|
|
2
13
|
import {
|
|
3
14
|
readSettings,
|
|
4
15
|
settingsPath,
|
|
5
16
|
updateSettings
|
|
6
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-UHXRNZ2J.js";
|
|
7
18
|
import {
|
|
8
19
|
DEFAULT_SETTINGS
|
|
9
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-4DGYLA73.js";
|
|
10
21
|
import {
|
|
11
22
|
require_dist
|
|
12
23
|
} from "./chunk-APJ265NV.js";
|
|
@@ -113,11 +124,13 @@ function requestedScopes(scope) {
|
|
|
113
124
|
return [scope ?? "project"];
|
|
114
125
|
}
|
|
115
126
|
function defaultedIncludes(options) {
|
|
116
|
-
const hasExplicitInclude = options.includeContext !== void 0 || options.includePrompts !== void 0 || options.includeSkills !== void 0 || options.includeSettings !== void 0 || options.includeExtensions !== void 0;
|
|
127
|
+
const hasExplicitInclude = options.includeContext !== void 0 || options.includePrompts !== void 0 || options.includeSkills !== void 0 || options.includeAgents !== void 0 || options.includeFleets !== void 0 || options.includeSettings !== void 0 || options.includeExtensions !== void 0;
|
|
117
128
|
return {
|
|
118
129
|
includeContext: hasExplicitInclude ? options.includeContext === true : true,
|
|
119
130
|
includePrompts: hasExplicitInclude ? options.includePrompts === true : true,
|
|
120
131
|
includeSkills: hasExplicitInclude ? options.includeSkills === true : true,
|
|
132
|
+
includeAgents: hasExplicitInclude ? options.includeAgents === true : true,
|
|
133
|
+
includeFleets: hasExplicitInclude ? options.includeFleets === true : true,
|
|
121
134
|
includeSettings: hasExplicitInclude ? options.includeSettings === true : true,
|
|
122
135
|
includeExtensions: hasExplicitInclude ? options.includeExtensions === true : true
|
|
123
136
|
};
|
|
@@ -155,6 +168,18 @@ function createShareArchive(options = {}) {
|
|
|
155
168
|
addTree(files, "skill", scope, root, `${scope}/skills`);
|
|
156
169
|
}
|
|
157
170
|
}
|
|
171
|
+
if (includes.includeAgents) {
|
|
172
|
+
for (const scope of scopes) {
|
|
173
|
+
const root = scope === "user" ? path.join(clioConfigDir(), "agents") : path.join(cwd, ".clio-coder", "agents");
|
|
174
|
+
addTree(files, "agent", scope, root, `${scope}/agents`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (includes.includeFleets) {
|
|
178
|
+
for (const scope of scopes) {
|
|
179
|
+
const root = scope === "user" ? path.join(clioConfigDir(), "fleets") : path.join(cwd, ".clio-coder", "fleets");
|
|
180
|
+
addTree(files, "fleet", scope, root, `${scope}/fleets`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
158
183
|
if (includes.includeExtensions) {
|
|
159
184
|
for (const scope of scopes) {
|
|
160
185
|
const root = scope === "user" ? path.join(clioConfigDir(), "extensions") : path.join(cwd, ".clio-coder", "extensions");
|
|
@@ -201,8 +226,17 @@ function parseArchive(raw) {
|
|
|
201
226
|
throw new Error("share archive manifest is malformed");
|
|
202
227
|
}
|
|
203
228
|
const archive = raw;
|
|
229
|
+
const allowedTypes = /* @__PURE__ */ new Set([
|
|
230
|
+
"project-context",
|
|
231
|
+
"prompt",
|
|
232
|
+
"skill",
|
|
233
|
+
"agent",
|
|
234
|
+
"fleet",
|
|
235
|
+
"settings",
|
|
236
|
+
"extension"
|
|
237
|
+
]);
|
|
204
238
|
for (const file of archive.files) {
|
|
205
|
-
if (!isRecord(file) || typeof file.archivePath !== "string" || typeof file.relativePath !== "string" || typeof file.sha256 !== "string" || file.encoding !== "base64" || typeof file.data !== "string") {
|
|
239
|
+
if (!isRecord(file) || !allowedTypes.has(file.type) || typeof file.archivePath !== "string" || typeof file.relativePath !== "string" || typeof file.sha256 !== "string" || file.encoding !== "base64" || typeof file.data !== "string") {
|
|
206
240
|
throw new Error("share archive file entry is malformed");
|
|
207
241
|
}
|
|
208
242
|
const actual = sha256(decodeArchiveFile(file));
|
|
@@ -244,6 +278,10 @@ function targetRootForFile(entry, options) {
|
|
|
244
278
|
return scope === "user" ? { root: path.join(config, "prompts"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "prompts"), containmentRoot: cwd, scope };
|
|
245
279
|
case "skill":
|
|
246
280
|
return scope === "user" ? { root: path.join(config, "skills"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "skills"), containmentRoot: cwd, scope };
|
|
281
|
+
case "agent":
|
|
282
|
+
return { root: path.join(config, "agents"), containmentRoot: config, scope: "user" };
|
|
283
|
+
case "fleet":
|
|
284
|
+
return { root: path.join(config, "fleets"), containmentRoot: config, scope: "user" };
|
|
247
285
|
case "extension":
|
|
248
286
|
return scope === "user" ? { root: path.join(config, "extensions"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "extensions"), containmentRoot: cwd, scope };
|
|
249
287
|
case "settings":
|
|
@@ -393,6 +431,26 @@ function prepareShareImport(filePath, options = {}) {
|
|
|
393
431
|
}
|
|
394
432
|
for (const targetInfo of preflight.targets) {
|
|
395
433
|
const { entry, target, scope, buffer } = targetInfo;
|
|
434
|
+
if (entry.type === "fleet") {
|
|
435
|
+
try {
|
|
436
|
+
parseFleetContract(buffer.toString("utf8"), target);
|
|
437
|
+
} catch (error) {
|
|
438
|
+
diagnostics.push({ type: "error", message: error instanceof Error ? error.message : String(error), path: target });
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (entry.type === "agent") {
|
|
443
|
+
try {
|
|
444
|
+
const parsed = parseFrontmatter(buffer.toString("utf8"), target);
|
|
445
|
+
const id = path.basename(target, ".md");
|
|
446
|
+
assertAgentSpecPolicy(
|
|
447
|
+
normalizeAgentSpec(parseAgentRecipeSchema({ id, source: "user", filepath: target, ...parsed }))
|
|
448
|
+
);
|
|
449
|
+
} catch (error) {
|
|
450
|
+
diagnostics.push({ type: "error", message: error instanceof Error ? error.message : String(error), path: target });
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
396
454
|
if (entry.type === "settings") {
|
|
397
455
|
diagnostics.push(...settingsPlan(buffer, options));
|
|
398
456
|
actions.push({ action: "settings", type: entry.type, scope, path: target });
|
|
@@ -552,4 +610,4 @@ export {
|
|
|
552
610
|
importShareArchive,
|
|
553
611
|
ShareDomainModule
|
|
554
612
|
};
|
|
555
|
-
//# sourceMappingURL=chunk-
|
|
613
|
+
//# sourceMappingURL=chunk-FOT2FX5J.js.map
|
|
@@ -191,6 +191,7 @@ function buildContextLedger(input) {
|
|
|
191
191
|
model: input.model ?? null,
|
|
192
192
|
contextWindow: window,
|
|
193
193
|
contextWindowSource: input.contextWindowSource ?? null,
|
|
194
|
+
contextWindowSlots: input.contextWindowSlots ?? null,
|
|
194
195
|
usedTokens,
|
|
195
196
|
reserveTokens,
|
|
196
197
|
freeTokens,
|
|
@@ -609,4 +610,4 @@ export {
|
|
|
609
610
|
snapshotInputTokens,
|
|
610
611
|
reconcileSnapshot
|
|
611
612
|
};
|
|
612
|
-
//# sourceMappingURL=chunk-
|
|
613
|
+
//# sourceMappingURL=chunk-GEYXPTRF.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
SAFE_EXEC_DEFAULT_TIMEOUT_MS,
|
|
7
7
|
resolveSafeCwd
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-D4MDIG46.js";
|
|
9
9
|
import {
|
|
10
10
|
require_dist
|
|
11
11
|
} from "./chunk-APJ265NV.js";
|
|
@@ -310,4 +310,4 @@ export {
|
|
|
310
310
|
parseProjectVerifierCatalogText,
|
|
311
311
|
packageDeclaredCheck
|
|
312
312
|
};
|
|
313
|
-
//# sourceMappingURL=chunk-
|
|
313
|
+
//# sourceMappingURL=chunk-GH5622CP.js.map
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
AUTONOMY_EXPOSURES
|
|
4
|
+
} from "./chunk-HWUFFB6L.js";
|
|
2
5
|
import {
|
|
3
6
|
init_esm_shims
|
|
4
7
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -234,7 +237,7 @@ function isSessionEntry(value) {
|
|
|
234
237
|
case "taskLedger":
|
|
235
238
|
return isOptionalString(v.boardId) && Array.isArray(v.goals) && v.goals.every(isTaskLedgerGoal) && Array.isArray(v.subgoals) && v.subgoals.every(isTaskLedgerGoal) && isStringArray(v.activeRunIds) && Array.isArray(v.requiredValidationEvidence) && v.requiredValidationEvidence.every(isTaskLedgerEvidence);
|
|
236
239
|
case "decisionLedger":
|
|
237
|
-
return isString(v.interviewId) && isOneOf(v.interviewStatus, DECISION_INTERVIEW_STATUSES) && isString(v.startedAt) && isString(v.endedAt) && isNumber(v.roundCount) && Number.isInteger(v.roundCount) && v.roundCount >= 0 && isOptionalString(v.summary) && isOptionalString(v.transcriptPath) && Array.isArray(v.decisions) && v.decisions.every(isDecisionRecord);
|
|
240
|
+
return isString(v.interviewId) && isOneOf(v.interviewStatus, DECISION_INTERVIEW_STATUSES) && isString(v.startedAt) && isString(v.endedAt) && isNumber(v.roundCount) && Number.isInteger(v.roundCount) && v.roundCount >= 0 && isOptionalString(v.summary) && isOptionalString(v.transcriptPath) && (v.exposure === void 0 || isOneOf(v.exposure, AUTONOMY_EXPOSURES)) && Array.isArray(v.decisions) && v.decisions.every(isDecisionRecord);
|
|
238
241
|
case "workerRun":
|
|
239
242
|
return isString(v.assignmentId) && isString(v.runId) && isOneOf(v.origin, WORKER_RUN_ORIGINS) && isString(v.agentId) && isWorkerRunRuntime(v.runtime) && isOptionalString(v.parentToolCallId);
|
|
240
243
|
case "contextEviction":
|
|
@@ -255,4 +258,4 @@ export {
|
|
|
255
258
|
isSessionHeader,
|
|
256
259
|
isSessionEntry
|
|
257
260
|
};
|
|
258
|
-
//# sourceMappingURL=chunk-
|
|
261
|
+
//# sourceMappingURL=chunk-GOXNB3AO.js.map
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
withStateFileLock,
|
|
4
|
+
withStateFileLockSync
|
|
5
|
+
} from "./chunk-IKCO5N3L.js";
|
|
6
|
+
import {
|
|
7
|
+
safeResourceWrite
|
|
8
|
+
} from "./chunk-WEPFGWHJ.js";
|
|
9
|
+
import {
|
|
10
|
+
init_esm_shims
|
|
11
|
+
} from "./chunk-3R73A4XB.js";
|
|
12
|
+
|
|
13
|
+
// src/domains/observability/evidence-index.ts
|
|
14
|
+
init_esm_shims();
|
|
15
|
+
import { readFileSync } from "node:fs";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
var MAX_EVIDENCE_INDEX_ROWS = 1e3;
|
|
18
|
+
var EVIDENCE_INDEX_FILE = "evidence-index.json";
|
|
19
|
+
var evidenceIndexWriteQueue = Promise.resolve();
|
|
20
|
+
function indexPath(stateDir) {
|
|
21
|
+
return join(stateDir, EVIDENCE_INDEX_FILE);
|
|
22
|
+
}
|
|
23
|
+
function isEvidenceIndexRow(value) {
|
|
24
|
+
if (typeof value !== "object" || value === null) return false;
|
|
25
|
+
const row = value;
|
|
26
|
+
return typeof row.runId === "string" && typeof row.evidenceId === "string" && Array.isArray(row.tags) && row.tags.every((tag) => typeof tag === "string") && typeof row.firstPassSuccess === "boolean" && typeof row.findingCount === "number" && typeof row.generatedAt === "string";
|
|
27
|
+
}
|
|
28
|
+
function readEvidenceIndex(stateDir) {
|
|
29
|
+
let raw;
|
|
30
|
+
try {
|
|
31
|
+
raw = readFileSync(indexPath(stateDir), "utf8");
|
|
32
|
+
} catch {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
let parsed;
|
|
36
|
+
try {
|
|
37
|
+
parsed = JSON.parse(raw);
|
|
38
|
+
} catch {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
if (!Array.isArray(parsed)) return [];
|
|
42
|
+
return parsed.filter(isEvidenceIndexRow);
|
|
43
|
+
}
|
|
44
|
+
async function writeEvidenceIndexRow(stateDir, row) {
|
|
45
|
+
let bounded = [];
|
|
46
|
+
await withStateFileLock(indexPath(stateDir), () => {
|
|
47
|
+
const existing = readEvidenceIndex(stateDir).filter((entry) => entry.runId !== row.runId);
|
|
48
|
+
existing.push(row);
|
|
49
|
+
bounded = existing.length > MAX_EVIDENCE_INDEX_ROWS ? existing.slice(-MAX_EVIDENCE_INDEX_ROWS) : existing;
|
|
50
|
+
safeResourceWrite(indexPath(stateDir), `${JSON.stringify(bounded, null, 2)}
|
|
51
|
+
`, { encoding: "utf8" });
|
|
52
|
+
});
|
|
53
|
+
return bounded;
|
|
54
|
+
}
|
|
55
|
+
async function writeEvidenceIndexRowQueued(stateDir, row) {
|
|
56
|
+
let written = [];
|
|
57
|
+
const write = evidenceIndexWriteQueue.then(async () => {
|
|
58
|
+
written = await writeEvidenceIndexRow(stateDir, row);
|
|
59
|
+
});
|
|
60
|
+
evidenceIndexWriteQueue = write.catch(() => void 0);
|
|
61
|
+
await write;
|
|
62
|
+
return written;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// src/domains/observability/out-of-turn-usage.ts
|
|
66
|
+
init_esm_shims();
|
|
67
|
+
import { closeSync, mkdirSync, openSync, readFileSync as readFileSync2, writeSync } from "node:fs";
|
|
68
|
+
import { dirname, join as join2 } from "node:path";
|
|
69
|
+
var OUT_OF_TURN_USAGE_DIR = "usage";
|
|
70
|
+
var OUT_OF_TURN_USAGE_FILE = "out-of-turn.jsonl";
|
|
71
|
+
var MAX_OUT_OF_TURN_USAGE_ROWS = 1e3;
|
|
72
|
+
var BOUND_CHECK_INTERVAL = 64;
|
|
73
|
+
function outOfTurnUsagePath(stateDir) {
|
|
74
|
+
return join2(stateDir, OUT_OF_TURN_USAGE_DIR, OUT_OF_TURN_USAGE_FILE);
|
|
75
|
+
}
|
|
76
|
+
var appendsSinceBoundCheck = BOUND_CHECK_INTERVAL;
|
|
77
|
+
function appendOutOfTurnUsageRow(stateDir, row) {
|
|
78
|
+
const path = outOfTurnUsagePath(stateDir);
|
|
79
|
+
try {
|
|
80
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
81
|
+
const fd = openSync(path, "a");
|
|
82
|
+
try {
|
|
83
|
+
writeSync(fd, `${JSON.stringify(row)}
|
|
84
|
+
`);
|
|
85
|
+
} finally {
|
|
86
|
+
closeSync(fd);
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
process.stderr.write(`[clio:usage] out-of-turn usage row not written: ${messageOf(error)}
|
|
90
|
+
`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
appendsSinceBoundCheck += 1;
|
|
94
|
+
if (appendsSinceBoundCheck < BOUND_CHECK_INTERVAL) return;
|
|
95
|
+
appendsSinceBoundCheck = 0;
|
|
96
|
+
try {
|
|
97
|
+
boundOutOfTurnUsageFile(path);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
process.stderr.write(`[clio:usage] out-of-turn usage ring not bounded: ${messageOf(error)}
|
|
100
|
+
`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function boundOutOfTurnUsageFile(path) {
|
|
104
|
+
withStateFileLockSync(path, () => {
|
|
105
|
+
let raw;
|
|
106
|
+
try {
|
|
107
|
+
raw = readFileSync2(path, "utf8");
|
|
108
|
+
} catch {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const lines = raw.split("\n").filter((line) => line.trim().length > 0);
|
|
112
|
+
if (lines.length <= MAX_OUT_OF_TURN_USAGE_ROWS) return;
|
|
113
|
+
const kept = lines.slice(-MAX_OUT_OF_TURN_USAGE_ROWS);
|
|
114
|
+
safeResourceWrite(path, `${kept.join("\n")}
|
|
115
|
+
`, { encoding: "utf8" });
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function readOutOfTurnUsageRows(stateDir) {
|
|
119
|
+
const path = outOfTurnUsagePath(stateDir);
|
|
120
|
+
let raw;
|
|
121
|
+
try {
|
|
122
|
+
raw = readFileSync2(path, "utf8");
|
|
123
|
+
} catch (error) {
|
|
124
|
+
const err = error;
|
|
125
|
+
if (err.code === "ENOENT" || err.code === "ENOTDIR") return { rows: [], errors: [] };
|
|
126
|
+
return { rows: [], errors: [`out-of-turn usage store unreadable: ${messageOf(error)}`] };
|
|
127
|
+
}
|
|
128
|
+
const rows = [];
|
|
129
|
+
const errors = [];
|
|
130
|
+
const lines = raw.split("\n");
|
|
131
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
132
|
+
const line = lines[index];
|
|
133
|
+
if (line === void 0 || line.trim().length === 0) continue;
|
|
134
|
+
let parsed;
|
|
135
|
+
try {
|
|
136
|
+
parsed = JSON.parse(line);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
errors.push(`${path}:${index + 1}: invalid JSON: ${messageOf(error)}`);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const row = asOutOfTurnUsageRow(parsed);
|
|
142
|
+
if (row === null) {
|
|
143
|
+
errors.push(`${path}:${index + 1}: not an out-of-turn usage row`);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
rows.push(row);
|
|
147
|
+
}
|
|
148
|
+
return { rows, errors };
|
|
149
|
+
}
|
|
150
|
+
function asOutOfTurnUsageRow(value) {
|
|
151
|
+
if (!isRecord(value)) return null;
|
|
152
|
+
const label = value.label;
|
|
153
|
+
if (label !== "side-question" && label !== "handoff") return null;
|
|
154
|
+
if (typeof value.timestamp !== "string" || value.timestamp.length === 0) return null;
|
|
155
|
+
if (!isRecord(value.usage)) return null;
|
|
156
|
+
const usage = value.usage;
|
|
157
|
+
return {
|
|
158
|
+
label,
|
|
159
|
+
sessionId: typeof value.sessionId === "string" ? value.sessionId : null,
|
|
160
|
+
repoIdentity: typeof value.repoIdentity === "string" ? value.repoIdentity : null,
|
|
161
|
+
timestamp: value.timestamp,
|
|
162
|
+
target: typeof value.target === "string" && value.target.length > 0 ? value.target : "unknown",
|
|
163
|
+
attributedModelId: typeof value.attributedModelId === "string" && value.attributedModelId.length > 0 ? value.attributedModelId : "unknown",
|
|
164
|
+
usage: {
|
|
165
|
+
input: numberOr0(usage.input),
|
|
166
|
+
output: numberOr0(usage.output),
|
|
167
|
+
cacheRead: numberOr0(usage.cacheRead),
|
|
168
|
+
cacheWrite: numberOr0(usage.cacheWrite),
|
|
169
|
+
reasoning: numberOr0(usage.reasoning),
|
|
170
|
+
totalTokens: numberOr0(usage.totalTokens),
|
|
171
|
+
costUsd: numberOr0(usage.costUsd),
|
|
172
|
+
costProvenance: asCostProvenance(usage.costProvenance)
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function asCostProvenance(value) {
|
|
177
|
+
return value === "known" || value === "known_free" || value === "estimated" ? value : "unknown";
|
|
178
|
+
}
|
|
179
|
+
function numberOr0(value) {
|
|
180
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
181
|
+
}
|
|
182
|
+
function isRecord(value) {
|
|
183
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
184
|
+
}
|
|
185
|
+
function messageOf(error) {
|
|
186
|
+
return error instanceof Error ? error.message : String(error);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export {
|
|
190
|
+
readEvidenceIndex,
|
|
191
|
+
writeEvidenceIndexRowQueued,
|
|
192
|
+
appendOutOfTurnUsageRow,
|
|
193
|
+
readOutOfTurnUsageRows
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=chunk-GWS3VEIW.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
|
detectProjectType
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XAKHZX5N.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -179,4 +179,4 @@ export {
|
|
|
179
179
|
probeWorkspace,
|
|
180
180
|
probeWorkspaceAsync
|
|
181
181
|
};
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-HVDIIIQW.js.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-3R73A4XB.js";
|
|
5
|
+
|
|
6
|
+
// src/domains/safety/autonomy.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
var AUTONOMY_LEVELS = ["read-only", "suggest", "auto-edit", "full-auto"];
|
|
9
|
+
var DEFAULT_AUTONOMY_LEVEL = "auto-edit";
|
|
10
|
+
function isAutonomyLevel(value) {
|
|
11
|
+
return typeof value === "string" && AUTONOMY_LEVELS.includes(value);
|
|
12
|
+
}
|
|
13
|
+
var AUTONOMY_EXPOSURES = ["local", "outward"];
|
|
14
|
+
var DEFAULT_AUTONOMY_EXPOSURE = "local";
|
|
15
|
+
function mapAutonomy(level, actionClass, options = {}) {
|
|
16
|
+
if (actionClass === "git_destructive") return "deny";
|
|
17
|
+
if ((level === "auto-edit" || level === "suggest") && options.exposure === "outward") return "ask";
|
|
18
|
+
if (actionClass === "read") return "allow";
|
|
19
|
+
if (level === "read-only") return "deny";
|
|
20
|
+
if (level === "suggest") return "ask";
|
|
21
|
+
switch (actionClass) {
|
|
22
|
+
case "write":
|
|
23
|
+
return "allow";
|
|
24
|
+
case "dispatch":
|
|
25
|
+
if (options.dispatchPlanScale === true && level !== "full-auto") return "ask";
|
|
26
|
+
return "allow";
|
|
27
|
+
case "execute": {
|
|
28
|
+
if (options.executeRecognized !== false) return "allow";
|
|
29
|
+
return level === "full-auto" ? "allow" : "ask";
|
|
30
|
+
}
|
|
31
|
+
case "unknown":
|
|
32
|
+
return "ask";
|
|
33
|
+
default:
|
|
34
|
+
return "ask";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function autonomyDenyRejection(level, tool, actionClass) {
|
|
38
|
+
return {
|
|
39
|
+
short: `${tool} denied: autonomy level is ${level}`,
|
|
40
|
+
detail: `Clio is at autonomy ${level}: ${actionClass} actions are denied without prompting. Describe the change you would make instead, so the operator can apply it or raise the autonomy level.`,
|
|
41
|
+
hints: ["Propose the exact edit or command as text.", "The operator can change the level in /settings."]
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function autonomyAskRejection(level, tool, actionClass, exposure = DEFAULT_AUTONOMY_EXPOSURE) {
|
|
45
|
+
if (exposure === "outward") {
|
|
46
|
+
return {
|
|
47
|
+
short: `${tool} needs approval: outward-facing gate at autonomy ${level}`,
|
|
48
|
+
detail: `The call declared exposure=outward, so answering it publishes or sends something outside the workspace. Autonomy ${level} auto-answers local gates and parks outward-facing ones for the operator.`,
|
|
49
|
+
hints: [
|
|
50
|
+
"Approving resumes only this call.",
|
|
51
|
+
"Autonomy full-auto answers outward gates too; the safety net still applies there."
|
|
52
|
+
]
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
short: `${tool} needs approval (${actionClass}) at autonomy ${level}`,
|
|
57
|
+
detail: `Autonomy ${level} routes ${actionClass} actions through operator approval. The call is parked until the operator approves it once or cancels it.`,
|
|
58
|
+
hints: [
|
|
59
|
+
"Approving resumes only this call.",
|
|
60
|
+
"Recognized commands can be added to .clio-coder/safety.yaml.",
|
|
61
|
+
// The sanctioned pivots for a gated shell command: typed verification
|
|
62
|
+
// and read-class observe tools run without approval at this level,
|
|
63
|
+
// and models otherwise stall retrying denied bash for checks or
|
|
64
|
+
// directory listings.
|
|
65
|
+
...actionClass === "execute" ? [
|
|
66
|
+
'A declared package or project-catalog check runs without approval through the verify tool: verify(check="<id>").',
|
|
67
|
+
"Read-only inspection runs without approval through the ls, read, grep, and find tools."
|
|
68
|
+
] : []
|
|
69
|
+
]
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export {
|
|
74
|
+
AUTONOMY_LEVELS,
|
|
75
|
+
DEFAULT_AUTONOMY_LEVEL,
|
|
76
|
+
isAutonomyLevel,
|
|
77
|
+
AUTONOMY_EXPOSURES,
|
|
78
|
+
DEFAULT_AUTONOMY_EXPOSURE,
|
|
79
|
+
mapAutonomy,
|
|
80
|
+
autonomyDenyRejection,
|
|
81
|
+
autonomyAskRejection
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=chunk-HWUFFB6L.js.map
|