@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
|
@@ -3,7 +3,13 @@ import type { AgentSpec } from "../domains/agents/spec.js";
|
|
|
3
3
|
import type { DispatchContract, DispatchRequest } from "../domains/dispatch/contract.js";
|
|
4
4
|
import type { AgentRoleFactsResolver } from "../domains/dispatch/execution-role.js";
|
|
5
5
|
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
6
|
-
import type {
|
|
6
|
+
import type {
|
|
7
|
+
CandidateWorktree,
|
|
8
|
+
CompeteGroupOwnership,
|
|
9
|
+
CompeteMuxWorktrees,
|
|
10
|
+
cleanupCompeteGroup,
|
|
11
|
+
mergeWinnerBranch,
|
|
12
|
+
} from "./compete-worktrees.js";
|
|
7
13
|
import type { DispatchBackgroundRegistry } from "./dispatch-background.js";
|
|
8
14
|
import type { DispatchPlanView, ResolvedDispatchPlanArtifact } from "./dispatch-plan.js";
|
|
9
15
|
import type { DispatchRunEventRegistry } from "./dispatch-run-events.js";
|
|
@@ -83,9 +89,15 @@ export interface DispatchToolDeps {
|
|
|
83
89
|
background?: DispatchBackgroundRegistry;
|
|
84
90
|
/** Optional compete storage overrides for alternate backends and deterministic fault tests. */
|
|
85
91
|
competeWorktrees?: {
|
|
86
|
-
createCandidate?:
|
|
87
|
-
|
|
92
|
+
createCandidate?: (
|
|
93
|
+
ownership: CompeteGroupOwnership,
|
|
94
|
+
index: number,
|
|
95
|
+
baseline: string,
|
|
96
|
+
) => CandidateWorktree | Promise<CandidateWorktree>;
|
|
97
|
+
cleanupGroup?: (...args: Parameters<typeof cleanupCompeteGroup>) => void | Promise<void>;
|
|
88
98
|
mergeWinner?: typeof mergeWinnerBranch;
|
|
99
|
+
/** Optional herdr route; every operation retains native Git fallback. */
|
|
100
|
+
mux?: CompeteMuxWorktrees;
|
|
89
101
|
};
|
|
90
102
|
getAgentCatalog?: () => string;
|
|
91
103
|
getAgentSpecs: () => ReadonlyArray<AgentSpec>;
|
package/src/tools/dispatch.ts
CHANGED
|
@@ -80,7 +80,7 @@ const DispatchIntentSchema = Type.Object(
|
|
|
80
80
|
{
|
|
81
81
|
additionalProperties: false,
|
|
82
82
|
description:
|
|
83
|
-
"Typed repository-relative path and output intent. Verification checks are declared ids from package scripts or .clio-coder/verifiers.yaml, not shell commands.",
|
|
83
|
+
"Typed repository-relative path and output intent. Declare it on every dispatch: declared paths select the project rules that apply to them and pin worker context, and omitting it falls back to reading path-like tokens out of your task and briefing text, which can miss an applicable rule. Verification checks are declared ids from package scripts or .clio-coder/verifiers.yaml, not shell commands. In a batch, per-task intent narrows the top-level intent and is refused if it reaches outside it.",
|
|
84
84
|
},
|
|
85
85
|
);
|
|
86
86
|
|
package/src/tools/executables.ts
CHANGED
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { delimiter, join } from "node:path";
|
|
3
|
-
|
|
4
|
-
function findExecutableOnPath(name: string): string | null {
|
|
5
|
-
const pathEnv = process.env.PATH;
|
|
6
|
-
if (!pathEnv) return null;
|
|
7
|
-
for (const dir of pathEnv.split(delimiter)) {
|
|
8
|
-
if (!dir) continue;
|
|
9
|
-
const candidate = join(dir, name);
|
|
10
|
-
const stat = statSync(candidate, { throwIfNoEntry: false });
|
|
11
|
-
if (stat?.isFile() && (stat.mode & 0o111) !== 0) return candidate;
|
|
12
|
-
}
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
1
|
+
import { findExecutableOnPath, resolveToolBinary } from "../domains/toolchain/resolve.js";
|
|
15
2
|
|
|
16
3
|
export function resolveFdBinary(): string | null {
|
|
17
4
|
return findExecutableOnPath("fd") ?? findExecutableOnPath("fdfind");
|
|
@@ -20,3 +7,19 @@ export function resolveFdBinary(): string | null {
|
|
|
20
7
|
export function resolveRgBinary(): string | null {
|
|
21
8
|
return findExecutableOnPath("rg");
|
|
22
9
|
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Resolve any executable Clio might run, through the toolchain ladder.
|
|
13
|
+
*
|
|
14
|
+
* For a name in the pinned registry the answer is PATH when the copy there
|
|
15
|
+
* clears the pin's floor, then Clio's vendored copy, then null. For anything
|
|
16
|
+
* else it is a plain PATH lookup, which is what `resolveFdBinary` and
|
|
17
|
+
* `resolveRgBinary` above already do for the two search tools Clio never
|
|
18
|
+
* vendors.
|
|
19
|
+
*
|
|
20
|
+
* Callers that need to explain the answer (doctor, `clio-coder tools status`)
|
|
21
|
+
* want `resolveToolBinary` instead: this returns only the path to run.
|
|
22
|
+
*/
|
|
23
|
+
export function resolveBinary(name: string): string | null {
|
|
24
|
+
return resolveToolBinary(name).binaryPath;
|
|
25
|
+
}
|
package/src/tools/observation.ts
CHANGED
|
@@ -70,9 +70,29 @@ export const OBSERVATION_TURN_BUDGET_ENV = GUARDRAIL_ENV_VARS.observationTurnBud
|
|
|
70
70
|
const MIN_BUDGET_SLICE_BYTES = 1024;
|
|
71
71
|
const BUDGET_TRACK_LIMIT = 256;
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* How many exhausted-pool notices one turn gets before the next such call fails
|
|
75
|
+
* terminally instead of returning a retryable notice.
|
|
76
|
+
*
|
|
77
|
+
* Smoke pass 2 (G2) watched a 9B local model re-issue the identical read about
|
|
78
|
+
* twenty times against the same 208-byte notice, until the unrelated tool-call
|
|
79
|
+
* budget stopped it. The notice cannot become un-retryable by wording alone: a
|
|
80
|
+
* `kind:"ok"` result is an invitation to try again.
|
|
81
|
+
*
|
|
82
|
+
* Three is the smallest count that still lets a model learn the shape from the
|
|
83
|
+
* notice itself. The pool is shared by six OBSERVE tools, so a model that reads,
|
|
84
|
+
* then greps narrower, then lists, has spent three honest attempts at the advice
|
|
85
|
+
* the notice gives. A fourth consecutive exhausted call is evidence the advice
|
|
86
|
+
* is not landing, and it fails. Waste is bounded at four calls out of the 60-call
|
|
87
|
+
* turn budget instead of twenty.
|
|
88
|
+
*/
|
|
89
|
+
const MAX_EXHAUSTED_NOTICES_PER_TURN = 3;
|
|
90
|
+
|
|
73
91
|
interface TurnBudgetState {
|
|
74
92
|
usedBytes: number;
|
|
75
93
|
lastSeenAt: number;
|
|
94
|
+
/** Consecutive exhausted-pool short-circuits; reset by any call that got a slice. */
|
|
95
|
+
exhaustedStreak: number;
|
|
76
96
|
}
|
|
77
97
|
|
|
78
98
|
const turnBudgets = new Map<string, TurnBudgetState>();
|
|
@@ -156,7 +176,7 @@ export function reserveObservation(selfCapBytes: number, options?: ToolInvokeOpt
|
|
|
156
176
|
};
|
|
157
177
|
}
|
|
158
178
|
const limitBytes = observationTurnBudgetLimit();
|
|
159
|
-
const state = turnBudgets.get(key) ?? { usedBytes: 0, lastSeenAt: Date.now() };
|
|
179
|
+
const state = turnBudgets.get(key) ?? { usedBytes: 0, lastSeenAt: Date.now(), exhaustedStreak: 0 };
|
|
160
180
|
state.lastSeenAt = Date.now();
|
|
161
181
|
turnBudgets.set(key, state);
|
|
162
182
|
pruneBudgetMap();
|
|
@@ -174,6 +194,9 @@ export function reserveObservation(selfCapBytes: number, options?: ToolInvokeOpt
|
|
|
174
194
|
settled: false,
|
|
175
195
|
};
|
|
176
196
|
}
|
|
197
|
+
// A call that got a slice is progress, so the exhausted streak starts over.
|
|
198
|
+
// Only an unbroken run of short-circuits reaches the terminal failure.
|
|
199
|
+
state.exhaustedStreak = 0;
|
|
177
200
|
const callCapBytes = Math.min(selfCapBytes, remaining);
|
|
178
201
|
return {
|
|
179
202
|
key,
|
|
@@ -203,6 +226,7 @@ export function commitObservationReservation(reservation: ObservationReservation
|
|
|
203
226
|
const state = turnBudgets.get(reservation.key) ?? {
|
|
204
227
|
usedBytes: reservation.usedBeforeBytes,
|
|
205
228
|
lastSeenAt: Date.now(),
|
|
229
|
+
exhaustedStreak: 0,
|
|
206
230
|
};
|
|
207
231
|
state.usedBytes += reservation.callCapBytes;
|
|
208
232
|
state.lastSeenAt = Date.now();
|
|
@@ -237,6 +261,7 @@ function recordSpentBytes(reservation: ObservationReservation, bytes: number): v
|
|
|
237
261
|
const state = turnBudgets.get(reservation.key) ?? {
|
|
238
262
|
usedBytes: reservation.usedBeforeBytes + committedBytes,
|
|
239
263
|
lastSeenAt: Date.now(),
|
|
264
|
+
exhaustedStreak: 0,
|
|
240
265
|
};
|
|
241
266
|
state.usedBytes = Math.max(0, state.usedBytes + bytes - committedBytes);
|
|
242
267
|
state.lastSeenAt = Date.now();
|
|
@@ -252,10 +277,26 @@ function budgetDetails(reservation: ObservationReservation): ObservationBudgetDe
|
|
|
252
277
|
};
|
|
253
278
|
}
|
|
254
279
|
|
|
280
|
+
/** Count this short-circuit against the turn's run of them. Untracked calls never escalate. */
|
|
281
|
+
function bumpExhaustedStreak(key: string | null): number {
|
|
282
|
+
if (key === null) return 1;
|
|
283
|
+
const state = turnBudgets.get(key);
|
|
284
|
+
if (state === undefined) return 1;
|
|
285
|
+
state.exhaustedStreak += 1;
|
|
286
|
+
state.lastSeenAt = Date.now();
|
|
287
|
+
turnBudgets.set(key, state);
|
|
288
|
+
return state.exhaustedStreak;
|
|
289
|
+
}
|
|
290
|
+
|
|
255
291
|
/**
|
|
256
292
|
* Structured result for a call that found the turn pool already spent.
|
|
257
293
|
* `subject` names what the call was about (a path, a pattern); `hint` names
|
|
258
294
|
* the narrowing arguments the tool supports.
|
|
295
|
+
*
|
|
296
|
+
* The first few such calls get the notice, which states the numbers and the
|
|
297
|
+
* narrowing advice. Past MAX_EXHAUSTED_NOTICES_PER_TURN the call fails instead:
|
|
298
|
+
* nothing this turn can return content, so an `ok` result is an invitation to a
|
|
299
|
+
* retry loop the pool can never satisfy.
|
|
259
300
|
*/
|
|
260
301
|
export function observationBudgetExhausted(input: {
|
|
261
302
|
tool: string;
|
|
@@ -265,9 +306,18 @@ export function observationBudgetExhausted(input: {
|
|
|
265
306
|
hint: string;
|
|
266
307
|
}): ToolResult {
|
|
267
308
|
const { tool, unit, reservation, subject, hint } = input;
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
|
|
309
|
+
const streak = bumpExhaustedStreak(reservation.key);
|
|
310
|
+
const spent = `${formatSize(reservation.usedBeforeBytes)} already returned of ${formatSize(reservation.limitBytes)}`;
|
|
311
|
+
if (streak > MAX_EXHAUSTED_NOTICES_PER_TURN) {
|
|
312
|
+
const message =
|
|
313
|
+
`observation budget exhausted for this turn before ${tool} ${subject}: ${spent}. ` +
|
|
314
|
+
`This is the ${streak}th call to hit it, so no observation tool can return content until the ` +
|
|
315
|
+
`next turn. Do not retry this call and do not substitute another one. Re-plan with what you ` +
|
|
316
|
+
`already have: say what you found, name what is still unread, and propose the next step.`;
|
|
317
|
+
recordSpentBytes(reservation, byteLength(message));
|
|
318
|
+
return { kind: "error", message };
|
|
319
|
+
}
|
|
320
|
+
const output = `[observation budget exhausted for this turn before ${tool} ${subject}: ${spent}. ${hint}]`;
|
|
271
321
|
const shownBytes = byteLength(output);
|
|
272
322
|
recordSpentBytes(reservation, shownBytes);
|
|
273
323
|
const budget = budgetDetails(reservation);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import { ToolNames } from "../core/tool-names.js";
|
|
3
|
+
import { PANES_PRESET_IDS } from "../domains/mux/operations.js";
|
|
4
|
+
import { StringEnum } from "../engine/ai.js";
|
|
5
|
+
import type { ToolSurface } from "./lazy-tool.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The model's door to the pane layer.
|
|
9
|
+
*
|
|
10
|
+
* There is no argv field, and there never will be. Arbitrary argv is
|
|
11
|
+
* operator-only through `/panes open`, which is what keeps this tool out of
|
|
12
|
+
* shell-escape territory (spec 4.8, risk register "tool misuse"). `preset` is a
|
|
13
|
+
* closed enum, so an argv string cannot arrive spelled as a preset name either.
|
|
14
|
+
*/
|
|
15
|
+
export const panesToolSurface = {
|
|
16
|
+
name: ToolNames.Panes,
|
|
17
|
+
description:
|
|
18
|
+
"Look at, focus, and manage the terminal panes Clio owns beside this session. Use show to bring a dispatched run's live viewer pane to the front when the operator asks to see an agent (\"show me the tester\"). open starts one of the fixed utility presets; there is no way to run an arbitrary command. close removes a pane Clio created. list reports the current inventory and the pane layer's health.",
|
|
19
|
+
parameters: Type.Object({
|
|
20
|
+
action: StringEnum(["show", "open", "close", "list"], {
|
|
21
|
+
description:
|
|
22
|
+
"show focuses a run's viewer pane; open starts a preset utility pane; close removes a Clio-owned pane; list reports the inventory.",
|
|
23
|
+
}),
|
|
24
|
+
target: Type.Optional(
|
|
25
|
+
Type.String({
|
|
26
|
+
description:
|
|
27
|
+
'action=show: an agent id or run id prefix, most recent match wins. action=close: a pane id, a pane label, an agent id, or "all".',
|
|
28
|
+
}),
|
|
29
|
+
),
|
|
30
|
+
preset: Type.Optional(
|
|
31
|
+
StringEnum([...PANES_PRESET_IDS], {
|
|
32
|
+
description: "action=open: which fixed utility pane to start.",
|
|
33
|
+
}),
|
|
34
|
+
),
|
|
35
|
+
}),
|
|
36
|
+
baseActionClass: "read",
|
|
37
|
+
executionMode: "sequential",
|
|
38
|
+
} satisfies ToolSurface;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { PanesOperations } from "../domains/mux/operations.js";
|
|
2
|
+
import { PANES_PRESET_IDS } from "../domains/mux/operations.js";
|
|
3
|
+
import { panesToolSurface } from "./panes-surface.js";
|
|
4
|
+
import type { ToolResult, ToolSpec } from "./registry.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The `panes` tool: the model's read-class door to the pane layer.
|
|
8
|
+
*
|
|
9
|
+
* It is registered only when the mux answered detection, so its presence in the
|
|
10
|
+
* prompt is itself the statement that panes exist in this session. Every action
|
|
11
|
+
* routes through the same `PanesOperations` the `/panes` slash command drives,
|
|
12
|
+
* so the two surfaces cannot describe the same pane differently.
|
|
13
|
+
*
|
|
14
|
+
* The one asymmetry with the operator's surface is deliberate: `open` accepts a
|
|
15
|
+
* preset and nothing else. A caller that fabricates an `argv` field gets a
|
|
16
|
+
* refusal rather than a shell.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export interface PanesToolDeps {
|
|
20
|
+
panes: PanesOperations;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function describeInventory(deps: PanesToolDeps): ToolResult {
|
|
24
|
+
const status = deps.panes.status();
|
|
25
|
+
const header = `panes mode=${status.mode} ${status.available ? "available" : "unavailable"}; notifications=${status.settings.notifications}`;
|
|
26
|
+
const rows = status.panes.map((pane) => `- ${pane.paneId} ${pane.purpose} ${pane.label}`);
|
|
27
|
+
return {
|
|
28
|
+
kind: "ok",
|
|
29
|
+
output: [header, ...(rows.length > 0 ? rows : ["- no Clio-owned panes"])].join("\n"),
|
|
30
|
+
details: { action: "list", mode: status.mode, available: status.available, panes: status.panes },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function createPanesTool(deps: PanesToolDeps): ToolSpec {
|
|
35
|
+
return {
|
|
36
|
+
...panesToolSurface,
|
|
37
|
+
async run(args): Promise<ToolResult> {
|
|
38
|
+
const action = typeof args.action === "string" ? args.action : "";
|
|
39
|
+
// An argv field never reaches the operations layer. Refusing loudly is
|
|
40
|
+
// better than ignoring it, because a model that believed it opened a
|
|
41
|
+
// command pane would report work it did not do.
|
|
42
|
+
if ("argv" in args) {
|
|
43
|
+
return {
|
|
44
|
+
kind: "error",
|
|
45
|
+
message:
|
|
46
|
+
"panes: argv panes are operator-only; use action=open with a preset, or ask the operator to run /panes open <command>",
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const target = typeof args.target === "string" ? args.target.trim() : "";
|
|
50
|
+
if (action === "list") return describeInventory(deps);
|
|
51
|
+
if (action === "show") {
|
|
52
|
+
if (target.length === 0) return { kind: "error", message: "panes: action=show requires target" };
|
|
53
|
+
const result = await deps.panes.show(target);
|
|
54
|
+
if (result.status === "watching") {
|
|
55
|
+
return {
|
|
56
|
+
kind: "ok",
|
|
57
|
+
output: `the watch pane is now rendering ${result.agentId} (run ${result.runId}).`,
|
|
58
|
+
details: { action: "show", runId: result.runId, agentId: result.agentId },
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (result.status === "not-found") {
|
|
62
|
+
const known = result.candidates.length > 0 ? ` Live runs: ${result.candidates.join(", ")}.` : "";
|
|
63
|
+
return { kind: "error", message: `panes: no live run matches '${result.target}'.${known}` };
|
|
64
|
+
}
|
|
65
|
+
return { kind: "error", message: `panes: ${result.reason}` };
|
|
66
|
+
}
|
|
67
|
+
if (action === "open") {
|
|
68
|
+
const preset = typeof args.preset === "string" ? args.preset : "";
|
|
69
|
+
if (!(PANES_PRESET_IDS as ReadonlyArray<string>).includes(preset)) {
|
|
70
|
+
return {
|
|
71
|
+
kind: "error",
|
|
72
|
+
message: `panes: action=open requires preset, one of ${PANES_PRESET_IDS.join(", ")}`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const result = await deps.panes.open({ preset });
|
|
76
|
+
if (result.status === "opened") {
|
|
77
|
+
return {
|
|
78
|
+
kind: "ok",
|
|
79
|
+
output:
|
|
80
|
+
result.paneId === null
|
|
81
|
+
? `completed the ${result.label} chooser.`
|
|
82
|
+
: `opened the ${result.label} pane (${result.paneId}).`,
|
|
83
|
+
details: { action: "open", preset, paneId: result.paneId },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (result.status === "missing-binary") {
|
|
87
|
+
return {
|
|
88
|
+
kind: "error",
|
|
89
|
+
message: `panes: ${result.detail}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return { kind: "error", message: `panes: ${result.reason}` };
|
|
93
|
+
}
|
|
94
|
+
if (action === "close") {
|
|
95
|
+
if (target.length === 0) return { kind: "error", message: "panes: action=close requires target" };
|
|
96
|
+
const result = await deps.panes.close(target);
|
|
97
|
+
if (result.status === "closed") {
|
|
98
|
+
return {
|
|
99
|
+
kind: "ok",
|
|
100
|
+
output: `closed ${result.closed} pane(s)${result.labels.length > 0 ? `: ${result.labels.join(", ")}` : ""}.`,
|
|
101
|
+
details: { action: "close", closed: result.closed },
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (result.status === "not-found") {
|
|
105
|
+
return { kind: "error", message: `panes: no Clio-owned pane matches '${result.target}'` };
|
|
106
|
+
}
|
|
107
|
+
return { kind: "error", message: `panes: ${result.reason}` };
|
|
108
|
+
}
|
|
109
|
+
return { kind: "error", message: `panes: action must be show, open, close, or list; got '${action}'` };
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
package/src/tools/policy.ts
CHANGED
|
@@ -49,6 +49,10 @@ export const TOOL_PLANES: Readonly<Record<BuiltinToolName, PlaneExpectation>> =
|
|
|
49
49
|
// review the board depends on. Sequential so two posts in one batch do not
|
|
50
50
|
// interleave against the local post cap.
|
|
51
51
|
[ToolNames.Ledger]: { plane: "orchestrate", actionClass: "read", executionMode: "sequential" },
|
|
52
|
+
// panes projects Clio's own runs onto a pane host and opens preset utility
|
|
53
|
+
// panes. It mutates no workspace, so it stays read class; sequential because
|
|
54
|
+
// two pane operations in one batch would race the same pane registry.
|
|
55
|
+
[ToolNames.Panes]: { plane: "orchestrate", actionClass: "read", executionMode: "sequential" },
|
|
52
56
|
[ToolNames.WebFetch]: { plane: "retrieve", actionClass: "read", executionMode: "parallel" },
|
|
53
57
|
[ToolNames.AskUser]: { plane: "interact", actionClass: "read", executionMode: "sequential" },
|
|
54
58
|
[ToolNames.Artifact]: { plane: "artifact", actionClass: "write", executionMode: "sequential" },
|
|
@@ -75,6 +79,8 @@ const OBSERVE_ENVELOPE_SELF_CAPS: ReadonlyArray<[BuiltinToolName, () => number]>
|
|
|
75
79
|
const SESSION_BOUND_TOOLS = new Set<ToolName>([]);
|
|
76
80
|
const DISPATCH_BOUND_TOOLS = new Set<ToolName>([ToolNames.Dispatch, ToolNames.Monitor, ToolNames.Steer]);
|
|
77
81
|
const INTERACTIVE_BOUND_TOOLS = new Set<ToolName>([ToolNames.AskUser]);
|
|
82
|
+
/** Registered only when a pane host answered detection and the mux is live. */
|
|
83
|
+
const PANES_BOUND_TOOLS = new Set<ToolName>([ToolNames.Panes]);
|
|
78
84
|
/** The RETRIEVE plane, omitted wholesale by a hermetic run (tools/network-policy.ts). */
|
|
79
85
|
const NETWORK_BOUND_TOOLS = new Set<ToolName>([ToolNames.WebFetch]);
|
|
80
86
|
|
|
@@ -82,8 +88,9 @@ export interface BuiltinToolPolicyOptions {
|
|
|
82
88
|
includeSessionTools?: boolean;
|
|
83
89
|
includeDispatchTools?: boolean;
|
|
84
90
|
includeInteractiveTools?: boolean;
|
|
91
|
+
includePanesTools?: boolean;
|
|
85
92
|
/**
|
|
86
|
-
* Unlike the other
|
|
93
|
+
* Unlike the other four, this defaults to true: every registry registers
|
|
87
94
|
* the network plane unless a run explicitly asked to be hermetic, so an
|
|
88
95
|
* unset option must keep demanding it.
|
|
89
96
|
*/
|
|
@@ -132,12 +139,14 @@ function validateBuiltinToolPolicy(specs: ReadonlyArray<ToolSpec>, options: Buil
|
|
|
132
139
|
const includeSessionTools = options.includeSessionTools ?? false;
|
|
133
140
|
const includeDispatchTools = options.includeDispatchTools ?? false;
|
|
134
141
|
const includeInteractiveTools = options.includeInteractiveTools ?? false;
|
|
142
|
+
const includePanesTools = options.includePanesTools ?? false;
|
|
135
143
|
const includeNetworkTools = options.includeNetworkTools ?? true;
|
|
136
144
|
const required = new Set<ToolName>(Object.values(ToolNames));
|
|
137
145
|
for (const tool of [...required]) {
|
|
138
146
|
if (!includeSessionTools && SESSION_BOUND_TOOLS.has(tool)) required.delete(tool);
|
|
139
147
|
if (!includeDispatchTools && DISPATCH_BOUND_TOOLS.has(tool)) required.delete(tool);
|
|
140
148
|
if (!includeInteractiveTools && INTERACTIVE_BOUND_TOOLS.has(tool)) required.delete(tool);
|
|
149
|
+
if (!includePanesTools && PANES_BOUND_TOOLS.has(tool)) required.delete(tool);
|
|
141
150
|
if (!includeNetworkTools && NETWORK_BOUND_TOOLS.has(tool)) required.delete(tool);
|
|
142
151
|
}
|
|
143
152
|
for (const tool of required) {
|
|
@@ -67,6 +67,7 @@ export const TOOL_PRESENTATION: Readonly<Record<string, ToolPresentationPolicy>>
|
|
|
67
67
|
[ToolNames.Steer]: FOLDED,
|
|
68
68
|
[ToolNames.Tasks]: FOLDED,
|
|
69
69
|
[ToolNames.Ledger]: FOLDED,
|
|
70
|
+
[ToolNames.Panes]: FOLDED,
|
|
70
71
|
[ToolNames.WebFetch]: FOLDED,
|
|
71
72
|
[ToolNames.AskUser]: FOLDED,
|
|
72
73
|
[ToolNames.Artifact]: FOLDED,
|
package/dist/chunk-D73KXYPF.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
durableAssistantTextFromEvent
|
|
4
|
-
} from "./chunk-TEO2TLVN.js";
|
|
5
|
-
import {
|
|
6
|
-
responseModelIdObservationFromRecord
|
|
7
|
-
} from "./chunk-LXPJXFM5.js";
|
|
8
|
-
import {
|
|
9
|
-
init_esm_shims
|
|
10
|
-
} from "./chunk-3R73A4XB.js";
|
|
11
|
-
|
|
12
|
-
// src/tools/dispatch-event-text.ts
|
|
13
|
-
init_esm_shims();
|
|
14
|
-
function assistantTextFromEvent(event) {
|
|
15
|
-
return durableAssistantTextFromEvent(event).trim();
|
|
16
|
-
}
|
|
17
|
-
function receiptResponseModelIdObservationLabel(receipt) {
|
|
18
|
-
const responses = receipt.upstreamResponses ?? [];
|
|
19
|
-
if (responses.length === 0) return null;
|
|
20
|
-
const labels = responses.map((response) => {
|
|
21
|
-
const observation = responseModelIdObservationFromRecord(
|
|
22
|
-
response,
|
|
23
|
-
"legacy-difference-only"
|
|
24
|
-
);
|
|
25
|
-
if (observation.state === "reported") return `reported:${observation.reportedModelId}`;
|
|
26
|
-
if (observation.state === "not-reported") return "not-reported";
|
|
27
|
-
if (observation.state === "not-observed") return "not-observed";
|
|
28
|
-
return `legacy-difference-only:${observation.differingModelId ?? "none"}`;
|
|
29
|
-
});
|
|
30
|
-
return `response_model_id_observation=${labels.join(",")}`;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export {
|
|
34
|
-
assistantTextFromEvent,
|
|
35
|
-
receiptResponseModelIdObservationLabel
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=chunk-D73KXYPF.js.map
|