@iowarp/clio-coder 0.3.8 → 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 +102 -0
- package/NOTICE +33 -0
- package/README.md +12 -3
- package/dist/{acp-U67UHUK2.js → acp-G5WJBNCT.js} +13 -12
- package/dist/{agents-YU6SGALZ.js → agents-FMV2Q5G4.js} +41 -36
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-5ZPJOIVG.js → auth-3IDSJEIK.js} +18 -18
- package/dist/{builtins-C6JMZVV6.js → builtins-XCZWXSC7.js} +5 -5
- package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
- package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
- package/dist/{chunk-XWSF374K.js → chunk-2OQE55CK.js} +3 -3
- package/dist/{chunk-5H3GB5BO.js → chunk-32KWKNSF.js} +8 -384
- package/dist/{chunk-KTYTFRMB.js → chunk-36EJLSQQ.js} +34 -36
- package/dist/{chunk-FHJEP5SW.js → chunk-3BT2XMV4.js} +19 -13
- package/dist/chunk-3DPEIQKN.js +113 -0
- package/dist/{chunk-GU2UIAFZ.js → chunk-3URVFKWK.js} +7 -7
- package/dist/{chunk-WEH5XRJQ.js → chunk-3XML7CDN.js} +3 -3
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
- package/dist/{chunk-VCBR6CU7.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-NMPKI6XL.js → chunk-6DB53AJS.js} +203 -25
- package/dist/{chunk-3BINW3FP.js → chunk-76ONBSIA.js} +2 -2
- package/dist/{chunk-26LEYJZH.js → chunk-7MCTRUCE.js} +2 -2
- package/dist/{chunk-TYPGUK6W.js → chunk-AB44T6BB.js} +111 -5
- package/dist/{chunk-K4XHGFR5.js → chunk-B7OBL7PK.js} +317 -721
- package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
- package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
- package/dist/{chunk-ZVJ5BLO2.js → chunk-BKFJHQCA.js} +154 -16
- package/dist/chunk-BKFM6EJV.js +462 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-ZNLWCMVZ.js → chunk-BPKCPIL7.js} +2 -2
- package/dist/{chunk-TLQJPP24.js → chunk-BUMFYQFY.js} +1394 -1349
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/chunk-C2LTL2W6.js +2447 -0
- package/dist/{chunk-ME6CCNFO.js → chunk-CODPRO7Q.js} +8 -8
- package/dist/{chunk-E77JEWSD.js → chunk-CTJ4RNAA.js} +7 -37
- package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
- package/dist/{chunk-7RFXX52T.js → chunk-DQITNCXG.js} +642 -172
- package/dist/{chunk-TTHACPOM.js → chunk-DYJP44XW.js} +578 -117
- package/dist/{chunk-2HFZQUHL.js → chunk-F4CKPOEQ.js} +18 -8
- package/dist/{chunk-DGSYXYMX.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GKF55TAZ.js +391 -0
- package/dist/{chunk-VWZOAB7K.js → chunk-GR5G2PVF.js} +9 -8
- package/dist/{chunk-4DGYLA73.js → chunk-GXNLGKAB.js} +80 -9
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/{chunk-IIZWH4XA.js → chunk-HI63TFOG.js} +5 -4
- package/dist/{chunk-WLFILSD5.js → chunk-HJJTYUHX.js} +113 -83
- package/dist/{chunk-TT36MB5S.js → chunk-HLW2MRKE.js} +3 -1
- package/dist/{chunk-PMDBGQSJ.js → chunk-HWHKMHUA.js} +7 -7
- package/dist/chunk-HZHHCK24.js +1631 -0
- package/dist/{chunk-WSB3FPX7.js → chunk-I5VEOC6I.js} +39 -143
- package/dist/chunk-IBEBSCYA.js +564 -0
- package/dist/chunk-IQ7KR472.js +362 -0
- package/dist/{chunk-A3WNZD3P.js → chunk-J4W7KFM7.js} +949 -972
- package/dist/{chunk-TB5666IT.js → chunk-JDG2WCRO.js} +5 -5
- package/dist/{chunk-N22QMJKY.js → chunk-K5C3NCBD.js} +4 -4
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-5C3AQNDW.js → chunk-KFZI4NIL.js} +216 -38
- package/dist/chunk-KMVISBZR.js +132 -0
- package/dist/{chunk-WXY7KU3G.js → chunk-LDQ2ZF2M.js} +2 -2
- package/dist/{chunk-XN3L4EYL.js → chunk-LQ3DZAMX.js} +3 -3
- package/dist/{chunk-U6MBIEMB.js → chunk-LY4S7GJC.js} +173 -144
- package/dist/{chunk-4SPRNWDE.js → chunk-MLKNTWH2.js} +19 -19
- package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-SPULKLCF.js → chunk-NHCZP4K7.js} +3 -3
- package/dist/chunk-NHLBIGRH.js +1506 -0
- package/dist/chunk-NQQH3YT7.js +302 -0
- package/dist/chunk-NYS75XW5.js +15 -0
- package/dist/{chunk-GN57SG4G.js → chunk-O4XIVISU.js} +10 -8
- package/dist/{chunk-EMYUUSFG.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-J3YUBZWY.js → chunk-QBJA7R7N.js} +62 -6
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-2HEJ2F35.js → chunk-QLFS5GO2.js} +22 -10
- package/dist/{chunk-7RGZWPB6.js → chunk-QLL7ILRG.js} +95 -32
- package/dist/{chunk-YS5VLNH5.js → chunk-QREDIESB.js} +6 -6
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
- package/dist/chunk-RKKLTLYB.js +45 -0
- package/dist/{chunk-P43ETTHK.js → chunk-SJ5ZKQ4S.js} +2 -2
- package/dist/{chunk-GPIEI3LY.js → chunk-SP2RXXYO.js} +6 -54
- package/dist/chunk-SUCTJL45.js +45 -0
- package/dist/{chunk-DYIM5TJT.js → chunk-SUW5DORT.js} +263 -7
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/{chunk-FJ3H4MN5.js → chunk-TZ3SGWZZ.js} +3 -3
- package/dist/{chunk-MXKJU4JB.js → chunk-U77AMWDL.js} +91 -10
- package/dist/{chunk-5DHKRSMQ.js → chunk-ULC6OTWO.js} +11 -7
- package/dist/{chunk-RWSI4YD7.js → chunk-UM7N4G5A.js} +33 -12
- package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
- package/dist/{chunk-IGWKHNIQ.js → chunk-UXMFQ54G.js} +44 -37
- package/dist/{chunk-HFSBBKSQ.js → chunk-V5DHCITQ.js} +171 -3
- package/dist/{chunk-5WIGXA4T.js → chunk-VAZSBTKF.js} +111 -4
- package/dist/{chunk-VHN4MY6O.js → chunk-VEO4AP2K.js} +2 -2
- package/dist/{chunk-IJ7RPIYJ.js → chunk-VFA6GDY5.js} +65 -4
- package/dist/{chunk-PT7HYKEM.js → chunk-VO2LKSTM.js} +2 -2
- package/dist/chunk-VO67MWHC.js +75 -0
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-TANS5ZJS.js → chunk-VYMXRQI6.js} +36 -22
- package/dist/{chunk-WWCZ5F23.js → chunk-W5VSYASO.js} +77 -16
- package/dist/{chunk-WNIJTQQK.js → chunk-WZR7K7ZX.js} +72 -116
- package/dist/{chunk-5Q2VVUKB.js → chunk-X3YGUTOB.js} +4 -4
- package/dist/chunk-X75E3D2N.js +686 -0
- package/dist/{chunk-VAWNZU7Z.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-Z2RR6MAK.js +127 -0
- package/dist/{chunk-FBVTI2TJ.js → chunk-Z4TXYIEG.js} +12 -131
- package/dist/cli/index.js +47 -36
- package/dist/{clio-QVTYJ57A.js → clio-2JXHBBY5.js} +7 -7
- package/dist/{code-nav-FGGFIE7L.js → code-nav-3YYRMYNF.js} +8 -8
- 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-LW5IJFQN.js → config-QZPCMYSO.js} +99 -63
- package/dist/{configure-7XIZCOU4.js → configure-TEGEBYCA.js} +23 -22
- package/dist/{context-Y6Y7QPR6.js → context-AV7OEZ4D.js} +12 -12
- package/dist/{context-L3WL3X7K.js → context-E6H5RNMC.js} +56 -47
- package/dist/{context-N52ZA626.js → context-GSXUE4CT.js} +29 -27
- package/dist/{context-clear-MBQRLSDQ.js → context-clear-SHIBYK6T.js} +55 -46
- package/dist/{context-index-HVMFQHK3.js → context-index-HNG3MOME.js} +2 -2
- package/dist/{context-working-set-GS6DSO7F.js → context-working-set-5ZGKPGZQ.js} +13 -13
- package/dist/{dispatch-runner-22ZCNOM3.js → dispatch-runner-EFMJT4LD.js} +93 -64
- package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
- package/dist/doctor-QOA5FNY5.js +313 -0
- package/dist/{eval-BEC2WHDA.js → eval-TFBYQH4H.js} +2032 -156
- package/dist/eval-inventory-SXH7PDKX.js +316 -0
- package/dist/{evidence-REJUMSKM.js → evidence-ERGESKGN.js} +203 -48
- package/dist/{evolve-PY5ZBA5K.js → evolve-VDXTSYCJ.js} +52 -43
- package/dist/{extensions-HVKU65YU.js → extensions-7BGBHN57.js} +13 -7
- package/dist/{fleet-7WZEWRFA.js → fleet-2RRVDF2V.js} +228 -108
- package/dist/{fleet-commands-UVHWM76J.js → fleet-commands-VJ726XIA.js} +11 -11
- package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
- package/dist/{fleet-graph-6ULH7PES.js → fleet-graph-JF5QOATM.js} +18 -15
- package/dist/fleet-inspect-VLY4S7QM.js +442 -0
- package/dist/{fleet-preflight-J53T6CCE.js → fleet-preflight-AIZUEJOY.js} +5 -5
- package/dist/{fleet-validate-72PC4SLA.js → fleet-validate-AJRPDMDV.js} +22 -19
- package/dist/fleet-verify-JFEL2L3H.js +175 -0
- package/dist/fleet-view-ZCON35AG.js +102 -0
- package/dist/{init-OG3TPGQG.js → init-DN2WWLFE.js} +72 -62
- package/dist/install-XGLBQY5E.js +13 -0
- package/dist/interop-OZBKXAYL.js +114 -0
- package/dist/{library-CNTMPLRF.js → library-YWZG7IMW.js} +21 -18
- package/dist/{memory-6IS7F275.js → memory-I4C4HMLW.js} +54 -45
- package/dist/{models-ENRJDA5W.js → models-CEYXJBO6.js} +33 -30
- package/dist/{monitor-XLDVO7TN.js → monitor-NZ6GCI3P.js} +59 -52
- package/dist/{orchestrator-6KSPYRHA.js → orchestrator-GCGQ4N5I.js} +7827 -7328
- 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-RZ4ER727.js → reset-DQ6FGCSH.js} +13 -11
- package/dist/resources-BB3MVJMD.js +111 -0
- package/dist/{run-Y2CNK5RU.js → run-H2GQDUER.js} +119 -87
- package/dist/{share-A55GYP6Z.js → share-GTJN6A5O.js} +20 -17
- package/dist/{skills-ALC5J6AT.js → skills-L55TEW6R.js} +33 -24
- package/dist/{skills-eval-JPBEBYQU.js → skills-eval-XVXPH2JI.js} +67 -56
- package/dist/skills-inventory-S4MXPJFV.js +126 -0
- package/dist/slash-commands-ZSGASKJC.js +77 -0
- package/dist/{steer-GGWFUJUD.js → steer-RZGSCY4R.js} +4 -4
- package/dist/{support-MIETYA5E.js → support-PKEUNNQL.js} +6 -6
- package/dist/{targets-VGNXIR3S.js → targets-NCPZ644J.js} +68 -40
- package/dist/{terminal-lease-WOBR64YA.js → terminal-lease-44SV3YCN.js} +6 -4
- package/dist/tools-DAF3DI3C.js +27 -0
- package/dist/{trace-PNCASAXC.js → trace-FYVW2MQA.js} +207 -10
- package/dist/tui-primitives-2AKXQNZK.js +13 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
- package/dist/{upgrade-FUSUAGHR.js → upgrade-3XPP6OQL.js} +27 -24
- package/dist/{usage-N4MKVHKD.js → usage-3NLHGTU2.js} +114 -62
- package/dist/{verifiers-YAWOJ3H2.js → verifiers-SSQONKRT.js} +172 -13
- package/dist/{verify-LTDHYBGY.js → verify-3U6J7FZI.js} +10 -10
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
- package/dist/{wiki-generate-6M7GHTBJ.js → wiki-generate-CEHYGPGQ.js} +75 -65
- package/dist/with-panes-MKB46MPQ.js +782 -0
- package/dist/worker/entry.js +106 -75
- 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 +9 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +62 -3
- package/docs/commands-and-modes.md +31 -2
- package/docs/configuration-and-targets.md +69 -12
- package/docs/context-engine.md +63 -4
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +5 -5
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -0
- package/docs/eval-runner.md +262 -11
- package/docs/evals-internal.md +72 -2
- package/docs/evidence-and-memory.md +12 -11
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +27 -1
- package/docs/fleet-dispatch.md +25 -4
- 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 +55 -4
- package/docs/proactive-memory.md +127 -14
- package/docs/prompt-envelope-and-tools.md +19 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +19 -3
- 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 +88 -1
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +5 -2
- package/src/cli/acp.ts +6 -2
- package/src/cli/agents.ts +1 -1
- package/src/cli/argv.ts +25 -0
- package/src/cli/config-inspect.ts +33 -6
- package/src/cli/config.ts +1 -1
- package/src/cli/configure.ts +23 -21
- package/src/cli/doctor-panes.ts +124 -0
- package/src/cli/doctor-state-size.ts +82 -0
- package/src/cli/doctor-toolchain.ts +57 -0
- package/src/cli/doctor.ts +22 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +93 -16
- 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/extensions.ts +5 -1
- 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 +179 -39
- 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/targets.ts +44 -13
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +85 -5
- package/src/cli/usage.ts +63 -14
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/core/bus-events.ts +33 -1
- package/src/core/cache-telemetry.ts +42 -0
- package/src/core/config.ts +67 -0
- package/src/core/defaults.ts +124 -8
- package/src/core/endpoint-key.ts +27 -0
- package/src/core/residency-target-key.ts +25 -0
- package/src/core/response-schema.ts +80 -6
- 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 +6 -0
- package/src/domains/context/codewiki/coordinator.ts +12 -4
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +52 -14
- package/src/domains/dispatch/capacity-lease.ts +118 -9
- package/src/domains/dispatch/contract.ts +11 -0
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/execution-plan.ts +44 -4
- package/src/domains/dispatch/extension.ts +378 -82
- 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 +87 -4
- 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/heartbeat.ts +32 -8
- package/src/domains/dispatch/index.ts +22 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/orphan-recovery.ts +5 -0
- package/src/domains/dispatch/reservation-store.ts +139 -11
- 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 +49 -1
- package/src/domains/dispatch/types.ts +13 -0
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-spawn.ts +25 -11
- package/src/domains/dispatch/write-boundary-enforcer.ts +20 -3
- package/src/domains/dispatch/write-boundary.ts +62 -1
- package/src/domains/eval/artifacts/store.ts +62 -0
- package/src/domains/eval/compare/behavioral.ts +224 -0
- package/src/domains/eval/compare/compare.ts +342 -2
- package/src/domains/eval/compare/envelope.ts +128 -0
- package/src/domains/eval/compare/gates.ts +24 -6
- package/src/domains/eval/compare/thresholds.ts +30 -3
- package/src/domains/eval/execution-provenance.ts +240 -0
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/metrics/aggregate.ts +136 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
- package/src/domains/eval/metrics/tracked.ts +413 -0
- package/src/domains/eval/provenance.ts +117 -0
- package/src/domains/eval/reports/comparison.ts +128 -0
- package/src/domains/eval/reports/junit.ts +17 -3
- package/src/domains/eval/reports/markdown.ts +3 -3
- package/src/domains/eval/reports/text.ts +14 -0
- package/src/domains/eval/run-compare.ts +20 -0
- package/src/domains/eval/runners/clio-run.ts +127 -0
- package/src/domains/eval/runners/external-command.ts +28 -3
- package/src/domains/eval/schema/adapter.ts +111 -0
- package/src/domains/eval/schema/artifact.ts +20 -0
- package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
- package/src/domains/eval/schema/behavioral.ts +520 -0
- package/src/domains/eval/schema/execution-envelope.ts +194 -0
- package/src/domains/eval/schema/serving.ts +105 -0
- package/src/domains/eval/schema/suite.ts +38 -8
- package/src/domains/eval/schema/validate.ts +58 -3
- package/src/domains/eval/schema/verdict.ts +237 -0
- package/src/domains/eval/suites/resolve.ts +2 -0
- package/src/domains/eval/suites/run.ts +264 -33
- package/src/domains/eval/verifiers/command.ts +2 -1
- package/src/domains/eval/workspaces/temp-copy.ts +145 -13
- package/src/domains/evidence/build.ts +2 -13
- package/src/domains/evidence/eval.ts +2 -12
- package/src/domains/evidence/findings-markdown.ts +33 -0
- package/src/domains/evidence/run-trust.ts +7 -113
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/evidence/trust-projection.ts +2 -2
- package/src/domains/extensions/compatibility.ts +285 -0
- package/src/domains/extensions/discovery.ts +38 -3
- package/src/domains/extensions/resources.ts +1 -1
- package/src/domains/extensions/state.ts +12 -3
- package/src/domains/extensions/types.ts +2 -0
- package/src/domains/lifecycle/doctor.ts +69 -1
- package/src/domains/memory/index.ts +14 -1
- package/src/domains/memory/task-bank-promotion.ts +64 -0
- package/src/domains/memory/task-memory-policy.ts +82 -17
- package/src/domains/memory/task-memory-spend.ts +131 -0
- package/src/domains/memory/task-memory-status.ts +7 -0
- package/src/domains/memory/task-memory-telemetry.ts +3 -0
- package/src/domains/middleware/index.ts +1 -0
- package/src/domains/middleware/memory-intervention.ts +97 -21
- package/src/domains/middleware/memory-step-endpoint.ts +71 -0
- 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/background-memory-usage.ts +140 -0
- package/src/domains/observability/cost.ts +22 -1
- package/src/domains/observability/index.ts +9 -0
- package/src/domains/observability/out-of-turn-usage.ts +51 -2
- package/src/domains/observability/trace-store.ts +234 -2
- package/src/domains/prompts/compiler.ts +100 -13
- package/src/domains/providers/endpoint-capacity.ts +228 -0
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +20 -3
- package/src/domains/providers/index.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +32 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
- package/src/domains/providers/runtime-resolution.ts +8 -1
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
- 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/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/target-descriptor.ts +2 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/prompts/loader.ts +95 -33
- package/src/domains/resources/skills/loader.ts +33 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/safety/call-target.ts +52 -0
- package/src/domains/safety/run-effects.ts +35 -4
- package/src/domains/session/context-accounting.ts +52 -1
- package/src/domains/session/context-ledger.ts +37 -13
- package/src/domains/session/index.ts +6 -0
- package/src/domains/session/prompt-cache.ts +140 -0
- package/src/domains/session/prompt-manifest.ts +42 -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/adapter.ts +18 -3
- package/src/engine/acp/server.ts +413 -70
- package/src/engine/acp/types.ts +19 -1
- package/src/engine/ai.ts +35 -0
- package/src/engine/apis/llamacpp-residency.ts +55 -3
- package/src/engine/apis/lmstudio.ts +25 -5
- package/src/engine/apis/ollama-native.ts +2 -1
- package/src/engine/apis/openai-completions.ts +80 -17
- package/src/engine/apis/residency-lock.ts +3 -1
- package/src/engine/apis/residency.ts +34 -1
- package/src/engine/claude/sdk-module.ts +98 -0
- package/src/engine/claude/sdk-runtime.ts +19 -11
- package/src/engine/provider-payload.ts +29 -1
- 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 +279 -35
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/chat-loop-messages.ts +26 -7
- package/src/interactive/chat-loop.ts +318 -41
- package/src/interactive/chat-panel.ts +62 -8
- package/src/interactive/clio-editor.ts +45 -8
- package/src/interactive/context-activity.ts +5 -1
- package/src/interactive/context-meter.ts +1 -1
- package/src/interactive/context-overlay.ts +41 -10
- package/src/interactive/cost-overlay.ts +66 -6
- package/src/interactive/council-grid.ts +1 -3
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +102 -20
- package/src/interactive/fleet-run-preview.ts +41 -15
- package/src/interactive/handoff-round.ts +41 -2
- package/src/interactive/interactive-application.ts +177 -7
- package/src/interactive/interactive-input-runtime.ts +15 -0
- package/src/interactive/interactive-presentation.ts +4 -0
- package/src/interactive/interactive-shell.ts +20 -17
- package/src/interactive/interactive-slash-runtime.ts +63 -10
- package/src/interactive/memory-overlay.ts +9 -0
- package/src/interactive/modal-marker.ts +170 -0
- package/src/interactive/mutation-preview.ts +295 -0
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +58 -2
- package/src/interactive/overlay-general-openers.ts +17 -0
- package/src/interactive/overlay-key-routing.ts +52 -3
- package/src/interactive/overlay-lifecycle.ts +56 -7
- package/src/interactive/overlay-model-selectors.ts +40 -3
- package/src/interactive/overlay-permission-lifecycle.ts +112 -24
- package/src/interactive/overlay-session-lifecycle.ts +73 -9
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +1 -0
- package/src/interactive/overlays/ask-user.ts +227 -49
- 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 +6 -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 +12 -1
- package/src/interactive/overlays/session-selector.ts +1 -0
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +614 -45
- 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/permission-hint.ts +34 -2
- package/src/interactive/permission-overlay.ts +159 -9
- package/src/interactive/prewarm.ts +197 -0
- package/src/interactive/render-trace.ts +162 -15
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/tool-execution.ts +4 -0
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/side-question.ts +58 -1
- package/src/interactive/slash-commands.ts +251 -15
- package/src/interactive/status/controller.ts +11 -0
- package/src/interactive/status/state-machine.ts +54 -2
- package/src/interactive/status/types.ts +7 -0
- package/src/interactive/tasks-overlay.ts +1 -0
- package/src/interactive/terminal-lease.ts +2 -0
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +346 -33
- package/src/interactive/turn-persistence.ts +14 -4
- package/src/interactive/turn-prewarm.ts +364 -0
- package/src/interactive/turn-queues.ts +7 -4
- package/src/interactive/turn-runtime.ts +8 -1
- package/src/interactive/turn-state.ts +23 -0
- package/src/interactive/view/artifacts.ts +109 -1
- package/src/interactive/view/view-overlay.ts +29 -3
- 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/ask-user.ts +43 -2
- 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-plan.ts +17 -9
- package/src/tools/dispatch-run-events.ts +134 -19
- package/src/tools/dispatch-runner.ts +29 -7
- package/src/tools/dispatch-scout.ts +1 -1
- 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/src/tools/registry.ts +16 -0
- package/dist/chunk-AOCYTWAV.js +0 -449
- package/dist/chunk-HLE42MG7.js +0 -37
- package/dist/chunk-HWUFFB6L.js +0 -83
- package/dist/chunk-JOZYP4GM.js +0 -279
- package/dist/doctor-M7YEDGAE.js +0 -91
|
@@ -4,12 +4,14 @@ import {
|
|
|
4
4
|
type Component,
|
|
5
5
|
type OverlayHandle,
|
|
6
6
|
type OverlayOptions,
|
|
7
|
+
type OverlayUnfocusOptions,
|
|
7
8
|
type SelectListTheme,
|
|
8
9
|
type SettingsListTheme,
|
|
9
10
|
type TUI,
|
|
10
11
|
truncateToWidth,
|
|
11
12
|
visibleWidth,
|
|
12
13
|
} from "../engine/tui.js";
|
|
14
|
+
import { enterModal, type ModalMarkerSink } from "./modal-marker.js";
|
|
13
15
|
import { type ClioToken, clioTheme, padAnsi, screenTitle, selectListTheme, settingsListTheme } from "./theme/index.js";
|
|
14
16
|
|
|
15
17
|
export const IDENTITY = (text: string): string => text;
|
|
@@ -464,6 +466,15 @@ export class ClioOverlayFrame implements Component {
|
|
|
464
466
|
* screen at 40x12. It learns the terminal height through the `visible`
|
|
465
467
|
* predicate, which the engine evaluates with the live dimensions in the same
|
|
466
468
|
* pass that renders the overlay.
|
|
469
|
+
*
|
|
470
|
+
* This is also where the modal marker is claimed and released. Every framed
|
|
471
|
+
* overlay is modal and every modal is framed: the only two overlays Clio shows
|
|
472
|
+
* without a frame are the context and task islands, and both pass
|
|
473
|
+
* `nonCapturing: true` straight to the engine. Hanging the marker here rather
|
|
474
|
+
* than on the overlay lifecycle therefore covers the nested frames the
|
|
475
|
+
* lifecycle's single `OverlayState` cannot see, and it cannot drift out of
|
|
476
|
+
* sync with what actually owns the keyboard, because the same call that takes
|
|
477
|
+
* the screen takes the marker.
|
|
467
478
|
*/
|
|
468
479
|
export function showClioOverlayFrame(
|
|
469
480
|
tui: TUI,
|
|
@@ -473,12 +484,21 @@ export function showClioOverlayFrame(
|
|
|
473
484
|
footerHint?: string | ((innerWidth: number) => string | undefined);
|
|
474
485
|
/** Border and title token; omitted leaves the informational frame. */
|
|
475
486
|
tone?: OverlayTone;
|
|
487
|
+
/**
|
|
488
|
+
* Stable id for the modal marker, published on the terminal title while
|
|
489
|
+
* this overlay owns the keys. Required, and deliberately not defaulted
|
|
490
|
+
* from `title`: several titles carry a session id, a decision
|
|
491
|
+
* classification, or the active tab, and an id that moves with the
|
|
492
|
+
* content is not an identifier. Use `modalMarkerId(...)` where the title
|
|
493
|
+
* really is fixed and surface-specific.
|
|
494
|
+
*/
|
|
495
|
+
markerId: string;
|
|
476
496
|
},
|
|
477
497
|
): OverlayHandle {
|
|
478
|
-
const { title, footerHint, tone, width, visible, maxHeight, margin, ...overlayOptions } = options;
|
|
498
|
+
const { title, footerHint, tone, width, visible, maxHeight, margin, markerId, ...overlayOptions } = options;
|
|
479
499
|
const boxWidth = typeof width === "number" ? width : 0;
|
|
480
500
|
const frame = new ClioOverlayFrame(child, title, footerHint, boxWidth, frameAlignForAnchor(options.anchor), tone);
|
|
481
|
-
|
|
501
|
+
const handle = tui.showOverlay(frame, {
|
|
482
502
|
...overlayOptions,
|
|
483
503
|
...(margin !== undefined ? { margin } : {}),
|
|
484
504
|
width: "100%",
|
|
@@ -493,6 +513,42 @@ export function showClioOverlayFrame(
|
|
|
493
513
|
return shown;
|
|
494
514
|
},
|
|
495
515
|
});
|
|
516
|
+
const marker = enterModal(markerId, modalMarkerSink(tui));
|
|
517
|
+
return {
|
|
518
|
+
hide(): void {
|
|
519
|
+
marker.release();
|
|
520
|
+
handle.hide();
|
|
521
|
+
},
|
|
522
|
+
setHidden(hidden: boolean): void {
|
|
523
|
+
marker.setActive(!hidden);
|
|
524
|
+
handle.setHidden(hidden);
|
|
525
|
+
},
|
|
526
|
+
isHidden: (): boolean => handle.isHidden(),
|
|
527
|
+
focus(): void {
|
|
528
|
+
marker.raise();
|
|
529
|
+
handle.focus();
|
|
530
|
+
},
|
|
531
|
+
// A pure passthrough on purpose. The engine hands focus to the next
|
|
532
|
+
// visible capturing overlay, which is another modal, so the stack is
|
|
533
|
+
// unchanged; the surface that gives the keyboard back to the composer
|
|
534
|
+
// does it by hiding, which `setHidden` already reports.
|
|
535
|
+
unfocus: (unfocusOptions?: OverlayUnfocusOptions): void =>
|
|
536
|
+
unfocusOptions ? handle.unfocus(unfocusOptions) : handle.unfocus(),
|
|
537
|
+
isFocused: (): boolean => handle.isFocused(),
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* The title sink behind a TUI, or null when there is none.
|
|
543
|
+
*
|
|
544
|
+
* The engine's `Terminal` declares `setTitle`, but the stub TUIs the overlay
|
|
545
|
+
* tests mount against are structural casts that carry only what the overlay
|
|
546
|
+
* under test reads. Probing for the method keeps the marker inert on those
|
|
547
|
+
* rather than throwing inside a render path.
|
|
548
|
+
*/
|
|
549
|
+
function modalMarkerSink(tui: TUI): ModalMarkerSink | null {
|
|
550
|
+
const terminal: Partial<ModalMarkerSink> | undefined = tui.terminal;
|
|
551
|
+
return typeof terminal?.setTitle === "function" ? (terminal as ModalMarkerSink) : null;
|
|
496
552
|
}
|
|
497
553
|
|
|
498
554
|
/** Rows from an overlay size value, matching how the engine reads one. */
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
proposeMemoryPromotion,
|
|
13
13
|
} from "../domains/memory/index.js";
|
|
14
14
|
import type { ObservabilityContract } from "../domains/observability/index.js";
|
|
15
|
+
import { foregroundStreamUsage } from "../domains/providers/index.js";
|
|
15
16
|
import type { ContextLedger } from "../domains/session/context-ledger.js";
|
|
16
17
|
import type { SessionMeta } from "../domains/session/index.js";
|
|
17
18
|
import { foldSessionArtifacts } from "../domains/session/session-artifacts.js";
|
|
@@ -147,6 +148,11 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
|
|
|
147
148
|
deps.transitions.state = "cost";
|
|
148
149
|
deps.transitions.handle = openCostOverlayFactory(deps.tui, deps.observability, {
|
|
149
150
|
sessionId: deps.getSessionId?.() ?? null,
|
|
151
|
+
...(deps.readSessionEntries
|
|
152
|
+
? {
|
|
153
|
+
getSessionEntries: () => deps.readSessionEntries?.() ?? [],
|
|
154
|
+
}
|
|
155
|
+
: {}),
|
|
150
156
|
});
|
|
151
157
|
deps.requestRender();
|
|
152
158
|
};
|
|
@@ -328,6 +334,7 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
|
|
|
328
334
|
deps.transitions.state = "dispatch-board";
|
|
329
335
|
deps.dispatchBoard.resetSelection();
|
|
330
336
|
deps.transitions.handle = showOverlayFrameFactory(deps.tui, deps.dispatchBoard, {
|
|
337
|
+
markerId: "dispatch-board",
|
|
331
338
|
title: "Fleet Runs",
|
|
332
339
|
footerHint: dispatchBoardHint,
|
|
333
340
|
anchor: "center",
|
|
@@ -429,10 +436,20 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
|
|
|
429
436
|
};
|
|
430
437
|
const resolution = deps.dispatch.preview?.(request);
|
|
431
438
|
if (!resolution) return null;
|
|
439
|
+
const foregroundHeld =
|
|
440
|
+
resolution.endpoint === undefined ? 0 : (foregroundStreamUsage()[resolution.endpoint.key] ?? 0);
|
|
432
441
|
return {
|
|
433
442
|
targetId: resolution.targetId,
|
|
434
443
|
wireModelId: resolution.wireModelId,
|
|
435
444
|
nodeId: resolution.node.id,
|
|
445
|
+
...(resolution.endpoint !== undefined
|
|
446
|
+
? {
|
|
447
|
+
endpoint: {
|
|
448
|
+
...resolution.endpoint,
|
|
449
|
+
...(foregroundHeld > 0 ? { foregroundHeld } : {}),
|
|
450
|
+
},
|
|
451
|
+
}
|
|
452
|
+
: {}),
|
|
436
453
|
};
|
|
437
454
|
},
|
|
438
455
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ClioKeybinding } from "../domains/config/keybindings.js";
|
|
2
2
|
import { isKeyRelease, matchesKey } from "../engine/tui.js";
|
|
3
|
+
import { MUTATION_PREVIEW_KEY } from "./permission-hint.js";
|
|
3
4
|
|
|
4
5
|
export type OverlayState =
|
|
5
6
|
| "closed"
|
|
@@ -14,6 +15,7 @@ export type OverlayState =
|
|
|
14
15
|
| "memory"
|
|
15
16
|
| "view"
|
|
16
17
|
| "model"
|
|
18
|
+
| "model-scope"
|
|
17
19
|
| "settings"
|
|
18
20
|
| "resume"
|
|
19
21
|
| "tree"
|
|
@@ -47,6 +49,11 @@ export interface PermissionOverlayKeyDeps {
|
|
|
47
49
|
* the call. Only the deletion keys in `isDraftEditKey` arrive here.
|
|
48
50
|
*/
|
|
49
51
|
editDraft?: (data: string) => void;
|
|
52
|
+
/** Whether this card has a mutation the operator can read locally (issue #254). */
|
|
53
|
+
canInspectMutation?: () => boolean;
|
|
54
|
+
isInspectingMutation?: () => boolean;
|
|
55
|
+
toggleMutationInspection?: () => void;
|
|
56
|
+
scrollMutationInspection?: (delta: number) => void;
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
export interface DispatchBoardOverlayKeyDeps {
|
|
@@ -57,6 +64,12 @@ export interface DispatchBoardOverlayKeyDeps {
|
|
|
57
64
|
cancelSelectedDispatch: () => void;
|
|
58
65
|
/** Open or close the selected run's worker-progress detail. */
|
|
59
66
|
toggleSelectedDispatchDetail: () => void;
|
|
67
|
+
/**
|
|
68
|
+
* Open or retarget the watch pane for the selected run. True when the pane
|
|
69
|
+
* layer took the key; false hands Enter back to the inline detail toggle,
|
|
70
|
+
* which is the whole behavior when panes are off or the run is terminal.
|
|
71
|
+
*/
|
|
72
|
+
watchSelectedDispatch: () => boolean;
|
|
60
73
|
}
|
|
61
74
|
|
|
62
75
|
interface CloseOverlayKeyDeps {
|
|
@@ -85,6 +98,18 @@ function isDraftEditKey(data: string): boolean {
|
|
|
85
98
|
return !isKeyRelease(data) && DRAFT_EDIT_KEYS.some((key) => matchesKey(data, key));
|
|
86
99
|
}
|
|
87
100
|
|
|
101
|
+
/** Rows one page key moves the open mutation. Matches the window the card renders. */
|
|
102
|
+
const MUTATION_PAGE_ROWS = 16;
|
|
103
|
+
|
|
104
|
+
/** How far a key scrolls the open mutation, or 0 when the key is not a scroll key. */
|
|
105
|
+
function mutationScrollDelta(data: string): number {
|
|
106
|
+
if (matchesKey(data, "up")) return -1;
|
|
107
|
+
if (matchesKey(data, "down")) return 1;
|
|
108
|
+
if (matchesKey(data, "pageUp")) return -MUTATION_PAGE_ROWS;
|
|
109
|
+
if (matchesKey(data, "pageDown")) return MUTATION_PAGE_ROWS;
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
88
113
|
/** Pure permission overlay key router: returns true when the input was consumed. */
|
|
89
114
|
export function routePermissionOverlayKey(data: string, deps: PermissionOverlayKeyDeps): boolean {
|
|
90
115
|
if (matchesKey(data, "enter") && !isKeyRelease(data)) {
|
|
@@ -98,6 +123,26 @@ export function routePermissionOverlayKey(data: string, deps: PermissionOverlayK
|
|
|
98
123
|
deps.editDraft(data);
|
|
99
124
|
return true;
|
|
100
125
|
}
|
|
126
|
+
// Reading the mutation is the one thing this dialog does that is not an
|
|
127
|
+
// answer, so it toggles rather than navigating away: Enter, `s`, and Esc keep
|
|
128
|
+
// their meanings the whole time the mutation is on screen, and `v` is what
|
|
129
|
+
// puts it away. A card with nothing local to inspect leaves the key inert.
|
|
130
|
+
if (
|
|
131
|
+
matchesKey(data, MUTATION_PREVIEW_KEY) &&
|
|
132
|
+
!isKeyRelease(data) &&
|
|
133
|
+
(deps.canInspectMutation?.() ?? false) &&
|
|
134
|
+
deps.toggleMutationInspection
|
|
135
|
+
) {
|
|
136
|
+
deps.toggleMutationInspection();
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
if ((deps.isInspectingMutation?.() ?? false) && deps.scrollMutationInspection && !isKeyRelease(data)) {
|
|
140
|
+
const delta = mutationScrollDelta(data);
|
|
141
|
+
if (delta !== 0) {
|
|
142
|
+
deps.scrollMutationInspection(delta);
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
101
146
|
if (isEscapeKey(data)) {
|
|
102
147
|
deps.cancelPermission();
|
|
103
148
|
return true;
|
|
@@ -135,10 +180,11 @@ export function routeDispatchBoardOverlayKey(data: string, deps: DispatchBoardOv
|
|
|
135
180
|
deps.cancelSelectedDispatch();
|
|
136
181
|
return true;
|
|
137
182
|
}
|
|
138
|
-
//
|
|
139
|
-
//
|
|
183
|
+
// Enter on a live run enters it: the watch pane opens (or retargets) and
|
|
184
|
+
// renders the run's stream beside the board. Where panes are off, absent,
|
|
185
|
+
// or the run is terminal, Enter keeps its inline worker-progress detail.
|
|
140
186
|
if (matchesKey(data, "enter")) {
|
|
141
|
-
deps.toggleSelectedDispatchDetail();
|
|
187
|
+
if (!deps.watchSelectedDispatch()) deps.toggleSelectedDispatchDetail();
|
|
142
188
|
return true;
|
|
143
189
|
}
|
|
144
190
|
return false;
|
|
@@ -242,6 +288,9 @@ export function routeOverlayKey(
|
|
|
242
288
|
if (overlayState === "memory") return false;
|
|
243
289
|
if (overlayState === "view") return false;
|
|
244
290
|
if (overlayState === "model") return routeModelOverlayKey(data, deps);
|
|
291
|
+
// The scope dialog owns Esc itself: cancelling it must leave the model where
|
|
292
|
+
// it was, and a router-level close cannot say that to the caller waiting on it.
|
|
293
|
+
if (overlayState === "model-scope") return false;
|
|
245
294
|
// Settings owns Esc itself: its stack is sections → rows → detail, and a
|
|
246
295
|
// router-level close made every Esc leave the overlay from wherever the
|
|
247
296
|
// operator was, so a cancelled picker and a finished visit looked the same.
|
|
@@ -12,6 +12,7 @@ import { createOverlayTransitions } from "./overlay-transitions.js";
|
|
|
12
12
|
import {
|
|
13
13
|
createPermissionOverlayBody,
|
|
14
14
|
PERMISSION_OVERLAY_WIDTH,
|
|
15
|
+
type PermissionOverlayBodyHandle,
|
|
15
16
|
permissionOverlayHint,
|
|
16
17
|
permissionOverlayPlacement,
|
|
17
18
|
permissionOverlayTitle,
|
|
@@ -21,6 +22,7 @@ import {
|
|
|
21
22
|
export * from "./overlay-key-routing.js";
|
|
22
23
|
|
|
23
24
|
import type { OverlayState } from "./overlay-key-routing.js";
|
|
25
|
+
import type { PendingModelScope } from "./overlays/model-scope.js";
|
|
24
26
|
import type { SettingsCenterRowId, SettingsSectionId } from "./overlays/settings.js";
|
|
25
27
|
|
|
26
28
|
// Runtime lifecycle construction lives beside the pure modal key router so the
|
|
@@ -47,6 +49,7 @@ export type OverlayLifecycleApplicationDeps = Pick<
|
|
|
47
49
|
| "onNewSession"
|
|
48
50
|
| "onResumeSession"
|
|
49
51
|
| "onSelectModel"
|
|
52
|
+
| "onSetThinkingLevel"
|
|
50
53
|
| "providers"
|
|
51
54
|
| "readSessionEntries"
|
|
52
55
|
| "registerAskUserHandler"
|
|
@@ -107,6 +110,7 @@ export interface OverlayLifecycleRuntimeDeps {
|
|
|
107
110
|
openAuthDialog?: typeof import("./overlays/auth-dialog.js").openAuthDialog;
|
|
108
111
|
openAskUserOverlay?: typeof import("./overlays/ask-user.js").openAskUserOverlay;
|
|
109
112
|
openModelOverlay?: typeof import("./overlays/model-selector.js").openModelOverlay;
|
|
113
|
+
openModelScopeOverlay?: typeof import("./overlays/model-scope.js").openModelScopeOverlay;
|
|
110
114
|
openSettingsOverlay?: typeof import("./overlays/settings.js").openSettingsOverlay;
|
|
111
115
|
openSessionOverlay?: typeof import("./overlays/session-selector.js").openSessionOverlay;
|
|
112
116
|
openTreeOverlay?: typeof import("./overlays/tree-selector.js").openTreeOverlay;
|
|
@@ -150,6 +154,8 @@ export interface OverlayLifecycleController {
|
|
|
150
154
|
startHandoffState(goal: string): void;
|
|
151
155
|
startFleetRunState(name: string, vars: Readonly<Record<string, string>>): void;
|
|
152
156
|
openModelOverlayState(): void;
|
|
157
|
+
/** `/model <pattern>` and the picker both land here: choose session or global before anything applies. */
|
|
158
|
+
openModelScopeState(ref: PendingModelScope): void;
|
|
153
159
|
openSettingsOverlayState(section?: SettingsSectionId, rowId?: SettingsCenterRowId): void;
|
|
154
160
|
openResumeOverlayState(): void;
|
|
155
161
|
openTreeOverlayState(): void;
|
|
@@ -163,6 +169,12 @@ export interface OverlayLifecycleController {
|
|
|
163
169
|
toggleDispatchBoardOverlay(): void;
|
|
164
170
|
confirmPermission(): void;
|
|
165
171
|
stopTurnFromPermission(): void;
|
|
172
|
+
/** Whether the live permission card has a mutation the operator can read here. */
|
|
173
|
+
canInspectMutation(): boolean;
|
|
174
|
+
/** Whether that mutation is currently open. */
|
|
175
|
+
isInspectingMutation(): boolean;
|
|
176
|
+
toggleMutationInspection(): void;
|
|
177
|
+
scrollMutationInspection(delta: number): void;
|
|
166
178
|
cancelAskUser(): void;
|
|
167
179
|
dispose(): void;
|
|
168
180
|
}
|
|
@@ -189,6 +201,7 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
|
|
|
189
201
|
openAuthDialog: openAuthDialogFactory,
|
|
190
202
|
openAskUserOverlay: openAskUserOverlayFactory,
|
|
191
203
|
openModelOverlay: openModelOverlayFactory,
|
|
204
|
+
openModelScopeOverlay: openModelScopeOverlayFactory,
|
|
192
205
|
openSettingsOverlay: openSettingsOverlayFactory,
|
|
193
206
|
openSessionOverlay: openSessionOverlayFactory,
|
|
194
207
|
openTreeOverlay: openTreeOverlayFactory,
|
|
@@ -210,6 +223,16 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
|
|
|
210
223
|
} = deps;
|
|
211
224
|
let overlayPermission: OverlayPermissionLifecycle | null = null;
|
|
212
225
|
let overlayAskUser: OverlayAskUserLifecycle | null = null;
|
|
226
|
+
/**
|
|
227
|
+
* The live permission card's body, held only while its dialog is on screen.
|
|
228
|
+
* The mutation text it can show lives here and nowhere else, so dropping the
|
|
229
|
+
* reference when the dialog closes drops the text with it.
|
|
230
|
+
*/
|
|
231
|
+
let permissionBody: PermissionOverlayBodyHandle | null = null;
|
|
232
|
+
const inspectionHint = (): import("./permission-hint.js").PermissionInspectionHint => {
|
|
233
|
+
if (permissionBody === null || !permissionBody.canInspect()) return "none";
|
|
234
|
+
return permissionBody.isInspecting() ? "open" : "closed";
|
|
235
|
+
};
|
|
213
236
|
const overlayTransitions = createOverlayTransitions({
|
|
214
237
|
stopDispatchBoardTicker: () => interactiveTickers.stopDispatchBoardTicker(),
|
|
215
238
|
renderContextIsland: () => interactiveTickers.renderContextIsland(),
|
|
@@ -217,7 +240,10 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
|
|
|
217
240
|
requestRender: () => tui.requestRender(),
|
|
218
241
|
cancelPendingAskUser: () => overlayAskUser?.cancelPending() ?? false,
|
|
219
242
|
finishAuth: (dismiss) => overlayAuth.finish(dismiss),
|
|
220
|
-
onPermissionOverlayClosed: () =>
|
|
243
|
+
onPermissionOverlayClosed: () => {
|
|
244
|
+
permissionBody = null;
|
|
245
|
+
overlayPermission?.onPermissionOverlayClosed();
|
|
246
|
+
},
|
|
221
247
|
onOverlayClosed: () => overlayPermission?.retryPending(),
|
|
222
248
|
});
|
|
223
249
|
const closeOverlay = overlayTransitions.close;
|
|
@@ -248,18 +274,28 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
|
|
|
248
274
|
dispatch: deps.app.dispatch,
|
|
249
275
|
getAutonomy: () => deps.app.getSettings?.().autonomy ?? "auto-edit",
|
|
250
276
|
getOverlayState: () => overlayTransitions.state,
|
|
251
|
-
openPermissionOverlay: (view) => {
|
|
252
|
-
if (overlayTransitions.state
|
|
253
|
-
|
|
254
|
-
|
|
277
|
+
openPermissionOverlay: (view, inspect) => {
|
|
278
|
+
if (overlayTransitions.state === "permission-confirm") return false;
|
|
279
|
+
const body = createPermissionOverlayBody(view, inspect);
|
|
280
|
+
permissionBody = body;
|
|
281
|
+
const handle = showOverlayFrame(tui, body, {
|
|
255
282
|
...permissionOverlayPlacement(tui, editor, footer.view),
|
|
256
283
|
width: PERMISSION_OVERLAY_WIDTH,
|
|
284
|
+
// Not derived from the title: that one is classified per decision
|
|
285
|
+
// axis and is one of five strings for the same modal.
|
|
286
|
+
markerId: "permission-confirm",
|
|
257
287
|
title: permissionOverlayTitle(view),
|
|
258
288
|
tone: permissionOverlayTone(view),
|
|
259
289
|
// Read per frame: the footer names what Enter does right now, and
|
|
260
|
-
// that depends on whether the composer holds a draft
|
|
261
|
-
|
|
290
|
+
// that depends on whether the composer holds a draft and on whether
|
|
291
|
+
// the mutation is open.
|
|
292
|
+
footerHint: (innerWidth) => permissionOverlayHint(innerWidth, editor.getText().length > 0, inspectionHint()),
|
|
262
293
|
});
|
|
294
|
+
if (!overlayTransitions.showPermission(handle)) {
|
|
295
|
+
handle.hide();
|
|
296
|
+
permissionBody = null;
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
263
299
|
tui.requestRender();
|
|
264
300
|
return true;
|
|
265
301
|
},
|
|
@@ -308,10 +344,12 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
|
|
|
308
344
|
...(deps.app.writeSettings ? { writeSettings: deps.app.writeSettings } : {}),
|
|
309
345
|
...(deps.app.commitSetting ? { commitSetting: deps.app.commitSetting } : {}),
|
|
310
346
|
...(deps.app.onSelectModel ? { onSelectModel: deps.app.onSelectModel } : {}),
|
|
347
|
+
...(deps.app.onSetThinkingLevel ? { onSetThinkingLevel: deps.app.onSetThinkingLevel } : {}),
|
|
311
348
|
...(deps.app.getFleetNodes ? { getFleetNodes: deps.app.getFleetNodes } : {}),
|
|
312
349
|
connectTarget: (targetId) => overlayAuth.openConnectFlow(targetId),
|
|
313
350
|
...(deps.app.interop ? { getInteropProposals: interopProposalsFor(deps.app.interop) } : {}),
|
|
314
351
|
...(openModelOverlayFactory ? { openModelOverlay: openModelOverlayFactory } : {}),
|
|
352
|
+
...(openModelScopeOverlayFactory ? { openModelScopeOverlay: openModelScopeOverlayFactory } : {}),
|
|
315
353
|
...(openSettingsOverlayFactory ? { openSettingsOverlay: openSettingsOverlayFactory } : {}),
|
|
316
354
|
});
|
|
317
355
|
|
|
@@ -443,6 +481,7 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
|
|
|
443
481
|
startFleetRunState,
|
|
444
482
|
startHandoffState,
|
|
445
483
|
openModelOverlayState: overlayModelSelectors.openModelOverlayState,
|
|
484
|
+
openModelScopeState: overlayModelSelectors.openModelScopeState,
|
|
446
485
|
openSettingsOverlayState: overlayModelSelectors.openSettingsOverlayState,
|
|
447
486
|
openResumeOverlayState,
|
|
448
487
|
openTreeOverlayState,
|
|
@@ -464,6 +503,16 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
|
|
|
464
503
|
footer.refresh();
|
|
465
504
|
tui.requestRender();
|
|
466
505
|
},
|
|
506
|
+
canInspectMutation: () => permissionBody?.canInspect() ?? false,
|
|
507
|
+
isInspectingMutation: () => permissionBody?.isInspecting() ?? false,
|
|
508
|
+
toggleMutationInspection: () => {
|
|
509
|
+
permissionBody?.toggleInspect();
|
|
510
|
+
tui.requestRender();
|
|
511
|
+
},
|
|
512
|
+
scrollMutationInspection: (delta) => {
|
|
513
|
+
permissionBody?.scrollInspect(delta);
|
|
514
|
+
tui.requestRender();
|
|
515
|
+
},
|
|
467
516
|
cancelAskUser: overlayAskUser.cancel,
|
|
468
517
|
dispose: () => {
|
|
469
518
|
overlayPermission?.dispose();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ClioSettings } from "../core/config.js";
|
|
2
|
+
import type { ThinkingLevel } from "../core/defaults.js";
|
|
2
3
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
3
4
|
import type { InteropProposal } from "../domains/interop/index.js";
|
|
4
5
|
import type { ProvidersContract } from "../domains/providers/index.js";
|
|
@@ -7,6 +8,12 @@ import type { TUI } from "../engine/tui.js";
|
|
|
7
8
|
import type { FooterDashboardPanel } from "./footer/dashboard.js";
|
|
8
9
|
import type { InteractiveNoticeLevel } from "./interactive-subscriptions.js";
|
|
9
10
|
import type { OverlayTransitions } from "./overlay-transitions.js";
|
|
11
|
+
import {
|
|
12
|
+
formatPendingModelScope,
|
|
13
|
+
type ModelScopeChoice,
|
|
14
|
+
openModelScopeOverlay,
|
|
15
|
+
type PendingModelScope,
|
|
16
|
+
} from "./overlays/model-scope.js";
|
|
10
17
|
import { openModelOverlay } from "./overlays/model-selector.js";
|
|
11
18
|
import { openSettingsOverlay, type SettingsCenterRowId, type SettingsSectionId } from "./overlays/settings.js";
|
|
12
19
|
|
|
@@ -21,7 +28,9 @@ export interface OverlayModelSelectorsDeps {
|
|
|
21
28
|
getSettings?: () => Readonly<ClioSettings>;
|
|
22
29
|
writeSettings?: (next: ClioSettings) => void;
|
|
23
30
|
commitSetting?: (id: string, next: ClioSettings, scope: "session" | "global") => void;
|
|
24
|
-
onSelectModel?: (ref: { target: string; model: string }) => void;
|
|
31
|
+
onSelectModel?: (ref: { target: string; model: string }, scope: ModelScopeChoice) => void;
|
|
32
|
+
/** Applied with the chosen scope when the swap named a thinking level. */
|
|
33
|
+
onSetThinkingLevel?: (level: ThinkingLevel, scope?: ModelScopeChoice) => void;
|
|
25
34
|
/** Settings → Fleet shows live node placement health when the scheduler exposes it. */
|
|
26
35
|
getFleetNodes?: () => ReadonlyArray<FleetNodeSnapshot>;
|
|
27
36
|
/** Settings → Targets "connect" runs the auth flow over the open settings overlay. */
|
|
@@ -29,17 +38,21 @@ export interface OverlayModelSelectorsDeps {
|
|
|
29
38
|
/** Settings → Advanced offers detected agents on the delegation.agents row. */
|
|
30
39
|
getInteropProposals?: () => ReadonlyArray<InteropProposal>;
|
|
31
40
|
openModelOverlay?: typeof openModelOverlay;
|
|
41
|
+
openModelScopeOverlay?: typeof openModelScopeOverlay;
|
|
32
42
|
openSettingsOverlay?: typeof openSettingsOverlay;
|
|
33
43
|
}
|
|
34
44
|
|
|
35
45
|
export interface OverlayModelSelectors {
|
|
36
46
|
openModelOverlayState(): void;
|
|
47
|
+
/** Ask where a resolved swap lands, then apply it. Nothing changes until the operator answers. */
|
|
48
|
+
openModelScopeState(ref: PendingModelScope): void;
|
|
37
49
|
openSettingsOverlayState(section?: SettingsSectionId, rowId?: SettingsCenterRowId): void;
|
|
38
50
|
refreshSettingsOverlay(): void;
|
|
39
51
|
}
|
|
40
52
|
|
|
41
53
|
export function createOverlayModelSelectors(deps: OverlayModelSelectorsDeps): OverlayModelSelectors {
|
|
42
54
|
const openModel = deps.openModelOverlay ?? openModelOverlay;
|
|
55
|
+
const openModelScope = deps.openModelScopeOverlay ?? openModelScopeOverlay;
|
|
43
56
|
const openSettings = deps.openSettingsOverlay ?? openSettingsOverlay;
|
|
44
57
|
let settingsOverlayRefresh: (() => void) | null = null;
|
|
45
58
|
|
|
@@ -53,9 +66,11 @@ export function createOverlayModelSelectors(deps: OverlayModelSelectorsDeps): Ov
|
|
|
53
66
|
...(deps.getSettings ? { getSettings: deps.getSettings } : {}),
|
|
54
67
|
providers: deps.providers,
|
|
55
68
|
bus: deps.bus,
|
|
69
|
+
// The picker resolves what to run; the scope dialog resolves where it
|
|
70
|
+
// lands. Closing this overlay first keeps one modal on screen at a time.
|
|
56
71
|
onSelect: (ref) => {
|
|
57
|
-
deps.
|
|
58
|
-
|
|
72
|
+
deps.closeOverlay();
|
|
73
|
+
openModelScopeState(ref);
|
|
59
74
|
},
|
|
60
75
|
onToggleFavorite: (ref, favorite) => {
|
|
61
76
|
if (!deps.getSettings || !deps.writeSettings) return;
|
|
@@ -76,6 +91,27 @@ export function createOverlayModelSelectors(deps: OverlayModelSelectorsDeps): Ov
|
|
|
76
91
|
deps.tui.requestRender();
|
|
77
92
|
};
|
|
78
93
|
|
|
94
|
+
const openModelScopeState = (ref: PendingModelScope): void => {
|
|
95
|
+
if (deps.transitions.state !== "closed") return;
|
|
96
|
+
deps.transitions.state = "model-scope";
|
|
97
|
+
deps.transitions.handle = openModelScope(deps.tui, {
|
|
98
|
+
ref,
|
|
99
|
+
onChoose: (scope) => {
|
|
100
|
+
deps.closeOverlay();
|
|
101
|
+
deps.onSelectModel?.({ target: ref.target, model: ref.model }, scope);
|
|
102
|
+
if (ref.thinkingLevel) deps.onSetThinkingLevel?.(ref.thinkingLevel, scope);
|
|
103
|
+
const swap = formatPendingModelScope(ref);
|
|
104
|
+
deps.notify("success", scope === "global" ? `active and saved globally: ${swap}` : `active this session: ${swap}`);
|
|
105
|
+
deps.refreshFooter();
|
|
106
|
+
},
|
|
107
|
+
onCancel: () => {
|
|
108
|
+
deps.closeOverlay();
|
|
109
|
+
deps.notify("info", "model unchanged");
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
deps.tui.requestRender();
|
|
113
|
+
};
|
|
114
|
+
|
|
79
115
|
const openSettingsOverlayState = (section?: SettingsSectionId, rowId?: SettingsCenterRowId): void => {
|
|
80
116
|
if (deps.transitions.state !== "closed" || !deps.getSettings || !deps.writeSettings) return;
|
|
81
117
|
deps.transitions.state = "settings";
|
|
@@ -121,6 +157,7 @@ export function createOverlayModelSelectors(deps: OverlayModelSelectorsDeps): Ov
|
|
|
121
157
|
|
|
122
158
|
return {
|
|
123
159
|
openModelOverlayState,
|
|
160
|
+
openModelScopeState,
|
|
124
161
|
openSettingsOverlayState,
|
|
125
162
|
refreshSettingsOverlay: () => settingsOverlayRefresh?.(),
|
|
126
163
|
};
|