@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
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,69 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Clio Coder are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and versions follow Semantic Versioning; pre-1.0 minor releases may include incompatible changes.
|
|
4
4
|
|
|
5
|
+
## 0.3.7 - 2026-08-24
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Typed dispatch intent and host-run verification (#155). The singular request and every `tasks[]` item accept one `intent` object (`read_roots`, `write_roots`, `relevant_paths`, `expected_outputs`, `verification: [{check, timeout_ms?}]`); `gate: "<check>"` is the one shorthand for a single verification entry. Paths are normalized to sorted, duplicate-free repository-relative POSIX paths with entry and byte caps, and absolute, escaping, or malformed entries fail before approval. A `check` is a declared id resolved through the verify tool's `DeclaredCheck` projection (package scripts and `.clio-coder/verifiers.yaml`) at admission, so model text never becomes argv; the resolved argv, cwd, and timeout are frozen into the execution snapshot and the plan hash, and the approval artifact renders them. After a successful worker attempt the orchestrator runs each check through the code-step runner with no shell and the closed environment allowlist, memoizes successful evidence on the workspace fingerprint plus argv, cwd, and allowlisted environment values, and seals `hostVerification` (`verified`, `rejected`, or `skipped` with per-check argv, exit code, duration, bounded output tail, memo provenance, and artifact path) into the receipt. A rejected check turns the run into `host_verification_rejected`, which suppresses automatic retry. Review and compete accept the intent paths but refuse verification entries, as does the Claude Code subprocess runtime, each with a named reason. The receipt seals `intent` on the native worker path and the Claude Code and ACP delegation paths alike. Receipt integrity moves to v16 and covers `intent` and `hostVerification`; the existing `verification` evidence object keeps its name. Dispatch output, `monitor`, and the Fleet Runs card render `host_verification=<status>` beside `evidence_verification`.
|
|
9
|
+
- `/btw <question>` asks one side question beside the session (refs #41). The round sends the compiled message history as read-only input under a short fixed instruction with no tools, streams the answer into an overlay, and appends nothing to the session JSONL, the transcript, the context ledger, or the task board, so a fleet run's workers are never briefed from it. Esc cancels a streaming round; a `/btw` during an in-flight turn is refused rather than queued. The round's usage is counted in `/cost` under a `side questions` row and is excluded from the turn count.
|
|
10
|
+
- Opt-in desktop notifications (#204). `terminal.notify: true` emits one content-free terminal notification when a turn ends, when a detached batch settles, and when a worker permission or `ask_user` request parks. The title is fixed, the body comes from a closed vocabulary, control characters are stripped, and the body is bounded to 128 bytes. OSC 777 is the default and OSC 9 is used on iTerm2, Windows Terminal, and ConEmu, never both for one event. Headless, ACP, and non-TTY runs never emit one.
|
|
11
|
+
- Single-writer token, checkout writer lease, and worktree-per-task (#207). `writers: 1` on a parallel dispatch or an ExecutionPlan admits at most one write-scope step at a time in declared order while read-scope steps stay concurrent; the agent ledger's claims remain advisory. The first checkout writer takes a lease under the state dir keyed by the canonical checkout path and carrying pid, process birth token, and acquisition time; a live sibling process is refused with `checkout_writer_lease_held` naming the holder pid, and a dead owner is reclaimed. `worktree: true` with `apply: "merge"` (default) or `"preserve"` runs a writer task on `clio/task/<runId>` under `.clio-coder/worktrees/<runId>/`, maps the worker cwd, write roots, and protected artifacts into it, and runs declared host verification there before merging; a conflict fails closed as `worktree_merge_conflict` and preserves the branch, and a protected-path change fails closed. The receipt gains `worktree: {path, branch, diffHash, apply, applied, reason?}`, receipt integrity moves to v17, and the approval artifact renders worktree, apply, and the frozen merge destination. Non-git checkouts, read-only agents, compete mode, and a cwd outside the checkout are refused with named reasons.
|
|
12
|
+
- Fleet authoring CLI (#209). `clio-coder fleet new <name> --from <builtin>` copies `build-review`, `build-test`, or `sdlc` into `.clio-coder/fleets/` and refuses an existing destination, an unsafe stem, or an unknown builtin. `fleet validate <name> [--json]` runs the same preflight `fleet run` performs (parse, graph, command bindings, agent resolution, plan compile, write-boundary preflight) with no state-dir write, ledger row, reservation, or worker. `fleet graph <name> [--json]` prints the compiled waves with each step's kind, agent or command, scope, dependencies, and write boundary, and expands loop check and repair nodes. `fleet commands init` discovers package scripts, justfile recipes, Makefile targets, and pyproject script and tool entries through the verifier discovery and writes a fully commented `commands.yaml` draft; uncommenting confirms an entry and an existing registry is never replaced. `fleet run <name> --resume <runId>` replays the successful, integrity-valid prefix recorded in a durable fleet-run record under the state dir, reports replayed steps with their original receipt references, refuses a changed plan hash with a per-step diff, and refuses differing `--var` values. The existing `fleet resume` admission-control subcommand is unchanged.
|
|
13
|
+
- `/fleet run <name> [--var k=v ...]` previews a fleet contract before anything dispatches (#208). The route preflight sends each step's compiled task, so a contract that validates from the CLI previews from the TUI, and a `--var` value may be quoted to carry spaces (`--var task="add a pow function"`). The approval overlay lists the steps by wave with kind, agent and resolved target (or command id and the exact argv from `commands.yaml`), scope, and declared write boundary, then the budget ceiling the run is admitted under; a contract that fails preflight opens the same overlay with its diagnostics and no accept key. Enter dispatches through one shared fleet-run path in the dispatch domain (`executeFleetRun`) so admission, autonomy, receipts, gate decisions, write-boundary enforcement, and the durable ledger are identical to `clio-coder fleet run`; Esc dispatches nothing and writes nothing. `clio-coder fleet run` runs through that same path and both surfaces write the durable fleet-run record, so a run started from the TUI can be resumed with `fleet run --resume`. The Fleet Runs board gains a phase column (`w<n> <stepId>`) on rows a fleet plan dispatched, empty on every other row; the compact island keeps its fixed width and shows the column only when the agent label still fits. `/fleet` alone still opens Settings → Fleet, and `/fleet run` during an in-flight turn is refused rather than queued.
|
|
14
|
+
- `/handoff <goal>` carries a session's working state into a fresh session (#206). The goal is required and gated: under 12 characters, or a non-goal such as "continue" or "resume", is refused with the rule named. One out-of-turn model round with no tools extracts decisions, facts, files, commands, and open questions as JSON against a fixed schema; every list and string is bounded, and over-bound output is truncated with a visible marker rather than refused. Every file path is checked against the session's own read ledger (folded through the active `/tree` path) and never against the filesystem, so a path the session never touched is dropped and listed under `dropped (not in this session's read ledger)`. Extracted decisions merge with the settled decision board, which wins. The document opens for review with `e` for `$EDITOR`; Esc cancels with nothing written. On accept Clio mints a session, seeds it with the reviewed document as data labelled by its origin session, replays the old session's skill activations, and leaves the old session untouched apart from one terminal note naming the target. A handoff never writes a memory promotion candidate and never calls the task-memory bank. Its usage is counted in `/cost` under a `handoffs` row and excluded from the turn count.
|
|
15
|
+
- `/oracle <question>` and the `oracle` shadow advisor (#210). The recipe is read-only, unreachable from `/run`, and never receives a forked transcript: `/oracle` packs a bounded digest as dispatch briefing data (settled decisions from the decision board, open tasks from the task board, the last compaction summary when one exists, and the question), capped at 12 KiB with per-section caps and a truncation marker and filtered to the active `/tree` branch. The run is a singular read-only internal dispatch through the ordinary path, so admission, receipts, and the Fleet Runs island apply; its `oracle-report` contract carries a verdict, the strongest challenge, what would change its mind, and the decisions it cited, and the rendered answer reaches the main agent as an operator note the way `/share` does. `/oracle` during an in-flight turn is refused rather than queued.
|
|
16
|
+
- Opt-in turn-end watchdog (#210). `watchdog: {enabled: false, target?, cadenceToolCalls?}` is hot reloaded. With `enabled: true`, a turn that changed the tree is reviewed by one read-only `verifier` dispatch briefed with the turn's coalesced diff (per-path last-write-wins, bounded to 12 KiB) and the task board's current scope; its failed checks become one transcript notice naming the count and the first three, a passing report emits nothing, and a turn with no file mutations never fires. `watchdog.target` routes the run at a cheap local model; `cadenceToolCalls: N` also fires it every N tool calls inside a turn. At most one watchdog run is in flight at a time and an overlapping trigger is dropped and counted. It never auto-follows, never queues a turn, and never mutates. Headless and ACP runs never fire it.
|
|
17
|
+
- Durable out-of-turn usage and Settings Center rows for notifications and the watchdog (#211, refs #41, #204, #206, #210). A `/btw` side question or a `/handoff` extraction round appends nothing to the session JSONL by contract, so the spend now goes to its own store at `<stateDir>/usage/out-of-turn.jsonl`: one JSON line per priced call carrying the label, session id, the repo identity the session ledger is filed under, timestamp, target, attributed model id, and provider usage, written with one append per row and kept as a bounded ring of 1000 rows rewritten atomically under the state-file lock. `clio-coder usage report` folds that store beside the session ledgers into the window's tokens, cost, and per-model totals, and prints `turns`, `side questions`, and `handoffs` counts on both the text and `--json` surfaces, subtracting labelled calls from the turn count exactly as `/cost` does; an archive with no labelled call renders byte-identical to before. `terminal.notify` gains a boolean row under EXPERIENCE › Terminal, and `watchdog.enabled`, `watchdog.target`, and `watchdog.cadenceToolCalls` gain rows under a new EXPERIENCE › Watchdog section. The two optional keys render their absence as `(session target)` and `(turn end only)` while their editors open on the stored value or empty, never on that prose; submitting an empty value removes the key from `settings.yaml` rather than storing a blank, and a cadence below one is refused with the bound named, matching the config validator. Settings Center wording is pinned word for word to the settings template where it overlaps.
|
|
18
|
+
- `mode: "council"`, the read-only sibling of compete (#212). Two to five members run the same singular task concurrently on local and HTTP targets with no mutation. Members come from a configured `workers.rosters.<name>.members[]` roster (`{label, target, model?, thinking?, color?}`, validated at config load for two to five members, unique labels matching `[a-z][a-z0-9_-]{0,31}`, theme color tokens or six-digit hex, no unknown keys, hot reloaded) or from inline `members`; exactly one of `roster` or `members` is accepted. `synthesis: none | judge | vote` (default `none`), `rounds: 1..3` (default `1`), and `judge` only with judge synthesis. Refusals are typed: `council_roster_unknown`, `council_members_out_of_range`, `council_member_label_duplicate`, `council_member_target_unknown`, `council_member_remote_node` (a route that resolves to an SSH fleet node is refused before approval), `council_synthesis_requires_judge_settings`, and `council_verification_unsupported`. A council request that names no `agent` seats the builtin `researcher` rather than the dispatch default `coder`, whose write requirement the council profile cannot satisfy. Admission pins every member and the judge to `read-only` autonomy and an internal `council-read-only` tool profile holding exactly `read`, `grep`, `find`, `ls`, `code_nav`, and `context`, enforced through ordinary worker admission rather than prompt text. The resolved plan expands every member in every round plus the judge, so the approval artifact lists each member's label, target, model, thinking, node, color, round, and synthesis, and the plan hash binds all of it. Round one gives every member the same task and briefing; each later round gives a member the other members' prior answers as labelled untrusted briefing data (never its own), bounded to 8 KiB with a truncation marker, with a failed peer marked rather than quoted. `vote` computes a deterministic strict majority over the final round's structured `verdict` fields with no model call and reports `no_verdict_field` or `no_majority` when it cannot; `judge` runs one read-only judge under a fixed prompt with every final answer as labelled briefing. The dispatch result carries one section per member and one synthesis section, `details.council` holds the typed `council-report` (`{members: [{label, runId, round, answer, verdict?, failed?}], synthesis: {kind, text?, verdict?, tally?, judgeRunId?}}`), and the result is an error only when a final-round member or the judge failed. Every member run seals its own receipt; `none` and `vote` seal one coordinator-only zero-token synthesis receipt that carries no member provenance and publish its enqueued and completed lifecycle events so the Fleet Runs board and `/share` see it, and the judge receipt is the synthesis receipt in judge mode, each pointing backward at every final member run through gate provenance. `monitor` reports the council role and group, the Fleet Runs board projection carries `council: {group, label, color?, round}` for a later grid, and receipt integrity moves to v18 with the `council` field. The grid and `/council` are a separate change.
|
|
19
|
+
- Council rendering and `/council` (#213). The `Alt+W` Fleet Runs board folds a council group into one card in the position of its first row: a side-by-side grid with one column per member while every column keeps at least 34 cells, otherwise the whole group stacks, because a grid where only some columns are readable is worse than none. Each column shows the member label in its roster color (a theme token paints as that token, `#rrggbb` paints literally through the xterm cube without truecolor, anything else takes the accent), the target and model, the round and status, and up to four rows of the run's bounded answer tail; a council that ran several rounds keeps one column per member at its newest round, and the synthesis run renders full width under the members. The compact island shows one card per council naming the group, member count, and round. `/council [--roster <name>] [--rounds <n>] [--synthesis judge|vote|none] <task>` owns no dispatch path of its own: it builds dispatch-tool arguments spelled exactly as the tool declares them and admits them through the tool registry, so supervised autonomy parks the same approval overlay a model-asked council would. `--roster` falls back to `workers.rosters.default`; with neither the command refuses and names the setting rather than guessing from the only roster present. Rounds and synthesis bounds are enforced where the operator typed them, and a `/council` during an in-flight turn is refused rather than queued. `/share <synthesis runId>` brings every final-round member's labelled answer and the synthesis line (mode, verdict, tally, judge run) into the main context as one bounded prose block, never the raw payload; `/share <member runId>` labels that member's answer with its roster label; a synthesis whose sealed text does not parse is shared verbatim.
|
|
20
|
+
- Fleet contract v5: `kind: plan`, `kind: gate`, per-step target or profile, and top-level `writers` (#214). Version literal `5` joins the contract; readers of 1 to 4 refuse `plan`, `gate`, `target`, `profile`, and `writers` by name, exactly as they refuse `writes` below 4, and ExecutionPlan versioning is unchanged. An agent step, a loop check agent, or a loop repair agent may declare `target: <targetId>` or `profile: <workers.profiles key>` (never both); resolution shares the `/run --target` and `/run --agent-profile` request fields, and an unknown id refuses at preflight naming it, in `fleet validate`, `fleet run`, and the `/fleet run` preview, which now reports a route the process cannot resolve as a named diagnostic instead of rendering `route unresolved`. A `kind: gate` step names a validator agent, one repository-relative `path` that becomes its whole derived write boundary (a separate `writes` is refused), and a `run` command whose argv carries the gate path as the single whole-token `{{path}}` substitution; after the author settles, the coordinator runs the command with no shell against the untouched tree and requires red, a green baseline fails the step as `gate_not_discriminating`, the receipt seals `fleetGate: {path, pathHash}`, and a loop may use `check: {kind: gate, gate: <id>}`, in which case only verbatim `FAIL` lines from the check reach the repair agent. A `kind: plan` step (agent defaults to the builtin `architect`) declares `roster`, `maxTasks: 1..16`, optional `proposals: true`, its own scope and `writes`, and an optional route default; the architect returns a `delegation-plan` result contract (`{tasks: [{id, agent, description, depends_on, writes, mode?}]}`) that a pure validator checks for roster membership, task count, unique ids, resolvable acyclic dependencies, and writes inside the plan step's boundary, each failure a named `delegation_plan_*` reason that fails the step and splices nothing. `delegation-plan` is an admitted worker result contract, so the architect step reaches the model. On success the coordinator records the deterministic plan hash on the durable fleet run record and the scheduler splices the tasks into the live plan after the wave settles: every spliced task passes the same preflight, reservation, admission group, writer-token grouping, post-step write-boundary enforcement, and durable settlement record as a static step, depends on the plan step plus its declared dependencies, inherits the plan step's target or profile, and seals lineage to the plan step's run. `proposals: true` first runs every roster member read-only with the same task and hands the architect their `PROPOSAL <agent>` sections as briefing bounded to 12,000 bytes. `fleet graph` names a gate or plan step by its contract kind with the gate path and run command or the roster and `maxTasks`, and a step whose receipt succeeded but whose gate baseline or delegation plan failed settles as failed with `reason=<name>` in `fleet run` output and the `/fleet run` notice. The approval artifact renders target or profile, gate path, run command, and baseline command, and plan roster, maxTasks, and proposals; `fleet run --resume` replays the static prefix up to the first plan step and reruns it rather than reconstructing prior dynamic tasks. Receipt integrity moves to v19 with the `fleetGate` field.
|
|
21
|
+
- Resource library (#215). The marketplace index machinery that carries skills now carries agent recipes, prompt templates, and fleet contracts. Every index entry accepts `kind: skill | agent | prompt | fleet` (default `skill`, so every existing index parses unchanged) and optional typed `requires: [skill:x, agent:y, prompt:p, fleet:z]`, resolved recursively across the selected catalog and the private catalog; a missing, malformed, or cyclic requirement refuses the entry with `library_requirement_missing`, `library_requirement_malformed`, or `library_requirement_cycle` naming the chain. `clio-coder library list|search [--kind k] [--json]`, `library add <ref> [--from <catalog|path>] [--with-requirements] [--yes]`, `library use <kind> <name>`, `library sync`, `library push`, and `library remote confirm <url>` land as one literal dynamic import. `add` resolves requirements against the pin store and the destination path, lists satisfied ones separately, refuses on unsatisfied ones unless `--with-requirements` installs them first in dependency order, prints every destination and SHA-256 before writing, and writes nothing without `--yes`. An agent installs to `<configDir>/agents/<name>.md` after the recipe schema and policy checks, a prompt to `<configDir>/prompts/<name>.md` after the prompt loader, a fleet to a new user fleet root `<configDir>/fleets/<name>.md` after `parseFleetContract` (precedence is builtin, then user, then project), and a skill through the existing installer; every install is pinned by typed ref and hash in `<configDir>/library-pins.yaml` through the safe resource write. A private catalog at `library.catalog` (default `<configDir>/library.yaml`) overlays same-ref marketplace entries and resolves relative sources beside itself. Git-backed sync is opt-in: `library.sync: false` (the default) refuses `sync` and `push` with `library_sync_disabled` before any process spawns; with it on, the repository's remote must be named `library` and match a confirmed URL (`library remote confirm`, which refuses `library_remote_mismatch` when it differs from `library.remote`), `sync` runs `git fetch library` then `git merge --ff-only FETCH_HEAD`, and `push` runs `git push library`, each an argv vector with no shell. Share archives gain `agent` and `fleet` entry types (`share export --agents --fleets`, included in `--all`), imported into the user roots after the same validation. The Skills Hub keeps rendering skills only; its kind tabs are a separate change.
|
|
22
|
+
- Skills Hub kind tabs and `/library` (#216). The hub carries one tab per resource library kind (Skills, Agents, Prompts, Fleets), switched with `←`/`→`, the key vocabulary the Settings Center already uses to move between sections; the frame title names the active tab and the footer states its row count. The Skills tab is unchanged. The other three list their kind from the same `discoverLibrary()` the CLI's `library list --kind` reads, with origin, version, installed or available, the short pin hash, and the names of any unresolved requirements in the warning token; a catalog entry the library refuses appears as a diagnostic row rather than being omitted. `i` installs through the same classify, plan, and write sequence `library add` runs, behind a framed confirmation that states every destination and SHA-256 and writes nothing on Esc; an entry with unresolved requirements is refused by name on the first `i`, and a second `i` opens the install-with-requirements confirmation naming every entry it would write in dependency order. `Enter` on an installed row inserts `/run <agent> ` for an agent, the `/<id> ` invocation for a prompt, `/skill <name> ` for a skill, and for a fleet closes the hub and opens the `/fleet run` approval preview; a row that is not installed says so and points at `i`. `/library [kind]` opens the hub on that tab and `/library` alone on Skills, where `/skill` still opens. Tab support lives in the shared list overlay, so untabbed overlays are unchanged.
|
|
23
|
+
### Changed
|
|
24
|
+
- `clio-coder fleet run` now executes through the same `executeFleetRun` path as `/fleet run`, so admission, autonomy, receipts, gate decisions, write-boundary enforcement, and the durable fleet-run record under `<stateDir>/fleet-runs/<runId>.json` are identical from both surfaces, and a run started from either can be resumed with `fleet run --resume` (#208, #209). The `fleet resume` admission-control subcommand is unchanged.
|
|
25
|
+
- Fleet contracts resolve from three roots with fixed precedence: builtin, then the new user root `<configDir>/fleets/`, then the project's `.clio-coder/fleets/` (#215). A project contract still shadows a user one of the same name.
|
|
26
|
+
- `share export --all` now includes agent recipes and fleet contracts beside the existing entry types, and `share import` validates them through the recipe schema and `parseFleetContract` before writing (#215). Archives without those entry types import unchanged.
|
|
27
|
+
- The `/fleet run` approval preview reports a step route the process cannot resolve as a named preflight diagnostic instead of rendering `route unresolved` (#214).
|
|
28
|
+
- `clio-coder usage report` prints `turns`, `side questions`, and `handoffs` counts on the text and `--json` surfaces (#211). An archive with no labelled out-of-turn call reports zero side questions and handoffs and the same tokens, cost, and per-model totals as before.
|
|
29
|
+
- Receipt integrity moves from v15 to v19 across this release: v16 adds `intent` and `hostVerification` (#155), v17 adds `worktree` (#207), v18 adds `council` (#212), and v19 adds `fleetGate` (#214). Receipts sealed by 0.3.6 fail verification under 0.3.7 and are never read as evidence; they are not migrated.
|
|
30
|
+
- `clio-coder --help` lists `library` beside `skills`.
|
|
31
|
+
- The `/fleet run` approval, `/handoff` review, and Skills Hub install confirmation overlays match Enter, Esc, and the arrows by key name rather than raw bytes, so they answer under the kitty keyboard protocol, where Esc arrives as `CSI 27 u`, and ignore key-release events.
|
|
32
|
+
|
|
33
|
+
## 0.3.6 - 2026-08-23
|
|
34
|
+
|
|
35
|
+
0.3.5 was published by mistake and withdrawn; its content ships here.
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- `docs/middleware-and-components.md` documents every built-in middleware registration: id, hooks, trigger, and what does not trigger it.
|
|
39
|
+
- Permission and `ask_user` dialogs now derive closed consequence tiers from typed request, scope, reversibility, origin, exposure, and authority facts (#169). Conversational answers, workspace authority, outward consequences, safety-net confirmations, system changes, and worker escalations receive distinct titles and semantic tokens, while caller prose cannot lower a tier or alter the underlying decision protocol.
|
|
40
|
+
- Typed invocation-level dispatch budget envelopes (#175). Recipes keep an exact default unless they author a maximum, dispatch can request a phase and preauthorize a retry, result-contract revision, or review revision ceiling inside both recipe and operator policy, and immutable policy, request, effective, clamp, and escalation facts are sealed into receipts and shown by monitor, fleet status, and the live fleet card. Architect retains its 32-call default and now permits explicitly admitted runs up to its authored maximum.
|
|
41
|
+
- The `Alt+W` Fleet Runs board shows live worker progress on operator request (#168). `Enter` opens the selected run's detail: the phase, the running call as `<tool> <verb> <object>`, and the bounded tail of the worker's own prose with a `/view dispatch:<runId>` link to the rest. The default list stays compact, so a fan-out of scouts costs one card each until an operator opens one.
|
|
42
|
+
- Reviewed task-memory promotion in `/memory` and `clio-coder memory promote` (#176). Selected knowledge and procedural entries can become unapproved durable proposals with explicit validated repo, global, runtime, or agent scope. Promotion redacts before persistence, preserves session and evidence provenance, and keeps private status excluded.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
- Python and Cargo project metadata, bootstrap guidance, and verifier discovery now parse TOML through one shared `smol-toml` boundary with an operation-scoped file cache (#153). Parsed structure replaces table-header scanning, and malformed documents fail closed.
|
|
46
|
+
- The Fleet Runs board and the transcript's worker block now read one bounded projection of the dispatch event stream instead of folding it separately, so the two surfaces cannot disagree about what a worker is saying or touching. The projection keeps 40 lines and 4096 bytes of answer tail, 8 distinct tool names, and 4 recent actions, and accepts 16 KB of streamed bytes per 250 ms; what the bounds refuse is counted and named rather than dropped silently.
|
|
47
|
+
- Worker tool activity now carries a redacted action descriptor beside the tool name. The descriptor is composed where the arguments are trusted (the tool registry's admission path, the Claude tool mapper, and the ACP update mapper) from a fixed verb vocabulary and a fixed argument-field allowlist, with credentials scrubbed, escape sequences stripped, and the result bounded to 64 characters. Raw argument objects still never cross the worker stdout seam, and reasoning content is still never displayed.
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
- Approval overlays now derive call targets from a per-tool field allowlist. Unlisted arguments are shown only by field name, type, and size, so an unexpected credential or pasted document cannot be copied into the rendered frame (#200).
|
|
51
|
+
- Worker tool starts and finishes now share a call id when their producer has one. The transcript and Fleet Runs pair concurrent calls by that id, while older streams without ids continue to match by tool name (#201).
|
|
52
|
+
- Proactive task memory now reuses deterministic tool-result disposition digests with explicit source provenance (#173). Operation fingerprints remain separate for loop and repeated-failure identity, while redaction and byte caps apply before diagnostics reach the task bank or background policy.
|
|
53
|
+
- The llama.cpp router's `sleeping` state now reads as not resident (#192), and `clio-coder targets` reports `resident: none` while preserving the reported context-slot metadata.
|
|
54
|
+
- Response model-id presence is now an explicit `responseModelIdObservation` state (#193, #202). The short-lived `servedModel` and `servedCalls` names are replaced by requested and attributed model ids plus counts named for each observation state. Pre-#193 ledgers remain readable under the labeled `legacy-difference-only` state, and providers outside the stream tap retain the `responseModel` fallback without implying that presence was observed.
|
|
55
|
+
- The selected live model's capability probe now starts at boot (#195), so the first `/context` view and footer show the probed context window before any model turn.
|
|
56
|
+
- The permission dialog now anchors above the composer (#194) and recomputes that placement when the terminal resizes.
|
|
57
|
+
- Permission dialog clearance now comes from the live editor and footer render heights on every frame instead of a fixed five-row margin. Empty and multiline composers remain unobscured in both terminal modes, including after a resize (#194).
|
|
58
|
+
- Tool-result offload scratch files older than fourteen days are now swept at boot (#196). A resumed transcript now says when the retention sweep removed the file instead of presenting its stale path as a live full-output pointer (#203).
|
|
59
|
+
- A skill suggestion no longer costs the first turn on local models (#184). Every surface that teaches the protocol (the first-turn reminder, the `context(scope="skills")` listing footer, and the operator-gate denial) now says to open with the `Suggested skill:` line and continue the task in the same turn; none instructs the model to wait. A turn that makes the suggestion and stops with only listing calls behind it is continued once with a reminder that only the operator loads a skill.
|
|
60
|
+
- Three envelope noise sources on local targets are gone (#191). An always-on reasoning model printed the thinking clamp three ways (`thinking medium resolved to forced`, `medium was ignored because thinking is always on`, and the combined line); only the combined line prints now, once per target, model, and level change. A workspace with no `CLIO-CODER.md` states `<handbook>none …</handbook>` where the handbook would have been injected, so the model stops spending its first tool call on a read that returns ENOENT. `clio-coder --resume` and `--continue` still fail closed, and the error now says that sessions are resumed from the `/resume` picker inside the app.
|
|
61
|
+
- A turn is attributed to the reported response model id under LM Link peer routing (#185, #202). The response's `model` field is recorded as `responseModel` when it differs from the request. The footer, `/cost`, `clio-coder usage report`, and dispatch receipts use the shared requested model id, attributed model id, and response model id observation vocabulary. The LM Link peer warning is emitted once per distinct fact instead of once per turn.
|
|
62
|
+
- The `/resume` picker previews the operator's first prompt (#188). The first user entry of a session is the composed prompt, with the `<system-reminder>` block and any `[Skill request]` preamble ahead of the operator's words, so every row read `<system-reminder> [Skills] 9 installed…` and the filter matched them all. The preview is now the persisted `operatorText`, the scaffolding-stripped text for older sessions, the next turn when the first carries no operator words, and the first assistant text when none does.
|
|
63
|
+
- The context ledger is populated right after `/resume` (#189). Before the first new turn of a process, `/context` and the footer meter now read the window from the live target resolution (falling back to the window the resumed session recorded) and the token facts from the session's last persisted snapshot, which measured the same messages; the selected model's live capability probe runs at resume so the window is the probed one. `context window unknown · 0 tokens` is reserved for a session with no target and no history.
|
|
64
|
+
- `/context` names the configured working-set policy instead of the last applied one (#190). A fresh session at the shipped default reads `policy structural-v1 · no events yet` rather than `policy none`; `context.workingSet.enabled: false` reads `disabled`; a policy changed after an event shows `(last event by <policy>)`. The eviction trigger stays at `compaction.threshold`: the replay tables price each event by the cold prefix it re-prefills, and batching from the threshold down to the target is what keeps the event count down.
|
|
65
|
+
- A llama.cpp context window is the per-request share, not the server total (#187). `--ctx-size` is split evenly across `--parallel` slots unless `--kv-unified`, so a router started with `--ctx-size 786432 --parallel 4 --no-kv-unified` now resolves to a 196,608-token window instead of 786,432, which is where autocompact was armed at a size the server would never admit. The probe reads the long and short flag spellings and the last kv flag given, `/context` prints `196,608 (786,432 / 4 slots)` with `probed window`, and `clio-coder targets` names the split in its `ctx` note and a probe note.
|
|
66
|
+
- A parked permission request always offers allow, deny, and stop (#186). The composer rail switches to `CONFIRM` and carries the dialog's keys while a prompt owns the keyboard, so the `Enter send` hint can no longer contradict a dialog that sits forty rows away on a tall terminal. `Enter` allows only from an empty composer: with a draft present the habitual send key is inert, both surfaces read `[Backspace] clear draft` in its place, and only deletion keys reach the editor. `Esc` is labeled `deny`, which is what it does. A request that parks while another overlay holds the screen is re-presented as soon as that overlay closes.
|
|
67
|
+
|
|
5
68
|
## 0.3.4 - 2026-08-22
|
|
6
69
|
|
|
7
70
|
### Added
|
|
@@ -12,10 +75,10 @@ All notable changes to Clio Coder are documented in this file. The format follow
|
|
|
12
75
|
- A six-axis canonical trust status for runs (#154): artifact integrity, validation grounding, independent review, context provenance, autonomy enforcement, and completion evidence, each with explicit `absent`, `unknown`, and `not_applicable` states and a named source and authority. Composition never promotes one axis from another; the no-promotion rules are enforced at the adapters and the evidence composition boundary. Evidence bundles gain `trust-status.json`.
|
|
13
76
|
- Non-destructive working-set eviction. When context pressure crosses `compaction.threshold`, Clio now records which tool-result bodies and closed-turn thinking blocks leave the model's working set instead of rewriting them out of the session. The bodies stay in the ledger, the transcript keeps showing them, and each one is replaced in model replay by a one-line marker naming the ref, the reason, the size, and the exact call that brings it back.
|
|
14
77
|
- Exact recall by ref. The model reads an evicted body back with `context(scope="recall", ref="<turnId>")`; the operator reads one into the transcript with `/context recall <ref>`, which never enters model context. A recall does not un-evict: the marker stays byte-identical so the provider prefix cache is untouched, and repeated recalls of one ref are the churn signal.
|
|
15
|
-
- Two eviction policies. `structural-v1` is the default: it selects by what the session did since (`stale_after_mutation`, `superseded_read`, `failure_resolved`, `listing_consumed`, `thinking_turn_closed`) and falls back to age only under pressure. `age-horizon` reproduces the previous age-based selection, minus results whose body is below `context.workingSet.minEvictableTokens`. Replayed over the seeded procedural corpora with the summary stage modeled, `structural-v1` cuts the number of lossy summary compactions per 300-turn science trace from 21.5 to 8.8 at a 64k budget and from 8.9 to 3.1 at 128k, retains at or above `age-horizon` at every budget, and beats random eviction on precision by 2.3x or more
|
|
78
|
+
- Two eviction policies. `structural-v1` is the default: it selects by what the session did since (`stale_after_mutation`, `superseded_read`, `failure_resolved`, `listing_consumed`, `thinking_turn_closed`) and falls back to age only under pressure. `age-horizon` reproduces the previous age-based selection, minus results whose body is below `context.workingSet.minEvictableTokens`. Replayed over the seeded procedural corpora with the summary stage modeled, `structural-v1` cuts the number of lossy summary compactions per 300-turn science trace from 21.5 to 8.8 at a 64k budget and from 8.9 to 3.1 at 128k, retains at or above `age-horizon` at every budget, and beats random eviction on precision by 2.3x or more.
|
|
16
79
|
- `/context` reports the working set: policy, evicted items, evicted tokens, events, recalls, and churn. Evicted tool rows carry a dim `evicted · <reason>` tag in the transcript.
|
|
17
80
|
- Cache-honesty attribution for eviction. An applied event stamps `working_set_evict` on the next assistant entry's `promptCache.expectedColdReasons`, and `/context` reports `last cold turn: working-set eviction (expected)` instead of warning about a cold backend it caused itself.
|
|
18
|
-
- `clio-coder context replay --sessions <path>...` replays Clio ledgers, and `--synthetic <ids>` replays seeded procedural science-coding corpora (`science-long`, `refactor`, `exploration`), through the live eviction code with `none`, `random`, and `oracle` controls and reports retention, precision, tokens evicted, recall tokens, cold prefix tokens, saturation, turns to first summary, and summaries per trace under a modeled summary stage; `clio-coder context working-set --session <id|path>` prints one session's working-set fold and path index. The procedural corpora replace the private Claude Code transcripts the first tables were built on
|
|
81
|
+
- `clio-coder context replay --sessions <path>...` replays Clio ledgers, and `--synthetic <ids>` replays seeded procedural science-coding corpora (`science-long`, `refactor`, `exploration`), through the live eviction code with `none`, `random`, and `oracle` controls and reports retention, precision, tokens evicted, recall tokens, cold prefix tokens, saturation, turns to first summary, and summaries per trace under a modeled summary stage; `clio-coder context working-set --session <id|path>` prints one session's working-set fold and path index. The procedural corpora replace the private Claude Code transcripts the first tables were built on; generated replay tables are local artifacts rather than versioned benchmark results.
|
|
19
82
|
- New guide: `docs/context-working-set.md`.
|
|
20
83
|
|
|
21
84
|
### Changed
|
package/CONTRIBUTING.md
CHANGED
|
@@ -73,14 +73,14 @@ publish is a manual maintainer step. The ordered procedure for a cut lives in
|
|
|
73
73
|
2. Run `npm run ci:release`. It runs the full `ci` gate, then
|
|
74
74
|
`scripts/check-release.mjs`, which verifies the built `dist/` and audits
|
|
75
75
|
the exact npm package contents.
|
|
76
|
-
3. Land the release commit on `main
|
|
77
|
-
|
|
76
|
+
3. Land the release commit on `main`. There is no need to wait on the `ci`
|
|
77
|
+
workflow before tagging: the release workflow runs the same gate itself.
|
|
78
78
|
4. Tag and push: `git tag -a vX.Y.Z && git push origin vX.Y.Z`. The tag must
|
|
79
79
|
match `package.json`'s version; the release workflow refuses mismatches.
|
|
80
|
-
5. `.github/workflows/release.yml`
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
5. `.github/workflows/release.yml` verifies the tag against `package.json`,
|
|
81
|
+
runs `npm run ci:release` on the tagged tree, and creates the GitHub
|
|
82
|
+
release with the tarball attached and the version's `CHANGELOG.md` section
|
|
83
|
+
as the body. It does not publish to npm.
|
|
84
84
|
6. A maintainer publishes from the tagged commit with `npm publish`;
|
|
85
85
|
`prepublishOnly` runs the same `ci:release` gate first.
|
|
86
86
|
|
package/README.md
CHANGED
|
@@ -160,6 +160,11 @@ numbered diffs, and `!` runs a shell command in the same transcript.
|
|
|
160
160
|
| Branch, revisit, or pick up a session | `/tree`, `/fork`, `/resume`, `/new` |
|
|
161
161
|
| Delegate to a fleet agent and watch it work | `/run coder "..."`, `/tasks`, `Alt+W` |
|
|
162
162
|
| Load a skill or bootstrap project context | `/skill <name>`, `/context init` |
|
|
163
|
+
| Ask a side question without touching the session, or get a read-only second opinion | `/btw <question>`, `/oracle <question>` |
|
|
164
|
+
| Put the same question to several models at once and read one synthesis | `/council --synthesis vote "..."` |
|
|
165
|
+
| Preview and run a multi-step fleet contract, resumable from the CLI | `/fleet run <name>` |
|
|
166
|
+
| Install agents, prompts, fleets, and skills from a catalog | `/library`, `/library agents` |
|
|
167
|
+
| Carry the working state into a fresh session | `/handoff <goal>` |
|
|
163
168
|
| Save a self-contained HTML transcript | `/export` (an explicit `.md` path keeps Markdown) |
|
|
164
169
|
| Everything else | `/help` |
|
|
165
170
|
|
|
@@ -215,9 +220,15 @@ fleet:
|
|
|
215
220
|
maxWorkers: 1
|
|
216
221
|
```
|
|
217
222
|
|
|
218
|
-
`clio-coder doctor` preflights every node
|
|
219
|
-
|
|
220
|
-
|
|
223
|
+
`clio-coder doctor` preflights every node. `clio-coder fleet list` names the
|
|
224
|
+
builtin and discovered contracts, `clio-coder fleet new|validate|graph`
|
|
225
|
+
authors a fleet contract from a builtin and checks it without dispatching
|
|
226
|
+
anything, `clio-coder fleet run|status` drives and observes work (`fleet run
|
|
227
|
+
--resume <runId>` replays a settled prefix), and `clio-coder fleet
|
|
228
|
+
drain|resume` closes or reopens admission without interrupting running work.
|
|
229
|
+
Contracts may declare a single writer, a gate step that must go red before the
|
|
230
|
+
author is trusted, and a plan step whose architect delegates bounded tasks to
|
|
231
|
+
a roster at run time. Nodes share the project
|
|
221
232
|
filesystem at the same absolute path, and a target URL resolves on the node the
|
|
222
233
|
worker runs on, so `localhost` means that node's own inference server. The
|
|
223
234
|
end-to-end walkthrough, including a recorded multi-node demo, is in
|
|
@@ -263,7 +274,7 @@ dist-tag instead.
|
|
|
263
274
|
From source, pinned to this release:
|
|
264
275
|
|
|
265
276
|
```bash
|
|
266
|
-
git clone --branch v0.3.
|
|
277
|
+
git clone --branch v0.3.7 https://github.com/iowarp/clio-coder.git
|
|
267
278
|
cd clio-coder
|
|
268
279
|
npm run install:local
|
|
269
280
|
export PATH="$HOME/.local/bin:$PATH"
|
|
@@ -289,7 +300,7 @@ Full lifecycle details, including `reset` and the upgrade path, are in
|
|
|
289
300
|
|
|
290
301
|
## Status
|
|
291
302
|
|
|
292
|
-
The current release is **v0.3.
|
|
303
|
+
The current release is **v0.3.7**, installable from npm as
|
|
293
304
|
[`@iowarp/clio-coder`](https://www.npmjs.com/package/@iowarp/clio-coder) or
|
|
294
305
|
from source. Clio Coder is still experimental: we ship quickly, interfaces may
|
|
295
306
|
change between minor versions, and model-specific behavior varies by target, so
|
|
@@ -6,26 +6,26 @@ import {
|
|
|
6
6
|
} from "./chunk-2VTFPG5O.js";
|
|
7
7
|
import {
|
|
8
8
|
runClioCommand
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-MXI6J5JF.js";
|
|
10
|
+
import "./chunk-YD734TPH.js";
|
|
11
11
|
import "./chunk-HKIYEGME.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-DOOEX22V.js";
|
|
13
|
+
import "./chunk-465YSENW.js";
|
|
14
14
|
import {
|
|
15
15
|
printError
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-PPAMZ32Z.js";
|
|
17
17
|
import "./chunk-5TSRNF4G.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-JRIO5UD2.js";
|
|
19
|
+
import "./chunk-UHXRNZ2J.js";
|
|
20
|
+
import "./chunk-4DGYLA73.js";
|
|
20
21
|
import "./chunk-LL4KHSZI.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-SST6Z5JA.js";
|
|
22
23
|
import {
|
|
23
24
|
MAX_TIMER_DELAY_MS
|
|
24
25
|
} from "./chunk-FQ4SKYE4.js";
|
|
26
|
+
import "./chunk-4ZG3XFUR.js";
|
|
25
27
|
import "./chunk-IKCO5N3L.js";
|
|
26
28
|
import "./chunk-3I7MS7N2.js";
|
|
27
|
-
import "./chunk-SST6Z5JA.js";
|
|
28
|
-
import "./chunk-4ZG3XFUR.js";
|
|
29
29
|
import "./chunk-APJ265NV.js";
|
|
30
30
|
import "./chunk-YXLYO42X.js";
|
|
31
31
|
import "./chunk-BNAZZHFG.js";
|
|
@@ -126,4 +126,4 @@ export {
|
|
|
126
126
|
resolveAcpCwd,
|
|
127
127
|
runAcpCommand
|
|
128
128
|
};
|
|
129
|
-
//# sourceMappingURL=acp-
|
|
129
|
+
//# sourceMappingURL=acp-SK4MD6MM.js.map
|
|
@@ -1,62 +1,68 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
AgentsDomainModule,
|
|
4
3
|
SafetyDomainModule
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-J7PIKKWC.js";
|
|
5
|
+
import "./chunk-JTSEDYVQ.js";
|
|
7
6
|
import {
|
|
8
7
|
ensureClioState
|
|
9
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-3HAPLH5M.js";
|
|
10
9
|
import {
|
|
11
10
|
ConfigDomainModule,
|
|
12
11
|
loadDomains
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import
|
|
12
|
+
} from "./chunk-BMWK7ZIZ.js";
|
|
13
|
+
import "./chunk-YD734TPH.js";
|
|
14
|
+
import "./chunk-RVG5JXAL.js";
|
|
15
|
+
import {
|
|
16
|
+
AgentsDomainModule
|
|
17
|
+
} from "./chunk-UVDSQ6LW.js";
|
|
18
|
+
import "./chunk-DR52UMZW.js";
|
|
19
|
+
import "./chunk-C4JBQ5SR.js";
|
|
17
20
|
import "./chunk-2SFS6XQE.js";
|
|
18
21
|
import "./chunk-ZWLZP4ZT.js";
|
|
22
|
+
import "./chunk-KCMKRQX4.js";
|
|
19
23
|
import "./chunk-IR4CFBFN.js";
|
|
20
24
|
import "./chunk-UOV2BYIW.js";
|
|
21
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-OBMAI2DP.js";
|
|
26
|
+
import "./chunk-GH5622CP.js";
|
|
27
|
+
import "./chunk-HWUFFB6L.js";
|
|
28
|
+
import "./chunk-DJNLUABN.js";
|
|
22
29
|
import {
|
|
23
30
|
isUserVisibleAgent
|
|
24
31
|
} from "./chunk-AOCYTWAV.js";
|
|
25
32
|
import "./chunk-MV3K5QF2.js";
|
|
26
|
-
import "./chunk-FYYLNIL5.js";
|
|
27
33
|
import "./chunk-UL3WSD3F.js";
|
|
28
34
|
import "./chunk-ECH6PKUQ.js";
|
|
29
35
|
import "./chunk-5B2AEOW5.js";
|
|
30
36
|
import "./chunk-CGKSTWHD.js";
|
|
31
37
|
import "./chunk-XPLRXC72.js";
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
38
|
+
import "./chunk-SROCI7ZU.js";
|
|
39
|
+
import "./chunk-DOOEX22V.js";
|
|
40
|
+
import "./chunk-465YSENW.js";
|
|
35
41
|
import {
|
|
36
42
|
printError
|
|
37
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-PPAMZ32Z.js";
|
|
38
44
|
import "./chunk-5TSRNF4G.js";
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-4OC57DA6.js";
|
|
41
|
-
import "./chunk-LL4KHSZI.js";
|
|
42
|
-
import "./chunk-4VP4KH3K.js";
|
|
43
|
-
import "./chunk-VEZEGCGW.js";
|
|
44
|
-
import "./chunk-FQ4SKYE4.js";
|
|
45
|
-
import "./chunk-IKCO5N3L.js";
|
|
46
|
-
import "./chunk-3I7MS7N2.js";
|
|
45
|
+
import "./chunk-JRIO5UD2.js";
|
|
47
46
|
import "./chunk-IHXBNWMM.js";
|
|
47
|
+
import "./chunk-UHXRNZ2J.js";
|
|
48
|
+
import "./chunk-4DGYLA73.js";
|
|
49
|
+
import "./chunk-LL4KHSZI.js";
|
|
48
50
|
import "./chunk-SST6Z5JA.js";
|
|
49
51
|
import "./chunk-FO5ZOVUY.js";
|
|
50
52
|
import "./chunk-R346GLFC.js";
|
|
53
|
+
import "./chunk-D4MDIG46.js";
|
|
54
|
+
import "./chunk-FQ4SKYE4.js";
|
|
51
55
|
import "./chunk-4ZG3XFUR.js";
|
|
56
|
+
import "./chunk-IKCO5N3L.js";
|
|
57
|
+
import "./chunk-3I7MS7N2.js";
|
|
52
58
|
import "./chunk-APJ265NV.js";
|
|
53
59
|
import "./chunk-YXLYO42X.js";
|
|
54
60
|
import "./chunk-BNAZZHFG.js";
|
|
55
61
|
import "./chunk-6EJMN2Y3.js";
|
|
56
62
|
import "./chunk-WEPFGWHJ.js";
|
|
57
|
-
import "./chunk-
|
|
63
|
+
import "./chunk-X2KV5FXT.js";
|
|
58
64
|
import "./chunk-ZGVHUX3M.js";
|
|
59
|
-
import "./chunk-
|
|
65
|
+
import "./chunk-OB5HIGJY.js";
|
|
60
66
|
import "./chunk-IWHMRKLL.js";
|
|
61
67
|
import {
|
|
62
68
|
init_esm_shims
|
|
@@ -109,11 +115,12 @@ async function runAgentsCommand(args) {
|
|
|
109
115
|
function renderLine(spec) {
|
|
110
116
|
const shape = `${spec.audience}/${spec.category}/${spec.capabilityClass}/${spec.latencyClass}`;
|
|
111
117
|
const skills = spec.skills.length > 0 ? ` skills=${spec.skills.join(",")}` : "";
|
|
112
|
-
const
|
|
118
|
+
const maximum = spec.budget.maximum ? `..${spec.budget.maximum.toolCalls}/${spec.budget.maximum.readReserve}` : "";
|
|
119
|
+
const budget = `${spec.budget.toolCalls}/${spec.budget.readReserve}${maximum}/${spec.budget.synthesis ? "synthesize" : "stop"}`;
|
|
113
120
|
process.stdout.write(`${spec.id.padEnd(20)} ${shape.padEnd(48)} ${spec.description}${skills} budget=${budget}
|
|
114
121
|
`);
|
|
115
122
|
}
|
|
116
123
|
export {
|
|
117
124
|
runAgentsCommand
|
|
118
125
|
};
|
|
119
|
-
//# sourceMappingURL=agents-
|
|
126
|
+
//# sourceMappingURL=agents-2FN2K6ME.js.map
|