@ashlr/hub 3.11.3 → 3.11.5
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 +34 -0
- package/README.md +44 -18
- package/dist/authority-surface.json +72 -57
- package/dist/build-identity.json +2 -2
- package/dist/cli/authority.d.ts +39 -0
- package/dist/cli/authority.js +222 -55
- package/dist/cli/authority.js.map +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/verse.d.ts +3 -0
- package/dist/cli/verse.js +10 -0
- package/dist/cli/verse.js.map +1 -1
- package/dist/core/authority/types.d.ts +2 -2
- package/dist/core/cloud/cloud-api.js +1 -1
- package/dist/core/cloud/cloud-api.js.map +1 -1
- package/dist/core/cloud/delivery-contract.d.ts +1 -1
- package/dist/core/cloud/delivery-contract.js +25 -15
- package/dist/core/cloud/delivery-contract.js.map +1 -1
- package/dist/core/cloud/store.js +6 -0
- package/dist/core/cloud/store.js.map +1 -1
- package/dist/core/cloud/tracker.d.ts +2 -0
- package/dist/core/cloud/tracker.js +140 -37
- package/dist/core/cloud/tracker.js.map +1 -1
- package/dist/core/cloud/types.d.ts +9 -1
- package/dist/core/cloud/types.js.map +1 -1
- package/dist/core/comms/dispatch.d.ts +5 -0
- package/dist/core/comms/dispatch.js +12 -1
- package/dist/core/comms/dispatch.js.map +1 -1
- package/dist/core/comms/requests.d.ts +27 -1
- package/dist/core/comms/requests.js +50 -1
- package/dist/core/comms/requests.js.map +1 -1
- package/dist/core/daemon/loop.d.ts +14 -0
- package/dist/core/daemon/loop.js +35 -0
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/fabric/claude-usage.js +23 -1
- package/dist/core/fabric/claude-usage.js.map +1 -1
- package/dist/core/fleet/dispatch-router.d.ts +7 -0
- package/dist/core/fleet/dispatch-router.js +4 -1
- package/dist/core/fleet/dispatch-router.js.map +1 -1
- package/dist/core/fleet/tick-hooks-live.d.ts +5 -1
- package/dist/core/fleet/tick-hooks-live.js +10 -1
- package/dist/core/fleet/tick-hooks-live.js.map +1 -1
- package/dist/core/local-runtime/llama/config.d.ts +14 -0
- package/dist/core/local-runtime/llama/config.js +20 -2
- package/dist/core/local-runtime/llama/config.js.map +1 -1
- package/dist/core/local-runtime/llama/process.d.ts +19 -0
- package/dist/core/local-runtime/llama/process.js +67 -17
- package/dist/core/local-runtime/llama/process.js.map +1 -1
- package/dist/core/local-runtime/llama/supervisor.js +14 -3
- package/dist/core/local-runtime/llama/supervisor.js.map +1 -1
- package/dist/core/observability/rollup.d.ts +12 -0
- package/dist/core/observability/rollup.js +37 -2
- package/dist/core/observability/rollup.js.map +1 -1
- package/dist/core/observability/usage-source.js +49 -1
- package/dist/core/observability/usage-source.js.map +1 -1
- package/dist/core/resources/connection-monitor.js +47 -4
- package/dist/core/resources/connection-monitor.js.map +1 -1
- package/dist/core/resources/engineering-mission-store.d.ts +1 -1
- package/dist/core/routing/headroom.js +7 -2
- package/dist/core/routing/headroom.js.map +1 -1
- package/dist/core/routing/router.d.ts +48 -0
- package/dist/core/routing/router.js +129 -13
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/run/best-of-n.d.ts +7 -0
- package/dist/core/run/best-of-n.js +3 -0
- package/dist/core/run/best-of-n.js.map +1 -1
- package/dist/core/run/harness-dispatch.d.ts +147 -0
- package/dist/core/run/harness-dispatch.js +234 -0
- package/dist/core/run/harness-dispatch.js.map +1 -0
- package/dist/core/run/orchestrator.js +3 -0
- package/dist/core/run/orchestrator.js.map +1 -1
- package/dist/core/run/provider-client.d.ts +8 -0
- package/dist/core/run/provider-client.js +4 -0
- package/dist/core/run/provider-client.js.map +1 -1
- package/dist/core/run/sandboxed-engine.d.ts +8 -0
- package/dist/core/run/sandboxed-engine.js +60 -7
- package/dist/core/run/sandboxed-engine.js.map +1 -1
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +181 -5
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +180 -4
- package/dist/core/universe/firm-demo.d.ts +1 -1
- package/dist/core/universe/firm-graph.d.ts +2 -2
- package/dist/core/util/scrub.js +16 -3
- package/dist/core/util/scrub.js.map +1 -1
- package/dist/core/verse/accounts.d.ts +9 -1
- package/dist/core/verse/accounts.js +52 -11
- package/dist/core/verse/accounts.js.map +1 -1
- package/dist/core/verse/apps-api.d.ts +12 -0
- package/dist/core/verse/apps-api.js +22 -4
- package/dist/core/verse/apps-api.js.map +1 -1
- package/dist/core/verse/apps.js +22 -12
- package/dist/core/verse/apps.js.map +1 -1
- package/dist/core/verse/local-models.js +3 -7
- package/dist/core/verse/local-models.js.map +1 -1
- package/dist/core/verse/model-display-name.d.ts +34 -0
- package/dist/core/verse/model-display-name.js +125 -0
- package/dist/core/verse/model-display-name.js.map +1 -0
- package/dist/core/verse/seats.d.ts +11 -2
- package/dist/core/verse/seats.js +42 -18
- package/dist/core/verse/seats.js.map +1 -1
- package/dist/core/verse/transient-events.d.ts +21 -0
- package/dist/core/verse/transient-events.js +12 -0
- package/dist/core/verse/transient-events.js.map +1 -0
- package/dist/core/verse/types.d.ts +6 -13
- package/dist/core/verse/types.js +5 -36
- package/dist/core/verse/types.js.map +1 -1
- package/dist/core/web/public/next/assets/ActionMenu-DffwPklw.js +2 -0
- package/dist/core/web/public/next/assets/{ActionMenu-FxXeRbPx.js.map → ActionMenu-DffwPklw.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-CxzE6ekM.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-CxzE6ekM.js.map +1 -0
- package/dist/core/web/public/next/assets/App-DFlp-vdv.js +7 -0
- package/dist/core/web/public/next/assets/App-DFlp-vdv.js.map +1 -0
- package/dist/core/web/public/next/assets/AppsSection-Ct2O605-.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-Ct2O605-.js.map +1 -0
- package/dist/core/web/public/next/assets/AreaTrend-o-GLl2Is.js +2 -0
- package/dist/core/web/public/next/assets/{AreaTrend-CDxrQU4b.js.map → AreaTrend-o-GLl2Is.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomyOffState-CXhXpsim.js +2 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-CXhXpsim.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-DmbE71vI.css +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-BTg7yVa1.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-DuQkHGD_.js.map → AutonomySection-BTg7yVa1.js.map} +1 -1
- package/dist/core/web/public/next/assets/BranchBar-BjPFtGsj.js +2 -0
- package/dist/core/web/public/next/assets/{BranchBar-CLsvOcyK.js.map → BranchBar-BjPFtGsj.js.map} +1 -1
- package/dist/core/web/public/next/assets/BudgetControl-ng6swoZp.js +2 -0
- package/dist/core/web/public/next/assets/{BudgetControl-TL3FeZ1D.js.map → BudgetControl-ng6swoZp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-HHXgoXGr.js → Button-OjVJSrFq.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-HHXgoXGr.js.map → Button-OjVJSrFq.js.map} +1 -1
- package/dist/core/web/public/next/assets/CapacityStrip-Bx4c3dxD.js +2 -0
- package/dist/core/web/public/next/assets/{CapacityStrip-qReu0RaF.js.map → CapacityStrip-Bx4c3dxD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useChartWidth-BW6SwYIK.css → ChartFrame-BVuBe6RP.css} +1 -1
- package/dist/core/web/public/next/assets/ChartFrame-B_w2Siqg.js +2 -0
- package/dist/core/web/public/next/assets/ChartFrame-B_w2Siqg.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-Bisj9R6E.js +3 -0
- package/dist/core/web/public/next/assets/ChatSection-Bisj9R6E.js.map +1 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-5Gf4iAok.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-5Gf4iAok.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandPalette-iTpk6I8r.js +2 -0
- package/dist/core/web/public/next/assets/CommandPalette-iTpk6I8r.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandSection-CvAVd1w4.css +1 -0
- package/dist/core/web/public/next/assets/CommandSection-D8ZihzvE.js +2 -0
- package/dist/core/web/public/next/assets/CommandSection-D8ZihzvE.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-_S9iE-cJ.js +2 -0
- package/dist/core/web/public/next/assets/{ConfirmDialog-DLrLKM0c.js.map → ConfirmDialog-_S9iE-cJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/DeleteChatDialog-KUYUygiA.js +2 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-KUYUygiA.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-BuIaG6HF.js +2 -0
- package/dist/core/web/public/next/assets/{Dialog-BS9Dxi3G.js.map → Dialog-BuIaG6HF.js.map} +1 -1
- package/dist/core/web/public/next/assets/DiffPane-De4IQt82.js +2 -0
- package/dist/core/web/public/next/assets/{DiffPane-TOmUf3b2.js.map → DiffPane-De4IQt82.js.map} +1 -1
- package/dist/core/web/public/next/assets/DiffViewer-B75t6Ile.js +2 -0
- package/dist/core/web/public/next/assets/{DiffViewer-BpH56302.js.map → DiffViewer-B75t6Ile.js.map} +1 -1
- package/dist/core/web/public/next/assets/DockHost-BPqyhtCP.js +2 -0
- package/dist/core/web/public/next/assets/DockHost-BPqyhtCP.js.map +1 -0
- package/dist/core/web/public/next/assets/{EmptyState-BqR5YAmf.js → EmptyState-DXkT4vhW.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-BqR5YAmf.js.map → EmptyState-DXkT4vhW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-dhvDTwAZ.js → Epistemic-CfqFe_aP.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-dhvDTwAZ.js.map → Epistemic-CfqFe_aP.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-B7f-XBiX.js +3 -0
- package/dist/core/web/public/next/assets/FleetSection-B7f-XBiX.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-pXYySwXQ.js +2 -0
- package/dist/core/web/public/next/assets/{Funnel-D2u7Wlzc.js.map → Funnel-pXYySwXQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/GearTray-gj6lT7ba.js +2 -0
- package/dist/core/web/public/next/assets/{GearTray-Cb2npoxM.js.map → GearTray-gj6lT7ba.js.map} +1 -1
- package/dist/core/web/public/next/assets/GrowthSection-D8e9m9Wy.js +2 -0
- package/dist/core/web/public/next/assets/{GrowthSection-C5aDPs8B.js.map → GrowthSection-D8e9m9Wy.js.map} +1 -1
- package/dist/core/web/public/next/assets/HandoffDialog-VfKxKhxF.js +2 -0
- package/dist/core/web/public/next/assets/{HandoffDialog-BF3AYg-X.js.map → HandoffDialog-VfKxKhxF.js.map} +1 -1
- package/dist/core/web/public/next/assets/Input-u1YR_Ogl.js +2 -0
- package/dist/core/web/public/next/assets/{Input-B5dmGLZx.js.map → Input-u1YR_Ogl.js.map} +1 -1
- package/dist/core/web/public/next/assets/LeaderCard-BDELBrnx.js +2 -0
- package/dist/core/web/public/next/assets/LeaderCard-BDELBrnx.js.map +1 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-NKLF2srR.js +2 -0
- package/dist/core/web/public/next/assets/{MatrixHeatmap-BgEUs2Eu.js.map → MatrixHeatmap-NKLF2srR.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-D1tDvlRa.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-DZkiOuoq.js.map → McpSection-D1tDvlRa.js.map} +1 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-DlfLEJxu.js +3 -0
- package/dist/core/web/public/next/assets/{MessageMarkdown-BauY8ZTY.js.map → MessageMarkdown-DlfLEJxu.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DLBNLfsn.js → MessageMarkdownRenderer-BYZzI115.js} +4 -4
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DLBNLfsn.js.map → MessageMarkdownRenderer-BYZzI115.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-DNeocJnD.js → Meter-BSVhU43Q.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-DNeocJnD.js.map → Meter-BSVhU43Q.js.map} +1 -1
- package/dist/core/web/public/next/assets/MindSection-lqV2e_Sq.js +2 -0
- package/dist/core/web/public/next/assets/MindSection-lqV2e_Sq.js.map +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-CLGP72g6.js +2 -0
- package/dist/core/web/public/next/assets/{MutationTokenDialog-mxrw0Yvy.js.map → MutationTokenDialog-CLGP72g6.js.map} +1 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-D992XTOn.js +2 -0
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-CO-Balfp.js.map → NeedsYouDrawer-D992XTOn.js.map} +1 -1
- package/dist/core/web/public/next/assets/NeedsYouList-eBOlJr0b.js +2 -0
- package/dist/core/web/public/next/assets/{NeedsYouList-CzDZbzRD.js.map → NeedsYouList-eBOlJr0b.js.map} +1 -1
- package/dist/core/web/public/next/assets/NewChatDialog-DoYTH26M.js +3 -0
- package/dist/core/web/public/next/assets/NewChatDialog-DoYTH26M.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-D3yfITK1.js +2 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-D3yfITK1.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-HUNQGQuU.css +1 -0
- package/dist/core/web/public/next/assets/OnboardingGate-DrDEVBqw.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingGate-DrDEVBqw.js.map +1 -0
- package/dist/core/web/public/next/assets/PreviewPane-ULN673zm.js +2 -0
- package/dist/core/web/public/next/assets/{PreviewPane-BS-CleCd.js.map → PreviewPane-ULN673zm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ProviderLogo-C5mBg8i0.js → ProviderLogo-8WaUjTlN.js} +2 -2
- package/dist/core/web/public/next/assets/{ProviderLogo-C5mBg8i0.js.map → ProviderLogo-8WaUjTlN.js.map} +1 -1
- package/dist/core/web/public/next/assets/RailStatus-Ckw9nvYU.js +2 -0
- package/dist/core/web/public/next/assets/{RailStatus-cPRyOmrk.js.map → RailStatus-Ckw9nvYU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-CMwSCiz5.js → RefreshIndicator-DGubF4vR.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-CMwSCiz5.js.map → RefreshIndicator-DGubF4vR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BFi1opsC.js → ResourcePoolConsoleApp-BahEaY4d.js} +4 -4
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BFi1opsC.js.map → ResourcePoolConsoleApp-BahEaY4d.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-C2ZrA7la.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-C2ZrA7la.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-BC93fzwQ.js +2 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-BC93fzwQ.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-BCFJ2Uq8.css +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BvhHNpE_.js +2 -0
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-DYtwc2ja.js.map → RouteErrorBoundary-BvhHNpE_.js.map} +1 -1
- package/dist/core/web/public/next/assets/RunInCloudAction-Dywfnw0C.js +2 -0
- package/dist/core/web/public/next/assets/{RunInCloudAction-BEGEEM8O.js.map → RunInCloudAction-Dywfnw0C.js.map} +1 -1
- package/dist/core/web/public/next/assets/SeatSelector-CH7hTgwy.js +3 -0
- package/dist/core/web/public/next/assets/{SeatSelector-CYHRR7Wp.js.map → SeatSelector-CH7hTgwy.js.map} +1 -1
- package/dist/core/web/public/next/assets/Segmented-Wynbg0F5.js +2 -0
- package/dist/core/web/public/next/assets/{Segmented-BE53BenI.js.map → Segmented-Wynbg0F5.js.map} +1 -1
- package/dist/core/web/public/next/assets/Select-DMyLCkId.js +2 -0
- package/dist/core/web/public/next/assets/{Select-BwSGkHCS.js.map → Select-DMyLCkId.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionGate-8RtQFWeZ.js +2 -0
- package/dist/core/web/public/next/assets/{SessionGate-e0dFJm9d.js.map → SessionGate-8RtQFWeZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionInsightChip-zBJbKv2L.js +2 -0
- package/dist/core/web/public/next/assets/{SessionInsightChip-CxlSyueJ.js.map → SessionInsightChip-zBJbKv2L.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionSearch-DfJIcxxM.js +2 -0
- package/dist/core/web/public/next/assets/{SessionSearch-_yp7S2TP.js.map → SessionSearch-DfJIcxxM.js.map} +1 -1
- package/dist/core/web/public/next/assets/SettingsSection-Da9RYyH5.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-Da9RYyH5.js.map +1 -0
- package/dist/core/web/public/next/assets/Sheet-DhXyIDmq.js +2 -0
- package/dist/core/web/public/next/assets/{Sheet-DVP2Mgy6.js.map → Sheet-DhXyIDmq.js.map} +1 -1
- package/dist/core/web/public/next/assets/ShortcutsOverlay-Bi5f-wUw.js +2 -0
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-BcIcoClX.js.map → ShortcutsOverlay-Bi5f-wUw.js.map} +1 -1
- package/dist/core/web/public/next/assets/Sidebar-BuO3sViG.js +3 -0
- package/dist/core/web/public/next/assets/Sidebar-BuO3sViG.js.map +1 -0
- package/dist/core/web/public/next/assets/Slider-Bd9YFWEV.js +2 -0
- package/dist/core/web/public/next/assets/{Slider-BypUWjpH.js.map → Slider-Bd9YFWEV.js.map} +1 -1
- package/dist/core/web/public/next/assets/StatTile-DScTd3c-.js +2 -0
- package/dist/core/web/public/next/assets/StatTile-DScTd3c-.js.map +1 -0
- package/dist/core/web/public/next/assets/{StatusBadge-HCZp416_.js → StatusBadge-DQ1UtQAJ.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-HCZp416_.js.map → StatusBadge-DQ1UtQAJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/StepBand-BB3IJxhr.js +2 -0
- package/dist/core/web/public/next/assets/{StepBand-Duz1PUes.js.map → StepBand-BB3IJxhr.js.map} +1 -1
- package/dist/core/web/public/next/assets/Surface-DWMtQe3Q.js +2 -0
- package/dist/core/web/public/next/assets/Surface-DWMtQe3Q.js.map +1 -0
- package/dist/core/web/public/next/assets/Surface-e1z6GdZt.css +1 -0
- package/dist/core/web/public/next/assets/Swimlane-DcENqtdp.js +2 -0
- package/dist/core/web/public/next/assets/{Swimlane-DGcIcnNA.js.map → Swimlane-DcENqtdp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Switch-iveI-8NY.js → Switch-CenChEYf.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-iveI-8NY.js.map → Switch-CenChEYf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-DH15CUJp.js → Tag-D4k5E3u0.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-DH15CUJp.js.map → Tag-D4k5E3u0.js.map} +1 -1
- package/dist/core/web/public/next/assets/TerminalPane-DCQTukcE.js +7 -0
- package/dist/core/web/public/next/assets/TerminalPane-DCQTukcE.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-DsuWT0pi.js +2 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-C8yQ0AaR.js.map → UniverseConsoleApp-DsuWT0pi.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-_nPURPqe.js → UniverseView-DyI5ApsA.js} +3 -3
- package/dist/core/web/public/next/assets/{UniverseView-_nPURPqe.js.map → UniverseView-DyI5ApsA.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-Imr28nwK.js +3 -0
- package/dist/core/web/public/next/assets/UsageSection-Imr28nwK.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DeuBEvAO.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DeuBEvAO.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-CpxBO98E.js +10 -0
- package/dist/core/web/public/next/assets/Workspace-CpxBO98E.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-BmIf9avl.css +1 -0
- package/dist/core/web/public/next/assets/actions-DE8NoWV_.js +2 -0
- package/dist/core/web/public/next/assets/actions-DE8NoWV_.js.map +1 -0
- package/dist/core/web/public/next/assets/apps-model-CFGCUu9p.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-CFGCUu9p.js.map +1 -0
- package/dist/core/web/public/next/assets/authority-model-CmnfJzmM.js +2 -0
- package/dist/core/web/public/next/assets/authority-model-CmnfJzmM.js.map +1 -0
- package/dist/core/web/public/next/assets/binding-left-DZpq5sLf.js +2 -0
- package/dist/core/web/public/next/assets/binding-left-DZpq5sLf.js.map +1 -0
- package/dist/core/web/public/next/assets/{budget-queries-V3wcJVK_.js → budget-queries-DjrPRFwl.js} +2 -2
- package/dist/core/web/public/next/assets/{budget-queries-V3wcJVK_.js.map → budget-queries-DjrPRFwl.js.map} +1 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-C7cdQnuK.js +2 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-C7cdQnuK.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-DUD_jprE.js +2 -0
- package/dist/core/web/public/next/assets/charts-DUD_jprE.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-DhKTrQLw.css +1 -0
- package/dist/core/web/public/next/assets/clipboard-DkZdqlxf.js +2 -0
- package/dist/core/web/public/next/assets/clipboard-DkZdqlxf.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-D-HXms6q.css +1 -0
- package/dist/core/web/public/next/assets/cloud-model-DoxBMDvx.js +2 -0
- package/dist/core/web/public/next/assets/cloud-model-DoxBMDvx.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-CTGvO-k-.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-CTGvO-k-.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud.module-DOP-N4Ch.js +2 -0
- package/dist/core/web/public/next/assets/cloud.module-DOP-N4Ch.js.map +1 -0
- package/dist/core/web/public/next/assets/command-catalog-CmrHNFzh.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-CmrHNFzh.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-2Owp2jYF.js +3 -0
- package/dist/core/web/public/next/assets/context-model-2Owp2jYF.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-9xywbXxX.js +2 -0
- package/dist/core/web/public/next/assets/context-model-9xywbXxX.js.map +1 -0
- package/dist/core/web/public/next/assets/{context-queries-CrPcHWTz.js → context-queries-wvcRnV-I.js} +2 -2
- package/dist/core/web/public/next/assets/{context-queries-CrPcHWTz.js.map → context-queries-wvcRnV-I.js.map} +1 -1
- package/dist/core/web/public/next/assets/{control-queries-CmgBgKV7.js → control-queries-DB6Kh7UN.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-CmgBgKV7.js.map → control-queries-DB6Kh7UN.js.map} +1 -1
- package/dist/core/web/public/next/assets/copy-setup-CJQhFl-4.js +2 -0
- package/dist/core/web/public/next/assets/copy-setup-CJQhFl-4.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-icons-BBUGl4tE.js +2 -0
- package/dist/core/web/public/next/assets/{dock-icons-CUh8dOxJ.js.map → dock-icons-BBUGl4tE.js.map} +1 -1
- package/dist/core/web/public/next/assets/fleet-model-BRfRWkZl.js +2 -0
- package/dist/core/web/public/next/assets/fleet-model-BRfRWkZl.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-queries-tU6UEXN2.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-tU6UEXN2.js.map +1 -0
- package/dist/core/web/public/next/assets/{focus-trap-HtcoXeEq.js → focus-trap-BGOceFvj.js} +2 -2
- package/dist/core/web/public/next/assets/{focus-trap-HtcoXeEq.js.map → focus-trap-BGOceFvj.js.map} +1 -1
- package/dist/core/web/public/next/assets/format-DEAaVF6X.js +2 -0
- package/dist/core/web/public/next/assets/format-DEAaVF6X.js.map +1 -0
- package/dist/core/web/public/next/assets/{git-model-bk_RXh3y.js → git-model-53iRLInY.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-bk_RXh3y.js.map → git-model-53iRLInY.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-CXHHMz9o.js +2 -0
- package/dist/core/web/public/next/assets/{global-oEl9Qj8u.js.map → global-CXHHMz9o.js.map} +1 -1
- package/dist/core/web/public/next/assets/{guarded-runners-LHLXmXIk.js → guarded-runners-B8zFVBVZ.js} +2 -2
- package/dist/core/web/public/next/assets/{guarded-runners-LHLXmXIk.js.map → guarded-runners-B8zFVBVZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/icons-D4s-jlxX.js +2 -0
- package/dist/core/web/public/next/assets/icons-D4s-jlxX.js.map +1 -0
- package/dist/core/web/public/next/assets/{index-BVxOlseC.js → index-BG177cPN.js} +3 -3
- package/dist/core/web/public/next/assets/{index-BVxOlseC.js.map → index-BG177cPN.js.map} +1 -1
- package/dist/core/web/public/next/assets/live-model-CEf01wrW.js +2 -0
- package/dist/core/web/public/next/assets/live-model-CEf01wrW.js.map +1 -0
- package/dist/core/web/public/next/assets/local-model-C9xNi9fN.js +2 -0
- package/dist/core/web/public/next/assets/local-model-C9xNi9fN.js.map +1 -0
- package/dist/core/web/public/next/assets/mind.module-D_xk6HIQ.js +2 -0
- package/dist/core/web/public/next/assets/{mind.module-gTGAuJt1.js.map → mind.module-D_xk6HIQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/mutations-CbTSofVH.js +2 -0
- package/dist/core/web/public/next/assets/{mutations-C5S7okTW.js.map → mutations-CbTSofVH.js.map} +1 -1
- package/dist/core/web/public/next/assets/nav-CmZcbPFJ.js +2 -0
- package/dist/core/web/public/next/assets/{nav-NVtnuG7A.js.map → nav-CmZcbPFJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-DGm3qL1b.js → overnight-queries-CR0b_j-V.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-DGm3qL1b.js.map → overnight-queries-CR0b_j-V.js.map} +1 -1
- package/dist/core/web/public/next/assets/primitives-DNI-uJBd.js +1 -0
- package/dist/core/web/public/next/assets/{queries-CYisSAAB.js → queries-rvRsAGW2.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-CYisSAAB.js.map → queries-rvRsAGW2.js.map} +1 -1
- package/dist/core/web/public/next/assets/reasoning-pref-DMPQkujg.js +2 -0
- package/dist/core/web/public/next/assets/{reasoning-pref-BUcFF_5G.js.map → reasoning-pref-DMPQkujg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reveal-anchor-D-tV8xau.js → reveal-anchor-BKk2wZZZ.js} +2 -2
- package/dist/core/web/public/next/assets/{reveal-anchor-D-tV8xau.js.map → reveal-anchor-BKk2wZZZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/seat-subscription-CLn2ReSZ.js +2 -0
- package/dist/core/web/public/next/assets/{seat-subscription-B-f9ViU2.js.map → seat-subscription-CLn2ReSZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-DQ-FyBHW.js → sidebar-model-CjQLvdag.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-DQ-FyBHW.js.map → sidebar-model-CjQLvdag.js.map} +1 -1
- package/dist/core/web/public/next/assets/slots-DRxNosZg.js +3 -0
- package/dist/core/web/public/next/assets/{slots-BhP8b8tf.js.map → slots-DRxNosZg.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-data-DshUC_TU.js +2 -0
- package/dist/core/web/public/next/assets/surface-data-DshUC_TU.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-prefetch-DO8r4ttQ.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-DO8r4ttQ.js.map +1 -0
- package/dist/core/web/public/next/assets/{tasks-model-BKDNqmmt.js → tasks-model-BKPFZAmZ.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-BKDNqmmt.js.map → tasks-model-BKPFZAmZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-D2xe-aM1.js → terminal-icons-DoeQkP3y.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-D2xe-aM1.js.map → terminal-icons-DoeQkP3y.js.map} +1 -1
- package/dist/core/web/public/next/assets/transient-events-nTLhMBND.js +2 -0
- package/dist/core/web/public/next/assets/transient-events-nTLhMBND.js.map +1 -0
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -1
- package/dist/core/web/public/next/assets/{usage-queries-BZuAANlI.js → usage-queries-MnUeYzwp.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-BZuAANlI.js.map → usage-queries-MnUeYzwp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-guarded-action-Cf4MeNBa.js → use-guarded-action-P12MfNwU.js} +2 -2
- package/dist/core/web/public/next/assets/{use-guarded-action-Cf4MeNBa.js.map → use-guarded-action-P12MfNwU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-D9yi49my.js → use-ticker-DIvAZ4Ey.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-D9yi49my.js.map → use-ticker-DIvAZ4Ey.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-token-gate-DqrSXdX6.js → use-token-gate-DfEja7Wr.js} +2 -2
- package/dist/core/web/public/next/assets/{use-token-gate-DqrSXdX6.js.map → use-token-gate-DfEja7Wr.js.map} +1 -1
- package/dist/core/web/public/next/assets/useOnboarding-CkOHadqC.js +2 -0
- package/dist/core/web/public/next/assets/useOnboarding-CkOHadqC.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-BDlbDlIU.js +2 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-BDlbDlIU.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BGtA55k2.js +2 -0
- package/dist/core/web/public/next/assets/{useVerseTranscript-CDYrrWOO.js.map → useVerseTranscript-BGtA55k2.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-icons-wOet9JZy.js +2 -0
- package/dist/core/web/public/next/assets/verse-icons-wOet9JZy.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-model-CSzzdyu2.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-CSzzdyu2.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-store-DNVRuiJL.js +2 -0
- package/dist/core/web/public/next/assets/verse-store-DNVRuiJL.js.map +1 -0
- package/dist/core/web/public/next/assets/warmup-CecO_Nk0.js +3 -0
- package/dist/core/web/public/next/assets/{warmup-HG5vYbsN.js.map → warmup-CecO_Nk0.js.map} +1 -1
- package/dist/core/web/public/next/assets/why-seat-model-D68ZA7G8.js +2 -0
- package/dist/core/web/public/next/assets/why-seat-model-D68ZA7G8.js.map +1 -0
- package/dist/core/web/public/next/assets/{workspace-model-CbhdPhei.js → workspace-model-BdIVybKr.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-CbhdPhei.js.map → workspace-model-BdIVybKr.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/docs/README.md +2 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/ActionMenu-FxXeRbPx.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-D_eS4472.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-D_eS4472.js.map +0 -1
- package/dist/core/web/public/next/assets/App-Cj4zKbG3.js +0 -7
- package/dist/core/web/public/next/assets/App-Cj4zKbG3.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-Ddu_RCQE.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-Ddu_RCQE.js.map +0 -1
- package/dist/core/web/public/next/assets/AreaTrend-CDxrQU4b.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-DuQkHGD_.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-CLsvOcyK.js +0 -2
- package/dist/core/web/public/next/assets/BudgetControl-TL3FeZ1D.js +0 -2
- package/dist/core/web/public/next/assets/BurnDown-sFXkUGdB.js +0 -2
- package/dist/core/web/public/next/assets/BurnDown-sFXkUGdB.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-qReu0RaF.js +0 -2
- package/dist/core/web/public/next/assets/ChatSection-DZuZfTaC.js +0 -3
- package/dist/core/web/public/next/assets/ChatSection-DZuZfTaC.js.map +0 -1
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJbiT1wi.js +0 -2
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJbiT1wi.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandPalette-zYLFZRnj.js +0 -2
- package/dist/core/web/public/next/assets/CommandPalette-zYLFZRnj.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandSection-rIeMK5Ch.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-rIeMK5Ch.js.map +0 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-DLrLKM0c.js +0 -2
- package/dist/core/web/public/next/assets/Dialog-BS9Dxi3G.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-TOmUf3b2.js +0 -2
- package/dist/core/web/public/next/assets/DiffViewer-BpH56302.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-DzkzR-HD.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-DzkzR-HD.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-ViAb549H.js +0 -3
- package/dist/core/web/public/next/assets/FleetSection-ViAb549H.js.map +0 -1
- package/dist/core/web/public/next/assets/Funnel-D2u7Wlzc.js +0 -2
- package/dist/core/web/public/next/assets/GearTray-Cb2npoxM.js +0 -2
- package/dist/core/web/public/next/assets/GrowthSection-C5aDPs8B.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-BF3AYg-X.js +0 -2
- package/dist/core/web/public/next/assets/Input-B5dmGLZx.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-DZrmjDbI.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-DZrmjDbI.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-BgEUs2Eu.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-DZkiOuoq.js +0 -2
- package/dist/core/web/public/next/assets/MessageMarkdown-BauY8ZTY.js +0 -3
- package/dist/core/web/public/next/assets/MindSection-BvJXFjyX.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-BvJXFjyX.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-mxrw0Yvy.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouDrawer-CO-Balfp.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouList-CzDZbzRD.js +0 -2
- package/dist/core/web/public/next/assets/NewChatDialog-B8eJjlFf.js +0 -3
- package/dist/core/web/public/next/assets/NewChatDialog-B8eJjlFf.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-Cij6KWat.js +0 -2
- package/dist/core/web/public/next/assets/OnboardingFlow-Cij6KWat.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-DSpPj8UE.css +0 -1
- package/dist/core/web/public/next/assets/PreviewPane-BS-CleCd.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-cPRyOmrk.js +0 -2
- package/dist/core/web/public/next/assets/ResourcesChrome-BJCauW_t.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesChrome-BJCauW_t.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-BDecg6nO.js +0 -2
- package/dist/core/web/public/next/assets/ResourcesDrawer-BDecg6nO.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-DYtwc2ja.js +0 -2
- package/dist/core/web/public/next/assets/RunInCloudAction-BEGEEM8O.js +0 -2
- package/dist/core/web/public/next/assets/SeatSelector-CYHRR7Wp.js +0 -3
- package/dist/core/web/public/next/assets/Segmented-BE53BenI.js +0 -2
- package/dist/core/web/public/next/assets/Select-BwSGkHCS.js +0 -2
- package/dist/core/web/public/next/assets/SessionGate-e0dFJm9d.js +0 -2
- package/dist/core/web/public/next/assets/SessionInsightChip-CxlSyueJ.js +0 -2
- package/dist/core/web/public/next/assets/SessionSearch-_yp7S2TP.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-wGnpWeGW.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-wGnpWeGW.js.map +0 -1
- package/dist/core/web/public/next/assets/Sheet-DVP2Mgy6.js +0 -2
- package/dist/core/web/public/next/assets/ShortcutsOverlay-BcIcoClX.js +0 -2
- package/dist/core/web/public/next/assets/Sidebar-DjQOqPbm.js +0 -3
- package/dist/core/web/public/next/assets/Sidebar-DjQOqPbm.js.map +0 -1
- package/dist/core/web/public/next/assets/Slider-BypUWjpH.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-Duz1PUes.js +0 -2
- package/dist/core/web/public/next/assets/Surface-B75lVfzm.js +0 -2
- package/dist/core/web/public/next/assets/Surface-B75lVfzm.js.map +0 -1
- package/dist/core/web/public/next/assets/Surface-DMca0gAe.css +0 -1
- package/dist/core/web/public/next/assets/Swimlane-DGcIcnNA.js +0 -2
- package/dist/core/web/public/next/assets/TerminalPane-MQT-veKZ.js +0 -7
- package/dist/core/web/public/next/assets/TerminalPane-MQT-veKZ.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-C8yQ0AaR.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-CqxRGJ40.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-CqxRGJ40.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-DTjDpGCd.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-DTjDpGCd.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-DfcFGzME.js +0 -10
- package/dist/core/web/public/next/assets/Workspace-DfcFGzME.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-Ddfg2iLl.css +0 -1
- package/dist/core/web/public/next/assets/actions-tWevL9HV.js +0 -2
- package/dist/core/web/public/next/assets/actions-tWevL9HV.js.map +0 -1
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +0 -2
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +0 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-BDbmQ3e3.js +0 -2
- package/dist/core/web/public/next/assets/capacity-strip-model-BDbmQ3e3.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-CfAjuKMv.js +0 -2
- package/dist/core/web/public/next/assets/charts-CfAjuKMv.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-uSX6xVYN.css +0 -1
- package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +0 -1
- package/dist/core/web/public/next/assets/cloud-queries-Br_r0UAz.js +0 -2
- package/dist/core/web/public/next/assets/cloud-queries-Br_r0UAz.js.map +0 -1
- package/dist/core/web/public/next/assets/cloud.module-ascz58c3.js +0 -2
- package/dist/core/web/public/next/assets/cloud.module-ascz58c3.js.map +0 -1
- package/dist/core/web/public/next/assets/command-bus-xYZoK9nQ.js +0 -2
- package/dist/core/web/public/next/assets/command-bus-xYZoK9nQ.js.map +0 -1
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js.map +0 -1
- package/dist/core/web/public/next/assets/composer-keys-su0g1h9o.js +0 -2
- package/dist/core/web/public/next/assets/composer-keys-su0g1h9o.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-BC-HOmPo.js +0 -2
- package/dist/core/web/public/next/assets/context-model-BC-HOmPo.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-CIBmSugV.js +0 -2
- package/dist/core/web/public/next/assets/context-model-CIBmSugV.js.map +0 -1
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js +0 -2
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-icons-CUh8dOxJ.js +0 -2
- package/dist/core/web/public/next/assets/dock-store-B2vlxqPu.js +0 -2
- package/dist/core/web/public/next/assets/dock-store-B2vlxqPu.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-model-7i-FbzKI.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-7i-FbzKI.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-queries-DzGoqq8X.js +0 -2
- package/dist/core/web/public/next/assets/fleet-queries-DzGoqq8X.js.map +0 -1
- package/dist/core/web/public/next/assets/format-BkWdOQDL.js +0 -2
- package/dist/core/web/public/next/assets/format-BkWdOQDL.js.map +0 -1
- package/dist/core/web/public/next/assets/global-oEl9Qj8u.js +0 -2
- package/dist/core/web/public/next/assets/guarded-action-OzqcPjmh.js +0 -3
- package/dist/core/web/public/next/assets/guarded-action-OzqcPjmh.js.map +0 -1
- package/dist/core/web/public/next/assets/icon-base-DvM1eI5V.js +0 -2
- package/dist/core/web/public/next/assets/icon-base-DvM1eI5V.js.map +0 -1
- package/dist/core/web/public/next/assets/icons-DEQa2rTx.js +0 -2
- package/dist/core/web/public/next/assets/icons-DEQa2rTx.js.map +0 -1
- package/dist/core/web/public/next/assets/live-model-bmsJgnYD.js +0 -2
- package/dist/core/web/public/next/assets/live-model-bmsJgnYD.js.map +0 -1
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +0 -2
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +0 -1
- package/dist/core/web/public/next/assets/mind.module-gTGAuJt1.js +0 -2
- package/dist/core/web/public/next/assets/mutations-C5S7okTW.js +0 -2
- package/dist/core/web/public/next/assets/nav-NVtnuG7A.js +0 -2
- package/dist/core/web/public/next/assets/preloaded-Cwf9rsnZ.js +0 -2
- package/dist/core/web/public/next/assets/preloaded-Cwf9rsnZ.js.map +0 -1
- package/dist/core/web/public/next/assets/primitives-DyCKYSBG.js +0 -1
- package/dist/core/web/public/next/assets/reasoning-pref-BUcFF_5G.js +0 -2
- package/dist/core/web/public/next/assets/seat-subscription-B-f9ViU2.js +0 -2
- package/dist/core/web/public/next/assets/section-visibility-Yctxu-if.js +0 -2
- package/dist/core/web/public/next/assets/section-visibility-Yctxu-if.js.map +0 -1
- package/dist/core/web/public/next/assets/slots-BhP8b8tf.js +0 -3
- package/dist/core/web/public/next/assets/surface-data-DTI7LjvH.js +0 -2
- package/dist/core/web/public/next/assets/surface-data-DTI7LjvH.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CdUEBFrl.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-CdUEBFrl.js.map +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-owwodNVz.js +0 -2
- package/dist/core/web/public/next/assets/useChartWidth-owwodNVz.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatsRefresh-DgFy-Ph4.js +0 -2
- package/dist/core/web/public/next/assets/useSeatsRefresh-DgFy-Ph4.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseTranscript-CDYrrWOO.js +0 -2
- package/dist/core/web/public/next/assets/verse-icons-F9VwX07_.js +0 -2
- package/dist/core/web/public/next/assets/verse-icons-F9VwX07_.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-DyCwZF-M.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-DyCwZF-M.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js +0 -3
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-ui-store-62DxpVHS.js +0 -3
- package/dist/core/web/public/next/assets/verse-ui-store-62DxpVHS.js.map +0 -1
- package/dist/core/web/public/next/assets/viewport-nTubFCwf.js +0 -2
- package/dist/core/web/public/next/assets/viewport-nTubFCwf.js.map +0 -1
- package/dist/core/web/public/next/assets/warmup-HG5vYbsN.js +0 -3
- package/dist/core/web/public/next/assets/workbench-types-DzN-5trg.js +0 -2
- package/dist/core/web/public/next/assets/workbench-types-DzN-5trg.js.map +0 -1
- /package/dist/core/web/public/next/assets/{BurnDown-BuLMsJMx.css → StatTile-BuLMsJMx.css} +0 -0
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* Nothing in this module reads secrets. Account identity is pinned by the
|
|
16
16
|
* launcher command recorded in ~/.ashlr/account-connections/connections.json.
|
|
17
17
|
*/
|
|
18
|
+
import type { TRANSIENT_EVENT_TYPE_LIST } from './transient-events.js';
|
|
18
19
|
export type VerseEngine = 'claude' | 'codex' | 'grok' | 'local';
|
|
19
20
|
export type VerseSessionStatus = 'idle' | 'running' | 'error';
|
|
20
21
|
/** One selectable execution seat shown in the model/account picker. */
|
|
@@ -746,17 +747,12 @@ export declare const VERSE_ERROR_CODES: readonly ["native-thread-missing", "sess
|
|
|
746
747
|
export type VerseErrorCode = (typeof VERSE_ERROR_CODES)[number];
|
|
747
748
|
/**
|
|
748
749
|
* V3.10. Event types that are NEVER persisted — emitted to live SSE listeners
|
|
749
|
-
* only.
|
|
750
|
-
*
|
|
751
|
-
*
|
|
752
|
-
*
|
|
753
|
-
* - its SSE frame has NO `id:` line, so the browser's Last-Event-ID resume
|
|
754
|
-
* cursor only ever points at persisted events;
|
|
755
|
-
* - clients must not dedupe, store or resume by a transient event's seq.
|
|
756
|
-
* Browser-safe (plain Set), imported by the web bundle.
|
|
750
|
+
* only. The list and its guard live in ./transient-events.ts (re-exported
|
|
751
|
+
* here): the web chat's first-paint store needs the guard, and importing it
|
|
752
|
+
* from this module put every runtime value exported here — the handoff
|
|
753
|
+
* prompt, the effort tables — into the chat's first-paint chunk.
|
|
757
754
|
*/
|
|
758
|
-
|
|
759
|
-
export declare const VERSE_TRANSIENT_EVENT_TYPES: ReadonlySet<VerseEventType>;
|
|
755
|
+
export { VERSE_TRANSIENT_EVENT_TYPES, isTransientVerseEvent } from './transient-events.js';
|
|
760
756
|
export type VerseTransientEventType = (typeof TRANSIENT_EVENT_TYPE_LIST)[number];
|
|
761
757
|
export type VerseTransientEvent = Extract<VerseEvent, {
|
|
762
758
|
type: VerseTransientEventType;
|
|
@@ -764,8 +760,6 @@ export type VerseTransientEvent = Extract<VerseEvent, {
|
|
|
764
760
|
export type VersePersistedEvent = Exclude<VerseEvent, {
|
|
765
761
|
type: VerseTransientEventType;
|
|
766
762
|
}>;
|
|
767
|
-
/** V3.10. Type guard over VERSE_TRANSIENT_EVENT_TYPES. */
|
|
768
|
-
export declare function isTransientVerseEvent(event: VerseEvent): event is VerseTransientEvent;
|
|
769
763
|
/**
|
|
770
764
|
* Which endpoint a LOCAL seat sends its turns to.
|
|
771
765
|
*
|
|
@@ -1060,4 +1054,3 @@ export declare const VERSE_MEMORY_MAX_BYTES: number;
|
|
|
1060
1054
|
export declare const VERSE_MEMORY_BODY_MAX_BYTES: number;
|
|
1061
1055
|
/** Cap on the memory block appended to each session's system prompt. */
|
|
1062
1056
|
export declare const VERSE_MEMORY_BLOCK_MAX_BYTES: number;
|
|
1063
|
-
export {};
|
package/dist/core/verse/types.js
CHANGED
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ashlr Verse — interactive multi-turn session contract (V1).
|
|
3
|
-
*
|
|
4
|
-
* A Verse session binds one project directory to one execution seat
|
|
5
|
-
* (engine + account + model). Each user turn spawns ONE vendor CLI process
|
|
6
|
-
* that resumes the vendor-native conversation by id, streams normalized
|
|
7
|
-
* events, and exits. No long-lived stdin is held between turns.
|
|
8
|
-
*
|
|
9
|
-
* Seats:
|
|
10
|
-
* claude -> `claude -p ... --output-format stream-json` via a native-profile launcher (account pinned by CLAUDE_CONFIG_DIR)
|
|
11
|
-
* local -> the plain `claude` binary with ANTHROPIC_BASE_URL pointed at Ollama (Anthropic-compatible API); model = Ollama tag
|
|
12
|
-
* codex -> `codex exec --json` / `codex exec resume <threadId> --json` via a native-profile launcher (CODEX_HOME pinned)
|
|
13
|
-
* grok -> `grok -p ... --output-format streaming-messages-json` via a native-profile launcher (GROK_HOME pinned)
|
|
14
|
-
*
|
|
15
|
-
* Nothing in this module reads secrets. Account identity is pinned by the
|
|
16
|
-
* launcher command recorded in ~/.ashlr/account-connections/connections.json.
|
|
17
|
-
*/
|
|
18
1
|
export const VERSE_CONTEXT_MODES = ['standard', 'expansive'];
|
|
19
2
|
export const VERSE_ROOT_PRIORITIES = ['critical', 'high', 'normal', 'low'];
|
|
20
3
|
export const VERSE_DEFAULT_ROOT_PRIORITY = 'normal';
|
|
@@ -72,26 +55,12 @@ export const VERSE_EFFORTS = ['minimal', 'low', 'medium', 'high', 'xhigh', 'max'
|
|
|
72
55
|
export const VERSE_ERROR_CODES = ['native-thread-missing', 'session-in-use'];
|
|
73
56
|
/**
|
|
74
57
|
* V3.10. Event types that are NEVER persisted — emitted to live SSE listeners
|
|
75
|
-
* only.
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* - its SSE frame has NO `id:` line, so the browser's Last-Event-ID resume
|
|
80
|
-
* cursor only ever points at persisted events;
|
|
81
|
-
* - clients must not dedupe, store or resume by a transient event's seq.
|
|
82
|
-
* Browser-safe (plain Set), imported by the web bundle.
|
|
58
|
+
* only. The list and its guard live in ./transient-events.ts (re-exported
|
|
59
|
+
* here): the web chat's first-paint store needs the guard, and importing it
|
|
60
|
+
* from this module put every runtime value exported here — the handoff
|
|
61
|
+
* prompt, the effort tables — into the chat's first-paint chunk.
|
|
83
62
|
*/
|
|
84
|
-
|
|
85
|
-
'thinking-delta',
|
|
86
|
-
'thinking-progress',
|
|
87
|
-
'progress',
|
|
88
|
-
'status',
|
|
89
|
-
];
|
|
90
|
-
export const VERSE_TRANSIENT_EVENT_TYPES = new Set(TRANSIENT_EVENT_TYPE_LIST);
|
|
91
|
-
/** V3.10. Type guard over VERSE_TRANSIENT_EVENT_TYPES. */
|
|
92
|
-
export function isTransientVerseEvent(event) {
|
|
93
|
-
return VERSE_TRANSIENT_EVENT_TYPES.has(event.type);
|
|
94
|
-
}
|
|
63
|
+
export { VERSE_TRANSIENT_EVENT_TYPES, isTransientVerseEvent } from './transient-events.js';
|
|
95
64
|
export const VERSE_MAX_TURN_TEXT_BYTES = 64 * 1024;
|
|
96
65
|
export const VERSE_MAX_EVENTS_PER_SESSION = 20_000;
|
|
97
66
|
export const VERSE_TURN_TIMEOUT_MS = 30 * 60 * 1000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/verse/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/verse/types.ts"],"names":[],"mappings":"AAiGA,MAAM,CAAC,MAAM,mBAAmB,GAAgC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAgO1F,MAAM,CAAC,MAAM,qBAAqB,GAChC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,2BAA2B,GAAsB,QAAQ,CAAC;AAEvE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAsC;IACzE,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC;AA2HF,wEAAwE;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAyD;IAEzD,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAiGD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAE1F,MAAM,CAAC,MAAM,6BAA6B,GAAwB,cAAc,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AA8I3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,uBAAuB,EAAE,gBAAgB,CAAU,CAAC;AAGtF;;;;;;GAMG;AACH,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAmI3F,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,MAAM;CACd,CAAC;AA8DF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,yFAAyF;IACzF,8HAA8H;IAC9H,EAAE;IACF,oBAAoB;IACpB,yCAAyC;IACzC,4DAA4D;IAC5D,yEAAyE;IACzE,iDAAiD;IACjD,4CAA4C;IAC5C,0EAA0E;IAC1E,EAAE;IACF,qEAAqE;CACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AA4Eb,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,GAAG,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC;AAEjF,wEAAwE;AACxE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,c as t,i as n,n as r}from"./index-BG177cPN.js";var i=t(e(),1),a=t(n(),1),o={menu:`_menu_130xc_5`,"menu-in":`_menu-in_130xc_1`,row:`_row_130xc_21`,item:`_item_130xc_27`,icon:`_icon_130xc_53`,label:`_label_130xc_60`,reason:`_reason_130xc_65`},s=r(),c=8;function l({label:e,items:t,anchor:n,onClose:r,returnFocus:l=null}){let u=(0,i.useRef)(null),d=(0,i.useRef)([]),[f,p]=(0,i.useState)({left:n.x,top:n.y}),m=(0,i.useRef)(r);m.current=r;let h=(0,i.useRef)(l);h.current=l;let g=t.map((e,t)=>e.disabled?-1:t).filter(e=>e>=0);(0,i.useLayoutEffect)(()=>{let e=u.current;if(!e)return;let t=e.getBoundingClientRect(),r=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,a=n.x,o=n.y;t.width>0&&a+t.width>r-c&&(a=Math.max(c,r-c-t.width)),t.height>0&&o+t.height>i-c&&(o=Math.max(c,n.y-t.height)),p({left:a,top:o})},[n.x,n.y]),(0,i.useEffect)(()=>{let e=g[0];e===void 0?u.current?.focus():d.current[e]?.focus()},[]),(0,i.useEffect)(()=>{let e=e=>{u.current&&e.target instanceof Node&&u.current.contains(e.target)||m.current(`dismiss`)},t=e=>{u.current&&e.target instanceof Node&&u.current.contains(e.target)||m.current(`dismiss`)};document.addEventListener(`pointerdown`,e,!0),window.addEventListener(`resize`,t),document.addEventListener(`scroll`,t,!0);let n=u.current;return()=>{document.removeEventListener(`pointerdown`,e,!0),window.removeEventListener(`resize`,t),document.removeEventListener(`scroll`,t,!0);let r=document.activeElement,i=r===null||r===document.body||n!==null&&n.contains(r),a=h.current;i&&a&&document.contains(a)&&a.focus({preventScroll:!0})}},[]);function _(e,t){if(g.length===0)return;let n=g.indexOf(e),r=n<0?t>0?0:g.length-1:(n+t+g.length)%g.length;d.current[g[r]]?.focus()}function v(e){let n=d.current.findIndex(e=>e===document.activeElement);switch(e.key){case`ArrowDown`:e.preventDefault(),_(n,1);return;case`ArrowUp`:e.preventDefault(),_(n,-1);return;case`Home`:e.preventDefault(),d.current[g[0]??0]?.focus();return;case`End`:e.preventDefault(),d.current[g[g.length-1]??0]?.focus();return;case`Escape`:e.preventDefault(),e.stopPropagation(),r(`dismiss`);return;case`Tab`:r(`dismiss`);return;default:if(e.key.length===1&&/\S/.test(e.key)&&!e.metaKey&&!e.ctrlKey&&!e.altKey){let r=e.key.toLowerCase(),i=[...g.filter(e=>e>n),...g.filter(e=>e<=n)].find(e=>t[e].label.toLowerCase().startsWith(r));i!==void 0&&(e.preventDefault(),d.current[i]?.focus())}}}return(0,a.createPortal)((0,s.jsx)(`div`,{ref:u,className:o.menu,role:`menu`,"aria-label":e,tabIndex:-1,style:{left:f.left,top:f.top},onKeyDown:v,onContextMenu:e=>e.preventDefault(),children:t.map((e,t)=>(0,s.jsx)(`div`,{className:o.row,"data-separated":e.separated||void 0,role:`none`,children:(0,s.jsxs)(`button`,{ref:e=>{d.current[t]=e},type:`button`,role:`menuitem`,className:o.item,"data-danger":e.danger||void 0,"aria-disabled":e.disabled||void 0,tabIndex:-1,onClick:()=>{e.disabled||(r(`select`),e.onSelect())},children:[e.icon?(0,s.jsx)(`span`,{className:o.icon,"aria-hidden":`true`,children:e.icon}):null,(0,s.jsxs)(`span`,{className:o.label,children:[e.label,e.description?(0,s.jsx)(`span`,{className:o.reason,children:e.description}):null,e.disabled&&e.reason?(0,s.jsx)(`span`,{className:o.reason,children:e.reason}):null]})]})},e.id))}),document.body)}function u(e,t=`end`,n=220){let r=e.getBoundingClientRect();return{x:t===`end`?r.right-n:r.left,y:r.bottom+4}}export{u as n,l as t};
|
|
2
|
+
//# sourceMappingURL=ActionMenu-DffwPklw.js.map
|
package/dist/core/web/public/next/assets/{ActionMenu-FxXeRbPx.js.map → ActionMenu-DffwPklw.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionMenu-FxXeRbPx.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/chat/ActionMenu.module.css","../../../../../../src/web-ui/routes/verse/chat/ActionMenu.tsx"],"sourcesContent":["/**\n * chat/ActionMenu.module.css — the chat surface's action menu. Raised\n * surface, hairline border, the menu shadow; rows are density-sm.\n */\n.menu {\n position: fixed;\n z-index: var(--z-dropdown);\n display: flex;\n flex-direction: column;\n min-width: 200px;\n max-width: min(320px, calc(100vw - 16px));\n padding: var(--space-1);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n background: var(--bg-surface-raised);\n box-shadow: var(--shadow-menu);\n animation: menu-in var(--duration-fast) var(--ease-decelerate);\n}\n.menu:focus { outline: none; }\n\n.row[data-separated] {\n margin-top: var(--space-1);\n padding-top: var(--space-1);\n border-top: 1px solid var(--border-subtle);\n}\n\n.item {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n width: 100%;\n min-height: var(--density-row-sm);\n padding: var(--space-1) var(--space-2);\n border: 0;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--text-primary);\n font: inherit;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n text-align: left;\n cursor: pointer;\n}\n.item:hover,\n.item:focus { outline: none; background: var(--bg-hover); }\n.item:focus-visible { box-shadow: inset 0 0 0 1px var(--border-focus); }\n.item[data-danger] { color: var(--status-danger-fg); }\n.item[data-danger]:hover,\n.item[data-danger]:focus { background: var(--status-danger-bg); }\n.item[aria-disabled='true'] { color: var(--text-disabled); cursor: not-allowed; }\n.item[aria-disabled='true']:hover { background: transparent; }\n\n.icon {\n flex: none;\n display: inline-flex;\n width: 16px;\n margin-top: 2px;\n color: var(--text-tertiary);\n}\n.label {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.reason {\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n}\n\n@keyframes menu-in {\n from { opacity: 0; transform: translateY(-2px); }\n to { opacity: 1; transform: none; }\n}\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion='full']) .menu { animation: none; }\n}\n:root[data-motion='reduce'] .menu { animation: none; }\n","/**\n * routes/verse/chat/ActionMenu.tsx — the chat surface's small action menu\n * (unit C2): the header's ⋯ and a sidebar row's hover / right-click menu.\n *\n * The primitives have no menu, and the ones scattered through the console\n * are each hand-rolled for one place; this one is written once for both of\n * C2's uses and follows the WAI-ARIA menu pattern properly:\n * - `role=\"menu\"` of `menuitem`s, focus moves INTO the menu on open;\n * - ↑/↓ wrap, Home/End jump, a letter jumps to the next item starting\n * with it, Enter/Space choose;\n * - Esc, Tab, a click outside or choosing an item close it and hand focus\n * back to whatever opened it (the ⋯ button, or the row that was\n * right-clicked);\n * - a disabled item stays in the list with its reason as a description, so\n * the operator learns WHY instead of wondering where it went.\n *\n * Portalled and position:fixed so the sidebar's own overflow cannot clip it,\n * and clamped to the viewport (a right-click near the bottom opens upward).\n */\nimport { useEffect, useLayoutEffect, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport styles from './ActionMenu.module.css';\n\nexport interface ActionMenuItem {\n id: string;\n label: string;\n onSelect: () => void;\n /** Painted as destructive (Delete). */\n danger?: boolean;\n disabled?: boolean;\n /** Shown under a disabled item. */\n reason?: string | null;\n /** A second line under the label, always shown (a cost, a consequence). */\n description?: string | null;\n /** A leading glyph. */\n icon?: ReactNode;\n /** A separator above this item. */\n separated?: boolean;\n}\n\nexport interface MenuAnchor {\n /** Viewport coordinates of the menu's preferred top-left. */\n x: number;\n y: number;\n}\n\nexport interface ActionMenuProps {\n label: string;\n items: readonly ActionMenuItem[];\n anchor: MenuAnchor;\n onClose: (reason: 'select' | 'dismiss') => void;\n /** Focus returns here on close. */\n returnFocus?: HTMLElement | null;\n}\n\nconst EDGE = 8;\n\nexport function ActionMenu({ label, items, anchor, onClose, returnFocus = null }: ActionMenuProps) {\n const ref = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const [position, setPosition] = useState<{ left: number; top: number }>({ left: anchor.x, top: anchor.y });\n // Read through refs: the listeners below are installed ONCE per open, and a\n // parent passing an inline onClose must not tear them down (and bounce\n // focus back to the trigger) on every render.\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const returnFocusRef = useRef(returnFocus);\n returnFocusRef.current = returnFocus;\n const enabled = items.map((item, i) => (item.disabled ? -1 : i)).filter((i) => i >= 0);\n\n // Clamp into the viewport once the menu has a size.\n useLayoutEffect(() => {\n const node = ref.current;\n if (!node) return;\n const rect = node.getBoundingClientRect();\n const vw = window.innerWidth || document.documentElement.clientWidth;\n const vh = window.innerHeight || document.documentElement.clientHeight;\n let left = anchor.x;\n let top = anchor.y;\n if (rect.width > 0 && left + rect.width > vw - EDGE) left = Math.max(EDGE, vw - EDGE - rect.width);\n if (rect.height > 0 && top + rect.height > vh - EDGE) top = Math.max(EDGE, anchor.y - rect.height);\n setPosition({ left, top });\n }, [anchor.x, anchor.y]);\n\n useEffect(() => {\n const first = enabled[0];\n if (first !== undefined) itemRefs.current[first]?.focus();\n else ref.current?.focus();\n // Focus moves in once, on open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const onPointer = (event: PointerEvent) => {\n if (ref.current && event.target instanceof Node && ref.current.contains(event.target)) return;\n onCloseRef.current('dismiss');\n };\n const onScroll = (event: Event) => {\n if (ref.current && event.target instanceof Node && ref.current.contains(event.target)) return;\n onCloseRef.current('dismiss');\n };\n document.addEventListener('pointerdown', onPointer, true);\n window.addEventListener('resize', onScroll);\n document.addEventListener('scroll', onScroll, true);\n const menu = ref.current;\n return () => {\n document.removeEventListener('pointerdown', onPointer, true);\n window.removeEventListener('resize', onScroll);\n document.removeEventListener('scroll', onScroll, true);\n // Hand focus back only if it is still ours (in the menu, or dropped to\n // <body> by the unmount) — never yank it from a field the chosen action\n // just focused.\n const active = document.activeElement;\n const ours = active === null || active === document.body || (menu !== null && menu.contains(active));\n const back = returnFocusRef.current;\n if (ours && back && document.contains(back)) back.focus({ preventScroll: true });\n };\n }, []);\n\n function move(from: number, delta: number) {\n if (enabled.length === 0) return;\n const at = enabled.indexOf(from);\n const next = at < 0 ? (delta > 0 ? 0 : enabled.length - 1) : (at + delta + enabled.length) % enabled.length;\n itemRefs.current[enabled[next]!]?.focus();\n }\n\n function onKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const index = itemRefs.current.findIndex((node) => node === document.activeElement);\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); move(index, 1); return;\n case 'ArrowUp': event.preventDefault(); move(index, -1); return;\n case 'Home': event.preventDefault(); itemRefs.current[enabled[0] ?? 0]?.focus(); return;\n case 'End': event.preventDefault(); itemRefs.current[enabled[enabled.length - 1] ?? 0]?.focus(); return;\n case 'Escape': event.preventDefault(); event.stopPropagation(); onClose('dismiss'); return;\n case 'Tab': onClose('dismiss'); return;\n default:\n if (event.key.length === 1 && /\\S/.test(event.key) && !event.metaKey && !event.ctrlKey && !event.altKey) {\n const letter = event.key.toLowerCase();\n const order = [...enabled.filter((i) => i > index), ...enabled.filter((i) => i <= index)];\n const hit = order.find((i) => items[i]!.label.toLowerCase().startsWith(letter));\n if (hit !== undefined) {\n event.preventDefault();\n itemRefs.current[hit]?.focus();\n }\n }\n }\n }\n\n return createPortal(\n <div ref={ref} className={styles.menu} role=\"menu\" aria-label={label} tabIndex={-1}\n style={{ left: position.left, top: position.top }} onKeyDown={onKeyDown}\n onContextMenu={(event) => event.preventDefault()}>\n {items.map((item, i) => (\n <div key={item.id} className={styles.row} data-separated={item.separated || undefined} role=\"none\">\n <button\n ref={(node) => { itemRefs.current[i] = node; }}\n type=\"button\"\n role=\"menuitem\"\n className={styles.item}\n data-danger={item.danger || undefined}\n aria-disabled={item.disabled || undefined}\n tabIndex={-1}\n onClick={() => {\n if (item.disabled) return;\n onClose('select');\n item.onSelect();\n }}\n >\n {item.icon ? <span className={styles.icon} aria-hidden=\"true\">{item.icon}</span> : null}\n <span className={styles.label}>\n {item.label}\n {item.description ? <span className={styles.reason}>{item.description}</span> : null}\n {item.disabled && item.reason ? <span className={styles.reason}>{item.reason}</span> : null}\n </span>\n </button>\n </div>\n ))}\n </div>,\n document.body,\n );\n}\n\n/** Anchor a menu under (and right-aligned to) a button. */\nexport function anchorBelow(node: HTMLElement, align: 'start' | 'end' = 'end', menuWidth = 220): MenuAnchor {\n const rect = node.getBoundingClientRect();\n return { x: align === 'end' ? rect.right - menuWidth : rect.left, y: rect.bottom + 4 };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionMenu-DffwPklw.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/chat/ActionMenu.module.css","../../../../../../src/web-ui/routes/verse/chat/ActionMenu.tsx"],"sourcesContent":["/**\n * chat/ActionMenu.module.css — the chat surface's action menu. Raised\n * surface, hairline border, the menu shadow; rows are density-sm.\n */\n.menu {\n position: fixed;\n z-index: var(--z-dropdown);\n display: flex;\n flex-direction: column;\n min-width: 200px;\n max-width: min(320px, calc(100vw - 16px));\n padding: var(--space-1);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n background: var(--bg-surface-raised);\n box-shadow: var(--shadow-menu);\n animation: menu-in var(--duration-fast) var(--ease-decelerate);\n}\n.menu:focus { outline: none; }\n\n.row[data-separated] {\n margin-top: var(--space-1);\n padding-top: var(--space-1);\n border-top: 1px solid var(--border-subtle);\n}\n\n.item {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n width: 100%;\n min-height: var(--density-row-sm);\n padding: var(--space-1) var(--space-2);\n border: 0;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--text-primary);\n font: inherit;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n text-align: left;\n cursor: pointer;\n}\n.item:hover,\n.item:focus { outline: none; background: var(--bg-hover); }\n.item:focus-visible { box-shadow: inset 0 0 0 1px var(--border-focus); }\n.item[data-danger] { color: var(--status-danger-fg); }\n.item[data-danger]:hover,\n.item[data-danger]:focus { background: var(--status-danger-bg); }\n.item[aria-disabled='true'] { color: var(--text-disabled); cursor: not-allowed; }\n.item[aria-disabled='true']:hover { background: transparent; }\n\n.icon {\n flex: none;\n display: inline-flex;\n width: 16px;\n margin-top: 2px;\n color: var(--text-tertiary);\n}\n.label {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.reason {\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n}\n\n@keyframes menu-in {\n from { opacity: 0; transform: translateY(-2px); }\n to { opacity: 1; transform: none; }\n}\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion='full']) .menu { animation: none; }\n}\n:root[data-motion='reduce'] .menu { animation: none; }\n","/**\n * routes/verse/chat/ActionMenu.tsx — the chat surface's small action menu\n * (unit C2): the header's ⋯ and a sidebar row's hover / right-click menu.\n *\n * The primitives have no menu, and the ones scattered through the console\n * are each hand-rolled for one place; this one is written once for both of\n * C2's uses and follows the WAI-ARIA menu pattern properly:\n * - `role=\"menu\"` of `menuitem`s, focus moves INTO the menu on open;\n * - ↑/↓ wrap, Home/End jump, a letter jumps to the next item starting\n * with it, Enter/Space choose;\n * - Esc, Tab, a click outside or choosing an item close it and hand focus\n * back to whatever opened it (the ⋯ button, or the row that was\n * right-clicked);\n * - a disabled item stays in the list with its reason as a description, so\n * the operator learns WHY instead of wondering where it went.\n *\n * Portalled and position:fixed so the sidebar's own overflow cannot clip it,\n * and clamped to the viewport (a right-click near the bottom opens upward).\n */\nimport { useEffect, useLayoutEffect, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport styles from './ActionMenu.module.css';\n\nexport interface ActionMenuItem {\n id: string;\n label: string;\n onSelect: () => void;\n /** Painted as destructive (Delete). */\n danger?: boolean;\n disabled?: boolean;\n /** Shown under a disabled item. */\n reason?: string | null;\n /** A second line under the label, always shown (a cost, a consequence). */\n description?: string | null;\n /** A leading glyph. */\n icon?: ReactNode;\n /** A separator above this item. */\n separated?: boolean;\n}\n\nexport interface MenuAnchor {\n /** Viewport coordinates of the menu's preferred top-left. */\n x: number;\n y: number;\n}\n\nexport interface ActionMenuProps {\n label: string;\n items: readonly ActionMenuItem[];\n anchor: MenuAnchor;\n onClose: (reason: 'select' | 'dismiss') => void;\n /** Focus returns here on close. */\n returnFocus?: HTMLElement | null;\n}\n\nconst EDGE = 8;\n\nexport function ActionMenu({ label, items, anchor, onClose, returnFocus = null }: ActionMenuProps) {\n const ref = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const [position, setPosition] = useState<{ left: number; top: number }>({ left: anchor.x, top: anchor.y });\n // Read through refs: the listeners below are installed ONCE per open, and a\n // parent passing an inline onClose must not tear them down (and bounce\n // focus back to the trigger) on every render.\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const returnFocusRef = useRef(returnFocus);\n returnFocusRef.current = returnFocus;\n const enabled = items.map((item, i) => (item.disabled ? -1 : i)).filter((i) => i >= 0);\n\n // Clamp into the viewport once the menu has a size.\n useLayoutEffect(() => {\n const node = ref.current;\n if (!node) return;\n const rect = node.getBoundingClientRect();\n const vw = window.innerWidth || document.documentElement.clientWidth;\n const vh = window.innerHeight || document.documentElement.clientHeight;\n let left = anchor.x;\n let top = anchor.y;\n if (rect.width > 0 && left + rect.width > vw - EDGE) left = Math.max(EDGE, vw - EDGE - rect.width);\n if (rect.height > 0 && top + rect.height > vh - EDGE) top = Math.max(EDGE, anchor.y - rect.height);\n setPosition({ left, top });\n }, [anchor.x, anchor.y]);\n\n useEffect(() => {\n const first = enabled[0];\n if (first !== undefined) itemRefs.current[first]?.focus();\n else ref.current?.focus();\n // Focus moves in once, on open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const onPointer = (event: PointerEvent) => {\n if (ref.current && event.target instanceof Node && ref.current.contains(event.target)) return;\n onCloseRef.current('dismiss');\n };\n const onScroll = (event: Event) => {\n if (ref.current && event.target instanceof Node && ref.current.contains(event.target)) return;\n onCloseRef.current('dismiss');\n };\n document.addEventListener('pointerdown', onPointer, true);\n window.addEventListener('resize', onScroll);\n document.addEventListener('scroll', onScroll, true);\n const menu = ref.current;\n return () => {\n document.removeEventListener('pointerdown', onPointer, true);\n window.removeEventListener('resize', onScroll);\n document.removeEventListener('scroll', onScroll, true);\n // Hand focus back only if it is still ours (in the menu, or dropped to\n // <body> by the unmount) — never yank it from a field the chosen action\n // just focused.\n const active = document.activeElement;\n const ours = active === null || active === document.body || (menu !== null && menu.contains(active));\n const back = returnFocusRef.current;\n if (ours && back && document.contains(back)) back.focus({ preventScroll: true });\n };\n }, []);\n\n function move(from: number, delta: number) {\n if (enabled.length === 0) return;\n const at = enabled.indexOf(from);\n const next = at < 0 ? (delta > 0 ? 0 : enabled.length - 1) : (at + delta + enabled.length) % enabled.length;\n itemRefs.current[enabled[next]!]?.focus();\n }\n\n function onKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const index = itemRefs.current.findIndex((node) => node === document.activeElement);\n switch (event.key) {\n case 'ArrowDown': event.preventDefault(); move(index, 1); return;\n case 'ArrowUp': event.preventDefault(); move(index, -1); return;\n case 'Home': event.preventDefault(); itemRefs.current[enabled[0] ?? 0]?.focus(); return;\n case 'End': event.preventDefault(); itemRefs.current[enabled[enabled.length - 1] ?? 0]?.focus(); return;\n case 'Escape': event.preventDefault(); event.stopPropagation(); onClose('dismiss'); return;\n case 'Tab': onClose('dismiss'); return;\n default:\n if (event.key.length === 1 && /\\S/.test(event.key) && !event.metaKey && !event.ctrlKey && !event.altKey) {\n const letter = event.key.toLowerCase();\n const order = [...enabled.filter((i) => i > index), ...enabled.filter((i) => i <= index)];\n const hit = order.find((i) => items[i]!.label.toLowerCase().startsWith(letter));\n if (hit !== undefined) {\n event.preventDefault();\n itemRefs.current[hit]?.focus();\n }\n }\n }\n }\n\n return createPortal(\n <div ref={ref} className={styles.menu} role=\"menu\" aria-label={label} tabIndex={-1}\n style={{ left: position.left, top: position.top }} onKeyDown={onKeyDown}\n onContextMenu={(event) => event.preventDefault()}>\n {items.map((item, i) => (\n <div key={item.id} className={styles.row} data-separated={item.separated || undefined} role=\"none\">\n <button\n ref={(node) => { itemRefs.current[i] = node; }}\n type=\"button\"\n role=\"menuitem\"\n className={styles.item}\n data-danger={item.danger || undefined}\n aria-disabled={item.disabled || undefined}\n tabIndex={-1}\n onClick={() => {\n if (item.disabled) return;\n onClose('select');\n item.onSelect();\n }}\n >\n {item.icon ? <span className={styles.icon} aria-hidden=\"true\">{item.icon}</span> : null}\n <span className={styles.label}>\n {item.label}\n {item.description ? <span className={styles.reason}>{item.description}</span> : null}\n {item.disabled && item.reason ? <span className={styles.reason}>{item.reason}</span> : null}\n </span>\n </button>\n </div>\n ))}\n </div>,\n document.body,\n );\n}\n\n/** Anchor a menu under (and right-aligned to) a button. */\nexport function anchorBelow(node: HTMLElement, align: 'start' | 'end' = 'end', menuWidth = 220): MenuAnchor {\n const rect = node.getBoundingClientRect();\n return { x: align === 'end' ? rect.right - menuWidth : rect.left, y: rect.bottom + 4 };\n}\n"],"mappings":"qQCuDM,EAAO,EAEb,SAAgB,EAAW,CAAE,QAAO,QAAO,SAAQ,UAAS,cAAc,MAAyB,CACjG,IAAM,GAAA,EAAM,EAAA,OAAA,CAAuB,IAAI,EACjC,GAAA,EAAW,EAAA,OAAA,CAAqC,CAAC,CAAC,EAClD,CAAC,EAAU,IAAA,EAAe,EAAA,SAAA,CAAwC,CAAE,KAAM,EAAO,EAAG,IAAK,EAAO,CAAE,CAAC,EAInG,GAAA,EAAa,EAAA,OAAA,CAAO,CAAO,EACjC,EAAW,QAAU,EACrB,IAAM,GAAA,EAAiB,EAAA,OAAA,CAAO,CAAW,EACzC,EAAe,QAAU,EACzB,IAAM,EAAU,EAAM,KAAK,EAAM,IAAO,EAAK,SAAW,GAAK,CAAE,CAAC,CAAC,OAAQ,GAAM,GAAK,CAAC,GAGrF,EAAA,EAAA,gBAAA,KAAsB,CACpB,IAAM,EAAO,EAAI,QACjB,GAAI,CAAC,EAAM,OACX,IAAM,EAAO,EAAK,sBAAsB,EAClC,EAAK,OAAO,YAAc,SAAS,gBAAgB,YACnD,EAAK,OAAO,aAAe,SAAS,gBAAgB,aACtD,EAAO,EAAO,EACd,EAAM,EAAO,EACb,EAAK,MAAQ,GAAK,EAAO,EAAK,MAAQ,EAAK,IAAM,EAAO,KAAK,IAAI,EAAM,EAAK,EAAO,EAAK,KAAK,GAC7F,EAAK,OAAS,GAAK,EAAM,EAAK,OAAS,EAAK,IAAM,EAAM,KAAK,IAAI,EAAM,EAAO,EAAI,EAAK,MAAM,GACjG,EAAY,CAAE,OAAM,KAAI,CAAC,CAC3B,EAAG,CAAC,EAAO,EAAG,EAAO,CAAC,CAAC,GAEvB,EAAA,EAAA,UAAA,KAAgB,CACd,IAAM,EAAQ,EAAQ,GAClB,IAAU,IAAA,GACT,EAAI,SAAS,MAAM,EADC,EAAS,QAAQ,EAAM,EAAE,MAAM,CAI1D,EAAG,CAAC,CAAC,GAEL,EAAA,EAAA,UAAA,KAAgB,CACd,IAAM,EAAa,GAAwB,CACrC,EAAI,SAAW,EAAM,kBAAkB,MAAQ,EAAI,QAAQ,SAAS,EAAM,MAAM,GACpF,EAAW,QAAQ,SAAS,CAC9B,EACM,EAAY,GAAiB,CAC7B,EAAI,SAAW,EAAM,kBAAkB,MAAQ,EAAI,QAAQ,SAAS,EAAM,MAAM,GACpF,EAAW,QAAQ,SAAS,CAC9B,EACA,SAAS,iBAAiB,cAAe,EAAW,EAAI,EACxD,OAAO,iBAAiB,SAAU,CAAQ,EAC1C,SAAS,iBAAiB,SAAU,EAAU,EAAI,EAClD,IAAM,EAAO,EAAI,QACjB,UAAa,CACX,SAAS,oBAAoB,cAAe,EAAW,EAAI,EAC3D,OAAO,oBAAoB,SAAU,CAAQ,EAC7C,SAAS,oBAAoB,SAAU,EAAU,EAAI,EAIrD,IAAM,EAAS,SAAS,cAClB,EAAO,IAAW,MAAQ,IAAW,SAAS,MAAS,IAAS,MAAQ,EAAK,SAAS,CAAM,EAC5F,EAAO,EAAe,QACxB,GAAQ,GAAQ,SAAS,SAAS,CAAI,GAAG,EAAK,MAAM,CAAE,cAAe,EAAK,CAAC,CACjF,CACF,EAAG,CAAC,CAAC,EAEL,SAAS,EAAK,EAAc,EAAe,CACzC,GAAI,EAAQ,SAAW,EAAG,OAC1B,IAAM,EAAK,EAAQ,QAAQ,CAAI,EACzB,EAAO,EAAK,EAAK,EAAQ,EAAI,EAAI,EAAQ,OAAS,GAAM,EAAK,EAAQ,EAAQ,QAAU,EAAQ,OACrG,EAAS,QAAQ,EAAQ,GAAO,EAAE,MAAM,CAC1C,CAEA,SAAS,EAAU,EAAsC,CACvD,IAAM,EAAQ,EAAS,QAAQ,UAAW,GAAS,IAAS,SAAS,aAAa,EAClF,OAAQ,EAAM,IAAd,CACE,IAAK,YAAa,EAAM,eAAe,EAAG,EAAK,EAAO,CAAC,EAAG,OAC1D,IAAK,UAAW,EAAM,eAAe,EAAG,EAAK,EAAO,EAAE,EAAG,OACzD,IAAK,OAAQ,EAAM,eAAe,EAAG,EAAS,QAAQ,EAAQ,IAAM,EAAE,EAAE,MAAM,EAAG,OACjF,IAAK,MAAO,EAAM,eAAe,EAAG,EAAS,QAAQ,EAAQ,EAAQ,OAAS,IAAM,EAAE,EAAE,MAAM,EAAG,OACjG,IAAK,SAAU,EAAM,eAAe,EAAG,EAAM,gBAAgB,EAAG,EAAQ,SAAS,EAAG,OACpF,IAAK,MAAO,EAAQ,SAAS,EAAG,OAChC,QACE,GAAI,EAAM,IAAI,SAAW,GAAK,KAAK,KAAK,EAAM,GAAG,GAAK,CAAC,EAAM,SAAW,CAAC,EAAM,SAAW,CAAC,EAAM,OAAQ,CACvG,IAAM,EAAS,EAAM,IAAI,YAAY,EAE/B,EAAM,CADG,GAAG,EAAQ,OAAQ,GAAM,EAAI,CAAK,EAAG,GAAG,EAAQ,OAAQ,GAAM,GAAK,CAAK,CAC3E,CAAA,CAAM,KAAM,GAAM,EAAM,EAAE,CAAE,MAAM,YAAY,CAAC,CAAC,WAAW,CAAM,CAAC,EAC1E,IAAQ,IAAA,KACV,EAAM,eAAe,EACrB,EAAS,QAAQ,EAAI,EAAE,MAAM,EAEjC,CACJ,CACF,CAEA,OAAA,EAAO,EAAA,aAAA,EACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAU,MAAK,UAAW,EAAO,KAAM,KAAK,OAAO,aAAY,EAAO,SAAU,GAC9E,MAAO,CAAE,KAAM,EAAS,KAAM,IAAK,EAAS,GAAI,EAAc,YAC9D,cAAgB,GAAU,EAAM,eAAe,EAC9C,SAAA,EAAM,KAAK,EAAM,KAChB,EAAA,EAAA,IAAA,CAAC,MAAD,CAAmB,UAAW,EAAO,IAAK,iBAAgB,EAAK,WAAa,IAAA,GAAW,KAAK,OAC1F,UAAA,EAAA,EAAA,KAAA,CAAC,SAAD,CACE,IAAM,GAAS,CAAE,EAAS,QAAQ,GAAK,CAAM,EAC7C,KAAK,SACL,KAAK,WACL,UAAW,EAAO,KAClB,cAAa,EAAK,QAAU,IAAA,GAC5B,gBAAe,EAAK,UAAY,IAAA,GAChC,SAAU,GACV,YAAe,CACT,EAAK,WACT,EAAQ,QAAQ,EAChB,EAAK,SAAS,EAChB,EAZF,SAAA,CAcG,EAAK,MAAO,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,KAAM,cAAY,OAAQ,SAAA,EAAK,IAAW,CAAA,EAAI,MACnF,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAW,EAAO,MAAxB,SAAA,CACG,EAAK,MACL,EAAK,aAAc,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,OAAS,SAAA,EAAK,WAAkB,CAAA,EAAI,KAC/E,EAAK,UAAY,EAAK,QAAS,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,OAAS,SAAA,EAAK,MAAa,CAAA,EAAI,IACnF,CACA,CAAA,CAAA,GACL,EAtBK,EAAK,EAsBV,CACN,CACE,CAAA,EACL,SAAS,IACX,CACF,CAGA,SAAgB,EAAY,EAAmB,EAAyB,MAAO,EAAY,IAAiB,CAC1G,IAAM,EAAO,EAAK,sBAAsB,EACxC,MAAO,CAAE,EAAG,IAAU,MAAQ,EAAK,MAAQ,EAAY,EAAK,KAAM,EAAG,EAAK,OAAS,CAAE,CACvF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,c as t,n,s as r}from"./index-BG177cPN.js";import{V as i,a,h as o,i as s,p as c,q as l}from"./global-CXHHMz9o.js";import{r as u}from"./Epistemic-CfqFe_aP.js";import{n as d}from"./StatusBadge-DQ1UtQAJ.js";import{t as f}from"./MutationTokenDialog-CLGP72g6.js";import{t as p}from"./ConfirmDialog-_S9iE-cJ.js";import{t as m}from"./RefreshIndicator-DGubF4vR.js";import{S as h,in as g,x as _}from"./VerseConsoleApp-DeuBEvAO.js";import{o as v}from"./verse-model-CSzzdyu2.js";import{t as y}from"./Segmented-Wynbg0F5.js";import{a as b,d as x,f as S,g as C,i as w,l as T,n as E,o as D,p as O,r as k,s as A,t as j,u as M,v as N,y as P}from"./format-DEAaVF6X.js";import{n as F,r as ee}from"./workspace-model-BdIVybKr.js";import{t as I}from"./Meter-BSVhU43Q.js";import{t as L}from"./Select-DMyLCkId.js";import{a as R,c as z,d as te,f as ne,h as B,i as re,l as ie,m as V,o as ae,p as oe,r as se,s as ce,u as le}from"./control-queries-DB6Kh7UN.js";import{t as H}from"./use-ticker-DIvAZ4Ey.js";import{a as ue,d as de,f as fe,i as pe,n as me,o as he,p as ge,r as _e,s as ve,t as ye}from"./fleet-model-BRfRWkZl.js";import{a as be,i as xe,n as Se,o as Ce,r as we,s as Te}from"./fleet-queries-tU6UEXN2.js";import{a as Ee,c as De,d as Oe,i as ke,l as Ae,n as je,o as Me,r as Ne,s as Pe,t as Fe,u as Ie}from"./overnight-queries-CR0b_j-V.js";import{n as Le}from"./use-guarded-action-P12MfNwU.js";var U=t(e(),1),W=n();function Re(e){let t=e.limit;if(typeof t!=`number`||!Number.isFinite(t)||t<=0)return`unlimited`;let n=typeof e.callsToday==`number`&&Number.isFinite(e.callsToday)?e.callsToday:0;return n>=t?`over`:n>=t*.8?`warn`:`ok`}var G={panel:`_panel_2noy3_12`,panelHead:`_panelHead_2noy3_15`,panelTitle:`_panelTitle_2noy3_16`,panelHeadSpaced:`_panelHeadSpaced_2noy3_25`,panelNote:`_panelNote_2noy3_26`,panelActions:`_panelActions_2noy3_27`,status:`_status_2noy3_30`,statusTop:`_statusTop_2noy3_31`,runState:`_runState_2noy3_32`,runDot:`_runDot_2noy3_33`,facts:`_facts_2noy3_39`,fact:`_fact_2noy3_39`,factLabel:`_factLabel_2noy3_41`,factValue:`_factValue_2noy3_42`,budget:`_budget_2noy3_49`,budgetLine:`_budgetLine_2noy3_50`,budgetLabel:`_budgetLabel_2noy3_51`,budgetNote:`_budgetNote_2noy3_52`,meter:`_meter_2noy3_53`,meterFill:`_meterFill_2noy3_58`,controls:`_controls_2noy3_61`,button:`_button_2noy3_62`,buttonPrimary:`_buttonPrimary_2noy3_76`,emergency:`_emergency_2noy3_80`,emergencyButton:`_emergencyButton_2noy3_81`,emergencyNote:`_emergencyNote_2noy3_102`,capGrid:`_capGrid_2noy3_105`,cap:`_cap_2noy3_105`,capLabel:`_capLabel_2noy3_107`,capRow:`_capRow_2noy3_108`,capInput:`_capInput_2noy3_109`,capInputInvalid:`_capInputInvalid_2noy3_123`,capUnit:`_capUnit_2noy3_124`,capHelp:`_capHelp_2noy3_125`,capUsage:`_capUsage_2noy3_126`,capError:`_capError_2noy3_127`,actionNote:`_actionNote_2noy3_130`,capApplied:`_capApplied_2noy3_131`,repoList:`_repoList_2noy3_135`,repoRow:`_repoRow_2noy3_136`,repoName:`_repoName_2noy3_137`,repoPath:`_repoPath_2noy3_138`,repoMissing:`_repoMissing_2noy3_139`,addRow:`_addRow_2noy3_140`,addInput:`_addInput_2noy3_141`,tableScroll:`_tableScroll_2noy3_156`,table:`_table_2noy3_156`,cellAction:`_cellAction_2noy3_176`,cellTime:`_cellTime_2noy3_177`,cellSummary:`_cellSummary_2noy3_178`,cellRepo:`_cellRepo_2noy3_179`,resultTag:`_resultTag_2noy3_188`,filters:`_filters_2noy3_197`,filterField:`_filterField_2noy3_198`,filterLabel:`_filterLabel_2noy3_199`,filterSelect:`_filterSelect_2noy3_214`,checkList:`_checkList_2noy3_229`,check:`_check_2noy3_229`,checkMark:`_checkMark_2noy3_231`,checkLabel:`_checkLabel_2noy3_234`,checkDetail:`_checkDetail_2noy3_235`,summaryColumns:`_summaryColumns_2noy3_238`,summaryList:`_summaryList_2noy3_239`,summaryRow:`_summaryRow_2noy3_240`,summaryTitle:`_summaryTitle_2noy3_241`,summaryMeta:`_summaryMeta_2noy3_242`,empty:`_empty_2noy3_245`,emptyStrong:`_emptyStrong_2noy3_246`,error:`_error_2noy3_249`,readOnly:`_readOnly_2noy3_250`,skeletons:`_skeletons_2noy3_252`,srOnly:`_srOnly_2noy3_253`,runtimeTop:`_runtimeTop_2noy3_268`,runtimeState:`_runtimeState_2noy3_269`,runtimeStateText:`_runtimeStateText_2noy3_270`,factWide:`_factWide_2noy3_277`,factMono:`_factMono_2noy3_278`,capacityBlock:`_capacityBlock_2noy3_282`,capacityHead:`_capacityHead_2noy3_283`,capacityBig:`_capacityBig_2noy3_284`,capacityWords:`_capacityWords_2noy3_298`,capacityHeadline:`_capacityHeadline_2noy3_299`,capacityDetail:`_capacityDetail_2noy3_300`,evidence:`_evidence_2noy3_303`,evidenceLead:`_evidenceLead_2noy3_304`,evidenceScroll:`_evidenceScroll_2noy3_305`,evidenceTable:`_evidenceTable_2noy3_306`,evidenceNums:`_evidenceNums_2noy3_311`,evidenceCode:`_evidenceCode_2noy3_312`,utilisation:`_utilisation_2noy3_314`,toggleRow:`_toggleRow_2noy3_317`,toggleState:`_toggleState_2noy3_318`,policyExplain:`_policyExplain_2noy3_319`,impact:`_impact_2noy3_322`,impactTitle:`_impactTitle_2noy3_323`,impactSummary:`_impactSummary_2noy3_324`,seatList:`_seatList_2noy3_325`,seatRow:`_seatRow_2noy3_326`,seatEngine:`_seatEngine_2noy3_327`,seatLabel:`_seatLabel_2noy3_342`,seatRefusal:`_seatRefusal_2noy3_343`,pressure:`_pressure_2noy3_346`,pressureHead:`_pressureHead_2noy3_347`,pressureHeadline:`_pressureHeadline_2noy3_348`,pressureDetail:`_pressureDetail_2noy3_351`,fleetMeters:`_fleetMeters_2noy3_353`,elapsedQualifier:`_elapsedQualifier_2noy3_354`,noteList:`_noteList_2noy3_355`,repoStanding:`_repoStanding_2noy3_359`,repoPriority:`_repoPriority_2noy3_366`,repoSection:`_repoSection_2noy3_367`,repoOutsideFocus:`_repoOutsideFocus_2noy3_368`},ze=20,K=40;function Be({snapshot:e}){let t=e.daemon?.ticks??null,n=(0,U.useMemo)(()=>t?[...t].slice(-20).reverse():[],[t]),r=(0,U.useMemo)(()=>{if(!t)return[];let e=[];for(let n=t.length-1;n>=0&&e.length<K;--n){let r=t[n];if(r?.dispatches)for(let t=r.dispatches.length-1;t>=0&&e.length<K;--t)e.push({...r.dispatches[t],tickTs:r.ts})}return e},[t]);return(0,W.jsxs)(`section`,{className:G.panel,"aria-label":`Activity`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Recent ticks`}),(0,W.jsxs)(`p`,{className:G.panelNote,children:[`Newest first · last `,ze]})]}),t===null?(0,W.jsx)(`p`,{className:G.empty,children:`The daemon ledger is not readable right now, so tick history is unknown.`}):n.length===0?(0,W.jsx)(`p`,{className:G.empty,children:`No ticks have been recorded yet. Start the loop, or run one tick, to produce the first.`}):(0,W.jsx)(`div`,{className:G.tableScroll,children:(0,W.jsxs)(`table`,{className:G.table,children:[(0,W.jsx)(`thead`,{children:(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`th`,{scope:`col`,children:`Time`}),(0,W.jsx)(`th`,{scope:`col`,children:`Outcome`}),(0,W.jsx)(`th`,{scope:`col`,children:`Items`}),(0,W.jsx)(`th`,{scope:`col`,children:`Proposals`}),(0,W.jsx)(`th`,{scope:`col`,children:`Dispatched`}),(0,W.jsx)(`th`,{scope:`col`,children:`Spend`}),(0,W.jsx)(`th`,{scope:`col`,children:`Direction`})]})}),(0,W.jsx)(`tbody`,{children:n.map(e=>{let t=b(e.reason);return(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`td`,{className:G.cellTime,title:M(e.ts),children:x(e.ts)}),(0,W.jsxs)(`td`,{className:G.cellSummary,"data-tone":t.tone,children:[t.label,e.dryRun?` (dry run)`:``]}),(0,W.jsx)(`td`,{className:G.cellTime,children:A(e.itemsConsidered)}),(0,W.jsx)(`td`,{className:G.cellTime,children:A(e.proposalsCreated)}),(0,W.jsx)(`td`,{className:G.cellTime,children:e.dispatches?e.dispatches.length:`—`}),(0,W.jsx)(`td`,{className:G.cellTime,children:S(e.spentUsd)}),(0,W.jsx)(`td`,{className:G.cellSummary,children:e.directionMode??`—`})]},`${e.ts}-${e.reason}`)})})]})}),(0,W.jsxs)(`div`,{className:`${G.panelHead} ${G.panelHeadSpaced}`,children:[(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Recent dispatches`}),(0,W.jsxs)(`p`,{className:G.panelNote,children:[`Newest first · last `,K]})]}),r.length===0?(0,W.jsx)(`p`,{className:G.empty,children:`No dispatches in the recorded ticks. Run one tick from Controls to see what it would pick up.`}):(0,W.jsx)(`div`,{className:G.tableScroll,children:(0,W.jsxs)(`table`,{className:G.table,children:[(0,W.jsx)(`thead`,{children:(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`th`,{scope:`col`,children:`Time`}),(0,W.jsx)(`th`,{scope:`col`,children:`Item`}),(0,W.jsx)(`th`,{scope:`col`,children:`Repo`}),(0,W.jsx)(`th`,{scope:`col`,children:`Engine`}),(0,W.jsx)(`th`,{scope:`col`,children:`Outcome`}),(0,W.jsx)(`th`,{scope:`col`,children:`Spend`})]})}),(0,W.jsx)(`tbody`,{children:r.map((e,t)=>(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`td`,{className:G.cellTime,title:M(e.tickTs),children:x(e.tickTs)}),(0,W.jsx)(`td`,{className:G.cellSummary,title:e.title,children:e.title}),(0,W.jsx)(`td`,{className:G.cellRepo,title:e.repo,children:e.repo?N(e.repo):`—`}),(0,W.jsx)(`td`,{className:G.cellAction,children:e.backend??`not routed`}),(0,W.jsx)(`td`,{className:G.cellSummary,children:e.dispatched?`dispatched`:`skipped — ${P(e.reason)}`}),(0,W.jsx)(`td`,{className:G.cellTime,children:S(e.spentUsd)})]},`${e.tickTs}-${e.itemId}-${t}`))})]})}),(0,W.jsx)(Ve,{})]})}function Ve(){let[e,t]=(0,U.useState)(``),[n,r]=(0,U.useState)(``),[i,s]=(0,U.useState)(``),[l,u]=(0,U.useState)(200),d=(0,U.useMemo)(()=>z({limit:l,action:n||void 0,result:i||void 0}),[l,n,i]),f=c(d),p=o(d),h=f.data?.entries??[];return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`${G.panelHead} ${G.panelHeadSpaced}`,children:[(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Audit trail`}),(0,W.jsxs)(`div`,{className:G.panelActions,children:[f.status===`refreshing`?(0,W.jsx)(m,{}):null,(0,W.jsx)(`button`,{type:`button`,className:G.button,onClick:p,children:`Refresh`})]})]}),(0,W.jsxs)(`div`,{className:G.filters,children:[(0,W.jsxs)(`label`,{className:G.filterField,children:[(0,W.jsx)(`span`,{className:G.filterLabel,children:`Action`}),(0,W.jsx)(`input`,{type:`search`,value:e,placeholder:`e.g. enroll.add`,onChange:e=>t(e.target.value),onBlur:()=>r(e.trim()),onKeyDown:t=>{t.key===`Enter`&&(t.preventDefault(),r(e.trim()))}})]}),(0,W.jsxs)(L,{className:G.filterSelect,label:`Result`,value:i,onChange:e=>s(e.target.value),children:[(0,W.jsx)(`option`,{value:``,children:`Any result`}),(0,W.jsx)(`option`,{value:`ok`,children:`ok`}),(0,W.jsx)(`option`,{value:`refused`,children:`refused`}),(0,W.jsx)(`option`,{value:`error`,children:`error`})]}),(0,W.jsxs)(L,{className:G.filterSelect,label:`Rows`,value:l,onChange:e=>u(Number(e.target.value)),children:[(0,W.jsx)(`option`,{value:50,children:`50`}),(0,W.jsx)(`option`,{value:200,children:`200`}),(0,W.jsx)(`option`,{value:500,children:`500`})]})]}),f.status===`loading`?(0,W.jsxs)(`div`,{className:G.skeletons,children:[(0,W.jsx)(a,{}),(0,W.jsx)(a,{}),(0,W.jsx)(a,{})]}):f.status===`error`?(0,W.jsx)(`p`,{className:G.error,role:`alert`,children:f.error?.message??`Could not read the audit trail.`}):h.length===0?(0,W.jsx)(`p`,{className:G.empty,children:n||i?`No audit entries match this filter. Clear the Action or Result filter to see every entry.`:`No audit entries recorded yet. Every autonomous or sandbox action appends one here, and none are ever deleted.`}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`p`,{className:G.panelNote,"aria-live":`polite`,children:[h.length,` `,h.length===1?`entry`:`entries`,` · newest first`,f.data?.truncated?` · capped by the server, narrow the filter to see more`:``]}),(0,W.jsx)(`div`,{className:G.tableScroll,children:(0,W.jsxs)(`table`,{className:G.table,children:[(0,W.jsx)(`thead`,{children:(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`th`,{scope:`col`,children:`Time`}),(0,W.jsx)(`th`,{scope:`col`,children:`Action`}),(0,W.jsx)(`th`,{scope:`col`,children:`Result`}),(0,W.jsx)(`th`,{scope:`col`,children:`Repo`}),(0,W.jsx)(`th`,{scope:`col`,children:`Summary`})]})}),(0,W.jsx)(`tbody`,{children:h.map((e,t)=>(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`td`,{className:G.cellTime,title:M(e.ts),children:x(e.ts)}),(0,W.jsx)(`td`,{className:G.cellAction,children:e.action}),(0,W.jsx)(`td`,{children:(0,W.jsx)(`span`,{className:G.resultTag,"data-result":e.result,children:e.result})}),(0,W.jsx)(`td`,{className:G.cellRepo,title:e.repo??void 0,children:e.repo?N(e.repo):`—`}),(0,W.jsx)(`td`,{className:G.cellSummary,children:P(e.summary)})]},`${e.ts}-${e.action}-${t}`))})]})})]})]})}var q=e=>e,He=6e4,Ue=[{key:`dailyBudgetUsd`,label:`Daily budget`,unit:`USD / day`,min:0,max:1e3,integer:!1,step:1,help:`Hard ceiling on what the loop may spend in a calendar day. 0 stops the loop.`,toDisplay:q,fromDisplay:q},{key:`perTickItems`,label:`Items per tick`,unit:`items`,min:1,max:50,integer:!0,step:1,help:`How many backlog items one tick may pick up.`,toDisplay:q,fromDisplay:q},{key:`parallel`,label:`Parallel swarms`,unit:`swarms`,min:1,max:16,integer:!0,step:1,help:`Sandboxed swarms run simultaneously inside one tick (batch mode).`,toDisplay:q,fromDisplay:q},{key:`intervalMs`,label:`Tick interval`,unit:`minutes`,min:.5,max:1440,integer:!1,step:.5,help:`Gap between ticks in loop mode. 30 seconds minimum, 24 hours maximum.`,toDisplay:e=>Math.round(e/He*100)/100,fromDisplay:e=>Math.round(e*He)},{key:`maxConcurrent`,label:`Max concurrent`,unit:`dispatches`,min:1,max:32,integer:!0,step:1,help:`Absolute ceiling on in-flight dispatches in continuous mode. Takes precedence over the per-tier totals.`,toDisplay:q,fromDisplay:q},{key:`concurrency.local`,label:`Local tier`,unit:`slots`,min:1,max:32,integer:!0,step:1,help:`On-device engines. GPU/RAM bound — keep this low.`,toDisplay:q,fromDisplay:q},{key:`concurrency.cloud`,label:`Cloud tier`,unit:`slots`,min:1,max:32,integer:!0,step:1,help:`Subscription cloud agents. I/O bound — many can run at once.`,toDisplay:q,fromDisplay:q},{key:`concurrency.total`,label:`All tiers`,unit:`slots`,min:1,max:32,integer:!0,step:1,help:`Hard cap across every tier combined.`,toDisplay:q,fromDisplay:q},{key:`subscriptionMaxPercent`,label:`Subscription ceiling`,unit:`% of window`,min:1,max:100,integer:!0,step:1,help:`How much of a flat-fee provider window the fleet may consume before it backs off.`,toDisplay:q,fromDisplay:q}];function We(e,t){if(!e)return null;let n=t===`concurrency.local`?e.concurrency?.local:t===`concurrency.cloud`?e.concurrency?.cloud:t===`concurrency.total`?e.concurrency?.total:e[t];return typeof n==`number`&&Number.isFinite(n)?n:null}function Ge(e,t){return t.startsWith(`%`)?`${e}${t}`:`${e} ${t}`}function Ke(e,t){let n=t.trim();if(n===``)return{ok:!1,error:`${e.label} cannot be blank.`};let r=Number(n);if(!Number.isFinite(r))return{ok:!1,error:`${e.label} must be a number.`};if(e.integer&&!Number.isInteger(r)){let t=e.unit.startsWith(`%`)?`a whole percentage`:`a whole number of ${e.unit}`;return{ok:!1,error:`${e.label} must be ${t}.`}}return r<e.min||r>e.max?{ok:!1,error:`${e.label} must be between ${e.min} and ${Ge(e.max,e.unit)}.`}:{ok:!0,stored:e.fromDisplay(r),display:r}}function qe(e,t){switch(e){case`concurrency.local`:return{concurrency:{local:t}};case`concurrency.cloud`:return{concurrency:{cloud:t}};case`concurrency.total`:return{concurrency:{total:t}};default:return{[e]:t}}}var J=B.foundryLimitMax;function Je(e,t){let n=e.trim();if(n===``)return{ok:!1,error:`${t} limit cannot be blank.`};let r=Number(n);return Number.isFinite(r)?Number.isInteger(r)?r<J.min?{ok:!1,error:`${t} limit cannot be negative.`}:r>J.max?{ok:!1,error:`${t} limit must be at most ${J.max} dispatches.`}:{ok:!0,stored:r,display:r}:{ok:!1,error:`${t} limit must be a whole number of dispatches.`}:{ok:!1,error:`${t} limit must be a number.`}}function Ye(e,t,n){let r=n.daemon,i=r?.ticks?.[r.ticks.length-1]??null;switch(e){case`dailyBudgetUsd`:{let e=t.dailyBudgetUsd;if(e===0)return`Loop stopped ($0 budget).`;let i=n.spend,a=i?k(i.todayUsd,e,i.todayDate):k(r?.todaySpentUsd??null,e,null);return a.state===`unknown`?a.note:`${S(i?i.todayUsd:r?.todaySpentUsd??null)} spent today`}case`perTickItems`:return i?`${A(i.itemsConsidered)} considered on the last tick`:null;case`parallel`:return i?.dispatches?`${i.dispatches.length} dispatched on the last tick`:null;case`intervalMs`:return r?.lastTickAt?`last tick ${D(r.lastTickAt)} ago`:null;default:return null}}function Xe({caps:e,snapshot:t,guard:n,dispatchEnabled:r}){let[i,a]=(0,U.useState)(null),[o,s]=(0,U.useState)(null),[c,l]=(0,U.useState)(null),u=!r||n.readOnly;function d(e,t,r){a(e),l(null),n.request(async()=>{s(e);try{await r(),l(e)}finally{s(null)}},t)}let f=e.foundryLimits??[];return(0,W.jsxs)(`section`,{className:G.panel,"aria-label":`Budget and limits`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Budget and limits`}),(0,W.jsx)(`p`,{className:G.panelNote,children:`Committed on blur or Enter. The daemon re-reads config each tick, so changes apply live.`})]}),(0,W.jsx)(`div`,{className:G.capGrid,children:Ue.map(r=>(0,W.jsx)($e,{spec:r,stored:We(e,r.key),usage:Ye(r.key,e,t),disabled:u||o!==null&&o!==r.key,busy:o===r.key,applied:c===r.key,error:i===r.key?n.error:null,onCommit:e=>d(r.key,`Changing ${r.label.toLowerCase()} requires the dispatch token.`,()=>ae(qe(r.key,e)))},r.key))}),(0,W.jsx)(`div`,{className:`${G.panelHead} ${G.panelHeadSpaced}`,children:(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Per-engine dispatch limits`})}),f.length===0?(0,W.jsxs)(`p`,{className:G.empty,children:[`No per-engine dispatch limits are configured. Every engine is bounded only by the caps above and by its own provider quota. To cap one, add it under `,(0,W.jsx)(`code`,{children:`foundry.limits`}),` in `,(0,W.jsx)(`code`,{children:`~/.ashlr/config.json`}),` `,`(a `,(0,W.jsx)(`code`,{children:`max`}),` and a `,(0,W.jsx)(`code`,{children:`window`}),`); it then appears here to edit.`]}):(0,W.jsx)(`div`,{className:G.capGrid,children:f.map((e,r)=>(0,W.jsx)(et,{limit:e,usage:Ze(e.engine,t),disabled:u||o!==null&&o!==Y(e),busy:o===Y(e),applied:c===Y(e),error:i===Y(e)?n.error:null,onCommit:t=>d(Y(e),`Changing the ${e.engine} dispatch limit requires the dispatch token.`,()=>{let e=f.map((e,n)=>n===r?{...e,max:t}:e);return ae({foundryLimits:e})})},`${e.engine}:${e.window}`))})]})}function Y(e){return`foundry:${e.engine}:${e.window}`}function Ze(e,t){let n=t.quota?.find(t=>t.engine===e);if(!n)return null;let r=Re(n),i=r===`unlimited`?`no limit configured`:r;return`${A(n.callsToday)} dispatched in the last ${n.limitWindow??`1d`} · ${i}`}function Qe(e){let t=[e.usage?`${e.id}-usage`:null,e.help?`${e.id}-help`:null].filter(e=>e!==null).join(` `);return(0,W.jsxs)(`div`,{className:G.cap,children:[(0,W.jsx)(`label`,{className:G.capLabel,htmlFor:e.id,children:e.label}),(0,W.jsxs)(`div`,{className:G.capRow,children:[(0,W.jsx)(`input`,{id:e.id,type:`number`,inputMode:`decimal`,className:`${G.capInput} ${e.invalid?G.capInputInvalid:``}`,value:e.value,step:e.step,min:e.min,max:e.max,disabled:e.disabled||e.busy,"aria-invalid":e.invalid?!0:void 0,"aria-describedby":t||void 0,onChange:t=>e.onChange(t.target.value),onBlur:e.onCommit,onKeyDown:t=>{t.key===`Enter`&&(t.preventDefault(),e.onCommit())}}),(0,W.jsx)(`span`,{className:G.capUnit,children:e.unit})]}),e.usage?(0,W.jsx)(`span`,{className:G.capUsage,id:`${e.id}-usage`,children:e.usage}):null,e.help?(0,W.jsx)(`span`,{className:G.capHelp,id:`${e.id}-help`,children:e.help}):null,e.invalid?(0,W.jsx)(`span`,{className:G.capError,role:`alert`,children:e.invalid}):null,e.error&&!e.invalid?(0,W.jsx)(`span`,{className:G.capError,role:`alert`,children:e.error}):null,e.applied&&!e.invalid&&!e.error?(0,W.jsx)(`span`,{className:G.capApplied,children:`applied live`}):null]})}function $e({spec:e,stored:t,usage:n,disabled:r,busy:i,applied:a,error:o,onCommit:s}){let c=t===null?``:String(e.toDisplay(t)),[l,u]=(0,U.useState)(c),[d,f]=(0,U.useState)(null);(0,U.useEffect)(()=>{d===null&&u(c)},[c]);function p(){if(l===c){f(null);return}let t=Ke(e,l);if(!t.ok){f(t.error);return}f(null),s(t.stored)}return(0,W.jsx)(Qe,{id:`cap-${e.key.replace(`.`,`-`)}`,label:e.label,unit:e.unit,help:e.help,usage:n,value:l,invalid:d,disabled:r,busy:i,applied:a,error:o,step:e.step,min:e.min,max:e.max,onChange:e=>{u(e),d&&f(null)},onCommit:p})}function et({limit:e,usage:t,disabled:n,busy:r,applied:i,error:a,onCommit:o}){let s=String(e.max),[c,l]=(0,U.useState)(s),[u,d]=(0,U.useState)(null);(0,U.useEffect)(()=>{u===null&&l(s)},[s]);function f(){if(c===s){d(null);return}let t=Je(c,e.engine);if(!t.ok){d(t.error);return}d(null),o(t.stored)}return(0,W.jsx)(Qe,{id:`cap-foundry-${e.engine}-${e.window}`,label:e.engine,unit:`dispatches / ${e.window}`,usage:t,value:c,invalid:u,disabled:n,busy:r,applied:i,error:a,step:1,min:J.min,max:J.max,onChange:e=>{l(e),u&&d(null)},onCommit:f})}function tt(e){if(e.killSwitch?.state===`active`)return{state:`killed`,label:`Kill switch engaged`};let t=e.daemon;return!t||!u(t.sourceQuality)?{state:`unknown`,label:`Run state unknown`}:t.runtimeState===`running`?{state:`running`,label:`Running`}:t.runtimeState===`stopped`?{state:`stopped`,label:`Stopped`}:{state:`unknown`,label:`Run state unknown`}}function nt({snapshot:e}){let t=H(1e3),{state:n,label:r}=tt(e),i=e.daemon,a=u(i?.sourceQuality),o=i?.ticks?.[i.ticks.length-1]??null,s=b(o?.reason),c=e.fleet?.directionMode??o?.directionMode??null,l=e.scope?.repos??null,d=e.caps?.intervalMs??null,f=n===`running`?C(i?.lastTickAt,d):null,p=e.spend,m=p?k(p.todayUsd,e.caps?.dailyBudgetUsd??null,p.todayDate):k(i?.todaySpentUsd??null,e.caps?.dailyBudgetUsd??null,null);return(0,W.jsxs)(`section`,{className:G.status,"aria-label":`Autonomy status`,children:[(0,W.jsxs)(`div`,{className:G.statusTop,children:[(0,W.jsxs)(`span`,{className:G.runState,"data-state":n,children:[(0,W.jsx)(`span`,{className:G.runDot,"aria-hidden":`true`}),r]}),(0,W.jsxs)(`div`,{className:G.facts,children:[(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Direction`}),(0,W.jsx)(`span`,{className:G.factValue,children:c??`default`})]}),(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Last tick`}),(0,W.jsx)(`span`,{className:G.factValue,"data-tone":s.tone,children:a&&i?.lastTickAt?`${x(i.lastTickAt)} · ${s.label}`:s.label})]}),(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Next tick`}),(0,W.jsx)(`span`,{className:G.factValue,children:n===`running`?w(f,t):n===`killed`?`blocked`:`not scheduled`})]}),(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Interval`}),(0,W.jsx)(`span`,{className:G.factValue,children:T(d)})]}),(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Scope`}),(0,W.jsx)(`span`,{className:G.factValue,"data-tone":(l?.length??0)===0?`warning`:void 0,children:l?`${l.length} ${l.length===1?`repo`:`repos`}`:`—`})]}),(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Awaiting you`}),(0,W.jsx)(`span`,{className:G.factValue,children:typeof e.pendingApprovals==`number`?`${e.pendingApprovals} ${e.pendingApprovals===1?`approval`:`approvals`}`:`—`})]}),(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Started`}),(0,W.jsx)(`span`,{className:G.factValue,children:a?M(i?.startedAt):`—`})]})]})]}),(0,W.jsxs)(`div`,{className:G.budget,children:[(0,W.jsxs)(`div`,{className:G.budgetLine,children:[(0,W.jsx)(`span`,{className:G.budgetLabel,children:m.label}),(0,W.jsx)(`span`,{className:G.budgetNote,children:m.note})]}),(0,W.jsx)(`div`,{className:G.meter,"data-state":m.state,role:`meter`,"aria-label":`Today's spend against the daily budget`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":m.percent??void 0,"aria-valuetext":`${m.label}. ${m.note}`,children:(0,W.jsx)(`div`,{className:G.meterFill,style:{width:`${m.percent??0}%`}})})]})]})}function rt({snapshot:e,guard:t,dispatchEnabled:n}){let[r,i]=(0,U.useState)(null),[a,o]=(0,U.useState)(null),{state:s}=tt(e),c=e.killSwitch?.state===`active`,l=e.killSwitch?.state===`unknown`,u=e.pause?.state??`unknown`,d=u!==`running`,f=u===`unknown`,m=!n||t.readOnly||t.busy,h=e=>o(e.note?P(e.note):null);return(0,W.jsxs)(`section`,{className:G.panel,"aria-label":`Loop controls`,children:[(0,W.jsx)(`div`,{className:G.panelHead,children:(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Controls`})}),(0,W.jsxs)(`div`,{className:G.controls,children:[d?(0,W.jsx)(`button`,{type:`button`,className:`${G.button} ${G.buttonPrimary}`,disabled:m,onClick:()=>t.request(()=>R(`resume`),`Resuming autonomous dispatch requires the dispatch token.`,h),children:`Resume`}):(0,W.jsx)(`button`,{type:`button`,className:`${G.button} ${G.buttonPrimary}`,disabled:m,onClick:()=>t.request(()=>R(`pause`),`Pausing autonomous dispatch requires the dispatch token.`,h),children:`Pause`}),(0,W.jsx)(g,{label:c?`Release the emergency stop before starting the loop.`:d?`Dispatch is paused — resume before starting the loop.`:``,children:(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:m||s===`running`||c||d,onClick:()=>t.request(()=>R(`start`),`Starting the autonomous loop requires the dispatch token.`,h),children:`Start loop`})}),(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:m||s===`stopped`,onClick:()=>i(`stop`),children:`Stop loop`}),(0,W.jsx)(g,{label:d?`Dispatch is paused — resume before running a tick.`:``,children:(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:m||c||d,onClick:()=>t.request(()=>R(`once`),`Running one tick requires the dispatch token.`,h),children:`Run one tick`})})]}),d?(0,W.jsx)(`p`,{className:G.actionNote,role:`status`,children:f?`Treated as paused — the pause sentinel is unreadable.`:`Autonomous dispatch is paused. The loop parks between ticks; your own write tools are unaffected, and the global kill switch is not engaged.`}):null,(0,W.jsx)(`div`,{className:G.emergency,children:c?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:m,onClick:()=>i(`release`),children:`Release emergency stop`}),(0,W.jsxs)(`p`,{className:G.emergencyNote,children:[`The global kill switch is engaged. The daemon refuses to tick `,(0,W.jsx)(`em`,{children:`and`}),` the agent’s own write tools refuse to edit anything, anywhere — not just in enrolled repos.`]})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{type:`button`,className:G.emergencyButton,disabled:m,onClick:()=>i(`engage`),children:`Emergency stop`}),(0,W.jsxs)(`p`,{className:G.emergencyNote,children:[`Engages the global kill switch. Wider than “stop the loop”: it also disables the agent’s own write tools everywhere until you release it. To halt only the loop, use `,(0,W.jsx)(`strong`,{children:`Pause`}),`.`,l?` The switch’s current state could not be read.`:``]})]})}),t.error&&r===null?(0,W.jsx)(`p`,{className:G.capError,role:`alert`,children:t.error}):null,a&&!t.error?(0,W.jsx)(`p`,{className:G.actionNote,role:`status`,children:a}):null,(0,W.jsx)(p,{open:r===`stop`,onClose:()=>i(null),title:`Stop the autonomous loop?`,body:(0,W.jsxs)(W.Fragment,{children:[`This is the ordinary stop, but it works by engaging the global kill switch — the same`,(0,W.jsx)(`code`,{children:` ~/.ashlr/KILL `}),` sentinel the emergency stop writes. While it is set, the agent’s own write tools also refuse to edit anything, anywhere, until you release it from this panel.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),`If you only want the loop to stop working, `,(0,W.jsx)(`strong`,{children:`Pause`}),` does exactly that and nothing else — it leaves your own tools alone and undoes in one click.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),`Nothing in flight is rolled back. The loop will not restart by itself.`]}),confirmLabel:`Stop loop`,destructive:!0,busy:t.busy,error:t.error,onConfirm:()=>t.request(()=>R(`stop`),`Stopping the autonomous loop requires the dispatch token.`,e=>{h(e),i(null)})}),(0,W.jsx)(p,{open:r===`engage`,onClose:()=>i(null),title:`Engage the emergency stop?`,body:(0,W.jsxs)(W.Fragment,{children:[`This writes the global kill switch. It stops the autonomous loop `,(0,W.jsx)(`strong`,{children:`and`}),` disables the agent’s own write tools — every edit, apply, and merge path refuses while it is engaged, in every repo, not only the enrolled ones. Nothing in flight is rolled back; nothing new can start.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),(0,W.jsx)(`strong`,{children:`Pause`}),` halts autonomous dispatch only and leaves everything else working.`,` `,(0,W.jsx)(`strong`,{children:`Stop loop`}),` is not narrower than this button: it engages the same global kill switch.`]}),confirmLabel:`Engage emergency stop`,destructive:!0,busy:t.busy,error:t.error,onConfirm:()=>t.request(async()=>{await se(),i(null)},`Engaging the emergency stop requires the dispatch token.`)}),(0,W.jsx)(p,{open:r===`release`,onClose:()=>i(null),title:`Release the emergency stop?`,body:(0,W.jsxs)(W.Fragment,{children:[`This clears the global kill switch. Write tools become usable again immediately. The autonomous loop does not restart by itself — use `,(0,W.jsx)(`strong`,{children:`Start loop`}),` when you want it running.`]}),confirmLabel:`Release emergency stop`,busy:t.busy,error:t.error,onConfirm:()=>t.request(async()=>{await re(),i(null)},`Releasing the emergency stop requires the dispatch token.`)})]})}var it={idle:`neutral`,working:`running`,saturated:`running`,queued:`warning`,unknown:`unknown`},at={running:`running`,finishing:`running`,queued:`neutral`};function ot({read:e,runtime:t,loading:n=!1}){let r=H(1e3),i=e?.value??null,a=de(t),o=i?.slotsBusy??t?.slotsBusy??null,s=ge(o,a.effectiveConcurrency),c=_e(i,s,a),l=i?ve(i.agents):[],u=i?.queueDepth??l.filter(e=>e.state===`queued`).length;return(0,W.jsxs)(`section`,{className:G.panel,"aria-labelledby":`verse-fleet-title`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{id:`verse-fleet-title`,className:G.panelTitle,children:`Fleet in flight`}),(0,W.jsx)(`p`,{className:G.panelNote,children:`Every agent mid-turn right now, what it is working on, and how long it has been at it.`})]}),n&&e===null?(0,W.jsx)(`p`,{className:G.empty,children:`Reading the fleet…`}):e===null||!e.available&&e.value===null?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`Fleet status unavailable. `}),e?.reason??null]}):i===null?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`Unreadable reading. `}),e.reason??`Unrecognized response — update Ashlr.`]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:G.pressure,"data-state":c.state,children:[(0,W.jsxs)(`span`,{className:G.pressureHead,children:[(0,W.jsx)(`span`,{className:G.pressureHeadline,children:c.headline}),(0,W.jsx)(d,{status:c.state,tone:it[c.state]??`unknown`,children:c.state})]}),(0,W.jsx)(`p`,{className:G.pressureDetail,children:c.detail})]}),(0,W.jsxs)(`div`,{className:G.fleetMeters,children:[(0,W.jsx)(I,{value:s.busy,max:s.total,label:`Slot utilisation`,valueText:s.percentText===null?`unknown`:`${s.busy} / ${s.total} · ${s.percentText}`,tone:s.saturated?`warning`:void 0}),(0,W.jsxs)(`div`,{className:G.fact,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:`Queue depth`}),(0,W.jsx)(`span`,{className:G.factValue,"data-tone":u>0?`warning`:void 0,children:i.queueDepth===null&&l.length===0?`—`:`${A(u)} waiting`})]})]}),s.saturated&&u===0?(0,W.jsx)(`p`,{className:G.capHelp,children:`Every slot is occupied. Nothing is waiting yet, but the next turn will.`}):null,l.length===0?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`Nothing in flight. `}),`No agent is mid-turn. The fleet answered and reported an empty list — an idle fleet, not a missing reading. Run one tick from Controls to put work in flight.`]}):(0,W.jsx)(`div`,{className:G.tableScroll,children:(0,W.jsxs)(`table`,{className:G.table,children:[(0,W.jsx)(`caption`,{className:G.srOnly,children:`Agents in flight: state, task, repository, model, slot and elapsed time`}),(0,W.jsx)(`thead`,{children:(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`th`,{scope:`col`,children:`State`}),(0,W.jsx)(`th`,{scope:`col`,children:`Working on`}),(0,W.jsx)(`th`,{scope:`col`,children:`Repo`}),(0,W.jsx)(`th`,{scope:`col`,children:`Model`}),(0,W.jsx)(`th`,{scope:`col`,children:`Slot`}),(0,W.jsx)(`th`,{scope:`col`,children:`Elapsed`})]})}),(0,W.jsx)(`tbody`,{children:l.map(e=>(0,W.jsx)(st,{agent:e,now:r,capacity:a},e.id))})]})}),i.notes.length>0?(0,W.jsx)(`ul`,{className:G.noteList,children:i.notes.map(e=>(0,W.jsx)(`li`,{className:G.capHelp,children:P(e)},e))}):null]})]})}function st({agent:e,now:t,capacity:n}){let r=me(e.startedAt,t),i=e.state===`queued`;return(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`td`,{children:(0,W.jsx)(d,{status:e.state,tone:at[e.state],children:e.state})}),(0,W.jsx)(`td`,{className:G.cellSummary,children:e.task??(0,W.jsx)(`span`,{className:G.capHelp,children:`not reported`})}),(0,W.jsx)(`td`,{className:G.cellRepo,title:e.repo??void 0,children:e.repo?N(e.repo):`—`}),(0,W.jsx)(`td`,{className:G.cellRepo,children:e.model??e.engine??`—`}),(0,W.jsx)(`td`,{className:G.cellTime,children:e.slot===null?i?(0,W.jsx)(`span`,{className:G.capHelp,title:n.verdict===`serialized`?`This runtime serializes, so only one slot ever frees up at a time.`:void 0,children:`no slot`}):`—`:`#${e.slot}`}),(0,W.jsxs)(`td`,{className:G.cellTime,children:[r,i?(0,W.jsx)(`span`,{className:G.elapsedQualifier,children:` queued`}):null]})]})}var X=8;function ct(){let e=c(ne),t=c(ie),n=(e.data??[]).filter(e=>e.status!==`done`&&e.status!==`archived`),r=t.data?.items??[];return(0,W.jsxs)(`section`,{className:G.panel,"aria-label":`Goals and backlog`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Goals and backlog`}),(0,W.jsx)(`p`,{className:G.panelNote,children:`Read-only in this view.`})]}),(0,W.jsxs)(`div`,{className:G.summaryColumns,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`p`,{className:G.factLabel,children:`Active goals`}),e.status===`loading`?(0,W.jsxs)(`div`,{className:G.skeletons,children:[(0,W.jsx)(a,{}),(0,W.jsx)(a,{})]}):e.status===`error`?(0,W.jsx)(`p`,{className:G.error,role:`alert`,children:e.error?.message??`Could not read goals.`}):n.length===0?(0,W.jsxs)(`p`,{className:G.empty,children:[`No active goals, so the loop falls back to the backlog for work. Add one with`,` `,(0,W.jsx)(`code`,{children:`ashlr goals add "<objective>"`}),`.`]}):(0,W.jsxs)(`div`,{className:G.summaryList,children:[n.slice(0,X).map(e=>{let t=O(e.progress?.fractionDone??0);return(0,W.jsxs)(`div`,{className:G.summaryRow,children:[(0,W.jsx)(`span`,{className:G.summaryTitle,title:e.objective,children:e.objective}),(0,W.jsxs)(`span`,{className:G.summaryMeta,children:[t,` · `,e.status]})]},e.id)}),n.length>X?(0,W.jsxs)(`p`,{className:G.panelNote,children:[`+`,n.length-X,` more`]}):null]})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`p`,{className:G.factLabel,children:`Backlog`}),t.status===`loading`?(0,W.jsxs)(`div`,{className:G.skeletons,children:[(0,W.jsx)(a,{}),(0,W.jsx)(a,{})]}):t.status===`error`?(0,W.jsx)(`p`,{className:G.error,role:`alert`,children:t.error?.message??`Could not read the backlog.`}):t.data?.absent?(0,W.jsxs)(`p`,{className:G.empty,children:[`No backlog has been built yet. Run one tick from Controls, or `,(0,W.jsx)(`code`,{children:`ashlr backlog`}),`, to produce one.`]}):r.length===0?(0,W.jsxs)(`p`,{className:G.empty,children:[`The backlog is empty, so a tick records `,(0,W.jsx)(`code`,{children:`no-backlog`}),` and idles. Enroll another repository in Scope, or add a goal, to give it work.`]}):(0,W.jsxs)(`div`,{className:G.summaryList,children:[r.slice(0,X).map((e,t)=>(0,W.jsxs)(`div`,{className:G.summaryRow,children:[(0,W.jsx)(`span`,{className:G.summaryTitle,title:e.title,children:e.title??e.id??`untitled item`}),(0,W.jsxs)(`span`,{className:G.summaryMeta,title:e.repo??void 0,children:[e.repo?N(e.repo):`—`,typeof e.score==`number`?` · ${e.score}`:``]})]},e.id??`${e.title??`item`}-${t}`)),r.length>X?(0,W.jsxs)(`p`,{className:G.panelNote,children:[`+`,r.length-X,` more`]}):null]})]})]})]})}function lt({read:e,seats:t,guard:n,dispatchEnabled:r,loading:i=!1}){let[a,o]=(0,U.useState)(!1),[s,c]=(0,U.useState)(null),l=e?.value??null,u=ue(l,t),f=he(l),m=l?.enabled??!1,h=!r||n.readOnly||n.busy||!(l?.mutable??!1),g=e=>{n.request(()=>Ce(e),e?`Turning local-only on requires the dispatch token.`:`Turning local-only off requires the dispatch token.`,e=>{c(e.note?P(e.note):null),o(!1)})};return(0,W.jsxs)(`section`,{className:G.panel,"aria-labelledby":`verse-local-only-title`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{id:`verse-local-only-title`,className:G.panelTitle,children:`Local only`}),(0,W.jsx)(`p`,{className:G.panelNote,children:`While on, cloud engines are unreachable.`})]}),i&&e===null?(0,W.jsx)(`p`,{className:G.empty,children:`Reading the local-only policy…`}):e===null||l===null?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`No local-only source. `}),e?.reason??`Nothing answered for the local-only policy, so whether cloud engines are reachable cannot be stated here. It is not shown as off — an unread switch is not a switch that is off.`]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:G.toggleRow,children:[(0,W.jsx)(`span`,{className:G.toggleState,"data-on":m?`true`:`false`,children:(0,W.jsx)(d,{status:m?`local-only-on`:`local-only-off`,tone:m?`success`:`neutral`,children:m?`on — cloud refused`:`off — cloud reachable`})}),(0,W.jsx)(`button`,{type:`button`,className:`${G.button} ${m?``:G.buttonPrimary}`,disabled:h,"aria-pressed":m,onClick:()=>m?g(!1):o(!0),children:m?`Turn local-only off`:`Turn local-only on`})]}),(0,W.jsx)(`p`,{className:G.policyExplain,children:m?(0,W.jsxs)(W.Fragment,{children:[`Every non-local engine is `,(0,W.jsx)(`strong`,{children:`refused at dispatch`}),`. A turn sent to one does not fall back, does not queue, and does not run more slowly — it fails with a named refusal. Nothing can spend money while this is on.`]}):(0,W.jsxs)(W.Fragment,{children:[`Cloud engines are reachable. Turning this on makes them `,(0,W.jsx)(`strong`,{children:`unreachable`}),`: a dispatch to one fails outright.`]})}),f?(0,W.jsx)(`p`,{className:G.capHelp,children:f}):null,!l.mutable&&r&&!n.readOnly?(0,W.jsx)(`p`,{className:G.actionNote,role:`status`,children:`Read-only here.`}):null,(0,W.jsxs)(`div`,{className:G.impact,children:[(0,W.jsx)(`h4`,{className:G.impactTitle,children:m?`What is blocked right now`:`What this would block`}),(0,W.jsx)(`p`,{className:G.impactSummary,children:u.summary}),u.blocked.length>0?(0,W.jsx)(`ul`,{className:G.seatList,children:u.blocked.map(e=>(0,W.jsxs)(`li`,{className:G.seatRow,children:[(0,W.jsx)(`span`,{className:G.seatEngine,"data-engine":e.engine,children:e.engine}),(0,W.jsx)(`span`,{className:G.seatLabel,children:e.label}),(0,W.jsx)(`span`,{className:G.seatRefusal,children:u.refusalFor(e.engine)})]},e.id))}):null,u.allowed.length>0?(0,W.jsxs)(`p`,{className:G.capHelp,children:[`Still reachable:`,` `,u.allowed.map(e=>e.label).join(`, `),`. Local seats cost nothing to run and are unaffected by this switch.`]}):(0,W.jsx)(`p`,{className:G.capHelp,children:`No local seat is configured. With local-only on there would be nothing left to dispatch to — add a local seat before relying on this switch.`})]}),s&&!n.error?(0,W.jsx)(`p`,{className:G.actionNote,role:`status`,children:s}):null,n.error&&!a?(0,W.jsx)(`p`,{className:G.capError,role:`alert`,children:n.error}):null,(0,W.jsx)(p,{open:a,onClose:()=>o(!1),title:`Make cloud engines unreachable?`,body:(0,W.jsxs)(W.Fragment,{children:[`While local-only is on, a dispatch to a non-local engine `,(0,W.jsx)(`strong`,{children:`fails`}),` with a named refusal — no fallback to a local seat, no waiting.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),u.blocked.length===0?`No seat on this machine is affected today: every configured seat is local.`:`${u.blocked.length} of your ${t.length} ${t.length===1?`seat`:`seats`} ${u.blocked.length===1?`stops`:`stop`} working: ${u.blocked.map(e=>e.label).join(`, `)}.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),`It is reversible from this panel at any time.`]}),confirmLabel:`Turn local-only on`,busy:n.busy,error:n.error,onConfirm:()=>g(!0)})]})]})}var ut={running:`success`,starting:`running`,stopping:`running`,stopped:`neutral`,unknown:`unknown`},dt={success:`success`,warning:`warning`,danger:`danger`,neutral:`neutral`,unknown:`unknown`},ft=/^local lane is off this tick: (.+)$/s,pt=/^lane cap (\d+) is below (\d+) \([^)]*\): (.+)$/s;function mt(e){let t=e?.find(e=>typeof e==`string`&&e.startsWith(`bounded by this tick's lane cap, not by slots: `));if(!t)return null;let n=t.slice(47).trim(),r=ft.exec(n);if(r)return{off:!0,limit:null,uncapped:null,why:j(P(r[1]))};let i=pt.exec(n);return i?{off:!1,limit:Number(i[1]),uncapped:Number(i[2]),why:j(P(i[3]))}:{off:!1,limit:null,uncapped:null,why:j(P(n))}}function ht(){return(0,U.useSyncExternalStore)((0,U.useCallback)(e=>l(`verse-fleet`,e),[]),()=>i(`verse-fleet`),()=>i(`verse-fleet`)).data??null}function gt({read:e,guard:t,dispatchEnabled:n,loading:r=!1,fleet:i}){let a=H(1e3),o=ht(),s=i===void 0?o:i,c=mt(s?.value?.notes),l=s?.value?.notes.some(e=>e.startsWith(`snapshot is `))??!1,[u,f]=(0,U.useState)(null),[m,h]=(0,U.useState)(null),g=e?.value??null,_=de(g),y=ge(g?.slotsBusy??null,_.effectiveConcurrency),b=!n||t.readOnly,x=g?.supervised??!1,S=b||t.busy||!x,C=g?.state===`running`,w=(e,n)=>{t.request(()=>xe(e),n,e=>{h(e.note?P(e.note):null),f(null)})};return(0,W.jsxs)(`section`,{className:G.panel,"aria-labelledby":`verse-runtime-title`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{id:`verse-runtime-title`,className:G.panelTitle,children:`Serving runtime`}),(0,W.jsx)(`p`,{className:G.panelNote,children:`The process that answers local agent turns. Without it, a local fleet has nowhere to run.`})]}),r&&e===null?(0,W.jsx)(`p`,{className:G.empty,children:`Reading the serving runtime…`}):e===null||!e.available&&e.value===null?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`No serving-runtime source. `}),e?.reason??`Serving runtime unavailable.`]}):g===null?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`Unreadable reading. `}),e.reason??`Unrecognized response — update Ashlr.`]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:G.runtimeTop,children:[(0,W.jsxs)(`span`,{className:G.runtimeState,"data-state":g.state,children:[(0,W.jsx)(`span`,{className:G.runDot,"aria-hidden":`true`}),(0,W.jsxs)(`span`,{className:G.runtimeStateText,children:[fe(g.kind),` · `,g.state===`unknown`?`state unknown`:g.state]})]}),(0,W.jsx)(d,{status:g.state,tone:ut[g.state],children:g.state===`running`?`serving`:g.state}),g.reason?(0,W.jsx)(`code`,{className:G.evidenceCode,children:P(g.reason)}):null]}),(0,W.jsxs)(`div`,{className:G.facts,children:[(0,W.jsx)(Z,{label:`Model`,value:g.model??`—`,wide:!0}),(0,W.jsx)(Z,{label:`Endpoint`,value:g.endpoint??`—`,mono:!0}),(0,W.jsx)(Z,{label:`Context`,value:v(g.contextTokens)}),(0,W.jsx)(Z,{label:`Slots configured`,value:g.slotsTotal===null?`—`:String(g.slotsTotal)}),(0,W.jsx)(Z,{label:`Uptime`,value:C?pe(g.startedAt,a):`not running`})]}),(0,W.jsxs)(`div`,{className:G.capacityBlock,"data-verdict":_.verdict,children:[(0,W.jsxs)(`div`,{className:G.capacityHead,children:[(0,W.jsx)(`span`,{className:G.capacityBig,children:_.effectiveConcurrency===null?`—`:_.effectiveConcurrency}),(0,W.jsxs)(`div`,{className:G.capacityWords,children:[(0,W.jsxs)(`span`,{className:G.capacityHeadline,children:[_.headline,(0,W.jsx)(d,{status:_.verdict,tone:dt[_.tone],children:_.verdict===`batched`?`batches`:_.verdict===`serialized`?`serializes`:_.verdict===`offline`?`not serving`:`unconfirmed`})]}),(0,W.jsx)(`span`,{className:G.capacityDetail,children:_.detail})]})]}),c?(0,W.jsxs)(`p`,{className:G.capacityDetail,"data-limiter":`lane-cap`,role:`note`,children:[(0,W.jsx)(d,{status:`lane-cap`,tone:c.off?`neutral`:`warning`,children:c.off?`lane off`:`lane-capped`}),` `,c.off?`The fleet runs no local agent ${l?`as of its last tick`:`this tick`}: ${E(c.why)}`:`The fleet runs ${c.limit===null?`fewer`:`at most ${c.limit}`} local ${c.limit===1?`agent`:`agents`} ${l?`as of its last tick`:`this tick`}${c.uncapped===null?``:`, not ${c.uncapped}`} — a lane cap is tighter than this runtime: ${E(c.why)}`]}):null,_.overstated?(0,W.jsx)(_t,{configured:_.configuredSlots,refusal:g.parallel.refusal}):null]}),(0,W.jsxs)(`div`,{className:G.utilisation,children:[(0,W.jsx)(I,{value:y.busy,max:y.total,label:`Slots in use`,valueText:y.percent===null?`unknown`:`${y.busy} / ${y.total}`,tone:y.saturated?`warning`:void 0}),(0,W.jsx)(`p`,{className:G.capHelp,children:y.label})]}),(0,W.jsxs)(`div`,{className:G.controls,children:[(0,W.jsx)(`button`,{type:`button`,className:`${G.button} ${G.buttonPrimary}`,disabled:S||C,onClick:()=>w(`start`,`Starting the serving runtime requires the dispatch token.`),children:`Start runtime`}),(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:S||!C,onClick:()=>f(`stop`),children:`Stop runtime`}),(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:S,onClick:()=>f(`restart`),children:`Restart runtime`})]}),x?null:(0,W.jsx)(`p`,{className:G.actionNote,role:`status`,children:`Managed outside the hub (a login item or terminal owns it) — start and stop it there.`}),m&&!t.error?(0,W.jsx)(`p`,{className:G.actionNote,role:`status`,children:m}):null,t.error&&u===null?(0,W.jsx)(`p`,{className:G.capError,role:`alert`,children:t.error}):null,(0,W.jsx)(p,{open:u===`stop`,onClose:()=>f(null),title:`Stop the serving runtime?`,body:(0,W.jsxs)(W.Fragment,{children:[`Every local agent turn in flight is answered by this process. Stopping it ends those turns — nothing in flight is rolled back, and no local seat can take a new turn until it is running again.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),`This does not touch the autonomous loop, the kill switch, or your own write tools.`]}),confirmLabel:`Stop runtime`,destructive:!0,busy:t.busy,error:t.error,onConfirm:()=>w(`stop`,`Stopping the serving runtime requires the dispatch token.`)}),(0,W.jsx)(p,{open:u===`restart`,onClose:()=>f(null),title:`Restart the serving runtime?`,body:(0,W.jsxs)(W.Fragment,{children:[`The process is stopped and started again. Turns in flight end with it, and the first turn afterwards pays the model load — on a 27 GB model that is not instant.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),`Restart is the way to pick up a changed slot count or context size, since both are fixed at launch.`]}),confirmLabel:`Restart runtime`,destructive:!0,busy:t.busy,error:t.error,onConfirm:()=>w(`restart`,`Restarting the serving runtime requires the dispatch token.`)})]})]})}function _t({configured:e,refusal:t}){return(0,W.jsxs)(`div`,{className:G.evidence,children:[(0,W.jsx)(`p`,{className:G.evidenceLead,children:e===null?`The configured slot count is not a concurrency on this runtime.`:`${e} slots are configured, but this runtime will not run them in parallel. Measured on this machine, four concurrent requests to the same model:`}),(0,W.jsx)(`div`,{className:G.evidenceScroll,children:(0,W.jsxs)(`table`,{className:G.evidenceTable,children:[(0,W.jsx)(`caption`,{className:G.srOnly,children:`Four concurrent requests to the same Qwen3.8 model file, per-runtime completion times in seconds`}),(0,W.jsx)(`thead`,{children:(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`th`,{scope:`col`,children:`Runtime`}),(0,W.jsx)(`th`,{scope:`col`,children:`Per request (s)`}),(0,W.jsx)(`th`,{scope:`col`,children:`Wall (s)`}),(0,W.jsx)(`th`,{scope:`col`,children:`Finished`})]})}),(0,W.jsx)(`tbody`,{children:ye.map(e=>(0,W.jsxs)(`tr`,{children:[(0,W.jsx)(`th`,{scope:`row`,children:e.runtime}),(0,W.jsx)(`td`,{className:G.evidenceNums,children:e.perRequestSeconds.join(` · `)}),(0,W.jsx)(`td`,{className:G.evidenceNums,children:e.wallSeconds.toFixed(1)}),(0,W.jsx)(`td`,{children:e.verdict})]},e.runtime))})]})}),t?(0,W.jsxs)(`p`,{className:G.capHelp,children:[`The runtime’s own words: `,(0,W.jsx)(`code`,{className:G.evidenceCode,children:t})]}):null]})}function Z({label:e,value:t,mono:n=!1,wide:r=!1}){return(0,W.jsxs)(`div`,{className:`${G.fact} ${r?G.factWide:``}`,children:[(0,W.jsx)(`span`,{className:G.factLabel,children:e}),(0,W.jsx)(`span`,{className:`${G.factValue} ${n?G.factMono:``}`,title:n||r?t:void 0,children:t})]})}var Q={armedTop:`_armedTop_8ujh1_22`,armedState:`_armedState_8ujh1_30`,haltRow:`_haltRow_8ujh1_36`,haltNote:`_haltNote_8ujh1_43`,heavier:`_heavier_8ujh1_53`,facts:`_facts_8ujh1_69`,fact:`_fact_8ujh1_69`,factWide:`_factWide_8ujh1_83`,factLabel:`_factLabel_8ujh1_87`,factValue:`_factValue_8ujh1_95`,factMono:`_factMono_8ujh1_106`,stop:`_stop_8ujh1_112`,stopHead:`_stopHead_8ujh1_121`,stopHeadline:`_stopHeadline_8ujh1_129`,stopRemaining:`_stopRemaining_8ujh1_137`,stopDetail:`_stopDetail_8ujh1_146`,ledger:`_ledger_8ujh1_154`,ledgerTitle:`_ledgerTitle_8ujh1_158`,ledgerCount:`_ledgerCount_8ujh1_171`,ledgerEmpty:`_ledgerEmpty_8ujh1_177`,ledgerList:`_ledgerList_8ujh1_183`,ledgerRow:`_ledgerRow_8ujh1_189`,ledgerRepo:`_ledgerRepo_8ujh1_203`,ledgerChange:`_ledgerChange_8ujh1_212`,ledgerMeta:`_ledgerMeta_8ujh1_222`,form:`_form_8ujh1_232`,field:`_field_8ujh1_239`,fieldLabel:`_fieldLabel_8ujh1_246`,input:`_input_8ujh1_254`,rulePreview:`_rulePreview_8ujh1_277`,armRow:`_armRow_8ujh1_285`,authorisation:`_authorisation_8ujh1_17`,authorisationTitle:`_authorisationTitle_8ujh1_305`,authorisationBody:`_authorisationBody_8ujh1_315`,authorisationCaveat:`_authorisationCaveat_8ujh1_327`},vt=[{value:`until-paused`,label:`Until I pause it`},{value:`at-time`,label:`At a time`},{value:`after-iterations`,label:`After N iterations`}],yt=`07:00`,bt=`20`;function xt({read:e,snapshot:t,guard:n,dispatchEnabled:r,loading:i=!1}){let a=H(1e3),[o,s]=(0,U.useState)(`until-paused`),[c,l]=(0,U.useState)(yt),[u,f]=(0,U.useState)(bt),[p,m]=(0,U.useState)(null),[h,_]=(0,U.useState)(null),v=e=>_(e?P(e):null),b=e?.value??null,x=b?.run??null,S=t.pause?.state??`unknown`,C=S!==`running`,w=S===`unknown`,T=t.killSwitch?.state===`active`,E=!r||n.readOnly,D=E||n.busy,O=b?.repos??t.scope?.repos?.length??null,k=b?.mirrors,A=b?.gate??null,M=Pe(A),F=De(A),ee=A?.branch??`master`,L=St(o,c,u),z=Oe(x?.stopRule??null,x,a),te=E?`This server runs without dispatch, so an overnight run cannot be armed from here.`:T?`Release the emergency stop before arming an overnight run.`:``,ne=()=>{m(null),n.request(()=>R(`pause`),`Pausing autonomous dispatch requires the dispatch token.`,e=>v(e.note||null))},B=()=>{m(null),n.request(()=>R(`resume`),`Resuming autonomous dispatch requires the dispatch token.`,e=>v(e.note||null))},re=()=>{if(L===null){m(o===`at-time`?`Enter a stop time as HH:MM before arming.`:`Enter a number of iterations between 1 and 500 before arming.`);return}m(null),n.request(()=>Fe(L),`Arming an overnight run requires the dispatch token.`,e=>v(e.note||null))},ie=()=>{m(null),n.request(()=>je(),`Disarming the overnight run requires the dispatch token.`,e=>v(e.note||null))},V=(0,W.jsxs)(`div`,{className:Q.authorisation,children:[(0,W.jsx)(`h4`,{className:Q.authorisationTitle,children:`What it does while you sleep`}),(0,W.jsxs)(`p`,{className:Q.authorisationBody,children:[`Local models work through`,` `,(0,W.jsx)(`strong`,{children:O===null?`your enrolled repositories`:`your ${O} enrolled ${O===1?`repository`:`repositories`}`}),` `,`unattended. Each change it writes is put through the gate`,M.length>0?(0,W.jsxs)(W.Fragment,{children:[` `,`— `,(0,W.jsx)(`strong`,{children:Ae(M)}),` must pass`]}):null,`. A change that passes the gate is `,(0,W.jsxs)(`strong`,{children:[`merged to `,ee,` without asking you`]}),`. A change that fails is discarded and the repository is left as it was.`]}),typeof k==`number`&&k>0?(0,W.jsxs)(`p`,{className:Q.authorisationBody,"data-testid":`overnight-mirrors`,children:[`Fleet mirrors: `,(0,W.jsx)(`strong`,{children:k}),` — the standing fleet’s own`,` `,k===1?`clone`:`clones`,` of enrolled repositories, counted apart. A mirror is not an additional repository.`]}):k===null&&b?.armed?(0,W.jsx)(`p`,{className:Q.authorisationCaveat,"data-testid":`overnight-mirrors`,children:`Fleet mirrors were not recorded for this run, so how many the standing fleet works in is unknown.`}):null,F.length>0?(0,W.jsxs)(`p`,{className:Q.authorisationCaveat,children:[`Not reported whether `,Ae(F),` `,F.length===1?`runs`:`run`,` in the gate — don't count `,F.length===1?`it`:`them`,` as passing.`]}):null,A?.autoMerge===!1?(0,W.jsxs)(`p`,{className:Q.authorisationCaveat,children:[`This build reports that passing changes are `,(0,W.jsx)(`strong`,{children:`not`}),` merged automatically — they wait for you in Approvals.`]}):null]});return(0,W.jsxs)(`section`,{className:G.panel,"aria-labelledby":`verse-overnight-title`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{id:`verse-overnight-title`,className:G.panelTitle,children:`Overnight`}),(0,W.jsx)(`p`,{className:G.panelNote,children:`Arm this when you walk away. One stop rule per run; pause halts it at any time.`})]}),i&&e===null?(0,W.jsx)(`p`,{className:G.empty,children:`Reading the overnight lane…`}):e===null||!e.available&&e.value===null?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`Not available in this build. `}),e?.reason??`Nothing answered for the overnight lane, so a run cannot be armed or reported here. Nothing is running because of this panel.`]}):b===null?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`Unreadable reading. `}),e.reason??`Unrecognized response — update Ashlr.`]}):b.armed?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:Q.armedTop,children:[(0,W.jsx)(`span`,{className:Q.armedState,children:(0,W.jsx)(d,{status:C?`paused`:`running`,tone:C?`warning`:`running`,children:C?`armed — dispatch paused`:`armed — running`})}),(0,W.jsxs)(`div`,{className:Q.haltRow,children:[C?(0,W.jsx)(`button`,{type:`button`,className:`${G.button} ${G.buttonPrimary}`,disabled:D,onClick:B,children:`Resume now`}):(0,W.jsx)(`button`,{type:`button`,className:`${G.button} ${G.buttonPrimary}`,disabled:D,onClick:ne,children:`Pause now`}),(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:D,onClick:ie,children:`Disarm`})]})]}),(0,W.jsx)(`p`,{className:Q.haltNote,children:C?w?`Treated as paused — the pause sentinel is unreadable. Nothing is being dispatched.`:`Autonomous dispatch is paused. The loop parks between iterations; your own write tools are unaffected and the global kill switch is not engaged.`:`Pause halts autonomous dispatch and nothing else — it undoes in one click. Disarm stops the next run from starting but leaves this one going.`}),(0,W.jsxs)(`dl`,{className:Q.facts,children:[(0,W.jsx)(wt,{label:`Doing now`,value:x?.activity?P(x.activity):`—`,wide:!0}),(0,W.jsx)(wt,{label:`Repository`,value:x?.repo?N(x.repo):`—`,title:x?.repo??void 0,mono:!0}),(0,W.jsx)(wt,{label:`Running for`,value:Me(x?.startedAt,a)})]}),(0,W.jsxs)(`div`,{className:Q.stop,children:[(0,W.jsxs)(`div`,{className:Q.stopHead,children:[(0,W.jsx)(`span`,{className:Q.stopHeadline,children:z.headline}),(0,W.jsx)(`span`,{className:Q.stopRemaining,children:z.remaining})]}),z.percent===null?(0,W.jsx)(`p`,{className:Q.stopDetail,children:`No progress is drawn for an open-ended run: there is no finish line to draw it against.`}):(0,W.jsx)(I,{value:z.percent,max:100,variant:`line`,tone:z.reached?`warning`:`accent`,"aria-label":`Progress toward the stop condition`})]}),(0,W.jsx)(Tt,{title:`Merged`,empty:`Nothing merged yet. Changes that pass the gate land here as they merge.`,rows:(x?.merged??[]).map(e=>({id:e.id,repo:e.repo,title:e.title,meta:Ct(e.commit?e.commit.slice(0,7):null,e.at),metaTitle:e.commit??void 0}))}),(0,W.jsx)(Tt,{title:`Discarded`,empty:`Nothing discarded yet. A change that fails the gate is listed here with the reason.`,rows:(x?.discarded??[]).map(e=>({id:e.id,repo:e.repo,title:e.title,meta:Ct(j(P(e.reason)),e.at)}))}),V]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:Q.form,children:[(0,W.jsxs)(`div`,{className:Q.field,children:[(0,W.jsx)(`span`,{className:Q.fieldLabel,id:`verse-overnight-stop-label`,children:`Stop rule`}),(0,W.jsx)(y,{options:vt,value:o,onChange:e=>{s(e),m(null)},"aria-labelledby":`verse-overnight-stop-label`,size:`sm`})]}),o===`at-time`?(0,W.jsxs)(`div`,{className:Q.field,children:[(0,W.jsx)(`label`,{className:Q.fieldLabel,htmlFor:`verse-overnight-time`,children:`Stop at`}),(0,W.jsx)(`input`,{id:`verse-overnight-time`,type:`time`,className:Q.input,value:c,disabled:D,onChange:e=>{l(e.target.value),m(null)}})]}):null,o===`after-iterations`?(0,W.jsxs)(`div`,{className:Q.field,children:[(0,W.jsx)(`label`,{className:Q.fieldLabel,htmlFor:`verse-overnight-iterations`,children:`Iterations`}),(0,W.jsx)(`input`,{id:`verse-overnight-iterations`,type:`number`,inputMode:`numeric`,min:1,max:500,className:Q.input,value:u,disabled:D,onChange:e=>{f(e.target.value),m(null)}})]}):null]}),(0,W.jsx)(`p`,{className:Q.rulePreview,children:L===null?o===`at-time`?`Enter a stop time as HH:MM.`:`Enter a number of iterations between 1 and 500.`:Ee(L,new Date(a))}),V,(0,W.jsxs)(`div`,{className:Q.armRow,children:[(0,W.jsx)(g,{label:te,children:(0,W.jsx)(`button`,{type:`button`,className:`${G.button} ${G.buttonPrimary}`,disabled:D||T,onClick:re,children:`Arm overnight run`})}),C?(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:D,onClick:B,children:`Resume now`}):null]}),C?(0,W.jsx)(`p`,{className:Q.haltNote,role:`status`,children:w?`Treated as paused — the pause sentinel is unreadable. An armed run would park until that is fixed.`:`Autonomous dispatch is paused, so an armed run would park. Resume before walking away.`}):null,(0,W.jsxs)(`p`,{className:Q.heavier,children:[`Pause is the halt for this run and it undoes in one click.`,` `,(0,W.jsx)(`strong`,{children:`Emergency stop`}),`, in Controls above, is heavier on purpose: it engages the global kill switch, which also stops the agent’s own write tools from editing anything, anywhere, until you release it.`]})]}),p?(0,W.jsx)(`p`,{className:G.capError,role:`alert`,children:p}):null,n.error?(0,W.jsx)(`p`,{className:G.capError,role:`alert`,children:n.error}):null,h&&!n.error?(0,W.jsx)(`p`,{className:G.actionNote,role:`status`,children:h}):null]})}function St(e,t,n){if(e===`until-paused`)return{kind:`until-paused`};if(e===`at-time`){let e=Ie(t);return e===null?null:{kind:`at-time`,at:e}}let r=Number(n);return!Number.isInteger(r)||r<1||r>500?null:{kind:`after-iterations`,iterations:r}}function Ct(e,t){let n=t?x(t):null;return[e,n===`—`?null:n].filter(e=>!!e).join(` · `)}function wt({label:e,value:t,title:n,mono:r=!1,wide:i=!1}){return(0,W.jsxs)(`div`,{className:`${Q.fact} ${i?Q.factWide:``}`,children:[(0,W.jsx)(`dt`,{className:Q.factLabel,children:e}),(0,W.jsx)(`dd`,{className:`${Q.factValue} ${r?Q.factMono:``}`,title:n??(r||i?t:void 0),children:t})]})}function Tt({title:e,empty:t,rows:n}){return(0,W.jsxs)(`div`,{className:Q.ledger,children:[(0,W.jsxs)(`h4`,{className:Q.ledgerTitle,children:[e,` `,(0,W.jsx)(`span`,{className:Q.ledgerCount,children:n.length})]}),n.length===0?(0,W.jsx)(`p`,{className:Q.ledgerEmpty,children:t}):(0,W.jsx)(`ul`,{className:Q.ledgerList,children:n.map(e=>(0,W.jsxs)(`li`,{className:Q.ledgerRow,children:[(0,W.jsx)(`span`,{className:Q.ledgerRepo,title:e.repo,children:N(e.repo)}),(0,W.jsx)(`span`,{className:Q.ledgerChange,children:e.title}),e.meta?(0,W.jsx)(`span`,{className:Q.ledgerMeta,title:e.metaTitle,children:e.meta}):null]},e.id))})]})}function Et(){let e=c(oe),t=o(oe),n=e.data,r=n?.checks?.filter(e=>e.pass).length??0,i=n?.checks?.length??0;return(0,W.jsxs)(`section`,{className:G.panel,"aria-label":`Safety checks`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Safety`}),(0,W.jsxs)(`div`,{className:G.panelActions,children:[e.status===`refreshing`?(0,W.jsx)(m,{}):null,n?(0,W.jsxs)(`span`,{className:G.panelNote,children:[r,`/`,i,` passing`]}):null,(0,W.jsx)(`button`,{type:`button`,className:G.button,onClick:t,disabled:e.status===`loading`,children:`Re-run checks`})]})]}),e.status===`loading`?(0,W.jsxs)(`div`,{className:G.skeletons,children:[(0,W.jsx)(s,{width:`70%`}),(0,W.jsx)(s,{width:`55%`}),(0,W.jsx)(s,{width:`62%`})]}):e.status===`error`?(0,W.jsx)(`p`,{className:G.error,role:`alert`,children:e.error?.message??`Could not run the safety checks.`}):!n||i===0?(0,W.jsxs)(`p`,{className:G.empty,children:[`The safety report came back with no checks. Press `,(0,W.jsx)(`strong`,{children:`Re-run checks`}),`; if it stays empty, treat it as a failure.`]}):(0,W.jsx)(`div`,{className:G.checkList,children:n.checks.map(e=>(0,W.jsxs)(`div`,{className:G.check,"data-pass":e.pass,children:[(0,W.jsx)(`span`,{className:G.checkMark,"aria-hidden":`true`,children:e.pass?`✓`:`✕`}),(0,W.jsxs)(`span`,{className:G.checkLabel,children:[e.label,(0,W.jsx)(`span`,{className:G.srOnly,children:e.pass?` — passed`:` — failed`})]}),(0,W.jsx)(`span`,{className:G.checkDetail,children:e.detail?P(e.detail):e.id})]},e.id))})]})}function Dt(e){let t=e.trim();return t===``?`Enter the absolute path of the repository to enroll.`:t.startsWith(`/`)?t===`/`?`The filesystem root cannot be enrolled as autonomous scope.`:/(^|\/)\.codex\/artifacts(\/|$)/.test(t)?`Paths under ~/.codex/artifacts cannot be enrolled.`:/(^|\/)\.ashlr(\/|$)/.test(t)?`Paths under ~/.ashlr cannot be enrolled — that is the agent’s own control directory.`:null:`Enrollment takes an absolute path, e.g. /Users/you/code/project.`}function Ot({path:e,scope:t}){let n=t?.entries.find(t=>t.path===e)??null;if(n===null)return null;let r=n.priority!==`normal`;return!r&&n.sections.length===0?null:(0,W.jsxs)(`span`,{className:G.repoStanding,title:ee,children:[r?(0,W.jsx)(`span`,{className:G.repoPriority,children:F[n.priority]}):null,n.sections.map(e=>(0,W.jsx)(`span`,{className:G.repoSection,children:e.name},e.id)),n.outsideFocus?(0,W.jsx)(`span`,{className:G.repoOutsideFocus,children:`outside the focused section`}):null]})}function kt({guard:e,dispatchEnabled:t}){let n=c(V),r=c(_),[i,o]=(0,U.useState)(``),[s,l]=(0,U.useState)(null),[u,d]=(0,U.useState)(null),[f,h]=(0,U.useState)(null),g=!t||e.readOnly;function v(){let e=Dt(i);if(e){l(e);return}l(null),h(i.trim())}function y(){let t=f;t&&e.request(async()=>{await ce({action:`enroll`,path:t}),o(``),h(null)},`Enrolling a repository for autonomous work requires the dispatch token.`)}let b=n.data?.repos??[];return(0,W.jsxs)(`section`,{className:G.panel,"aria-label":`Scope`,children:[(0,W.jsxs)(`div`,{className:G.panelHead,children:[(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Scope — enrolled repositories`}),n.status===`refreshing`?(0,W.jsx)(m,{}):null]}),n.data?.degradedReason?(0,W.jsxs)(`p`,{className:G.readOnly,children:[`The enrollment registry read is degraded: `,P(n.data.degradedReason)]}):null,n.status===`loading`?(0,W.jsxs)(`div`,{className:G.skeletons,children:[(0,W.jsx)(a,{}),(0,W.jsx)(a,{})]}):n.status===`error`?(0,W.jsx)(`p`,{className:G.error,role:`alert`,children:n.error?.message??`Could not read the enrollment registry.`}):b.length===0?(0,W.jsxs)(`p`,{className:G.empty,children:[(0,W.jsx)(`span`,{className:G.emptyStrong,children:`No repositories are enrolled, so the daemon will do nothing.`}),` `,`That is the default and it is not a bug — nothing autonomous can mutate a real repository until you enroll it here. Add one below to give the loop somewhere to work.`]}):(0,W.jsx)(`div`,{className:G.repoList,children:b.map(t=>(0,W.jsxs)(`div`,{className:G.repoRow,children:[(0,W.jsx)(`span`,{className:G.repoName,children:t.name}),(0,W.jsx)(`span`,{className:G.repoPath,title:t.path,children:(0,W.jsx)(`bdi`,{children:t.path})}),t.exists?null:(0,W.jsx)(`span`,{className:G.repoMissing,children:`⚠ path missing on disk`}),(0,W.jsx)(Ot,{path:t.path,scope:r.data??null}),(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:g||e.busy,onClick:()=>d(t),children:`Remove`})]},t.path))}),(0,W.jsxs)(`div`,{className:G.addRow,children:[(0,W.jsx)(`input`,{className:G.addInput,type:`text`,value:i,placeholder:`/absolute/path/to/repository`,"aria-label":`Repository path to enroll`,"aria-invalid":s?!0:void 0,disabled:g||e.busy,onChange:e=>{o(e.target.value),s&&l(null)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),v())}}),(0,W.jsx)(`button`,{type:`button`,className:G.button,disabled:g||e.busy,onClick:v,children:`Enroll repository`})]}),s?(0,W.jsx)(`p`,{className:G.capError,role:`alert`,children:s}):null,e.error&&!s?(0,W.jsx)(`p`,{className:G.capError,role:`alert`,children:e.error}):null,(0,W.jsx)(p,{open:f!==null,onClose:()=>h(null),title:`Give the autonomous loop write authority here?`,body:(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`code`,{children:f}),` becomes autonomous scope. The loop may propose work against it, and the agent’s own MCP-native write tools will act on it — enrolment is the gate those tools check.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`br`,{}),`Nothing is written by enrolling. You can remove it again from this panel at any time.`]}),confirmLabel:`Enroll repository`,busy:e.busy,error:e.error,onConfirm:y}),(0,W.jsx)(p,{open:u!==null,onClose:()=>d(null),title:`Remove this repository from scope?`,body:(0,W.jsxs)(W.Fragment,{children:[`The autonomous loop will stop proposing work for `,(0,W.jsx)(`code`,{children:u?.path}),`. Existing proposals stay in the inbox; nothing on disk is changed or deleted.`]}),confirmLabel:`Remove from scope`,destructive:!0,busy:e.busy,error:e.error,onConfirm:()=>{let t=u;t&&e.request(async()=>{await ce({action:`unenroll`,path:t.path}),d(null)},`Removing a repository from autonomous scope requires the dispatch token.`)}})]})}var $={section:`_section_1vgpf_8`,header:`_header_1vgpf_10`,title:`_title_1vgpf_23`,headerActions:`_headerActions_1vgpf_31`,ghost:`_ghost_1vgpf_32`,scroll:`_scroll_1vgpf_45`,measure:`_measure_1vgpf_46`,banner:`_banner_1vgpf_48`,bannerTitle:`_bannerTitle_1vgpf_59`,failure:`_failure_1vgpf_61`,retry:`_retry_1vgpf_70`,loading:`_loading_1vgpf_82`},At=r({FleetAdvanced:()=>jt});function jt({embedded:e=!1}){let t=c(te),n=c(le),r=c(h),i=c(be),l=c(Se),u=c(we),d=c(Ne),p=o(te),g=Le();Te(),ke(d.data?.value?.armed??!1);let _=(r.data?.dispatchEnabled??!0)&&!g.readOnly,v=t.data,y=(0,U.useMemo)(()=>(r.data?.seats??[]).map(e=>({id:e.id,engine:e.engine,label:e.label})),[r.data]),b=(0,W.jsxs)(W.Fragment,{children:[_?null:(0,W.jsxs)(`div`,{className:$.banner,role:`status`,children:[(0,W.jsx)(`span`,{className:$.bannerTitle,children:`Read-only session`}),`This server was started without dispatch, so starting, stopping, editing caps, and changing scope are unavailable. Everything below is live and accurate — run `,(0,W.jsx)(`code`,{children:`ashlr verse`}),` to get the controls.`]}),t.status===`loading`?(0,W.jsxs)(`div`,{className:$.loading,children:[(0,W.jsx)(s,{width:`42%`}),(0,W.jsx)(s,{width:`68%`}),(0,W.jsx)(a,{}),(0,W.jsx)(a,{})]}):t.status===`error`||!v?(0,W.jsxs)(`div`,{className:$.failure,role:`alert`,children:[t.error?.message??`Could not read the autonomy control snapshot.`,(0,W.jsx)(`br`,{}),`Loop status unknown, so nothing below is shown.`,(0,W.jsx)(`br`,{}),(0,W.jsx)(`button`,{type:`button`,className:$.retry,onClick:p,children:`Try again`})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(nt,{snapshot:v}),(0,W.jsx)(rt,{snapshot:v,guard:g,dispatchEnabled:_}),(0,W.jsx)(xt,{read:d.data??null,snapshot:v,guard:g,dispatchEnabled:_,loading:d.status===`loading`}),(0,W.jsx)(gt,{read:i.data??null,guard:g,dispatchEnabled:_,loading:i.status===`loading`,fleet:l.data??null}),(0,W.jsx)(lt,{read:u.data??null,seats:y,guard:g,dispatchEnabled:_,loading:u.status===`loading`}),(0,W.jsx)(ot,{read:l.data??null,runtime:i.data?.value??null,loading:l.status===`loading`}),n.status===`loading`?(0,W.jsxs)(`div`,{className:G.panel,children:[(0,W.jsx)(a,{}),(0,W.jsx)(a,{})]}):n.data?(0,W.jsx)(Xe,{caps:n.data,snapshot:v,guard:g,dispatchEnabled:_}):(0,W.jsxs)(`section`,{className:G.panel,"aria-label":`Budget and limits`,children:[(0,W.jsx)(`div`,{className:G.panelHead,children:(0,W.jsx)(`h3`,{className:G.panelTitle,children:`Budget and limits`})}),(0,W.jsx)(`p`,{className:G.error,role:`alert`,children:n.error?.message??`Could not read the configured caps, so none are shown or editable.`})]}),(0,W.jsx)(kt,{guard:g,dispatchEnabled:_}),(0,W.jsx)(Be,{snapshot:v}),(0,W.jsx)(Et,{}),(0,W.jsx)(ct,{})]})]}),x=(0,W.jsx)(f,{open:g.tokenOpen,onClose:g.closeToken,reason:g.tokenReason,tokenHelp:`the mutation token ashlr verse printed`});return e?(0,W.jsxs)(`div`,{className:$.loading,"data-embedded":`true`,children:[(0,W.jsxs)(`div`,{className:$.headerActions,children:[t.status===`refreshing`?(0,W.jsx)(m,{}):null,(0,W.jsx)(`button`,{type:`button`,className:$.ghost,onClick:p,children:`Refresh`})]}),b,x]}):(0,W.jsxs)(`section`,{className:$.section,"aria-label":`Autonomy`,children:[(0,W.jsxs)(`header`,{className:$.header,"data-app-region":`drag`,children:[(0,W.jsx)(`h2`,{className:$.title,children:`Autonomy`}),(0,W.jsxs)(`div`,{className:$.headerActions,children:[t.status===`refreshing`?(0,W.jsx)(m,{}):null,(0,W.jsx)(`button`,{type:`button`,className:$.ghost,onClick:p,children:`Refresh`})]})]}),(0,W.jsx)(`div`,{className:$.scroll,children:(0,W.jsx)(`div`,{className:$.measure,children:b})}),x]})}export{jt as n,At as t};
|
|
2
|
+
//# sourceMappingURL=Advanced-CxzE6ekM.js.map
|