@iowarp/clio-coder 0.3.9 → 0.4.0
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 +53 -0
- package/NOTICE +33 -0
- package/README.md +7 -2
- package/dist/{acp-7LOELQFP.js → acp-G5WJBNCT.js} +13 -12
- package/dist/{agents-FIBG2SHA.js → agents-FMV2Q5G4.js} +39 -36
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-3IDSJEIK.js} +16 -15
- package/dist/{builtins-AD25UL3C.js → builtins-XCZWXSC7.js} +3 -3
- package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
- package/dist/{chunk-56KB5IJP.js → chunk-2OQE55CK.js} +3 -3
- package/dist/{chunk-N3PBVRTZ.js → chunk-32KWKNSF.js} +9 -7
- package/dist/{chunk-VKBMFOYV.js → chunk-36EJLSQQ.js} +23 -27
- package/dist/{chunk-465CC7FK.js → chunk-3BT2XMV4.js} +16 -13
- package/dist/{chunk-NQ6UCCOD.js → chunk-3URVFKWK.js} +7 -7
- package/dist/{chunk-WIE7ZOSW.js → chunk-3XML7CDN.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-JEQQR47K.js → chunk-6DB53AJS.js} +168 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-76ONBSIA.js} +5 -25
- package/dist/{chunk-FALJGAWU.js → chunk-7MCTRUCE.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-AB44T6BB.js} +5 -5
- package/dist/chunk-B7OBL7PK.js +1405 -0
- package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
- package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
- package/dist/{chunk-O6I4CIEU.js → chunk-BKFJHQCA.js} +6 -6
- package/dist/chunk-BKFM6EJV.js +462 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-MV2VUEJC.js → chunk-BPKCPIL7.js} +2 -2
- package/dist/{chunk-TEO2TLVN.js → chunk-BUMFYQFY.js} +964 -1120
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/chunk-C2LTL2W6.js +2447 -0
- package/dist/{chunk-EBOC7MT3.js → chunk-CODPRO7Q.js} +8 -8
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
- package/dist/{chunk-MIX5N5AC.js → chunk-DQITNCXG.js} +394 -154
- package/dist/{chunk-S4COXYBG.js → chunk-DYJP44XW.js} +129 -106
- package/dist/{chunk-N5XKWMDW.js → chunk-F4CKPOEQ.js} +6 -6
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-GKF55TAZ.js} +3 -3
- package/dist/{chunk-B5XRQOLB.js → chunk-GR5G2PVF.js} +9 -8
- package/dist/{chunk-XDOQXGFO.js → chunk-GXNLGKAB.js} +64 -8
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/{chunk-774ILSRL.js → chunk-HI63TFOG.js} +4 -3
- package/dist/{chunk-R7LNVMCS.js → chunk-HJJTYUHX.js} +64 -72
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/{chunk-CA42X6KT.js → chunk-HWHKMHUA.js} +6 -6
- package/dist/chunk-HZHHCK24.js +1631 -0
- package/dist/{chunk-HJB5IUKP.js → chunk-I5VEOC6I.js} +12 -12
- package/dist/chunk-IBEBSCYA.js +564 -0
- package/dist/chunk-IQ7KR472.js +362 -0
- package/dist/{chunk-4H6ULJ3H.js → chunk-J4W7KFM7.js} +921 -990
- package/dist/{chunk-4LJX2PUC.js → chunk-JDG2WCRO.js} +5 -5
- package/dist/{chunk-NZU6YDNV.js → chunk-K5C3NCBD.js} +4 -4
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-NNNWO6F2.js → chunk-KFZI4NIL.js} +93 -3
- package/dist/chunk-KMVISBZR.js +132 -0
- package/dist/{chunk-BVDVID7E.js → chunk-LDQ2ZF2M.js} +2 -2
- package/dist/{chunk-OEDBCISO.js → chunk-LQ3DZAMX.js} +2 -2
- package/dist/{chunk-PZ4I4JE2.js → chunk-LY4S7GJC.js} +124 -116
- package/dist/{chunk-3DUR4WUA.js → chunk-MLKNTWH2.js} +19 -19
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-5DQRIYDZ.js → chunk-NHCZP4K7.js} +2 -2
- package/dist/chunk-NHLBIGRH.js +1506 -0
- package/dist/chunk-NQQH3YT7.js +302 -0
- package/dist/chunk-NYS75XW5.js +15 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-O4XIVISU.js} +7 -7
- package/dist/{chunk-WXCJ7VME.js → chunk-O6TL7WWY.js} +6 -6
- package/dist/chunk-OQBA45DZ.js +97 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
- package/dist/{chunk-HKO36JWF.js → chunk-QBJA7R7N.js} +31 -3
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-5HFBWUMU.js → chunk-QLFS5GO2.js} +4 -4
- package/dist/{chunk-GAYUJ7LE.js → chunk-QLL7ILRG.js} +41 -32
- package/dist/{chunk-LXPJXFM5.js → chunk-QREDIESB.js} +7 -7
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/{chunk-VPTUJU4P.js → chunk-SJ5ZKQ4S.js} +2 -2
- package/dist/{chunk-QQ7EKM72.js → chunk-SP2RXXYO.js} +6 -54
- package/dist/chunk-SUCTJL45.js +45 -0
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/{chunk-IHKBWSXF.js → chunk-TZ3SGWZZ.js} +2 -2
- package/dist/{chunk-ECUO3KDP.js → chunk-U77AMWDL.js} +47 -7
- package/dist/{chunk-3UUY7R3Z.js → chunk-ULC6OTWO.js} +7 -7
- package/dist/{chunk-AEYBF3TB.js → chunk-UM7N4G5A.js} +2 -2
- package/dist/{chunk-3V5AYSEQ.js → chunk-UXMFQ54G.js} +43 -36
- package/dist/{chunk-YW7UVM5V.js → chunk-V5DHCITQ.js} +34 -1
- package/dist/{chunk-47CMYGET.js → chunk-VAZSBTKF.js} +2 -2
- package/dist/{chunk-3MRC2YSQ.js → chunk-VEO4AP2K.js} +2 -2
- package/dist/{chunk-PNY46YEY.js → chunk-VFA6GDY5.js} +47 -3
- package/dist/chunk-VO67MWHC.js +75 -0
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-AD7Y7STJ.js → chunk-VYMXRQI6.js} +36 -22
- package/dist/{chunk-T3Z6VAAF.js → chunk-W5VSYASO.js} +19 -17
- package/dist/{chunk-5PVQ4SRS.js → chunk-WZR7K7ZX.js} +7 -123
- package/dist/{chunk-DG4M6ZUE.js → chunk-X3YGUTOB.js} +4 -4
- package/dist/chunk-X75E3D2N.js +686 -0
- package/dist/{chunk-P3JGPQFL.js → chunk-YDFRH54B.js} +4 -4
- package/dist/chunk-YJX4SHTD.js +40 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YSEHGPCT.js → chunk-Z2RR6MAK.js} +3 -3
- package/dist/{chunk-HCBCAYZU.js → chunk-Z4TXYIEG.js} +5 -5
- package/dist/cli/index.js +47 -36
- package/dist/{clio-LT5V7SSZ.js → clio-2JXHBBY5.js} +7 -7
- package/dist/{code-nav-LMW275PA.js → code-nav-3YYRMYNF.js} +6 -6
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
- package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
- package/dist/{config-RXS5T3JT.js → config-QZPCMYSO.js} +58 -50
- package/dist/{configure-2WYWSCSD.js → configure-TEGEBYCA.js} +21 -19
- package/dist/{context-I3BTOTCS.js → context-AV7OEZ4D.js} +11 -11
- package/dist/{context-MVOORGMF.js → context-E6H5RNMC.js} +49 -41
- package/dist/{context-PALKKQYL.js → context-GSXUE4CT.js} +25 -23
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-SHIBYK6T.js} +48 -40
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-5ZGKPGZQ.js} +11 -10
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-EFMJT4LD.js} +88 -60
- package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
- package/dist/doctor-QOA5FNY5.js +313 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-TFBYQH4H.js} +66 -64
- package/dist/eval-inventory-SXH7PDKX.js +316 -0
- package/dist/{evidence-L5APPXNV.js → evidence-ERGESKGN.js} +198 -44
- package/dist/{evolve-RGNKFJ52.js → evolve-VDXTSYCJ.js} +46 -38
- package/dist/{extensions-7WYWUX5A.js → extensions-7BGBHN57.js} +6 -6
- package/dist/{fleet-6CNVBZZP.js → fleet-2RRVDF2V.js} +189 -101
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-VJ726XIA.js} +10 -10
- package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-JF5QOATM.js} +16 -15
- package/dist/fleet-inspect-VLY4S7QM.js +442 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-AIZUEJOY.js} +6 -5
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-AJRPDMDV.js} +20 -18
- package/dist/fleet-verify-JFEL2L3H.js +175 -0
- package/dist/fleet-view-ZCON35AG.js +102 -0
- package/dist/{init-VBN2ACVA.js → init-DN2WWLFE.js} +64 -56
- package/dist/install-XGLBQY5E.js +13 -0
- package/dist/interop-OZBKXAYL.js +114 -0
- package/dist/{library-JHGUMLY2.js → library-YWZG7IMW.js} +19 -18
- package/dist/{memory-K4OQIYWG.js → memory-I4C4HMLW.js} +48 -40
- package/dist/{models-2NCZUWDD.js → models-CEYXJBO6.js} +30 -28
- package/dist/{monitor-MMVTJABD.js → monitor-NZ6GCI3P.js} +53 -47
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-GCGQ4N5I.js} +6311 -7145
- package/dist/panes-HMABYVO4.js +58 -0
- package/dist/panes-KY6W3V2E.js +103 -0
- package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
- package/dist/{reset-DD5JGOY3.js → reset-DQ6FGCSH.js} +13 -11
- package/dist/resources-BB3MVJMD.js +111 -0
- package/dist/{run-QEGNX7FL.js → run-H2GQDUER.js} +113 -82
- package/dist/{share-JKD3BQMW.js → share-GTJN6A5O.js} +18 -17
- package/dist/{skills-LMQIKDOZ.js → skills-L55TEW6R.js} +31 -24
- package/dist/{skills-eval-I7X2774U.js → skills-eval-XVXPH2JI.js} +61 -52
- package/dist/skills-inventory-S4MXPJFV.js +126 -0
- package/dist/slash-commands-ZSGASKJC.js +77 -0
- package/dist/{steer-CF5TDANS.js → steer-RZGSCY4R.js} +3 -3
- package/dist/{support-I7LOJLIF.js → support-PKEUNNQL.js} +4 -4
- package/dist/{targets-RUSR6B5Z.js → targets-NCPZ644J.js} +31 -29
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-44SV3YCN.js} +4 -4
- package/dist/tools-DAF3DI3C.js +27 -0
- package/dist/{trace-ODOQIVIW.js → trace-FYVW2MQA.js} +149 -7
- package/dist/tui-primitives-2AKXQNZK.js +13 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
- package/dist/{upgrade-XANW3FXB.js → upgrade-3XPP6OQL.js} +26 -24
- package/dist/{usage-4H7ZRXQT.js → usage-3NLHGTU2.js} +57 -49
- package/dist/{verifiers-UZXNBZEB.js → verifiers-SSQONKRT.js} +171 -12
- package/dist/{verify-BVKWTNDL.js → verify-3U6J7FZI.js} +9 -9
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-CEHYGPGQ.js} +67 -59
- package/dist/with-panes-MKB46MPQ.js +782 -0
- package/dist/worker/entry.js +101 -66
- package/docs/README.md +3 -2
- package/docs/acp.md +24 -3
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +31 -2
- package/docs/configuration-and-targets.md +40 -10
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +1 -0
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-dispatch.md +22 -1
- package/docs/installation-and-lifecycle.md +15 -2
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +4 -2
- package/src/cli/acp.ts +6 -2
- package/src/cli/argv.ts +25 -0
- package/src/cli/configure.ts +23 -21
- package/src/cli/doctor-panes.ts +124 -0
- package/src/cli/doctor-toolchain.ts +57 -0
- package/src/cli/doctor.ts +20 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +810 -0
- package/src/cli/fleet.ts +148 -37
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +5 -2
- package/src/cli/run.ts +58 -0
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +23 -2
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/core/bus-events.ts +4 -0
- package/src/core/config.ts +49 -0
- package/src/core/defaults.ts +93 -7
- package/src/core/response-schema.ts +44 -4
- package/src/core/theme-token-hex.ts +43 -0
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +164 -35
- package/src/domains/config/classify.ts +3 -0
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- package/src/domains/dispatch/capacity-lease.ts +21 -1
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +222 -50
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-run.ts +64 -1
- package/src/domains/dispatch/gate-decisions.ts +11 -1
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/reservation-store.ts +24 -4
- package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +598 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/types.ts +13 -0
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/schema/serving.ts +31 -0
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/memory/index.ts +0 -1
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/mux/contract.ts +434 -0
- package/src/domains/mux/detect.ts +158 -0
- package/src/domains/mux/extension.ts +47 -0
- package/src/domains/mux/index.ts +96 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +164 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +49 -0
- package/src/domains/mux/socket-client.ts +816 -0
- package/src/domains/mux/types.ts +222 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +180 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +228 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/index.ts +2 -0
- package/src/domains/observability/trace-store.ts +42 -0
- package/src/domains/providers/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +20 -3
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/model-runtime-capabilities.ts +32 -0
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/loader.ts +33 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/server.ts +413 -70
- package/src/engine/acp/types.ts +19 -1
- package/src/engine/claude/sdk-module.ts +98 -0
- package/src/engine/claude/sdk-runtime.ts +19 -11
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-runtime.ts +2 -13
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +103 -5
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/context-overlay.ts +1 -0
- package/src/interactive/cost-overlay.ts +2 -0
- package/src/interactive/council-grid.ts +1 -3
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +26 -16
- package/src/interactive/interactive-application.ts +153 -6
- package/src/interactive/interactive-input-runtime.ts +7 -0
- package/src/interactive/interactive-slash-runtime.ts +36 -6
- package/src/interactive/memory-overlay.ts +1 -0
- package/src/interactive/modal-marker.ts +170 -0
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +58 -2
- package/src/interactive/overlay-general-openers.ts +1 -0
- package/src/interactive/overlay-key-routing.ts +14 -3
- package/src/interactive/overlay-lifecycle.ts +19 -3
- package/src/interactive/overlay-model-selectors.ts +40 -3
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +1 -0
- package/src/interactive/overlays/ask-user.ts +136 -30
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +1 -0
- package/src/interactive/overlays/cwd-fallback.ts +1 -0
- package/src/interactive/overlays/decisions.ts +11 -11
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +1 -0
- package/src/interactive/overlays/handoff-review.ts +1 -0
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +1 -0
- package/src/interactive/overlays/library-install-confirm.ts +1 -0
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +1 -0
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +1 -0
- package/src/interactive/overlays/prompts.ts +1 -0
- package/src/interactive/overlays/session-selector.ts +1 -0
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +579 -44
- package/src/interactive/overlays/side-question.ts +1 -0
- package/src/interactive/overlays/skills-hub.ts +3 -11
- package/src/interactive/overlays/tree-selector.ts +1 -0
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +292 -0
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/slash-commands.ts +251 -15
- package/src/interactive/tasks-overlay.ts +1 -0
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +47 -2
- package/src/interactive/view/artifacts.ts +109 -1
- package/src/interactive/view/view-overlay.ts +1 -0
- package/src/interactive/watch-pane.ts +152 -0
- package/src/interactive/worker-progress.ts +7 -1
- package/src/interactive/worker-receipts.ts +19 -1
- package/src/interactive/worker-stream.ts +5 -0
- package/src/interactive/yazi-bridge.ts +444 -0
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +15 -0
- package/src/tools/compete-worktrees.ts +83 -2
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +14 -3
- package/src/tools/dispatch-arguments.ts +20 -20
- package/src/tools/dispatch-run-events.ts +134 -19
- package/src/tools/dispatch-runner.ts +29 -7
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/executables.ts +17 -14
- package/src/tools/observation.ts +54 -4
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/dist/chunk-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/doctor-TWBWFK5V.js +0 -165
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Configuration, Targets, Runtimes, and Auth
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive configuration validator, target resolver, and CLI command generator is located at [docs/html/configuration_blueprint.html](html/configuration_blueprint.html) (Version: 0.
|
|
4
|
+
> **Interactive Spec Available:** An interactive configuration validator, target resolver, and CLI command generator is located at [docs/html/configuration_blueprint.html](html/configuration_blueprint.html) (Version: 0.4.0).
|
|
5
5
|
|
|
6
6
|
Clio Coder is target-first: chat and fleet dispatch resolve through configured targets in `settings.yaml`, not through provider-specific ad hoc flags. Chat and print targets are HTTP and native engine-backed runtimes. Fleet dispatch can also target the sanctioned Claude Code subscription runtimes described below.
|
|
7
7
|
|
|
@@ -29,7 +29,7 @@ Default config file:
|
|
|
29
29
|
<configDir>/settings.yaml
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Role contents: config holds user-authored files (settings, credentials, agents, skills, prompts, extensions, runtimes); data holds durable artifacts (memory, evidence, evals); state holds machine-produced session state (sessions, audit, receipts, runs.json, recent-models.json, install.json, interop.json, interviews, scratch); cache holds disposable derived files.
|
|
32
|
+
Role contents: config holds user-authored files (settings, credentials, agents, skills, prompts, extensions, runtimes); data holds durable artifacts (memory, evidence, evals, vendored external tools); state holds machine-produced session state (sessions, audit, receipts, runs.json, recent-models.json, install.json, interop.json, interviews, scratch); cache holds disposable derived files.
|
|
33
33
|
|
|
34
34
|
The `library` settings block configures the private resource catalog. `library.catalog` is an optional path and defaults to `<configDir>/library.yaml`. `library.remote` is an optional git remote URL, and the catalog repository must name that git remote `library`. `library.sync` defaults to `false`, which makes sync and push refuse before spawning git. `library.confirmedRemote` is written by `clio-coder library remote confirm <url>` and must exactly match `library.remote` before sync or push can run. Confirmation sets both values when `library.remote` is unset and refuses a differing configured URL with `library_remote_mismatch`. See [resource-library.md](resource-library.md).
|
|
35
35
|
|
|
@@ -508,19 +508,19 @@ The Settings Center organizes all configuration under four non-selectable group
|
|
|
508
508
|
|
|
509
509
|
| Group | Section | Rows, in order |
|
|
510
510
|
| --- | --- | --- |
|
|
511
|
-
| **CORE** | Autonomy & Safety (`safety`) | `autonomy`, `workers.onPermission`, `delegation.defaults.toolGovernance`, `skills.trustProjectCompatRoots`, and the read-only safety-net fact. |
|
|
512
|
-
| **CORE** | Orchestrator (`orchestrator`) | `orchestrator.thinkingLevel`, `orchestrator.target`, `orchestrator.model`, the memory plane (`background.target`, `background.model`, `background.thinkingLevel`), and the proactive-memory knobs (`memory.intervention.enabled`, `.everyNTools`, `.windowSteps`, `.maxTokens`, `.timeoutMs`). Changing target rebases model and thinking choices. |
|
|
513
|
-
| **ROUTING** | Fleet (`fleet`) | `workers.default.target`, `workers.default.model`, `workers.default.thinkingLevel`, `workers.maxRetries`, `workers.profiles`,
|
|
511
|
+
| **CORE** | Autonomy & Safety (`safety`) | `autonomy`, `workers.onPermission`, the escalation bounds that keep that posture non-stall (`workers.escalation.timeoutMs`, `workers.escalation.fallback`), `delegation.defaults.toolGovernance`, `skills.trustProjectCompatRoots`, and the read-only safety-net fact. |
|
|
512
|
+
| **CORE** | Orchestrator (`orchestrator`) | `orchestrator.thinkingLevel`, `orchestrator.target`, `orchestrator.model`, the memory plane (`background.target`, `background.model`, `background.thinkingLevel`), and the proactive-memory knobs (`memory.intervention.enabled`, `.everyNTools`, `.windowSteps`, `.maxTokens`, `.timeoutMs`), and `prewarm.enabled`. Changing target rebases model and thinking choices. |
|
|
513
|
+
| **ROUTING** | Fleet (`fleet`) | `workers.default.target`, `workers.default.model`, `workers.default.thinkingLevel`, `workers.maxRetries`, `workers.resilienceCooldownMs`, `workers.profiles`, `workers.agentBindings`, and the routing activation set (`routing.activeRoles`, `routing.activePostures`, and the read-only `routing.agentAutomation.activeAgentRoles`), rendered under the group headers `Defaults`, `Profiles`, `Agent routes`, `Route activation`, and `Placement`. Profile rows carry a `◆ Edit` drill-down and a destructive removal preflight; placement rows are read-only node status. |
|
|
514
514
|
| **ROUTING** | Targets (`targets`) | The `targets` console table (`HEALTH`, `ID`, `ROLES`, `RUNTIME`, `LATENCY`) with an in-place action and detail drawer for URL, default model, last probe, and failure reason. Actions include `Use`, `Connect`, `Probe`, and `Remove`. |
|
|
515
515
|
| **ROUTING** | Models (`models`) | `scope`, `modelSelector.recentLimit`, and `modelSelector.favorites`, rendered as a provider-backed checklist with target-level and target/model entries, `Space` toggle, capability inspector, and a preserved `Unavailable` group. Deep link `/scoped-models`. |
|
|
516
|
-
| **RUNTIME** | Budget (`budget`) | `budget.sessionCeilingUsd`, `defaults.maxTokens`,
|
|
517
|
-
| **RUNTIME** | Compaction (`compaction`) | `compaction.auto`, `compaction.threshold`,
|
|
518
|
-
| **RUNTIME** | Retry (`retry`) | `retry.enabled`, `retry.maxRetries`, `retry.baseDelayMs`, and `retry.
|
|
516
|
+
| **RUNTIME** | Budget (`budget`) | `budget.sessionCeilingUsd`, `defaults.maxTokens`, `budget.concurrency` (restart required), and the six `guardrails.*` backstops under a `Guardrails` group header. |
|
|
517
|
+
| **RUNTIME** | Compaction (`compaction`) | `compaction.auto`, `compaction.threshold`, `compaction.excludeLastTurns`, and the five `context.workingSet.*` keys under a `Working set` group header. |
|
|
518
|
+
| **RUNTIME** | Retry (`retry`) | `retry.enabled`, `retry.maxRetries`, `retry.baseDelayMs`, `retry.maxDelayMs`, and `retry.streamStallMs`. |
|
|
519
519
|
| **EXPERIENCE** | Terminal (`terminal`) | `terminal.showTerminalProgress`, `terminal.outputVerbosity` (`minimal`, `default`, `verbose`), `terminal.tuiMode` (`regular`, `fullscreen`), `terminal.fullscreenScrollbar` (`hidden`, `auto`, `always`), `terminal.smoothStreaming` (`off`, `auto`, `on`), `terminal.notify`, and `theme`. |
|
|
520
520
|
| **EXPERIENCE** | Watchdog (`watchdog`) | `watchdog.enabled`, `watchdog.target`, and `watchdog.cadenceToolCalls`. The two optional keys are editable text rows that render their absence as `(session target)` and `(turn end only)`; submitting an empty value removes the key from `settings.yaml` rather than storing a blank. |
|
|
521
|
-
| **EXPERIENCE** | Advanced (`advanced`) | `runtimePlugins`, `attribution.gitCommits`, `compaction.model`, `compaction.systemPrompt`, `delegation.defaults.connectTimeoutMs`, `delegation.defaults.turnTimeoutMs`, `delegation.defaults.permissionTimeoutMs`, `keybindings`,
|
|
521
|
+
| **EXPERIENCE** | Advanced (`advanced`) | `runtimePlugins`, `attribution.gitCommits`, `compaction.model`, `compaction.systemPrompt`, `delegation.defaults.connectTimeoutMs`, `delegation.defaults.turnTimeoutMs`, `delegation.defaults.permissionTimeoutMs`, `keybindings`, `delegation.agents`, and the four `library.*` keys under a `Library` group header. `library.confirmedRemote` is read-only: the confirm flow writes it, because confirming a remote from its own row would be the trust record confirming itself. |
|
|
522
522
|
|
|
523
|
-
`
|
|
523
|
+
Every key `settings.yaml` accepts now has a row, except the ones the Center cannot edit as a nested structure: `workers.rosters` and `routing.agentAutomation.activeAgentRoles` are authored in `settings.yaml`, and the latter has a read-only row that reports the active pairs. `tests/contracts/settings-center.test.ts` enforces this against `DEFAULT_SETTINGS`.
|
|
524
524
|
|
|
525
525
|
Label to config path mapping:
|
|
526
526
|
|
|
@@ -528,6 +528,8 @@ Label to config path mapping:
|
|
|
528
528
|
| --- | --- |
|
|
529
529
|
| Autonomy level | `autonomy` |
|
|
530
530
|
| Fleet approvals routing | `workers.onPermission` |
|
|
531
|
+
| Escalation timeout (ms) | `workers.escalation.timeoutMs` |
|
|
532
|
+
| Escalation fallback | `workers.escalation.fallback` (`deny` or `fail`) |
|
|
531
533
|
| Delegation governance | `delegation.defaults.toolGovernance` |
|
|
532
534
|
| Trust project skill roots | `skills.trustProjectCompatRoots` |
|
|
533
535
|
| Safety net | read-only fact, no config path |
|
|
@@ -542,10 +544,15 @@ Label to config path mapping:
|
|
|
542
544
|
| Memory trajectory steps | `memory.intervention.windowSteps` |
|
|
543
545
|
| Memory reminder tokens | `memory.intervention.maxTokens` |
|
|
544
546
|
| Memory timeout (ms) | `memory.intervention.timeoutMs` |
|
|
547
|
+
| Prompt pre-warm | `prewarm.enabled` |
|
|
545
548
|
| Default target | `workers.default.target` |
|
|
546
549
|
| Default model | `workers.default.model` |
|
|
547
550
|
| Default thinking level | `workers.default.thinkingLevel` |
|
|
548
551
|
| Fleet retries | `workers.maxRetries` |
|
|
552
|
+
| Resilience cooldown (ms) | `workers.resilienceCooldownMs` (0 disables the cooldown) |
|
|
553
|
+
| Active routing roles | `routing.activeRoles` (comma-separated from `researcher`, `verifier`, `reviewer`, `judge`) |
|
|
554
|
+
| Active routing postures | `routing.activePostures` (comma-separated from `quality`, `balanced`, `latency`, `economy`) |
|
|
555
|
+
| Active agent routes | `routing.agentAutomation.activeAgentRoles` (read-only; edit the pairs in `settings.yaml`) |
|
|
549
556
|
| Add profile | `workers.profiles` |
|
|
550
557
|
| Add agent route | `workers.agentBindings` |
|
|
551
558
|
| Configured targets | `targets` |
|
|
@@ -555,13 +562,25 @@ Label to config path mapping:
|
|
|
555
562
|
| Session ceiling (USD) | `budget.sessionCeilingUsd` |
|
|
556
563
|
| Output budget (tokens) | `defaults.maxTokens` |
|
|
557
564
|
| Fleet concurrency | `budget.concurrency` (restart required) |
|
|
565
|
+
| Turn tool-call budget | `guardrails.turnToolCallBudget` |
|
|
566
|
+
| Worker tool-call cap | `guardrails.workerToolCallCap` |
|
|
567
|
+
| Run ledger retention | `guardrails.maxDispatchRuns` |
|
|
568
|
+
| Read byte cap | `guardrails.readMaxBytes` |
|
|
569
|
+
| Observation byte pool | `guardrails.observationTurnBudgetBytes` |
|
|
570
|
+
| Internal dispatch timeout (ms) | `guardrails.internalDispatchTimeoutMs` |
|
|
558
571
|
| Auto-compact | `compaction.auto` |
|
|
559
572
|
| Compaction threshold | `compaction.threshold` |
|
|
560
573
|
| Protected recent turns | `compaction.excludeLastTurns` |
|
|
574
|
+
| Working-set eviction | `context.workingSet.enabled` |
|
|
575
|
+
| Eviction policy | `context.workingSet.policy` (`structural-v1` or `age-horizon`) |
|
|
576
|
+
| Eviction target pressure | `context.workingSet.target` (greater than 0, less than 1) |
|
|
577
|
+
| Turns protected from eviction | `context.workingSet.protectLastTurns` |
|
|
578
|
+
| Minimum evictable tokens | `context.workingSet.minEvictableTokens` |
|
|
561
579
|
| Retry transient errors | `retry.enabled` |
|
|
562
580
|
| Max retries | `retry.maxRetries` |
|
|
563
581
|
| Base delay (ms) | `retry.baseDelayMs` |
|
|
564
582
|
| Max delay (ms) | `retry.maxDelayMs` |
|
|
583
|
+
| Stream stall timeout (ms) | `retry.streamStallMs` |
|
|
565
584
|
| Terminal progress badges | `terminal.showTerminalProgress` |
|
|
566
585
|
| Output detail | `terminal.outputVerbosity` (`minimal`, `default`, or `verbose`) |
|
|
567
586
|
| TUI mode | `terminal.tuiMode` (`regular` or `fullscreen`, restart required) |
|
|
@@ -581,6 +600,10 @@ Label to config path mapping:
|
|
|
581
600
|
| Delegate permission (ms) | `delegation.defaults.permissionTimeoutMs` |
|
|
582
601
|
| Keybinding overrides | `keybindings` |
|
|
583
602
|
| Delegation agents | `delegation.agents` |
|
|
603
|
+
| Library catalog path | `library.catalog` (blank uses the config directory) |
|
|
604
|
+
| Library remote | `library.remote` (blank keeps the library local) |
|
|
605
|
+
| Confirmed library remote | `library.confirmedRemote` (read-only; written by the confirm flow) |
|
|
606
|
+
| Library sync | `library.sync` |
|
|
584
607
|
|
|
585
608
|
---
|
|
586
609
|
|
|
@@ -669,6 +692,13 @@ Every one of these has an environment override for a single process; see [enviro
|
|
|
669
692
|
| `context.workingSet.protectLastTurns` | `6` | integer ≥ 1 | next turn |
|
|
670
693
|
| `context.workingSet.minEvictableTokens` | `200` | integer ≥ 0 | next turn |
|
|
671
694
|
| `prewarm.enabled` | `true` | boolean | next turn |
|
|
695
|
+
| `panes.enabled` | `off` | `auto`, `embedded`, or `off` | restart; `--with-panes` / `--no-panes` beat it |
|
|
696
|
+
| `panes.notifications` | `failures` | `failures`, `all`, or `off` | next dispatch |
|
|
697
|
+
| `panes.journal` | `true` | boolean | next dispatch |
|
|
698
|
+
| `panes.yazi.enabled` | `true` | boolean | immediately, on the next files-pane open |
|
|
699
|
+
| `panes.yazi.mode` | `companion` | `companion` or `chooser` | immediately, on the next files-pane open |
|
|
700
|
+
| `panes.yazi.profile` | `managed` | `managed` or `user` | immediately, on the next files-pane open |
|
|
701
|
+
| `panes.yazi.followCwd` | `true` | boolean | immediately, on the next explicit files-pane open |
|
|
672
702
|
| `defaults.maxTokens` | `32768` | integer ≥ 0 | next turn |
|
|
673
703
|
| `budget.sessionCeilingUsd` | `5` | number ≥ 0 | immediately |
|
|
674
704
|
| `budget.concurrency` | `auto` | `auto` or integer ≥ 1 | next dispatch |
|
package/docs/context-engine.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Context Engine
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive dashboard is located at [docs/html/context_blueprint.html](html/context_blueprint.html) (Version: 0.
|
|
4
|
+
> **Interactive Spec Available:** An interactive dashboard is located at [docs/html/context_blueprint.html](html/context_blueprint.html) (Version: 0.4.0).
|
|
5
5
|
|
|
6
6
|
Clio Coder tracks context pressure, records per-turn snapshots, and protects the provider context with bounded tool results plus single-threshold compaction.
|
|
7
7
|
|
|
@@ -56,6 +56,25 @@ commit the dependency pins, snapshot, boundary notes, and proving contracts
|
|
|
56
56
|
together. `npm run lint` invokes the surface check automatically when the
|
|
57
57
|
installed Pi versions differ from the checked-in snapshot.
|
|
58
58
|
|
|
59
|
+
## Test lanes
|
|
60
|
+
|
|
61
|
+
`npm test` runs `scripts/shard-tests.mjs`. Contract and smoke files are assigned
|
|
62
|
+
deterministically to weighted parallel lanes, with timings from
|
|
63
|
+
`scripts/shard-weights.json`; `--list` shows the assignment and `--shard <n>`
|
|
64
|
+
reproduces one numbered lane. Tests whose assertion is itself sensitive to
|
|
65
|
+
wall-clock scheduling live in the explicit serial set. The runner waits for all
|
|
66
|
+
parallel lanes to drain, then runs that set alone with
|
|
67
|
+
`CLIO_TEST_CONCURRENCY=1`. Reproduce it with:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
node scripts/shard-tests.mjs --shard serial
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Do not repair a timing-measurement failure by widening its product bound or by
|
|
74
|
+
moving ordinary watchdog tests into the serial set. `tests/harness/load.ts`
|
|
75
|
+
scales watchdogs by the parallel lane count; the serial lane is reserved for
|
|
76
|
+
claims that cease to mean the same thing under contention.
|
|
77
|
+
|
|
59
78
|
## Issue conventions
|
|
60
79
|
|
|
61
80
|
- **Title**: conventional tag plus imperative summary (`fix: memory overlay
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
# Typed Dispatch Intent: Migration and Refusal Policy
|
|
2
|
+
|
|
3
|
+
Typed dispatch intent is the structured declaration of what a dispatched worker
|
|
4
|
+
may read, may write, is expected to produce, and must verify. It replaces the
|
|
5
|
+
practice of reconstructing that answer from optional `writeRoots` plus path-like
|
|
6
|
+
tokens recalled from task and briefing prose.
|
|
7
|
+
|
|
8
|
+
This page is the migration contract. It names every dispatch producer and every
|
|
9
|
+
persisted structure typed intent touches, states what happens when intent is
|
|
10
|
+
omitted, partial, versioned differently, or contradictory, lists the stable
|
|
11
|
+
reason codes an operator or integrator can branch on, and states the measurable
|
|
12
|
+
condition under which the legacy inference fallback may be proposed for removal.
|
|
13
|
+
|
|
14
|
+
Related pages: [tool-usage.md](tool-usage.md) for the `dispatch` tool arguments,
|
|
15
|
+
[fleet-dispatch.md](fleet-dispatch.md) for fleet contracts,
|
|
16
|
+
[artifact-versions.md](artifact-versions.md) for the serialization registry, and
|
|
17
|
+
[safety-model.md](safety-model.md) for how a resolved write boundary is enforced.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. The Shape
|
|
22
|
+
|
|
23
|
+
```jsonc
|
|
24
|
+
{
|
|
25
|
+
"intent": {
|
|
26
|
+
"read_roots": ["src/domains/dispatch/"],
|
|
27
|
+
"write_roots": ["src/domains/dispatch/", "tests/contracts/"],
|
|
28
|
+
"relevant_paths": ["docs/dispatch-typed-intent.md"],
|
|
29
|
+
"expected_outputs": ["src/domains/dispatch/intent-compatibility.ts"],
|
|
30
|
+
"verification": [{ "check": "typecheck" }, { "check": "lint", "timeout_ms": 60000 }]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Every path is a repository-relative POSIX path under the boundary grammar in
|
|
36
|
+
`src/core/path-boundary.ts`. A trailing `/` means the subtree; no trailing `/`
|
|
37
|
+
means that exact file. Absolute paths, `..`, `.` segments, backslashes, and
|
|
38
|
+
globs are refused rather than interpreted. Each list is normalized,
|
|
39
|
+
deduplicated, and sorted by code point, holds at most 32 entries, and each entry
|
|
40
|
+
is at most 512 UTF-8 bytes. `verification` holds at most 8 entries and every
|
|
41
|
+
`check` is a declared id resolved from package scripts or
|
|
42
|
+
`.clio-coder/verifiers.yaml`, never a shell command.
|
|
43
|
+
|
|
44
|
+
Normalization is in `src/domains/dispatch/intent.ts`. The normalized object
|
|
45
|
+
carries `version: 2` and a `pathProvenance` array binding every policy-bearing
|
|
46
|
+
path to the field that declared it, its provenance kind, and its confidence.
|
|
47
|
+
`src/domains/dispatch/path-scope.ts` resolves the request's path scope from it.
|
|
48
|
+
`src/domains/dispatch/intent-compatibility.ts` owns every rule on this page.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 2. Compatibility Rules
|
|
53
|
+
|
|
54
|
+
Each rule resolves to exactly one of three decisions.
|
|
55
|
+
|
|
56
|
+
| Decision | Meaning | Where it surfaces |
|
|
57
|
+
| :--- | :--- | :--- |
|
|
58
|
+
| **accept** | The request is unambiguous. | Nothing is reported. |
|
|
59
|
+
| **warn** | The request is compatible, but its policy-bearing scope rests on something weaker than a declaration. The dispatch runs with the authority it would have had anyway. | The approval artifact renders the full resolved scope before a supervised dispatch runs; `pathScope` is sealed on the receipt. |
|
|
60
|
+
| **refuse** | The request states two incompatible things about authority, or states one this build cannot interpret. | Terminal admission error carrying the reason code. The dispatch never runs. |
|
|
61
|
+
|
|
62
|
+
The invariant that separates `warn` from `refuse`: **a warning is never the
|
|
63
|
+
difference between a narrow grant and a wide one.** No compatibility path widens
|
|
64
|
+
read, write, or verification authority to resolve an ambiguity. When the
|
|
65
|
+
compatible reading and the declared reading disagree about what a worker may
|
|
66
|
+
touch, the answer is a refusal, never the union of the two.
|
|
67
|
+
|
|
68
|
+
### 2.1 Omitted intent
|
|
69
|
+
|
|
70
|
+
Accepted, with a warning. Policy-bearing scope is resolved by
|
|
71
|
+
`legacyPathScope()`: legacy `writeRoots` become the write boundary with
|
|
72
|
+
provenance `derived`, and path-like tokens in the task (confidence `medium`) and
|
|
73
|
+
briefing (confidence `low`) become working-context paths with provenance
|
|
74
|
+
`inferred`.
|
|
75
|
+
|
|
76
|
+
Inferred paths select project rules and compile worker context. They never
|
|
77
|
+
become write boundaries and never add a verification requirement. The only path
|
|
78
|
+
into a write boundary without a declaration is the explicit legacy `writeRoots`
|
|
79
|
+
field, which the caller had to set on purpose. This is what makes omission a
|
|
80
|
+
warning rather than a refusal: nothing about it can widen authority.
|
|
81
|
+
|
|
82
|
+
An absolute or malformed path token in prose is not silently dropped. It throws
|
|
83
|
+
`DispatchPathScopeInferenceError` with code `legacy_scope_path_absolute` or
|
|
84
|
+
`legacy_scope_path_malformed`, because a token the inference cannot normalize is
|
|
85
|
+
exactly where a silent omission would hide an applicable rule.
|
|
86
|
+
|
|
87
|
+
### 2.2 Partial intent
|
|
88
|
+
|
|
89
|
+
Accepted. Every field is independently optional and an omitted list normalizes
|
|
90
|
+
to empty. A declaration is not required to be complete to be authoritative:
|
|
91
|
+
declaring only `write_roots` is a complete statement about write scope.
|
|
92
|
+
|
|
93
|
+
One partial shape gets a warning. Intent that declares `write_roots` or
|
|
94
|
+
`expected_outputs` but no `verification` describes work that changes the tree
|
|
95
|
+
with nothing the orchestrator itself runs to prove the change is sound
|
|
96
|
+
(`intent_partial_verification_absent`).
|
|
97
|
+
|
|
98
|
+
One partial shape is refused. An `expected_outputs` entry outside every declared
|
|
99
|
+
`write_root` (`intent_outputs_outside_write_roots`) means the write boundary
|
|
100
|
+
would block exactly the artifact the task is required to produce. Refusing that
|
|
101
|
+
at admission costs a rejected call; accepting it costs a full worker run that
|
|
102
|
+
cannot succeed.
|
|
103
|
+
|
|
104
|
+
### 2.3 Stale or unsupported version
|
|
105
|
+
|
|
106
|
+
Refused, never migrated. `DISPATCH_INTENT_SUPPORTED_VERSIONS` is `[2]` and
|
|
107
|
+
membership in that list is the whole test. It is deliberately not a range: a
|
|
108
|
+
reader that accepts "2 or newer" accepts fields it cannot interpret, and a
|
|
109
|
+
reader that accepts "2 or older" reads a v1 statement about authority under v2
|
|
110
|
+
rules. Both are the ambiguity typed intent exists to remove.
|
|
111
|
+
|
|
112
|
+
Raw model-facing intent may echo `version: 2` so a caller can replay a
|
|
113
|
+
declaration it was shown. Any other value fails normalization with
|
|
114
|
+
`intent_version_unsupported`. A normalized intent arriving on a job spec at
|
|
115
|
+
another version fails admission with the same code. The remedy in both messages
|
|
116
|
+
is the same: restate the fields on a fresh dispatch call.
|
|
117
|
+
|
|
118
|
+
### 2.4 Contradictory intent
|
|
119
|
+
|
|
120
|
+
Refused. Three contradictions are enumerated.
|
|
121
|
+
|
|
122
|
+
- **Legacy against declared write scope.** `writeRoots` and `intent.write_roots`
|
|
123
|
+
resolving to different trees is `intent_write_roots_contradiction`. Neither the
|
|
124
|
+
union nor the legacy field wins; the caller drops `writeRoots` and declares
|
|
125
|
+
once.
|
|
126
|
+
- **Narrowed against enclosing scope.** A per-task intent in a batch, or any
|
|
127
|
+
other narrowed declaration, reaching outside the intent it narrows is
|
|
128
|
+
`intent_scope_widening`. Narrowing is monotonic: downstream may shrink and may
|
|
129
|
+
never reach outside. Read scope is checked against reads plus writes, because a
|
|
130
|
+
declared write root is necessarily readable.
|
|
131
|
+
- **Write scope against run authority.** `write_roots` declared on a request
|
|
132
|
+
whose autonomy is `read-only` is `intent_write_without_authority`. Silently
|
|
133
|
+
dropping the declaration would leave the request claiming a write scope nothing
|
|
134
|
+
enforces.
|
|
135
|
+
|
|
136
|
+
The declared-versus-inferred case is not a contradiction and is not refused.
|
|
137
|
+
When a request declares intent, prose inference stops resolving scope entirely;
|
|
138
|
+
paths mentioned only in prose are reported as omitted through
|
|
139
|
+
`typed_scope_replaced_inferred_paths` and take no part in rule selection or
|
|
140
|
+
authority. Declared always outranks inferred.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 3. Producer Compatibility Table
|
|
145
|
+
|
|
146
|
+
Every producer that can reach a worker passes through `validateJobSpec()` in
|
|
147
|
+
`src/domains/dispatch/validation.ts`, which is where the classifier runs. The
|
|
148
|
+
rules above therefore hold for every row below, including the rows that cannot
|
|
149
|
+
declare intent yet: those rows resolve scope by inference and are refused only
|
|
150
|
+
when they state a contradiction.
|
|
151
|
+
|
|
152
|
+
| Dispatch producer | Source | Typed intent | Behavior without declaration | Refuses on |
|
|
153
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
154
|
+
| **`dispatch` tool, singular `task`** | `src/tools/dispatch-arguments.ts` | Declared, top-level `intent` | Legacy inference from `writeRoots` + task/briefing tokens | All codes |
|
|
155
|
+
| **`dispatch` tool, batch `tasks[]`** | `src/tools/dispatch-arguments.ts` | Declared per task, shallow-merged over the top-level default | Same as singular, per task | All codes, plus `intent_scope_widening` against the top-level ceiling |
|
|
156
|
+
| **`dispatch` modes parallel / sequential / pipeline / detached** | `src/tools/dispatch-admission.ts` | Inherited unchanged from the task that declared it | Legacy inference | All codes |
|
|
157
|
+
| **`dispatch` mode compete, candidates** | `src/tools/dispatch-admission.ts` | Inherited unchanged from the single base task | Legacy inference | All codes. `verification` is refused for the mode (`verification_unsupported_for_mode`) |
|
|
158
|
+
| **`dispatch` mode compete, judge** | `src/tools/dispatch-admission.ts` | None. The judge is a fresh read-only request | Legacy inference over the judge's own task | All codes |
|
|
159
|
+
| **`dispatch` mode council, members** | `src/tools/dispatch-admission.ts` | Inherited, narrowed to read-only: declared write roots arrive as read roots | Legacy inference | All codes. `verification` is refused for the mode (`council_verification_unsupported`) |
|
|
160
|
+
| **`dispatch` mode council, synthesis judge** | `src/tools/dispatch-admission.ts` | None. Fresh read-only request | Legacy inference over the judge's own task | All codes |
|
|
161
|
+
| **`dispatch` review gate, builder** | `src/tools/dispatch-admission.ts` | Inherited unchanged | Legacy inference | All codes |
|
|
162
|
+
| **`dispatch` review gate, reviewer** | `src/tools/dispatch-admission.ts` | None on the request. `expected_outputs` and `verification` reach the reviewer as rendered *requirements*, never as evidence | Legacy inference over the reviewer's own task | All codes |
|
|
163
|
+
| **`dispatch` `apply_winner`** | `src/tools/dispatch-admission.ts` | Not applicable. Branch application runs no worker | Not applicable | Branch-shape refusals only |
|
|
164
|
+
| **`from_scout` continuation** | `src/tools/dispatch-scout-admission.ts` | **None today.** The compiled continuation plan carries no intent | Legacy inference per step | Contradiction codes only |
|
|
165
|
+
| **Fleet contract agent step (v4+ `writes:`)** | `src/domains/dispatch/fleet-run.ts` | Declared. The contract's `writes:` compiles to `relevant_paths` | Legacy inference for pre-v4 contracts and readonly steps | All codes |
|
|
166
|
+
| **Fleet contract gate / plan step** | `src/domains/dispatch/fleet-run.ts` | Declared, same path (`writes` is the gate path or the plan step's boundary) | Legacy inference when undeclared | All codes |
|
|
167
|
+
| **Fleet delegation-plan spliced step** | `src/domains/dispatch/fleet-run.ts` | Declared from the validated plan task's `writes` | Legacy inference when the task declares none | All codes |
|
|
168
|
+
| **Fleet code step** | `src/domains/dispatch/code-step.ts` | Not applicable. Runs a declared command, not a worker | Not applicable | Not applicable |
|
|
169
|
+
| **ACP delegation target** | `src/domains/dispatch/extension.ts` | Accepted and carried into the plan, but the external agent runs its own tool surface | Legacy inference | All codes, plus a hard refusal of any resolved `writeRoots` on this transport |
|
|
170
|
+
| **Custom agent recipe** | `src/domains/agents/` | Not a producer. A recipe narrows the tool surface and capability class; it never declares dispatch scope | Not applicable | Not applicable |
|
|
171
|
+
| **Extension-authored `DispatchRequest`** | Any `DispatchContract` consumer | Declared, if the extension builds one through `declaredScopeIntent()` or the normalizer | Legacy inference | All codes |
|
|
172
|
+
| **`clio-coder run --agent`** | `src/cli/run.ts` | **None today** | Legacy inference | Contradiction codes only |
|
|
173
|
+
| **`clio-coder wiki generate`** | `src/cli/wiki-generate.ts` | **None today.** Sets legacy `writeRoots` | Legacy inference plus a derived write boundary | Contradiction codes only |
|
|
174
|
+
| **`clio-coder bootstrap generate`** | `src/cli/bootstrap-generate.ts` | **None today** | Legacy inference | Contradiction codes only |
|
|
175
|
+
| **Interactive slash commands, overlays, watchdog** | `src/interactive/` | **None today** | Legacy inference | Contradiction codes only |
|
|
176
|
+
|
|
177
|
+
"All codes" means every code in section 5 that can apply to the row's shape.
|
|
178
|
+
"Contradiction codes only" means the row cannot declare intent, so only the
|
|
179
|
+
`intent_absent_legacy_inference` warning and the legacy inference errors apply.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 4. Persisted and Serialized Contract Table
|
|
184
|
+
|
|
185
|
+
| Contract | Version | Carries intent | Migration policy |
|
|
186
|
+
| :--- | :--- | :--- | :--- |
|
|
187
|
+
| **`DispatchIntent`** | `2` | It *is* the intent | **Refused, never migrated.** Any other version fails admission with `intent_version_unsupported`. A stored declaration is restated on a fresh call. |
|
|
188
|
+
| **`DispatchPathScopeProvenance`** | `1` | Resolved scope with field source and confidence, never source prose | Sealed inside the receipt; shares the receipt's policy. |
|
|
189
|
+
| **Run Receipt** | `20` | `intent` and `pathScope`, both inside the integrity digest | **Refused, never migrated.** A receipt below v20 is reported as retired: intact, but never read as evidence. |
|
|
190
|
+
| **`ResolvedDispatchPlanArtifact`** | `3` | `intent` and `resolvedVerification` per task | **Refused, never migrated.** `resolvedDispatchPlanFromArgs` returns `null` for any version but 3, and a task whose `intent` fails `isDispatchIntent` invalidates the whole artifact. The call falls back to unresolved admission rather than executing a half-understood plan. |
|
|
191
|
+
| **Dispatch plan approval text and hash** | Rendered, hashed | `intent_sha256` for a declared task; the full inferred scope table for a legacy task | Not persisted across versions. The hash binds the exact rendering an operator approved. |
|
|
192
|
+
| **Worker Spec** | `3` | **No.** Carries the *resolved* `writeRoots`, not the declaration | Fail-closed preflight rejection. Deliberate: a worker receives an enforced boundary, never a statement of intent it could reinterpret. |
|
|
193
|
+
| **Execution Plan** | `4` | **No.** Carries per-step `writes` | Preflight rejects unsupported plan versions. Intent is built from `writes` at request construction, so the plan hash is unchanged by this. |
|
|
194
|
+
| **Fleet Contract** | `1..5` | **No.** v4+ carries per-step `writes:` | Reader refuses contracts whose version features it does not support. A pre-v4 contract declares nothing and stays on inference. |
|
|
195
|
+
| **Fleet Run Record** | `1` | **No** | Resume refuses a changed plan hash. Adding intent to steps does not change the hash, so existing records stay resumable. |
|
|
196
|
+
| **Durable Assignment Store** | `1` | **No** | Unsupported or unreadable store reads as empty. |
|
|
197
|
+
| **Detached Batch Store** | `1` | **No** | Unsupported version reads as empty. |
|
|
198
|
+
| **Code Step Record** | `1` | **No.** Deterministic command, not a worker | Records at other versions are skipped. |
|
|
199
|
+
|
|
200
|
+
Nothing is archived. Every affected structure either refuses an unsupported
|
|
201
|
+
version or ignores the record; no reader rewrites a stored artifact in place, so
|
|
202
|
+
a downgrade never encounters a file a newer build silently rewrote.
|
|
203
|
+
|
|
204
|
+
### 4.1 Determinism across source and installed-package paths
|
|
205
|
+
|
|
206
|
+
`intent-compatibility.ts` and the version rules in `intent.ts` read no
|
|
207
|
+
filesystem, no clock, no environment, and no package layout. The supported
|
|
208
|
+
version set is a compiled-in constant, not a lookup. A source checkout, a global
|
|
209
|
+
npm install, and a bundled `dist/` therefore classify identical input
|
|
210
|
+
identically, which is what makes the version policy verifiable rather than
|
|
211
|
+
environmental. `tests/contracts/dispatch-intent-compatibility.test.ts` asserts it
|
|
212
|
+
by classifying the same input from two different working directories.
|
|
213
|
+
|
|
214
|
+
The one input that is legitimately environmental is the *verification catalog*:
|
|
215
|
+
`check` ids resolve from the project's `package.json` scripts and
|
|
216
|
+
`.clio-coder/verifiers.yaml`, which are properties of the workspace, not of the
|
|
217
|
+
Clio installation. An undeclared id fails closed with
|
|
218
|
+
`verification_check_undeclared` naming both sources.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 5. Reason Codes
|
|
223
|
+
|
|
224
|
+
Every code is stable and appears as the prefix of its diagnostic, in the form
|
|
225
|
+
`<code>: <what is wrong and what to do about it>`.
|
|
226
|
+
|
|
227
|
+
| Code | Decision | Meaning |
|
|
228
|
+
| :--- | :--- | :--- |
|
|
229
|
+
| `intent_absent_legacy_inference` | warn | No typed intent; scope came from legacy inference. |
|
|
230
|
+
| `intent_partial_verification_absent` | warn | Declares tree-changing work with no verification requirement. |
|
|
231
|
+
| `typed_scope_replaced_inferred_paths` | warn | Typed intent was declared, so prose-only paths took no part in scope. |
|
|
232
|
+
| `legacy_scope_inferred` | warn | Legacy dispatch resolved policy-bearing scope with no declaration. |
|
|
233
|
+
| `legacy_scope_empty` | warn | Legacy dispatch inferred no policy-bearing path at all. |
|
|
234
|
+
| `intent_version_unsupported` | refuse | `intent.version` names a version this build does not speak. |
|
|
235
|
+
| `intent_malformed` | refuse | Not a normalized intent for a reason other than its version. |
|
|
236
|
+
| `intent_write_roots_contradiction` | refuse | Legacy `writeRoots` and `intent.write_roots` name different trees. |
|
|
237
|
+
| `intent_outputs_outside_write_roots` | refuse | A declared output lies outside every declared write root. |
|
|
238
|
+
| `intent_write_without_authority` | refuse | Write roots declared on a read-only request. |
|
|
239
|
+
| `intent_scope_widening` | refuse | A narrowed intent reaches outside the intent it narrows. |
|
|
240
|
+
| `intent_path_absolute` | refuse | A declared path is absolute rather than repository-relative. |
|
|
241
|
+
| `intent_path_escapes_root` | refuse | A declared path escapes the repository root. |
|
|
242
|
+
| `intent_path_malformed` | refuse | A declared path fails the boundary grammar. |
|
|
243
|
+
| `intent_path_over_cap` | refuse | A list exceeds 32 entries or an entry exceeds 512 bytes. |
|
|
244
|
+
| `verification_malformed` | refuse | A verification entry is not `{check, timeout_ms?}`. |
|
|
245
|
+
| `verification_over_cap` | refuse | More than 8 verification entries. |
|
|
246
|
+
| `verification_check_undeclared` | refuse | A `check` id is not declared by any catalog source. |
|
|
247
|
+
| `gate_and_intent_verification_conflict` | refuse | `gate` combined with `intent.verification`. |
|
|
248
|
+
| `legacy_scope_path_absolute` | refuse | Prose inference met an absolute path token. |
|
|
249
|
+
| `legacy_scope_path_malformed` | refuse | Prose inference met a malformed path token. |
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 6. Examples
|
|
254
|
+
|
|
255
|
+
Typed intent is the default for every example below. A call that omits it still
|
|
256
|
+
works; it just resolves its scope from weaker evidence.
|
|
257
|
+
|
|
258
|
+
### 6.1 Main-agent call, single writer
|
|
259
|
+
|
|
260
|
+
```jsonc
|
|
261
|
+
{
|
|
262
|
+
"agent": "coder",
|
|
263
|
+
"task": "Add the compatibility classifier and wire it into job-spec validation.",
|
|
264
|
+
"intent": {
|
|
265
|
+
"read_roots": ["src/domains/dispatch/"],
|
|
266
|
+
"write_roots": ["src/domains/dispatch/", "tests/contracts/"],
|
|
267
|
+
"expected_outputs": ["src/domains/dispatch/intent-compatibility.ts"],
|
|
268
|
+
"verification": [{ "check": "typecheck" }, { "check": "lint" }]
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
The `expected_outputs` entry sits under a declared write root, so it is
|
|
274
|
+
producible. `verification` ids resolve before approval, and the orchestrator, not
|
|
275
|
+
the worker, runs them.
|
|
276
|
+
|
|
277
|
+
### 6.2 Batch with a shared ceiling and per-task narrowing
|
|
278
|
+
|
|
279
|
+
```jsonc
|
|
280
|
+
{
|
|
281
|
+
"agent": "coder",
|
|
282
|
+
"intent": { "read_roots": ["src/"], "write_roots": ["src/domains/"] },
|
|
283
|
+
"tasks": [
|
|
284
|
+
{ "task": "Refactor the ledger hub.", "intent": { "write_roots": ["src/domains/dispatch/"] } },
|
|
285
|
+
{ "task": "Refactor rule selection.", "intent": { "write_roots": ["src/domains/context/"] } }
|
|
286
|
+
]
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Per-task intent shallow-merges over the top-level default and is then checked
|
|
291
|
+
against it as a ceiling. `"write_roots": ["docs/"]` on a task would be refused
|
|
292
|
+
with `intent_scope_widening`; the top-level declaration is the maximum.
|
|
293
|
+
|
|
294
|
+
### 6.3 Read-only fan-out
|
|
295
|
+
|
|
296
|
+
```jsonc
|
|
297
|
+
{
|
|
298
|
+
"agent": "scout",
|
|
299
|
+
"tasks": [
|
|
300
|
+
{ "task": "Map every reader of the fleet config and cite file paths.",
|
|
301
|
+
"intent": { "read_roots": ["src/domains/agents/", "src/cli/"] } }
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Declaring `read_roots` on a read-only dispatch does not grant anything. It
|
|
307
|
+
selects the project rules that apply to those trees and pins the worker's
|
|
308
|
+
context, which is what stops an applicable rule from being missed because the
|
|
309
|
+
task text happened not to spell a path.
|
|
310
|
+
|
|
311
|
+
### 6.4 Fleet contract
|
|
312
|
+
|
|
313
|
+
A fleet contract declares scope in its own artifact; no `intent` key is written
|
|
314
|
+
by hand.
|
|
315
|
+
|
|
316
|
+
```yaml
|
|
317
|
+
version: 5
|
|
318
|
+
name: refactor-dispatch
|
|
319
|
+
steps:
|
|
320
|
+
- id: implement
|
|
321
|
+
kind: agent
|
|
322
|
+
agent: coder
|
|
323
|
+
scope: workspace
|
|
324
|
+
writes: ["src/domains/dispatch/", "tests/contracts/"]
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
`writes:` is compiled into the step's typed intent as `relevant_paths`, so the
|
|
328
|
+
contract's declaration selects project rules and compiles worker context. The
|
|
329
|
+
declaration keeps being *enforced* by the fleet write-boundary enforcer after
|
|
330
|
+
the step, which is why it is not restated as `write_roots`: that would mint a
|
|
331
|
+
second grant, enforced at the per-tool worker seam, which refuses outright on
|
|
332
|
+
the subprocess and ACP runtimes a fleet may legitimately route a step to.
|
|
333
|
+
|
|
334
|
+
### 6.5 Extension-authored request
|
|
335
|
+
|
|
336
|
+
An extension holding repository-relative paths builds intent through the domain
|
|
337
|
+
rather than assembling the normalized object by hand:
|
|
338
|
+
|
|
339
|
+
```ts
|
|
340
|
+
import { declaredScopeIntent } from "../domains/dispatch/index.js";
|
|
341
|
+
|
|
342
|
+
const built = declaredScopeIntent({ readRoots: ["src/"], writeRoots: ["src/generated/"] });
|
|
343
|
+
if (!built.ok) throw new Error(`${built.reason}: ${built.message}`);
|
|
344
|
+
await dispatch.dispatch({ agentId: "coder", executionRole: "builder", task, intent: built.intent });
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
`declaredScopeIntent` runs the same normalization, caps, and provenance
|
|
348
|
+
construction the dispatch tool uses, so an extension cannot mint an intent shape
|
|
349
|
+
the tool could not. It deliberately does not accept `verification`: a declared
|
|
350
|
+
check id means nothing until it is resolved against the workspace catalog, and
|
|
351
|
+
that resolution belongs to the admission controller that owns the catalog.
|
|
352
|
+
|
|
353
|
+
### 6.6 ACP delegation
|
|
354
|
+
|
|
355
|
+
Typed intent is accepted on a delegation request and is rendered into the
|
|
356
|
+
approval artifact, so an operator sees the declared scope before an external
|
|
357
|
+
agent starts. It grants nothing on that transport: the external agent runs its
|
|
358
|
+
own tool surface, Clio mediates no per-tool call, and any resolved `writeRoots`
|
|
359
|
+
is refused outright rather than accepted and left unenforced.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## 7. Retirement Criterion for Legacy Inference
|
|
364
|
+
|
|
365
|
+
Removing the inference fallback requires a later explicit issue. This is the
|
|
366
|
+
gate that issue has to clear, and it is measured rather than argued.
|
|
367
|
+
|
|
368
|
+
`pathScope.mode` is sealed on every receipt, so the share of dispatches still
|
|
369
|
+
resolving policy-bearing scope from prose is a fact in the evidence store.
|
|
370
|
+
`dispatchIntentAdoption()` in `src/domains/dispatch/intent-compatibility.ts`
|
|
371
|
+
computes it, reading nothing but that mode field so the aggregate is safe to
|
|
372
|
+
report from receipts whose prose must not be quoted.
|
|
373
|
+
|
|
374
|
+
The criterion is met when, over a window of receipts:
|
|
375
|
+
|
|
376
|
+
- at least `DISPATCH_INTENT_RETIREMENT_MIN_SAMPLE` (200) receipts carry a
|
|
377
|
+
resolved `pathScope`, and
|
|
378
|
+
- at most `DISPATCH_INTENT_RETIREMENT_MAX_LEGACY_SHARE` (2%) of them have
|
|
379
|
+
`mode: "legacy-inferred"`.
|
|
380
|
+
|
|
381
|
+
A window with no measured receipts reports `legacyShare: null` and is never
|
|
382
|
+
ready, so an empty evidence store cannot read as full adoption. The producer
|
|
383
|
+
rows in section 3 marked **None today** are the concrete work that has to land
|
|
384
|
+
before the share can fall: each is a producer that cannot currently declare, so
|
|
385
|
+
each one contributes to the legacy count no matter how the model behaves.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Clio Coder Documentation Coverage Matrix
|
|
2
2
|
|
|
3
|
-
This matrix maps every top-level directory in `src/` and every domain directory under `src/domains/` to its authoritative documentation page. It records coverage status (`documented`, `partial`, `undocumented`), missing concepts, and key source contracts for `v0.
|
|
3
|
+
This matrix maps every top-level directory in `src/` and every domain directory under `src/domains/` to its authoritative documentation page. It records coverage status (`documented`, `partial`, `undocumented`), missing concepts, and key source contracts for `v0.4.0`.
|
|
4
4
|
|
|
5
5
|
## Coverage Matrix
|
|
6
6
|
|
|
@@ -35,7 +35,7 @@ This matrix maps every top-level directory in `src/` and every domain directory
|
|
|
35
35
|
| `src/domains/scheduling/` | Capacity lease acquisition, heartbeats, expiry, cross-process locks, cluster scheduling | [capacity-and-scheduling.md](capacity-and-scheduling.md), [fleet-dispatch.md](fleet-dispatch.md) | `documented` | Dedicated capacity leasing, heartbeat TTL, and cross-process lock reference. |
|
|
36
36
|
| `src/domains/session/` | Session ledger format v4, tree branching (`/tree`), `/fork`, `/resume`, checkpoints, protected-artifact journal | [session-lifecycle.md](session-lifecycle.md), [context-working-set.md](context-working-set.md) | `documented` | Dedicated session lifecycle guide covering branching, journal, and recovery; the `contextEviction` and `contextRecall` records added at format v4 are specified in the working-set guide. |
|
|
37
37
|
| `src/domains/share/` | Portable share archive bundles, manifest verification, import/export flows | [extensions-and-sharing.md](extensions-and-sharing.md) | `documented` | Share archives and portable bundle formats documented in extensions guide. |
|
|
38
|
-
| `src/domains/webhook/` | Empty directory | None (Inert) | `inert` | Directory contains no active modules or exports in v0.
|
|
38
|
+
| `src/domains/webhook/` | Empty directory | None (Inert) | `inert` | Directory contains no active modules or exports in v0.4.0. |
|
|
39
39
|
|
|
40
40
|
## Cross-Cutting Reference Guides
|
|
41
41
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Documentation Standards and Codebase Alignment
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive documentation link linter, phrasing/claim evaluator, and alignment portal is located at [docs/html/documentation_blueprint.html](html/documentation_blueprint.html) (Version: 0.
|
|
4
|
+
> **Interactive Spec Available:** An interactive documentation link linter, phrasing/claim evaluator, and alignment portal is located at [docs/html/documentation_blueprint.html](html/documentation_blueprint.html) (Version: 0.4.0).
|
|
5
5
|
|
|
6
6
|
Clio Coder is an experimental community alpha. Documentation should help contributors and early users work from the source of truth without overstating maturity. When docs drift, prefer the current source and tests over older prose or aspirational roadmap notes.
|
|
7
7
|
|
|
@@ -42,6 +42,7 @@ Durable values live in the `guardrails:` section of settings.yaml (see [configur
|
|
|
42
42
|
| `CLIO_CODER_SKILL_CATALOG_DIR` | unset | Local skill-catalog directory override (`src/domains/resources/skills/marketplace.ts`). |
|
|
43
43
|
| `CLIO_CODER_SKILL_MARKETPLACE_INDEX` | unset | Skill-marketplace index path override (`src/domains/resources/skills/marketplace.ts`). |
|
|
44
44
|
| `CLIO_CODER_MODEL_CATALOG_DIRS` | unset | Extra model-catalog directories (`src/domains/providers/knowledge-base-path.ts`). |
|
|
45
|
+
| `CLIO_CODER_ENDPOINT_SLOTS_TTL_MS` | 86400000 | How long a persisted endpoint slot count answers for an endpoint nothing has probed in this process. A record past the bound is ignored and pruned rather than allowed to over-admit (`src/domains/providers/endpoint-slots-store.ts`). |
|
|
45
46
|
| `CLIO_CODER_NO_NETWORK_TOOLS` | off | `1` strips network tools from every registry in the process; the skills-eval harness sets it for hermetic arms; `--allow-network` clears it (`src/tools/network-policy.ts`). |
|
|
46
47
|
| `CLIO_CODER_SMOOTH_STREAM` | settings value | Per-process override for `terminal.smoothStreaming`: `0`/`off`/`false`, `auto`, or `1`/`on`/`true`. A valid value wins over settings; an invalid value fails safely to `off`. |
|
|
47
48
|
| `CLIO_CODER_REDUCE_MOTION` | off | `1` makes smooth-streaming `auto` use the immediate coalescer. Explicit `on` remains an operator request, while stdout backpressure still pauses frame production. |
|
package/docs/eval-runner.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Clio Coder Local Evaluation Runner
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive task suite validator, subprocess execution simulator, and compare calculator is located at [docs/html/eval_blueprint.html](html/eval_blueprint.html) (Version: 0.
|
|
4
|
+
> **Interactive Spec Available:** An interactive task suite validator, subprocess execution simulator, and compare calculator is located at [docs/html/eval_blueprint.html](html/eval_blueprint.html) (Version: 0.4.0).
|
|
5
5
|
|
|
6
6
|
The local evaluation runner executes repository-local YAML task suites as deterministic subprocess checks. It is useful for comparing harness changes, prompts, tools, or local workflows.
|
|
7
7
|
|
package/docs/evals-internal.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Internal Eval Suites
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive blueprint is available at [docs/html/evals_internal_blueprint.html](html/evals_internal_blueprint.html) (Version: 0.
|
|
4
|
+
> **Interactive Spec Available:** An interactive blueprint is available at [docs/html/evals_internal_blueprint.html](html/evals_internal_blueprint.html) (Version: 0.4.0).
|
|
5
5
|
|
|
6
6
|
Private suites should live outside this repository. Keep datasets, prompts,
|
|
7
7
|
live fleet coordinates, calibration outputs, and raw run artifacts in a private
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Evidence Corpus and Long-Term Memory
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive memory lifecycle dashboard and simulator is located at [docs/html/memory_blueprint.html](html/memory_blueprint.html) (Version: 0.
|
|
4
|
+
> **Interactive Spec Available:** An interactive memory lifecycle dashboard and simulator is located at [docs/html/memory_blueprint.html](html/memory_blueprint.html) (Version: 0.4.0). Use it to design, validate, and simulate memory proposals, approval loops, pruning rules, and token budgets.
|
|
5
5
|
|
|
6
|
-
Clio Coder treats run claims and agent lessons as structured artifacts to support reproducibility and scientific provenance. In evaluations such as [SWE-bench](https://www.swebench.com), capturing granular execution evidence is essential for validating agent claims. Evidence corpora are deterministic directories built from run ledgers, receipts, sessions, audits, and eval artifacts. In v0.
|
|
6
|
+
Clio Coder treats run claims and agent lessons as structured artifacts to support reproducibility and scientific provenance. In evaluations such as [SWE-bench](https://www.swebench.com), capturing granular execution evidence is essential for validating agent claims. Evidence corpora are deterministic directories built from run ledgers, receipts, sessions, audits, and eval artifacts. In v0.4.0, forensic evidence auto-builds on dispatch run completion: when a run finalizes, the observability domain automatically compiles the evidence bundle under `<dataDir>/evidence/run-<id>/` and updates a compact sidecar index row in `<stateDir>/evidence-index.json`. Long-term memory records are local, evidence-linked, and only injected after explicit approval. Use the TUI [`/view`](observability.md) command for interactive inspection of receipts, dispatch output, durable tool output, compaction summaries, and session accountability before building or citing evidence.
|
|
7
7
|
|
|
8
8
|
Source of truth: `src/domains/evidence/**`, `src/domains/memory/**`, `src/cli/evidence.ts`, and `src/cli/memory.ts`.
|
|
9
9
|
|
package/docs/evolution.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Evolution and Change Manifests
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive change manifest editor, authority risk assessor, and checklist workspace is located at [docs/html/evolution_blueprint.html](html/evolution_blueprint.html) (Version: 0.
|
|
4
|
+
> **Interactive Spec Available:** An interactive change manifest editor, authority risk assessor, and checklist workspace is located at [docs/html/evolution_blueprint.html](html/evolution_blueprint.html) (Version: 0.4.0).
|
|
5
5
|
|
|
6
6
|
Clio Coder uses change manifests to make harness changes reviewable, falsifiable, and rollback-friendly. CLIO stands for Context Layer for Input/Output, named for the Greek muse of history. A manifest is JSON, generated or checked with `clio-coder evolve manifest`, and should describe what changed, why, what evidence supports it, what could regress, how to validate it, and how to roll it back.
|
|
7
7
|
|