@ashlr/hub 3.11.0 → 3.11.2
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 +96 -0
- package/dist/authority-surface.json +12 -7
- package/dist/build-identity.json +2 -2
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +5 -4
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +4 -3
- package/dist/core/universe/campaign.js +9 -1
- package/dist/core/universe/campaign.js.map +1 -1
- package/dist/core/universe/runner.d.ts +3 -0
- package/dist/core/universe/runner.js +7 -3
- package/dist/core/universe/runner.js.map +1 -1
- package/dist/core/verse/compaction-point.d.ts +55 -0
- package/dist/core/verse/compaction-point.js +75 -0
- package/dist/core/verse/compaction-point.js.map +1 -0
- package/dist/core/verse/context-math.d.ts +1 -38
- package/dist/core/verse/context-math.js +5 -59
- package/dist/core/verse/context-math.js.map +1 -1
- package/dist/core/web/public/next/assets/{ActionMenu-CQvNJvHY.js → ActionMenu-_DhtX2gO.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-CQvNJvHY.js.map → ActionMenu-_DhtX2gO.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-CAAfaBke.js +2 -0
- package/dist/core/web/public/next/assets/{Advanced-DEM93sKI.js.map → Advanced-CAAfaBke.js.map} +1 -1
- package/dist/core/web/public/next/assets/App-BAywyjE8.js +7 -0
- package/dist/core/web/public/next/assets/{App-CimXmK0L.js.map → App-BAywyjE8.js.map} +1 -1
- package/dist/core/web/public/next/assets/AppsSection-CUypKeog.js +2 -0
- package/dist/core/web/public/next/assets/{AppsSection-D6U-dSj6.js.map → AppsSection-CUypKeog.js.map} +1 -1
- package/dist/core/web/public/next/assets/{AreaTrend-LD9lCPkT.js → AreaTrend-CblDqC8Q.js} +2 -2
- package/dist/core/web/public/next/assets/{AreaTrend-LD9lCPkT.js.map → AreaTrend-CblDqC8Q.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-D3d8lYO3.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-3V9pUyxm.js.map → AutonomySection-D3d8lYO3.js.map} +1 -1
- package/dist/core/web/public/next/assets/BranchBar-DU0jAV1E.js +2 -0
- package/dist/core/web/public/next/assets/{BranchBar-U8UdpfEB.js.map → BranchBar-DU0jAV1E.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BudgetControl-DOTlMSmW.js → BudgetControl-Mm1ZL4u6.js} +2 -2
- package/dist/core/web/public/next/assets/{BudgetControl-DOTlMSmW.js.map → BudgetControl-Mm1ZL4u6.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BurnDown-x4PWH9JF.js → BurnDown-C1fgcFqo.js} +2 -2
- package/dist/core/web/public/next/assets/{BurnDown-x4PWH9JF.js.map → BurnDown-C1fgcFqo.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-DYv_KKxr.js → Button-DqgLUZvd.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-DYv_KKxr.js.map → Button-DqgLUZvd.js.map} +1 -1
- package/dist/core/web/public/next/assets/CapacityStrip-nWFHvqFB.js +2 -0
- package/dist/core/web/public/next/assets/CapacityStrip-nWFHvqFB.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-DUZNpiVr.js +3 -0
- package/dist/core/web/public/next/assets/ChatSection-DUZNpiVr.js.map +1 -0
- package/dist/core/web/public/next/assets/{CloudBudgetForm-DJeJvBEu.js → CloudBudgetForm-2OW38o_C.js} +2 -2
- package/dist/core/web/public/next/assets/{CloudBudgetForm-DJeJvBEu.js.map → CloudBudgetForm-2OW38o_C.js.map} +1 -1
- package/dist/core/web/public/next/assets/CommandPalette-C5w2o1-r.js +2 -0
- package/dist/core/web/public/next/assets/{CommandPalette-FiD4N8XD.js.map → CommandPalette-C5w2o1-r.js.map} +1 -1
- package/dist/core/web/public/next/assets/CommandSection-Bx2knNqY.js +2 -0
- package/dist/core/web/public/next/assets/{CommandSection-DN8KwH-X.js.map → CommandSection-Bx2knNqY.js.map} +1 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-B7ZwCQOX.js +2 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-B7ZwCQOX.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-Dx15x0Ho.css +1 -0
- package/dist/core/web/public/next/assets/Dialog-BpgcEW6b.js +2 -0
- package/dist/core/web/public/next/assets/Dialog-BpgcEW6b.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-tQ8kFulD.css +1 -0
- package/dist/core/web/public/next/assets/{DiffPane-DLJ3gGGK.js → DiffPane-DpqRUtCx.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffPane-DLJ3gGGK.js.map → DiffPane-DpqRUtCx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffViewer-B7NWPjIO.js → DiffViewer-CoV5-nUf.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-B7NWPjIO.js.map → DiffViewer-CoV5-nUf.js.map} +1 -1
- package/dist/core/web/public/next/assets/DockHost-C0Pq7Jak.js +2 -0
- package/dist/core/web/public/next/assets/{DockHost-DvR-hPhZ.js.map → DockHost-C0Pq7Jak.js.map} +1 -1
- package/dist/core/web/public/next/assets/{EmptyState-DhNgDDrF.js → EmptyState-DYW29ncw.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-DhNgDDrF.js.map → EmptyState-DYW29ncw.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-uARPnx9x.js → Epistemic-DVx6oHzp.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-uARPnx9x.js.map → Epistemic-DVx6oHzp.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-DSETviPK.js +3 -0
- package/dist/core/web/public/next/assets/{FleetSection-D_zRBCub.js.map → FleetSection-DSETviPK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Funnel-CL8uHONq.js → Funnel-DxiGqJrt.js} +2 -2
- package/dist/core/web/public/next/assets/{Funnel-CL8uHONq.js.map → Funnel-DxiGqJrt.js.map} +1 -1
- package/dist/core/web/public/next/assets/GearTray-C3I89sIt.js +2 -0
- package/dist/core/web/public/next/assets/{GearTray-C7k4l_BW.js.map → GearTray-C3I89sIt.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GrowthSection-DwdNSGj8.js → GrowthSection-C3m2bPEz.js} +2 -2
- package/dist/core/web/public/next/assets/{GrowthSection-DwdNSGj8.js.map → GrowthSection-C3m2bPEz.js.map} +1 -1
- package/dist/core/web/public/next/assets/HandoffDialog-Bjb96a0N.js +2 -0
- package/dist/core/web/public/next/assets/{HandoffDialog-FPVOqOMN.js.map → HandoffDialog-Bjb96a0N.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Input-B9-VLcHS.js → Input-ekTehVaH.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-B9-VLcHS.js.map → Input-ekTehVaH.js.map} +1 -1
- package/dist/core/web/public/next/assets/LeaderCard-85VBbbaZ.js +2 -0
- package/dist/core/web/public/next/assets/{LeaderCard-4R0BhDzT.js.map → LeaderCard-85VBbbaZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MatrixHeatmap-DiuushcS.js → MatrixHeatmap-Bo8j0QPC.js} +2 -2
- package/dist/core/web/public/next/assets/{MatrixHeatmap-DiuushcS.js.map → MatrixHeatmap-Bo8j0QPC.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-DvHFaVyp.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-CJ__OJKl.js.map → McpSection-DvHFaVyp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdown-qWKyJvAQ.js → MessageMarkdown-fsY_ltVa.js} +3 -3
- package/dist/core/web/public/next/assets/{MessageMarkdown-qWKyJvAQ.js.map → MessageMarkdown-fsY_ltVa.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-x05TrsrW.js → MessageMarkdownRenderer-DDdtu82l.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-x05TrsrW.js.map → MessageMarkdownRenderer-DDdtu82l.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-D-hncpkO.js → Meter-CeGDXdDM.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-D-hncpkO.js.map → Meter-CeGDXdDM.js.map} +1 -1
- package/dist/core/web/public/next/assets/MindSection-CDVhHvXl.js +2 -0
- package/dist/core/web/public/next/assets/{MindSection-BjXHkQPS.js.map → MindSection-CDVhHvXl.js.map} +1 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-CrfJ0PdD.css +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DTQzEOHR.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DTQzEOHR.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-6AuN0BF3.js +2 -0
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-rSd1ZHAR.js.map → NeedsYouDrawer-6AuN0BF3.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouList-CG-nB1tr.js → NeedsYouList-ChnRmbSk.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouList-CG-nB1tr.js.map → NeedsYouList-ChnRmbSk.js.map} +1 -1
- package/dist/core/web/public/next/assets/NewChatDialog-B06E7sqg.js +3 -0
- package/dist/core/web/public/next/assets/{NewChatDialog-BeDQ1eW3.js.map → NewChatDialog-B06E7sqg.js.map} +1 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-C2M3zov9.js +2 -0
- package/dist/core/web/public/next/assets/{OnboardingFlow-CkTZtt-m.js.map → OnboardingFlow-C2M3zov9.js.map} +1 -1
- package/dist/core/web/public/next/assets/PreviewPane-Bd6HsX1k.js +2 -0
- package/dist/core/web/public/next/assets/{PreviewPane-kzbbSK4u.js.map → PreviewPane-Bd6HsX1k.js.map} +1 -1
- package/dist/core/web/public/next/assets/ProviderLogo-Bz7KR5j3.js +2 -0
- package/dist/core/web/public/next/assets/ProviderLogo-Bz7KR5j3.js.map +1 -0
- package/dist/core/web/public/next/assets/{RailStatus-D-t2gPae.js → RailStatus-CctCuuLy.js} +2 -2
- package/dist/core/web/public/next/assets/{RailStatus-D-t2gPae.js.map → RailStatus-CctCuuLy.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-BLnr9IOM.js → RefreshIndicator-CKY5BGdD.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-BLnr9IOM.js.map → RefreshIndicator-CKY5BGdD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-CM_8pJs6.css → ResourcePoolConsoleApp-BX9JLkT4.css} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BeG0gBif.js → ResourcePoolConsoleApp-CspIsW_G.js} +5 -5
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BeG0gBif.js.map → ResourcePoolConsoleApp-CspIsW_G.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-B7fHZ6zX.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-B7fHZ6zX.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-uZEqC2EM.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-B7-N9n7-.js +2 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-B7-N9n7-.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-C_B11J0s.js +2 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-C_B11J0s.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-DdxhTdZ6.css +1 -0
- package/dist/core/web/public/next/assets/{RunInCloudAction-C3LBp7C4.js → RunInCloudAction-_juw4EXd.js} +2 -2
- package/dist/core/web/public/next/assets/{RunInCloudAction-C3LBp7C4.js.map → RunInCloudAction-_juw4EXd.js.map} +1 -1
- package/dist/core/web/public/next/assets/SeatSelector-D_YXvkPy.js +3 -0
- package/dist/core/web/public/next/assets/{SeatSelector-DpvvbjNm.js.map → SeatSelector-D_YXvkPy.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-BL40udoO.js → Segmented-DnKP6rr7.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-BL40udoO.js.map → Segmented-DnKP6rr7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-FWLnAw_j.js → Select-DlbUupTX.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-FWLnAw_j.js.map → Select-DlbUupTX.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionGate-DnuTZACL.js +2 -0
- package/dist/core/web/public/next/assets/SessionGate-DnuTZACL.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionGate-DvMpXNpJ.css +1 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-C33-k-Q5.js +2 -0
- package/dist/core/web/public/next/assets/{SessionInsightChip-CWye87Ju.js.map → SessionInsightChip-C33-k-Q5.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionSearch-YvCHFUuN.js → SessionSearch-DhhR9Csg.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionSearch-YvCHFUuN.js.map → SessionSearch-DhhR9Csg.js.map} +1 -1
- package/dist/core/web/public/next/assets/SettingsSection-C0xQvCz3.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-C0xQvCz3.js.map +1 -0
- package/dist/core/web/public/next/assets/Sheet-BvNYOYv5.js +2 -0
- package/dist/core/web/public/next/assets/{Sheet-DZKcQXQg.js.map → Sheet-BvNYOYv5.js.map} +1 -1
- package/dist/core/web/public/next/assets/ShortcutsOverlay-1nUBVO-Z.js +2 -0
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-BpDimdPq.js.map → ShortcutsOverlay-1nUBVO-Z.js.map} +1 -1
- package/dist/core/web/public/next/assets/Sidebar-YrVvvBNM.js +3 -0
- package/dist/core/web/public/next/assets/{Sidebar-BoBzBEFX.js.map → Sidebar-YrVvvBNM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Slider-DUMo9HDD.js → Slider-B2c-dbQb.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-DUMo9HDD.js.map → Slider-B2c-dbQb.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatusBadge-BwnBNFQr.js → StatusBadge-Q9YYkijx.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-BwnBNFQr.js.map → StatusBadge-Q9YYkijx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StepBand-PDXMIlRk.js → StepBand-Ci-C0GUG.js} +2 -2
- package/dist/core/web/public/next/assets/{StepBand-PDXMIlRk.js.map → StepBand-Ci-C0GUG.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Surface-B3TZVoER.js → Surface-DBovMq4P.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-B3TZVoER.js.map → Surface-DBovMq4P.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Swimlane-DR4OgON_.js → Swimlane-Cdc4TqDe.js} +2 -2
- package/dist/core/web/public/next/assets/{Swimlane-DR4OgON_.js.map → Swimlane-Cdc4TqDe.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Switch-CcR5Llk5.js → Switch-CUrvzO2k.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-CcR5Llk5.js.map → Switch-CUrvzO2k.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-_-K1h7Hk.js → Tag-Bv8u6APt.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-_-K1h7Hk.js.map → Tag-Bv8u6APt.js.map} +1 -1
- package/dist/core/web/public/next/assets/TerminalPane-BE4Xlqi5.js +7 -0
- package/dist/core/web/public/next/assets/{TerminalPane-_1aH4ndN.js.map → TerminalPane-BE4Xlqi5.js.map} +1 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BGwejf0m.js +2 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-BUsq-inZ.js.map → UniverseConsoleApp-BGwejf0m.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-Dh7A-hLD.css → UniverseConsoleApp-DfuT-wFw.css} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-Dogy_dsB.js → UniverseView-CgKa-WXC.js} +4 -4
- package/dist/core/web/public/next/assets/{UniverseView-Dogy_dsB.js.map → UniverseView-CgKa-WXC.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-CazsHm1f.js +2 -0
- package/dist/core/web/public/next/assets/{UsageSection-DiX_dTyo.js.map → UsageSection-CazsHm1f.js.map} +1 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-CTF3Shs0.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CTF3Shs0.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-CgdyXiEV.js +10 -0
- package/dist/core/web/public/next/assets/Workspace-CgdyXiEV.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-Dwri2jFJ.css +1 -0
- package/dist/core/web/public/next/assets/actions-MtxBGS5B.js +2 -0
- package/dist/core/web/public/next/assets/{actions-s2lfm_5k.js.map → actions-MtxBGS5B.js.map} +1 -1
- package/dist/core/web/public/next/assets/budget-queries-CP7hgR-p.js +2 -0
- package/dist/core/web/public/next/assets/{budget-queries-wUshcovN.js.map → budget-queries-CP7hgR-p.js.map} +1 -1
- package/dist/core/web/public/next/assets/{capacity-strip-model-Bj_9ztzs.js → capacity-strip-model-fHfu5cph.js} +2 -2
- package/dist/core/web/public/next/assets/{capacity-strip-model-Bj_9ztzs.js.map → capacity-strip-model-fHfu5cph.js.map} +1 -1
- package/dist/core/web/public/next/assets/{charts-CMSgAUKn.js → charts-Bis9WSiS.js} +2 -2
- package/dist/core/web/public/next/assets/{charts-CMSgAUKn.js.map → charts-Bis9WSiS.js.map} +1 -1
- package/dist/core/web/public/next/assets/cloud-queries-BsOepFz6.js +2 -0
- package/dist/core/web/public/next/assets/{cloud-queries-CnV1yaNG.js.map → cloud-queries-BsOepFz6.js.map} +1 -1
- package/dist/core/web/public/next/assets/{cloud.module-CiwatLj3.js → cloud.module-DoFnr8ZH.js} +2 -2
- package/dist/core/web/public/next/assets/{cloud.module-CiwatLj3.js.map → cloud.module-DoFnr8ZH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{command-bus-DqimKCUY.js → command-bus-CMvbYP5K.js} +2 -2
- package/dist/core/web/public/next/assets/{command-bus-DqimKCUY.js.map → command-bus-CMvbYP5K.js.map} +1 -1
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js.map +1 -0
- package/dist/core/web/public/next/assets/compaction-point-VL9oegWS.js +2 -0
- package/dist/core/web/public/next/assets/compaction-point-VL9oegWS.js.map +1 -0
- package/dist/core/web/public/next/assets/{composer-keys-DBRymxQn.js → composer-keys-su0g1h9o.js} +2 -2
- package/dist/core/web/public/next/assets/{composer-keys-DBRymxQn.js.map → composer-keys-su0g1h9o.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-model-Ci3Ch9t5.js +2 -0
- package/dist/core/web/public/next/assets/{context-model-Dwd49-dp.js.map → context-model-Ci3Ch9t5.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-model-CjiJTnf1.js +2 -0
- package/dist/core/web/public/next/assets/{context-model-MT17V86_.js.map → context-model-CjiJTnf1.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-queries-BDXT6LQ3.js +2 -0
- package/dist/core/web/public/next/assets/{context-queries-xVKIeynP.js.map → context-queries-BDXT6LQ3.js.map} +1 -1
- package/dist/core/web/public/next/assets/control-queries-Dv-h1Clu.js +2 -0
- package/dist/core/web/public/next/assets/{control-queries-DOZR-D8G.js.map → control-queries-Dv-h1Clu.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-icons-8EtARwUm.js → dock-icons-t--Eugrd.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-icons-8EtARwUm.js.map → dock-icons-t--Eugrd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-store-BA1cHOYA.js → dock-store-qIu7kSQE.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-store-BA1cHOYA.js.map → dock-store-qIu7kSQE.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-model-CNe8Wh-s.js → fleet-model-IRbwfhkR.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-model-CNe8Wh-s.js.map → fleet-model-IRbwfhkR.js.map} +1 -1
- package/dist/core/web/public/next/assets/fleet-queries-7FVNByX1.js +2 -0
- package/dist/core/web/public/next/assets/{fleet-queries-BSdRlUwJ.js.map → fleet-queries-7FVNByX1.js.map} +1 -1
- package/dist/core/web/public/next/assets/focus-trap-QqQxQdvH.js +2 -0
- package/dist/core/web/public/next/assets/focus-trap-QqQxQdvH.js.map +1 -0
- package/dist/core/web/public/next/assets/{format-B8DAVcn2.js → format-CaMmVQCn.js} +2 -2
- package/dist/core/web/public/next/assets/{format-B8DAVcn2.js.map → format-CaMmVQCn.js.map} +1 -1
- package/dist/core/web/public/next/assets/git-model-B4S_GUNA.js +5 -0
- package/dist/core/web/public/next/assets/{git-model-CivuBY_D.js.map → git-model-B4S_GUNA.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-BkNl4e6E.js +2 -0
- package/dist/core/web/public/next/assets/global-BkNl4e6E.js.map +1 -0
- package/dist/core/web/public/next/assets/global-BlI2BYa1.css +1 -0
- package/dist/core/web/public/next/assets/guarded-action-DHiL8tY5.js +3 -0
- package/dist/core/web/public/next/assets/guarded-action-DHiL8tY5.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-runners-DmGEkM2P.js +2 -0
- package/dist/core/web/public/next/assets/guarded-runners-DmGEkM2P.js.map +1 -0
- package/dist/core/web/public/next/assets/icon-base-NtFmP2yB.js +2 -0
- package/dist/core/web/public/next/assets/icon-base-NtFmP2yB.js.map +1 -0
- package/dist/core/web/public/next/assets/icons-C5EFt_Ts.js +2 -0
- package/dist/core/web/public/next/assets/icons-C5EFt_Ts.js.map +1 -0
- package/dist/core/web/public/next/assets/{index-oAAq8XJa.js → index-DbDw9UAs.js} +3 -3
- package/dist/core/web/public/next/assets/{index-oAAq8XJa.js.map → index-DbDw9UAs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{live-model-DCw_IFRI.js → live-model-DEwrl7_A.js} +2 -2
- package/dist/core/web/public/next/assets/{live-model-DCw_IFRI.js.map → live-model-DEwrl7_A.js.map} +1 -1
- package/dist/core/web/public/next/assets/{mind.module-vnuJcwvD.js → mind.module-CLhqMQak.js} +2 -2
- package/dist/core/web/public/next/assets/{mind.module-vnuJcwvD.js.map → mind.module-CLhqMQak.js.map} +1 -1
- package/dist/core/web/public/next/assets/mutations-Kvzsg-iK.js +2 -0
- package/dist/core/web/public/next/assets/{mutations-Dpsql5t7.js.map → mutations-Kvzsg-iK.js.map} +1 -1
- package/dist/core/web/public/next/assets/nav-C0IunEYF.js +2 -0
- package/dist/core/web/public/next/assets/nav-C0IunEYF.js.map +1 -0
- package/dist/core/web/public/next/assets/overnight-queries-C_AfcL7q.js +2 -0
- package/dist/core/web/public/next/assets/{overnight-queries-X-44Gsw5.js.map → overnight-queries-C_AfcL7q.js.map} +1 -1
- package/dist/core/web/public/next/assets/preloaded-CctOitLu.js +2 -0
- package/dist/core/web/public/next/assets/preloaded-CctOitLu.js.map +1 -0
- package/dist/core/web/public/next/assets/primitives-CbAGCNKt.js +1 -0
- package/dist/core/web/public/next/assets/{queries-BA4rNGD-.js → queries-THD05gHP.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-BA4rNGD-.js.map → queries-THD05gHP.js.map} +1 -1
- package/dist/core/web/public/next/assets/reasoning-pref-BVPu0SME.js +2 -0
- package/dist/core/web/public/next/assets/{reasoning-pref-B9-DJUXP.js.map → reasoning-pref-BVPu0SME.js.map} +1 -1
- package/dist/core/web/public/next/assets/reveal-anchor-wCT5b4m3.js +2 -0
- package/dist/core/web/public/next/assets/reveal-anchor-wCT5b4m3.js.map +1 -0
- package/dist/core/web/public/next/assets/seat-subscription-CR_VylsK.js +2 -0
- package/dist/core/web/public/next/assets/{seat-subscription-CH6fW4fJ.js.map → seat-subscription-CR_VylsK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{section-visibility-qFqc_d4Z.js → section-visibility-B0xXUQJ0.js} +2 -2
- package/dist/core/web/public/next/assets/{section-visibility-qFqc_d4Z.js.map → section-visibility-B0xXUQJ0.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-M1GaQU5l.js → sidebar-model-C5wVXGpb.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-M1GaQU5l.js.map → sidebar-model-C5wVXGpb.js.map} +1 -1
- package/dist/core/web/public/next/assets/slots-DDd8cEoh.js +3 -0
- package/dist/core/web/public/next/assets/{slots-Ds9ZIqUL.js.map → slots-DDd8cEoh.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-data-BFxAlefI.js +2 -0
- package/dist/core/web/public/next/assets/{surface-data-J52iIGMD.js.map → surface-data-BFxAlefI.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CHusyO9q.js +2 -0
- package/dist/core/web/public/next/assets/{surface-prefetch-CgZ-LEJK.js.map → surface-prefetch-CHusyO9q.js.map} +1 -1
- package/dist/core/web/public/next/assets/{tasks-model-ent8f0jZ.js → tasks-model-DvkWveXs.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-ent8f0jZ.js.map → tasks-model-DvkWveXs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-DJTK7QpR.js → terminal-icons-Dp6pJgV2.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-DJTK7QpR.js.map → terminal-icons-Dp6pJgV2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{usage-queries-Bn8ccqyN.js → usage-queries-CUTmnegA.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-Bn8ccqyN.js.map → usage-queries-CUTmnegA.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-guarded-action-UCX2u1t1.js +2 -0
- package/dist/core/web/public/next/assets/{use-guarded-action-C2HlSzkz.js.map → use-guarded-action-UCX2u1t1.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-BNc1H4ZC.js → use-ticker-OXAjob3y.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-BNc1H4ZC.js.map → use-ticker-OXAjob3y.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-token-gate-CDDRAoKH.js +2 -0
- package/dist/core/web/public/next/assets/{use-token-gate-B3IJL6bf.js.map → use-token-gate-CDDRAoKH.js.map} +1 -1
- package/dist/core/web/public/next/assets/useChartWidth-BW6SwYIK.css +1 -0
- package/dist/core/web/public/next/assets/useChartWidth-D9M7kUw7.js +2 -0
- package/dist/core/web/public/next/assets/{useChartWidth-lZ9PrQn0.js.map → useChartWidth-D9M7kUw7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useSeatsRefresh-CG4jczeL.js → useSeatsRefresh-B2dCVcj9.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-CG4jczeL.js.map → useSeatsRefresh-B2dCVcj9.js.map} +1 -1
- package/dist/core/web/public/next/assets/useVerseTranscript-BL3CljSI.js +2 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BL3CljSI.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-icons-DASWdYuE.js +2 -0
- package/dist/core/web/public/next/assets/verse-icons-DASWdYuE.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-model-BQ0Y2CSr.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-BQ0Y2CSr.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js +3 -0
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-ui-store-D7YXi63q.js +3 -0
- package/dist/core/web/public/next/assets/{verse-ui-store-zafyzXKD.js.map → verse-ui-store-D7YXi63q.js.map} +1 -1
- package/dist/core/web/public/next/assets/{viewport-BEqGUoTA.js → viewport-BYGH5EgA.js} +2 -2
- package/dist/core/web/public/next/assets/{viewport-BEqGUoTA.js.map → viewport-BYGH5EgA.js.map} +1 -1
- package/dist/core/web/public/next/assets/warmup-AsqwWCUi.js +3 -0
- package/dist/core/web/public/next/assets/{warmup-BR6pxAKs.js.map → warmup-AsqwWCUi.js.map} +1 -1
- package/dist/core/web/public/next/assets/{workspace-model-D_tWD5Wt.js → workspace-model-CXorJr0G.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-D_tWD5Wt.js.map → workspace-model-CXorJr0G.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +5 -2
- package/dist/cli/activation.d.ts +0 -41
- package/dist/cli/activation.js +0 -485
- package/dist/cli/activation.js.map +0 -1
- package/dist/core/fleet/generated-repair-resolution.d.ts +0 -36
- package/dist/core/fleet/generated-repair-resolution.js +0 -245
- package/dist/core/fleet/generated-repair-resolution.js.map +0 -1
- package/dist/core/local-runtime/llama/port.d.ts +0 -17
- package/dist/core/local-runtime/llama/port.js +0 -47
- package/dist/core/local-runtime/llama/port.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-host.d.ts +0 -54
- package/dist/core/local-runtime/llama/proxy-host.js +0 -159
- package/dist/core/local-runtime/llama/proxy-host.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-process.d.ts +0 -148
- package/dist/core/local-runtime/llama/proxy-process.js +0 -250
- package/dist/core/local-runtime/llama/proxy-process.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-record.d.ts +0 -40
- package/dist/core/local-runtime/llama/proxy-record.js +0 -133
- package/dist/core/local-runtime/llama/proxy-record.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +0 -118
- package/dist/core/local-runtime/llama/proxy-supervisor.js +0 -511
- package/dist/core/local-runtime/llama/proxy-supervisor.js.map +0 -1
- package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js +0 -2
- package/dist/core/web/public/next/assets/App-CimXmK0L.js +0 -7
- package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-3V9pUyxm.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-U8UdpfEB.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-C667yQe8.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-C667yQe8.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-CCcIPpOq.js +0 -3
- package/dist/core/web/public/next/assets/ChatSection-CCcIPpOq.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandPalette-FiD4N8XD.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-DvR-hPhZ.js +0 -2
- package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js +0 -3
- package/dist/core/web/public/next/assets/GearTray-C7k4l_BW.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-FPVOqOMN.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-4R0BhDzT.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-CJ__OJKl.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-BjXHkQPS.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Cum_DqQZ.css +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-SkRxqV_I.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-SkRxqV_I.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-rSd1ZHAR.js +0 -2
- package/dist/core/web/public/next/assets/NewChatDialog-BeDQ1eW3.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingFlow-CkTZtt-m.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-kzbbSK4u.js +0 -2
- package/dist/core/web/public/next/assets/ResourcesChrome-B3Z3O98t.css +0 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js +0 -2
- package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js.map +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-6RMd_aZg.css +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-C5SxA2Dg.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-C5SxA2Dg.js.map +0 -1
- package/dist/core/web/public/next/assets/SeatSelector-DpvvbjNm.js +0 -3
- package/dist/core/web/public/next/assets/SessionInsightChip-CWye87Ju.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-Dr18upeE.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-Dr18upeE.js.map +0 -1
- package/dist/core/web/public/next/assets/Sheet-DZKcQXQg.js +0 -2
- package/dist/core/web/public/next/assets/ShortcutsOverlay-BpDimdPq.js +0 -2
- package/dist/core/web/public/next/assets/Sidebar-BoBzBEFX.js +0 -3
- package/dist/core/web/public/next/assets/TerminalPane-_1aH4ndN.js +0 -7
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BUsq-inZ.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js +0 -2
- package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-BYW9dm90.css +0 -1
- package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js +0 -10
- package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-s2lfm_5k.js +0 -2
- package/dist/core/web/public/next/assets/budget-queries-wUshcovN.js +0 -2
- package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-Dwd49-dp.js +0 -2
- package/dist/core/web/public/next/assets/context-model-MT17V86_.js +0 -2
- package/dist/core/web/public/next/assets/context-queries-xVKIeynP.js +0 -2
- package/dist/core/web/public/next/assets/control-queries-DOZR-D8G.js +0 -2
- package/dist/core/web/public/next/assets/dock-panes-UKS-mXhr.js +0 -2
- package/dist/core/web/public/next/assets/dock-panes-UKS-mXhr.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js +0 -2
- package/dist/core/web/public/next/assets/git-model-CivuBY_D.js +0 -5
- package/dist/core/web/public/next/assets/global-Di2PUgj4.js +0 -2
- package/dist/core/web/public/next/assets/global-Di2PUgj4.js.map +0 -1
- package/dist/core/web/public/next/assets/global-_tOCFt9y.css +0 -1
- package/dist/core/web/public/next/assets/guarded-action-CvOHcqyH.js +0 -2
- package/dist/core/web/public/next/assets/guarded-action-CvOHcqyH.js.map +0 -1
- package/dist/core/web/public/next/assets/icons-B_yuAgdN.js +0 -2
- package/dist/core/web/public/next/assets/icons-B_yuAgdN.js.map +0 -1
- package/dist/core/web/public/next/assets/mutations-Dpsql5t7.js +0 -2
- package/dist/core/web/public/next/assets/overnight-queries-X-44Gsw5.js +0 -2
- package/dist/core/web/public/next/assets/primitives-BDIcUvob.js +0 -1
- package/dist/core/web/public/next/assets/reasoning-pref-B9-DJUXP.js +0 -2
- package/dist/core/web/public/next/assets/seat-subscription-CH6fW4fJ.js +0 -2
- package/dist/core/web/public/next/assets/slots-Ds9ZIqUL.js +0 -3
- package/dist/core/web/public/next/assets/surface-data-J52iIGMD.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-C2HlSzkz.js +0 -2
- package/dist/core/web/public/next/assets/use-token-gate-B3IJL6bf.js +0 -2
- package/dist/core/web/public/next/assets/useActivity-Bk3XgXjL.js +0 -2
- package/dist/core/web/public/next/assets/useActivity-Bk3XgXjL.js.map +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-BAtVgn2n.css +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-lZ9PrQn0.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-D7NZQFAR.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-D7NZQFAR.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-queries-DvIJcn6Z.js +0 -2
- package/dist/core/web/public/next/assets/verse-queries-DvIJcn6Z.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-store-DjBWj04q.js +0 -3
- package/dist/core/web/public/next/assets/verse-store-DjBWj04q.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-ui-store-zafyzXKD.js +0 -3
- package/dist/core/web/public/next/assets/warmup-BR6pxAKs.js +0 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=Meter-
|
|
1
|
+
import{n as e}from"./index-DbDw9UAs.js";var t={wrap:`_wrap_ti026_1`,lineWrap:`_lineWrap_ti026_8`,head:`_head_ti026_12`,label:`_label_ti026_19`,value:`_value_ti026_28`,unknown:`_unknown_ti026_37`,track:`_track_ti026_43`,bar:`_bar_ti026_49`,line:`_line_ti026_8`,fill:`_fill_ti026_61`,accent:`_accent_ti026_66`,neutral:`_neutral_ti026_69`,running:`_running_ti026_72`,warning:`_warning_ti026_75`,danger:`_danger_ti026_78`,engine:`_engine_ti026_81`},n=e();function r(e){return e>=1e6?`${(e/1e6).toFixed(e>=1e7?0:1)}m`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(Math.round(e))}function i(e){return e>=90?`danger`:e>=70?`warning`:`accent`}function a({value:e,max:a,variant:o=`labelled`,label:s,valueText:c,tone:l,engineColor:u,className:d,...f}){let p=e!==null&&Number.isFinite(e)&&a!==null&&Number.isFinite(a)&&a>0,m=p?Math.min(100,Math.max(0,e/a*100)):0,h=l??(p?i(m):`neutral`),g=p?c??`${r(e)} / ${r(a)}`:c??`unknown`,_=(0,n.jsx)(`div`,{className:`${t.track} ${o===`line`?t.line:t.bar}`,role:`meter`,"aria-valuenow":p?Math.round(m):void 0,"aria-valuemin":0,"aria-valuemax":100,"aria-valuetext":p?`${Math.round(m)}%`:`unknown`,...f,children:(0,n.jsx)(`div`,{className:`${t.fill} ${t[h]}`,style:{width:`${m}%`,...h===`engine`&&u?{background:u}:{}}})});return o===`line`?(0,n.jsx)(`div`,{className:`${t.lineWrap} ${d??``}`,children:_}):(0,n.jsxs)(`div`,{className:`${t.wrap} ${d??``}`,children:[s||g?(0,n.jsxs)(`div`,{className:t.head,children:[s?(0,n.jsx)(`span`,{className:t.label,children:s}):(0,n.jsx)(`span`,{}),(0,n.jsx)(`span`,{className:`${t.value} ${p?``:t.unknown}`,children:g})]}):null,_]})}export{a as t};
|
|
2
|
+
//# sourceMappingURL=Meter-CeGDXdDM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Meter-
|
|
1
|
+
{"version":3,"file":"Meter-CeGDXdDM.js","names":[],"sources":["../../../../../../src/web-ui/components/primitives/Meter.module.css","../../../../../../src/web-ui/components/primitives/Meter.tsx"],"sourcesContent":[".wrap {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.lineWrap {\n width: 100%;\n}\n\n.head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--space-2);\n}\n\n.label {\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.value {\n flex: none;\n font-family: var(--font-display);\n font-variant-numeric: tabular-nums;\n font-size: var(--text-xs-size);\n letter-spacing: var(--tracking-display);\n color: var(--text-secondary);\n}\n\n.unknown {\n font-family: var(--font-ui);\n font-style: italic;\n color: var(--status-unknown-fg);\n}\n\n.track {\n width: 100%;\n overflow: hidden;\n background: var(--bg-active);\n}\n\n.bar {\n height: 4px;\n border-radius: var(--radius-full);\n}\n\n/* The 2px rule that sits under a header strip — square, full-bleed. */\n.line {\n height: 2px;\n border-radius: 0;\n background: var(--border-subtle);\n}\n\n.fill {\n height: 100%;\n transition: width var(--duration-base) var(--ease-standard);\n}\n\n.accent {\n background: var(--accent-500);\n}\n.neutral {\n background: var(--status-neutral-solid);\n}\n.running {\n background: var(--status-running-solid);\n}\n.warning {\n background: var(--status-warning-solid);\n}\n.danger {\n background: var(--status-danger-solid);\n}\n.engine {\n background: var(--status-neutral-solid);\n}\n","/**\n * components/primitives/Meter.tsx — occupancy against a limit: context\n * window, daily spend against the cap, a plan's usage window.\n *\n * Two forms, one component:\n * variant=\"line\" the 2px full-width rule the design language puts\n * directly under a header strip. No text of its own —\n * wrap it in <Tooltip> and put the numbers beside it.\n * variant=\"labelled\" a 4px bar with a label and a right-aligned\n * \"18k / 66k\" in the display face.\n *\n * Tone thresholds match the V1 context meter (amber >= 70%, danger >= 90%)\n * and are ALWAYS paired with the readable value, never color alone.\n * An unknown limit renders an honest empty track and the text \"unknown\" —\n * never a full bar, never zero (DESIGN.md §7).\n */\nimport type { ReactNode } from 'react';\nimport styles from './Meter.module.css';\n\nexport type MeterTone = 'accent' | 'neutral' | 'running' | 'warning' | 'danger' | 'engine';\n\nexport interface MeterProps {\n /** Current value. null = genuinely unknown. */\n value: number | null;\n /** Limit. null/0 = unknown limit; the meter says so instead of guessing. */\n max: number | null;\n variant?: 'line' | 'labelled';\n label?: ReactNode;\n /** Right-aligned readout. Defaults to `value / max` formatted compactly. */\n valueText?: ReactNode;\n /** Force a tone; by default it is derived from the percentage. */\n tone?: MeterTone;\n /** For tone=\"engine\": the CSS color to paint the fill (an --engine-* var). */\n engineColor?: string;\n /** Accessible name when no visible label is rendered (the line variant). */\n 'aria-label'?: string;\n className?: string;\n}\n\nfunction compact(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(n >= 10_000_000 ? 0 : 1)}m`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(n >= 10_000 ? 0 : 1)}k`;\n return String(Math.round(n));\n}\n\nexport function toneForPercent(percent: number): MeterTone {\n if (percent >= 90) return 'danger';\n if (percent >= 70) return 'warning';\n return 'accent';\n}\n\nexport function Meter({\n value,\n max,\n variant = 'labelled',\n label,\n valueText,\n tone,\n engineColor,\n className,\n ...aria\n}: MeterProps) {\n const known = value !== null && Number.isFinite(value) && max !== null && Number.isFinite(max) && max > 0;\n const percent = known ? Math.min(100, Math.max(0, (value! / max!) * 100)) : 0;\n const resolvedTone = tone ?? (known ? toneForPercent(percent) : 'neutral');\n const readout = known ? (valueText ?? `${compact(value!)} / ${compact(max!)}`) : (valueText ?? 'unknown');\n\n const track = (\n <div\n className={`${styles.track} ${variant === 'line' ? styles.line : styles.bar}`}\n role=\"meter\"\n aria-valuenow={known ? Math.round(percent) : undefined}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuetext={known ? `${Math.round(percent)}%` : 'unknown'}\n {...aria}\n >\n <div\n className={`${styles.fill} ${styles[resolvedTone]}`}\n style={{\n width: `${percent}%`,\n ...(resolvedTone === 'engine' && engineColor ? { background: engineColor } : {}),\n }}\n />\n </div>\n );\n\n if (variant === 'line') return <div className={`${styles.lineWrap} ${className ?? ''}`}>{track}</div>;\n\n return (\n <div className={`${styles.wrap} ${className ?? ''}`}>\n {label || readout ? (\n <div className={styles.head}>\n {label ? <span className={styles.label}>{label}</span> : <span />}\n <span className={`${styles.value} ${known ? '' : styles.unknown}`}>{readout}</span>\n </div>\n ) : null}\n {track}\n </div>\n );\n}\n"],"mappings":"mcCuCA,SAAS,EAAQ,EAAmB,CAGlC,OAFI,GAAK,IAAkB,IAAI,EAAI,IAAA,CAAW,QAAQ,GAAK,IAAa,EAAI,CAAC,EAAE,GAC3E,GAAK,IAAc,IAAI,EAAI,IAAA,CAAO,QAAQ,GAAK,IAAS,EAAI,CAAC,EAAE,GAC5D,OAAO,KAAK,MAAM,CAAC,CAAC,CAC7B,CAEA,SAAgB,EAAe,EAA4B,CAGzD,OAFI,GAAW,GAAW,SACtB,GAAW,GAAW,UACnB,QACT,CAEA,SAAgB,EAAM,CACpB,QACA,MACA,UAAU,WACV,QACA,YACA,OACA,cACA,YACA,GAAG,GACU,CACb,IAAM,EAAQ,IAAU,MAAQ,OAAO,SAAS,CAAK,GAAK,IAAQ,MAAQ,OAAO,SAAS,CAAG,GAAK,EAAM,EAClG,EAAU,EAAQ,KAAK,IAAI,IAAK,KAAK,IAAI,EAAI,EAAS,EAAQ,GAAG,CAAC,EAAI,EACtE,EAAe,IAAS,EAAQ,EAAe,CAAO,EAAI,WAC1D,EAAU,EAAS,GAAa,GAAG,EAAQ,CAAM,EAAE,KAAK,EAAQ,CAAI,IAAQ,GAAa,UAEzF,GACJ,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,UAAW,GAAG,EAAO,MAAM,GAAG,IAAY,OAAS,EAAO,KAAO,EAAO,MACxE,KAAK,QACL,gBAAe,EAAQ,KAAK,MAAM,CAAO,EAAI,IAAA,GAC7C,gBAAe,EACf,gBAAe,IACf,iBAAgB,EAAQ,GAAG,KAAK,MAAM,CAAO,EAAE,GAAK,UACpD,GAAI,EAEJ,UAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,UAAW,GAAG,EAAO,KAAK,GAAG,EAAO,KACpC,MAAO,CACL,MAAO,GAAG,EAAQ,GAClB,GAAI,IAAiB,UAAY,EAAc,CAAE,WAAY,CAAY,EAAI,CAAC,CAChF,CACD,CAAA,CACE,CAAA,EAKP,OAFI,IAAY,QAAe,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAO,SAAS,GAAG,GAAa,KAAO,SAAA,CAAW,CAAA,GAGlG,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAO,KAAK,GAAG,GAAa,KAA/C,SAAA,CACG,GAAS,GACR,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,SAAA,CACG,GAAQ,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,MAAQ,SAAA,CAAY,CAAA,GAAI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAO,CAAA,GAChE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,GAAG,EAAO,MAAM,GAAG,EAAQ,GAAK,EAAO,UAAY,SAAA,CAAc,CAAA,CAC/E,CACH,CAAA,EAAA,KACH,CACE,GAET"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,n as t,s as n}from"./index-DbDw9UAs.js";import{m as r,p as i}from"./global-BkNl4e6E.js";import{t as a}from"./RefreshIndicator-CKY5BGdD.js";import{t as o}from"./AreaTrend-CblDqC8Q.js";import{n as s,t as c}from"./MatrixHeatmap-Bo8j0QPC.js";import{n as l}from"./viewport-BYGH5EgA.js";import{r as u}from"./section-visibility-B0xXUQJ0.js";import{T as d,x as f}from"./VerseConsoleApp-CTF3Shs0.js";import{l as p}from"./format-CaMmVQCn.js";import{t as m}from"./nav-C0IunEYF.js";import{a as h,d as g,l as _}from"./surface-data-BFxAlefI.js";import{a as v,c as y,i as b,l as x,n as S,r as C,s as w,t as T,u as E}from"./mind.module-CLhqMQak.js";import{n as D,t as O}from"./actions-MtxBGS5B.js";import{a as k,i as A,n as j,r as M,t as N}from"./Surface-DBovMq4P.js";import{a as P,i as F,o as I,r as L,t as R}from"./LeaderCard-85VBbbaZ.js";var z=n(e(),1),B=t(),V={hit:`✓`,miss:`✗`,pending:`…`,ungraded:`—`};function H(e){let t=Date.parse(e);return Number.isFinite(t)?new Date(t).toLocaleDateString(`en-US`,{weekday:`short`,month:`short`,day:`numeric`}):`—`}function U({read:e,actions:t}){let n=e?.value??null,r=n?.timeline??[],i=n?.latest?.id??null,a=n?.latest?.actions.some(e=>P(n.actions.find(t=>t.id===e.id)??e))??!1;return(0,B.jsx)(N,{title:`Memos`,caption:n?`${r.length} in view · each move graded 7 days later`:void 0,children:e?n?r.length===0?(0,B.jsxs)(j,{children:[`No memos yet`,n.lastRun?` — last run: ${n.lastRun.reason??n.lastRun.outcome}`:``,`.`]}):(0,B.jsx)(`ol`,{className:T.timeline,children:r.map(e=>{let n=I(e),r=F(e.expectedDelta);return(0,B.jsxs)(`li`,{className:T.memo,"data-outcome":n,id:m(`memo-${e.id}`),children:[(0,B.jsx)(`span`,{className:T.memoDay,children:H(e.at)}),(0,B.jsx)(`span`,{className:T.mark,"data-outcome":n,"aria-hidden":`true`,children:V[n]}),(0,B.jsxs)(`div`,{className:T.memoBody,children:[(0,B.jsx)(`span`,{className:T.memoMove,children:e.move??(e.status===`ok`?`No move`:`No memo (${e.status.replace(/-/g,` `)})`)}),e.bottleneck?(0,B.jsxs)(`span`,{className:T.memoWhy,children:[`Bottleneck: `,e.bottleneck]}):null,(0,B.jsxs)(`span`,{className:T.memoMeta,children:[r?`Expected ${r}`:`No expected delta`,` · `,(0,B.jsx)(`span`,{"data-outcome":n,children:n===`hit`||n===`miss`?`${L[n]} (actual ${e.outcome?.actualDelta===null||e.outcome?.actualDelta===void 0?`—`:`${e.outcome.actualDelta>=0?`+`:``}${e.outcome.actualDelta}`})`:L[n]}),` · ${e.actionCount} action${e.actionCount===1?``:`s`}`]})]}),e.id===i&&a?(0,B.jsx)(`button`,{type:`button`,className:T.veto,"aria-label":`Veto the memo of ${H(e.at)}`,disabled:t.busy||t.readOnly,onClick:()=>t.act(()=>_({action:`veto-memo`,memoId:e.id}),`Veto the whole memo`,{confirm:{title:`Veto this memo?`,body:`Every applied action is undone exactly and every scheduled one is cancelled. The Leader records the veto.`,confirmLabel:`Veto memo`,destructive:!0}}),children:`Veto`}):null]},e.id)})}):(0,B.jsx)(j,{tone:`unknown`,children:e.reason??`The Leader did not answer.`}):(0,B.jsx)(`p`,{className:T.muted,"aria-busy":`true`,children:`Reading the Leader…`})})}function W({read:e}){let t=e?.value??null,n=t?.hitRate??null,r=(t?.standards??[]).filter(e=>e.retiredAt===null);return(0,B.jsxs)(`div`,{className:T.stack,children:[(0,B.jsx)(s,{title:`Leader hit rate`,description:n?`${n.hits} of ${n.graded} graded moves · ${n.windowDays} days`:void 0,status:e?t?void 0:{kind:`unknown`,reason:e.reason??`the Leader did not answer.`}:{kind:`loading`},value:n?.rate??null,showState:!1,caption:n&&n.rate===null?`nothing graded yet — moves are graded 7 days after they are made`:void 0,size:180}),(0,B.jsx)(N,{title:`Standards`,caption:t?`${r.length} in force`:void 0,children:t?r.length===0?(0,B.jsx)(j,{children:`No standards yet.`}):(0,B.jsx)(`ul`,{className:T.standards,children:r.map(e=>(0,B.jsxs)(`li`,{children:[(0,B.jsx)(`span`,{className:T.standardRule,children:e.rule}),(0,B.jsxs)(`span`,{className:T.standardMeta,children:[e.appliesTo,` · `,e.source===`mason`?`yours`:`Leader`,` · `,p(e.addedAt)]})]},e.id))}):(0,B.jsx)(j,{tone:`unknown`,children:e?.reason??`The Leader did not answer.`})})]})}var G={high:`High`,warn:`Worth a look`,info:`FYI`};function K({place:e}){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:T.insightPlace,title:e.full,children:e.label}),e.scratch?(0,B.jsx)(`span`,{className:T.scratchTag,title:`A scratch folder under the system temp directory`,children:`scratch`}):null]})}function q({insights:e,reason:t,loading:n=!1,places:r}){return n?(0,B.jsx)(`p`,{className:T.muted,"aria-busy":`true`,children:`Reading the reasoning digest…`}):t===null?e.length===0?(0,B.jsx)(j,{children:`No loops, repeated failures or verification gaps in the last 30 days.`}):(0,B.jsx)(`ul`,{className:T.insights,"aria-label":`Reasoning insights`,children:e.map(e=>{let t=e.repo?r?.get(e.repo)??y(e.repo):null,n=p(e.lastAt),i=[e.engine,`${e.count}×`,n===`—`?null:`last seen ${n}`].filter(Boolean).join(` · `);return(0,B.jsxs)(`li`,{className:T.insight,"data-severity":e.severity,children:[(0,B.jsxs)(`span`,{className:T.insightKind,children:[(0,B.jsx)(A,{children:S[e.kind]}),(0,B.jsx)(`span`,{className:T.insightSeverity,"data-severity":e.severity,children:G[e.severity]})]}),(0,B.jsx)(`span`,{className:T.insightTitle,children:e.title}),(0,B.jsxs)(`span`,{className:T.insightMeta,children:[t?(0,B.jsx)(K,{place:t}):null,t&&i?` · `:null,i]})]},e.id)})}):(0,B.jsx)(j,{tone:`unknown`,children:t})}function J({read:e,actions:t}){let n=e?.value??null,r=n?.actions??[];return(0,B.jsx)(N,{title:`Action log`,caption:n?`Newest first · Veto runs the recorded inverse`:void 0,children:e?n?r.length===0?(0,B.jsx)(j,{children:`The Leader has not acted yet.`}):(0,B.jsx)(`ul`,{className:T.log,"aria-label":`Leader actions`,children:r.map(e=>(0,B.jsx)(R,{action:e,actions:t},e.id))}):(0,B.jsx)(j,{tone:`unknown`,children:e.reason??`The Leader did not answer.`}):(0,B.jsx)(`p`,{className:T.muted,"aria-busy":`true`,children:`Reading the action log…`})})}var Y=6e4,X=3e5;function Z(){let{compact:e}=l(),t=i(h),n=i(g,{freshMs:6e4}),s=r(h),p=r(g);u(()=>{s(),p()},Y);let _=D(),y=(0,z.useId)(),S=i(f,{freshMs:X}),A=i(d,{freshMs:X}),j=n.data?.value??null,P=(0,z.useMemo)(()=>b(j),[j]),F=(0,z.useMemo)(()=>E(A.data?.workspaces,S.data?.projects),[A.data,S.data]),I=(0,z.useMemo)(()=>x(j?j.insights.flatMap(e=>e.repo?[e.repo]:[]):[],F),[j,F]),L=e=>{let t=I.get(e);return t?`${t.label}${t.scratch?` · scratch`:``}`:e},[R,V]=(0,z.useState)(null),H=R!==null&&P.includes(R)?R:null,G=(0,z.useMemo)(()=>C(j,H),[j,H]),K=w(j),Z=v(j),Q=(e,t)=>n.data?j?e?{kind:`ready`}:{kind:`empty`,message:t}:{kind:`unknown`,reason:n.data.reason??`the reasoning digest did not answer.`}:{kind:`loading`},$=j?j.totals.steps>0:!1;return(0,B.jsxs)(k,{title:`Mind`,actions:[t,n].some(e=>e.status===`refreshing`)?(0,B.jsx)(a,{}):null,lead:(0,B.jsx)(O,{actions:_}),children:[(0,B.jsx)(M,{span:8,children:(0,B.jsx)(U,{read:t.data,actions:_})}),(0,B.jsx)(M,{span:4,children:(0,B.jsx)(W,{read:t.data})}),(0,B.jsx)(M,{span:12,children:(0,B.jsx)(N,{title:`What the reasoning shows`,caption:j?`Last 30 days · ${j.totals.steps.toLocaleString(`en-US`)} reasoning steps across ${j.totals.sessions} sessions`:void 0,children:(0,B.jsx)(`div`,{id:m(`insights`),children:(0,B.jsx)(q,{insights:K,places:I,loading:!n.data,reason:!n.data||j?null:n.data.reason??`The reasoning digest did not answer.`})})})}),(0,B.jsx)(M,{span:8,children:(0,B.jsx)(c,{title:`Insights by kind and engine`,description:H?`In ${L(H)}`:`All repos · 30 days`,status:Q($&&G.columns.length>0,`No reasoning was recorded in the last 30 days.`),rows:G.rows,columns:G.columns,values:G.values,unit:`insights`,defaultView:e?`table`:`chart`,actions:P.length>1?(0,B.jsxs)(`label`,{className:T.facet,htmlFor:y,children:[`Repo`,(0,B.jsxs)(`select`,{id:y,value:H??``,onChange:e=>V(e.target.value||null),children:[(0,B.jsx)(`option`,{value:``,children:`All`}),P.map(e=>(0,B.jsx)(`option`,{value:e,title:e,children:L(e)},e))]})]}):null})}),(0,B.jsx)(M,{span:4,children:(0,B.jsx)(o,{title:`Struggles and wins`,description:`Per day · days with no reasoning are gaps`,status:Q($,`No reasoning was recorded in the last 30 days.`),series:Z,height:200})}),(0,B.jsx)(M,{span:12,children:(0,B.jsx)(J,{read:t.data,actions:_})}),_.dialogs]})}export{Y as MIND_POLL_MS,Z as MindSection};
|
|
2
|
+
//# sourceMappingURL=MindSection-CDVhHvXl.js.map
|
package/dist/core/web/public/next/assets/{MindSection-BjXHkQPS.js.map → MindSection-CDVhHvXl.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MindSection-BjXHkQPS.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mind/MindCards.tsx","../../../../../../src/web-ui/routes/verse/sections/MindSection.tsx"],"sourcesContent":["/**\n * routes/verse/mind/MindCards.tsx — Mind's cards (SPEC-310B §6, SPEC-310C §5;\n * unit C7): the memo timeline with each move's 7-day outcome ✓/✗ and Veto,\n * the hit-rate gauge with the standards, three A7 insight cards and the\n * action log. Everything the Leader or A7 wrote is untrusted text: rendered\n * as plain text, never as markdown or a link.\n */\nimport type { ReasoningInsight } from '../../../../core/reasoning/types.js';\nimport type { LeaderAction, LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport { Gauge } from '../../../components/charts/Gauge.js';\nimport { UNKNOWN, formatRelative } from '../autonomy/format.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { ActionRow } from '../command/LeaderCard.js';\nimport { anchorId } from '../command/nav.js';\nimport { Card, CardNote, MicroLabel } from '../command/Surface.js';\nimport { postLeader, type OptionalRead } from '../command/surface-data.js';\nimport { KIND_LABEL } from './mind-model.js';\nimport { OUTCOME_WORD, expectedDeltaText, isVetoable, outcomeMark } from './leader-model.js';\nimport { projectLabel, type ProjectLabel } from './project-label.js';\nimport styles from './mind.module.css';\n\nconst MARK: Record<ReturnType<typeof outcomeMark>, string> = { hit: '✓', miss: '✗', pending: '…', ungraded: '—' };\n\nfunction dayHeading(iso: string): string {\n const t = Date.parse(iso);\n return Number.isFinite(t) ? new Date(t).toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' }) : '—';\n}\n\nexport function MemoTimeline({ read, actions }: { read: OptionalRead<LeaderStateV1> | undefined; actions: SurfaceActions }) {\n const state = read?.value ?? null;\n const memos = state?.timeline ?? [];\n const latestId = state?.latest?.id ?? null;\n const latestVetoable = state?.latest?.actions.some((a) => isVetoable(state.actions.find((x) => x.id === a.id) ?? a)) ?? false;\n return (\n <Card title=\"Memos\" caption={state ? `${memos.length} in view · each move graded 7 days later` : undefined}>\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the Leader…</p>\n ) : !state ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The Leader did not answer.'}</CardNote>\n ) : memos.length === 0 ? (\n <CardNote>No memos yet{state.lastRun ? ` — last run: ${state.lastRun.reason ?? state.lastRun.outcome}` : ''}.</CardNote>\n ) : (\n <ol className={styles.timeline}>\n {memos.map((m) => {\n const mark = outcomeMark(m);\n const delta = expectedDeltaText(m.expectedDelta);\n return (\n <li key={m.id} className={styles.memo} data-outcome={mark} id={anchorId(`memo-${m.id}`)}>\n <span className={styles.memoDay}>{dayHeading(m.at)}</span>\n <span className={styles.mark} data-outcome={mark} aria-hidden=\"true\">{MARK[mark]}</span>\n <div className={styles.memoBody}>\n <span className={styles.memoMove}>{m.move ?? (m.status === 'ok' ? 'No move' : `No memo (${m.status.replace(/-/g, ' ')})`)}</span>\n {m.bottleneck ? <span className={styles.memoWhy}>Bottleneck: {m.bottleneck}</span> : null}\n <span className={styles.memoMeta}>\n {delta ? `Expected ${delta}` : 'No expected delta'}\n {' · '}\n <span data-outcome={mark}>\n {mark === 'hit' || mark === 'miss'\n ? `${OUTCOME_WORD[mark]} (actual ${m.outcome?.actualDelta === null || m.outcome?.actualDelta === undefined ? '—' : `${m.outcome.actualDelta >= 0 ? '+' : ''}${m.outcome.actualDelta}`})`\n : OUTCOME_WORD[mark]}\n </span>\n {` · ${m.actionCount} action${m.actionCount === 1 ? '' : 's'}`}\n </span>\n </div>\n {m.id === latestId && latestVetoable ? (\n <button\n type=\"button\"\n className={styles.veto}\n aria-label={`Veto the memo of ${dayHeading(m.at)}`}\n disabled={actions.busy || actions.readOnly}\n onClick={() =>\n actions.act(() => postLeader({ action: 'veto-memo', memoId: m.id }), 'Veto the whole memo', {\n confirm: {\n title: 'Veto this memo?',\n body: 'Every applied action is undone exactly and every scheduled one is cancelled. The Leader records the veto.',\n confirmLabel: 'Veto memo',\n destructive: true,\n },\n })\n }\n >\n Veto\n </button>\n ) : null}\n </li>\n );\n })}\n </ol>\n )}\n </Card>\n );\n}\n\nexport function HitRateCard({ read }: { read: OptionalRead<LeaderStateV1> | undefined }) {\n const state = read?.value ?? null;\n const hr = state?.hitRate ?? null;\n const standards = (state?.standards ?? []).filter((s) => s.retiredAt === null);\n return (\n <div className={styles.stack}>\n <Gauge\n title=\"Leader hit rate\"\n description={hr ? `${hr.hits} of ${hr.graded} graded moves · ${hr.windowDays} days` : undefined}\n status={!read ? { kind: 'loading' } : !state ? { kind: 'unknown', reason: read.reason ?? 'the Leader did not answer.' } : undefined}\n value={hr?.rate ?? null}\n showState={false}\n caption={hr && hr.rate === null ? 'nothing graded yet — moves are graded 7 days after they are made' : undefined}\n size={180}\n />\n <Card title=\"Standards\" caption={state ? `${standards.length} in force` : undefined}>\n {!state ? (\n <CardNote tone=\"unknown\">{read?.reason ?? 'The Leader did not answer.'}</CardNote>\n ) : standards.length === 0 ? (\n <CardNote>No standards yet.</CardNote>\n ) : (\n <ul className={styles.standards}>\n {standards.map((s) => (\n <li key={s.id}>\n <span className={styles.standardRule}>{s.rule}</span>\n <span className={styles.standardMeta}>\n {s.appliesTo} · {s.source === 'mason' ? 'yours' : 'Leader'} · {formatRelative(s.addedAt)}\n </span>\n </li>\n ))}\n </ul>\n )}\n </Card>\n </div>\n );\n}\n\nconst SEVERITY_WORD = { high: 'High', warn: 'Worth a look', info: 'FYI' } as const;\n\n/**\n * Where the insight happened: the project's name, the full path only in the\n * tooltip, and a quiet `scratch` tag for a folder under the OS temp dir\n * (project-label.ts). Plain text, never a link.\n */\nfunction InsightPlace({ place }: { place: ProjectLabel }) {\n return (\n <>\n <span className={styles.insightPlace} title={place.full}>{place.label}</span>\n {place.scratch ? (\n <span className={styles.scratchTag} title=\"A scratch folder under the system temp directory\">scratch</span>\n ) : null}\n </>\n );\n}\n\nexport function InsightCards({\n insights,\n reason,\n loading = false,\n places,\n}: {\n insights: ReasoningInsight[];\n reason: string | null;\n loading?: boolean;\n /** Labels for the insights' repos (MindSection builds them once for the cards and the facet). */\n places?: ReadonlyMap<string, ProjectLabel>;\n}) {\n if (loading) return <p className={styles.muted} aria-busy=\"true\">Reading the reasoning digest…</p>;\n if (reason !== null) return <CardNote tone=\"unknown\">{reason}</CardNote>;\n if (insights.length === 0) {\n return <CardNote>No loops, repeated failures or verification gaps in the last 30 days.</CardNote>;\n }\n return (\n <ul className={styles.insights} aria-label=\"Reasoning insights\">\n {insights.map((i) => {\n const place = i.repo ? (places?.get(i.repo) ?? projectLabel(i.repo)) : null;\n const seen = formatRelative(i.lastAt);\n const rest = [i.engine, `${i.count}×`, seen === UNKNOWN ? null : `last seen ${seen}`].filter(Boolean).join(' · ');\n return (\n <li key={i.id} className={styles.insight} data-severity={i.severity}>\n <span className={styles.insightKind}>\n <MicroLabel>{KIND_LABEL[i.kind]}</MicroLabel>\n <span className={styles.insightSeverity} data-severity={i.severity}>{SEVERITY_WORD[i.severity]}</span>\n </span>\n <span className={styles.insightTitle}>{i.title}</span>\n <span className={styles.insightMeta}>\n {place ? <InsightPlace place={place} /> : null}\n {place && rest ? ' · ' : null}\n {rest}\n </span>\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport function ActionLog({ read, actions }: { read: OptionalRead<LeaderStateV1> | undefined; actions: SurfaceActions }) {\n const state = read?.value ?? null;\n const list: LeaderAction[] = state?.actions ?? [];\n return (\n <Card title=\"Action log\" caption={state ? 'Newest first · Veto runs the recorded inverse' : undefined}>\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the action log…</p>\n ) : !state ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The Leader did not answer.'}</CardNote>\n ) : list.length === 0 ? (\n <CardNote>The Leader has not acted yet.</CardNote>\n ) : (\n <ul className={styles.log} aria-label=\"Leader actions\">\n {list.map((a) => (\n <ActionRow key={a.id} action={a} actions={actions} />\n ))}\n </ul>\n )}\n </Card>\n );\n}\n","/**\n * routes/verse/sections/MindSection.tsx — ⌘4 Mind: what did the Leader\n * decide, and was it right? (SPEC-310B §6, SPEC-310C §5; unit C7)\n *\n * Memo timeline with 7-day outcomes ✓/✗ and Veto (8) | Hit-rate gauge + standards (4)\n * Three A7 insight cards (12)\n * Insight matrix kind × engine, per repo (8) | Reasoning trends (4)\n * Action log with Veto (12)\n *\n * At 375 px one column in that order, and the matrix starts on its table\n * (a 6 × 4 grid of 22 px cells says less than its table on a phone).\n */\nimport { useId, useMemo, useState } from 'react';\nimport { AreaTrend } from '../../../components/charts/AreaTrend.js';\nimport type { ChartStatus } from '../../../components/charts/ChartFrame.js';\nimport { MatrixHeatmap } from '../../../components/charts/MatrixHeatmap.js';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { ActionStatus, useSurfaceActions } from '../command/actions.js';\nimport { anchorId } from '../command/nav.js';\nimport { Card, Cell, Surface } from '../command/Surface.js';\nimport { leaderQuery, reasoningDigestQuery } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useViewport } from '../shell/viewport.js';\nimport { verseBootstrapQuery, verseWorkspacesQuery } from '../verse-queries.js';\nimport { ActionLog, HitRateCard, InsightCards, MemoTimeline } from '../mind/MindCards.js';\nimport { insightMatrix, insightRepos, reasoningTrendSeries, topInsights } from '../mind/mind-model.js';\nimport { projectLabels, projectNames } from '../mind/project-label.js';\nimport styles from '../mind/mind.module.css';\n\nexport const MIND_POLL_MS = 60_000;\nconst NAMES_FRESH_MS = 5 * 60_000;\n\nexport function MindSection() {\n const { compact } = useViewport();\n const leader = useQuery(leaderQuery);\n const digest = useQuery(reasoningDigestQuery, { freshMs: 60_000 });\n const refetchLeader = useRefetch(leaderQuery);\n const refetchDigest = useRefetch(reasoningDigestQuery);\n usePollWhileVisible(() => {\n refetchLeader();\n refetchDigest();\n }, MIND_POLL_MS);\n const actions = useSurfaceActions();\n const facetId = useId();\n\n // Registered project names for the insight cards and the Repo facet. Both\n // reads are normally already cached by Chat (bootstrap on first paint, saved\n // projects in its sidebar) and names rarely change, so a cached answer up\n // to 5 minutes old is used as-is; either missing just means folder names.\n const bootstrap = useQuery(verseBootstrapQuery, { freshMs: NAMES_FRESH_MS });\n const saved = useQuery(verseWorkspacesQuery, { freshMs: NAMES_FRESH_MS });\n\n const d = digest.data?.value ?? null;\n // The facet offers one entry per folder; the labels cover every spelling an\n // insight recorded (`/tmp/x` and `/private/tmp/x` read the same), so a card\n // and the facet always agree.\n const repos = useMemo(() => insightRepos(d), [d]);\n const names = useMemo(() => projectNames(saved.data?.workspaces, bootstrap.data?.projects), [saved.data, bootstrap.data]);\n const places = useMemo(() => projectLabels(d ? d.insights.flatMap((i) => (i.repo ? [i.repo] : [])) : [], names), [d, names]);\n const placeText = (r: string) => {\n const p = places.get(r);\n return p ? `${p.label}${p.scratch ? ' · scratch' : ''}` : r;\n };\n const [repo, setRepo] = useState<string | null>(null);\n const facet = repo !== null && repos.includes(repo) ? repo : null;\n const matrix = useMemo(() => insightMatrix(d, facet), [d, facet]);\n const top = topInsights(d);\n const trends = reasoningTrendSeries(d);\n\n const digestStatus = (hasData: boolean, empty: string): ChartStatus =>\n !digest.data ? { kind: 'loading' } : !d ? { kind: 'unknown', reason: digest.data.reason ?? 'the reasoning digest did not answer.' } : hasData ? { kind: 'ready' } : { kind: 'empty', message: empty };\n const reasoned = d ? d.totals.steps > 0 : false;\n\n return (\n <Surface title=\"Mind\" actions={[leader, digest].some((q) => q.status === 'refreshing') ? <RefreshIndicator /> : null} lead={<ActionStatus actions={actions} />}>\n <Cell span={8}>\n <MemoTimeline read={leader.data} actions={actions} />\n </Cell>\n <Cell span={4}>\n <HitRateCard read={leader.data} />\n </Cell>\n <Cell span={12}>\n <Card title=\"What the reasoning shows\" caption={d ? `Last 30 days · ${d.totals.steps.toLocaleString('en-US')} reasoning steps across ${d.totals.sessions} sessions` : undefined}>\n <div id={anchorId('insights')}>\n <InsightCards insights={top} places={places} loading={!digest.data} reason={!digest.data || d ? null : (digest.data.reason ?? 'The reasoning digest did not answer.')} />\n </div>\n </Card>\n </Cell>\n <Cell span={8}>\n <MatrixHeatmap\n title=\"Insights by kind and engine\"\n description={facet ? `In ${placeText(facet)}` : 'All repos · 30 days'}\n status={digestStatus(reasoned && matrix.columns.length > 0, 'No reasoning was recorded in the last 30 days.')}\n rows={matrix.rows}\n columns={matrix.columns}\n values={matrix.values}\n unit=\"insights\"\n defaultView={compact ? 'table' : 'chart'}\n actions={\n repos.length > 1 ? (\n <label className={styles.facet} htmlFor={facetId}>\n Repo\n <select id={facetId} value={facet ?? ''} onChange={(e) => setRepo(e.target.value || null)}>\n <option value=\"\">All</option>\n {repos.map((r) => (\n <option key={r} value={r} title={r}>\n {placeText(r)}\n </option>\n ))}\n </select>\n </label>\n ) : null\n }\n />\n </Cell>\n <Cell span={4}>\n <AreaTrend\n title=\"Struggles and wins\"\n description=\"Per day · days with no reasoning are gaps\"\n status={digestStatus(reasoned, 'No reasoning was recorded in the last 30 days.')}\n series={trends}\n height={200}\n />\n </Cell>\n <Cell span={12}>\n <ActionLog read={leader.data} actions={actions} />\n </Cell>\n {actions.dialogs}\n </Surface>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MindSection-CDVhHvXl.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mind/MindCards.tsx","../../../../../../src/web-ui/routes/verse/sections/MindSection.tsx"],"sourcesContent":["/**\n * routes/verse/mind/MindCards.tsx — Mind's cards (SPEC-310B §6, SPEC-310C §5;\n * unit C7): the memo timeline with each move's 7-day outcome ✓/✗ and Veto,\n * the hit-rate gauge with the standards, three A7 insight cards and the\n * action log. Everything the Leader or A7 wrote is untrusted text: rendered\n * as plain text, never as markdown or a link.\n */\nimport type { ReasoningInsight } from '../../../../core/reasoning/types.js';\nimport type { LeaderAction, LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport { Gauge } from '../../../components/charts/Gauge.js';\nimport { UNKNOWN, formatRelative } from '../autonomy/format.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { ActionRow } from '../command/LeaderCard.js';\nimport { anchorId } from '../command/nav.js';\nimport { Card, CardNote, MicroLabel } from '../command/Surface.js';\nimport { postLeader, type OptionalRead } from '../command/surface-data.js';\nimport { KIND_LABEL } from './mind-model.js';\nimport { OUTCOME_WORD, expectedDeltaText, isVetoable, outcomeMark } from './leader-model.js';\nimport { projectLabel, type ProjectLabel } from './project-label.js';\nimport styles from './mind.module.css';\n\nconst MARK: Record<ReturnType<typeof outcomeMark>, string> = { hit: '✓', miss: '✗', pending: '…', ungraded: '—' };\n\nfunction dayHeading(iso: string): string {\n const t = Date.parse(iso);\n return Number.isFinite(t) ? new Date(t).toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' }) : '—';\n}\n\nexport function MemoTimeline({ read, actions }: { read: OptionalRead<LeaderStateV1> | undefined; actions: SurfaceActions }) {\n const state = read?.value ?? null;\n const memos = state?.timeline ?? [];\n const latestId = state?.latest?.id ?? null;\n const latestVetoable = state?.latest?.actions.some((a) => isVetoable(state.actions.find((x) => x.id === a.id) ?? a)) ?? false;\n return (\n <Card title=\"Memos\" caption={state ? `${memos.length} in view · each move graded 7 days later` : undefined}>\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the Leader…</p>\n ) : !state ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The Leader did not answer.'}</CardNote>\n ) : memos.length === 0 ? (\n <CardNote>No memos yet{state.lastRun ? ` — last run: ${state.lastRun.reason ?? state.lastRun.outcome}` : ''}.</CardNote>\n ) : (\n <ol className={styles.timeline}>\n {memos.map((m) => {\n const mark = outcomeMark(m);\n const delta = expectedDeltaText(m.expectedDelta);\n return (\n <li key={m.id} className={styles.memo} data-outcome={mark} id={anchorId(`memo-${m.id}`)}>\n <span className={styles.memoDay}>{dayHeading(m.at)}</span>\n <span className={styles.mark} data-outcome={mark} aria-hidden=\"true\">{MARK[mark]}</span>\n <div className={styles.memoBody}>\n <span className={styles.memoMove}>{m.move ?? (m.status === 'ok' ? 'No move' : `No memo (${m.status.replace(/-/g, ' ')})`)}</span>\n {m.bottleneck ? <span className={styles.memoWhy}>Bottleneck: {m.bottleneck}</span> : null}\n <span className={styles.memoMeta}>\n {delta ? `Expected ${delta}` : 'No expected delta'}\n {' · '}\n <span data-outcome={mark}>\n {mark === 'hit' || mark === 'miss'\n ? `${OUTCOME_WORD[mark]} (actual ${m.outcome?.actualDelta === null || m.outcome?.actualDelta === undefined ? '—' : `${m.outcome.actualDelta >= 0 ? '+' : ''}${m.outcome.actualDelta}`})`\n : OUTCOME_WORD[mark]}\n </span>\n {` · ${m.actionCount} action${m.actionCount === 1 ? '' : 's'}`}\n </span>\n </div>\n {m.id === latestId && latestVetoable ? (\n <button\n type=\"button\"\n className={styles.veto}\n aria-label={`Veto the memo of ${dayHeading(m.at)}`}\n disabled={actions.busy || actions.readOnly}\n onClick={() =>\n actions.act(() => postLeader({ action: 'veto-memo', memoId: m.id }), 'Veto the whole memo', {\n confirm: {\n title: 'Veto this memo?',\n body: 'Every applied action is undone exactly and every scheduled one is cancelled. The Leader records the veto.',\n confirmLabel: 'Veto memo',\n destructive: true,\n },\n })\n }\n >\n Veto\n </button>\n ) : null}\n </li>\n );\n })}\n </ol>\n )}\n </Card>\n );\n}\n\nexport function HitRateCard({ read }: { read: OptionalRead<LeaderStateV1> | undefined }) {\n const state = read?.value ?? null;\n const hr = state?.hitRate ?? null;\n const standards = (state?.standards ?? []).filter((s) => s.retiredAt === null);\n return (\n <div className={styles.stack}>\n <Gauge\n title=\"Leader hit rate\"\n description={hr ? `${hr.hits} of ${hr.graded} graded moves · ${hr.windowDays} days` : undefined}\n status={!read ? { kind: 'loading' } : !state ? { kind: 'unknown', reason: read.reason ?? 'the Leader did not answer.' } : undefined}\n value={hr?.rate ?? null}\n showState={false}\n caption={hr && hr.rate === null ? 'nothing graded yet — moves are graded 7 days after they are made' : undefined}\n size={180}\n />\n <Card title=\"Standards\" caption={state ? `${standards.length} in force` : undefined}>\n {!state ? (\n <CardNote tone=\"unknown\">{read?.reason ?? 'The Leader did not answer.'}</CardNote>\n ) : standards.length === 0 ? (\n <CardNote>No standards yet.</CardNote>\n ) : (\n <ul className={styles.standards}>\n {standards.map((s) => (\n <li key={s.id}>\n <span className={styles.standardRule}>{s.rule}</span>\n <span className={styles.standardMeta}>\n {s.appliesTo} · {s.source === 'mason' ? 'yours' : 'Leader'} · {formatRelative(s.addedAt)}\n </span>\n </li>\n ))}\n </ul>\n )}\n </Card>\n </div>\n );\n}\n\nconst SEVERITY_WORD = { high: 'High', warn: 'Worth a look', info: 'FYI' } as const;\n\n/**\n * Where the insight happened: the project's name, the full path only in the\n * tooltip, and a quiet `scratch` tag for a folder under the OS temp dir\n * (project-label.ts). Plain text, never a link.\n */\nfunction InsightPlace({ place }: { place: ProjectLabel }) {\n return (\n <>\n <span className={styles.insightPlace} title={place.full}>{place.label}</span>\n {place.scratch ? (\n <span className={styles.scratchTag} title=\"A scratch folder under the system temp directory\">scratch</span>\n ) : null}\n </>\n );\n}\n\nexport function InsightCards({\n insights,\n reason,\n loading = false,\n places,\n}: {\n insights: ReasoningInsight[];\n reason: string | null;\n loading?: boolean;\n /** Labels for the insights' repos (MindSection builds them once for the cards and the facet). */\n places?: ReadonlyMap<string, ProjectLabel>;\n}) {\n if (loading) return <p className={styles.muted} aria-busy=\"true\">Reading the reasoning digest…</p>;\n if (reason !== null) return <CardNote tone=\"unknown\">{reason}</CardNote>;\n if (insights.length === 0) {\n return <CardNote>No loops, repeated failures or verification gaps in the last 30 days.</CardNote>;\n }\n return (\n <ul className={styles.insights} aria-label=\"Reasoning insights\">\n {insights.map((i) => {\n const place = i.repo ? (places?.get(i.repo) ?? projectLabel(i.repo)) : null;\n const seen = formatRelative(i.lastAt);\n const rest = [i.engine, `${i.count}×`, seen === UNKNOWN ? null : `last seen ${seen}`].filter(Boolean).join(' · ');\n return (\n <li key={i.id} className={styles.insight} data-severity={i.severity}>\n <span className={styles.insightKind}>\n <MicroLabel>{KIND_LABEL[i.kind]}</MicroLabel>\n <span className={styles.insightSeverity} data-severity={i.severity}>{SEVERITY_WORD[i.severity]}</span>\n </span>\n <span className={styles.insightTitle}>{i.title}</span>\n <span className={styles.insightMeta}>\n {place ? <InsightPlace place={place} /> : null}\n {place && rest ? ' · ' : null}\n {rest}\n </span>\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport function ActionLog({ read, actions }: { read: OptionalRead<LeaderStateV1> | undefined; actions: SurfaceActions }) {\n const state = read?.value ?? null;\n const list: LeaderAction[] = state?.actions ?? [];\n return (\n <Card title=\"Action log\" caption={state ? 'Newest first · Veto runs the recorded inverse' : undefined}>\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the action log…</p>\n ) : !state ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The Leader did not answer.'}</CardNote>\n ) : list.length === 0 ? (\n <CardNote>The Leader has not acted yet.</CardNote>\n ) : (\n <ul className={styles.log} aria-label=\"Leader actions\">\n {list.map((a) => (\n <ActionRow key={a.id} action={a} actions={actions} />\n ))}\n </ul>\n )}\n </Card>\n );\n}\n","/**\n * routes/verse/sections/MindSection.tsx — ⌘4 Mind: what did the Leader\n * decide, and was it right? (SPEC-310B §6, SPEC-310C §5; unit C7)\n *\n * Memo timeline with 7-day outcomes ✓/✗ and Veto (8) | Hit-rate gauge + standards (4)\n * Three A7 insight cards (12)\n * Insight matrix kind × engine, per repo (8) | Reasoning trends (4)\n * Action log with Veto (12)\n *\n * At 375 px one column in that order, and the matrix starts on its table\n * (a 6 × 4 grid of 22 px cells says less than its table on a phone).\n */\nimport { useId, useMemo, useState } from 'react';\nimport { AreaTrend } from '../../../components/charts/AreaTrend.js';\nimport type { ChartStatus } from '../../../components/charts/ChartFrame.js';\nimport { MatrixHeatmap } from '../../../components/charts/MatrixHeatmap.js';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { ActionStatus, useSurfaceActions } from '../command/actions.js';\nimport { anchorId } from '../command/nav.js';\nimport { Card, Cell, Surface } from '../command/Surface.js';\nimport { leaderQuery, reasoningDigestQuery } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useViewport } from '../shell/viewport.js';\nimport { verseBootstrapQuery, verseWorkspacesQuery } from '../verse-queries.js';\nimport { ActionLog, HitRateCard, InsightCards, MemoTimeline } from '../mind/MindCards.js';\nimport { insightMatrix, insightRepos, reasoningTrendSeries, topInsights } from '../mind/mind-model.js';\nimport { projectLabels, projectNames } from '../mind/project-label.js';\nimport styles from '../mind/mind.module.css';\n\nexport const MIND_POLL_MS = 60_000;\nconst NAMES_FRESH_MS = 5 * 60_000;\n\nexport function MindSection() {\n const { compact } = useViewport();\n const leader = useQuery(leaderQuery);\n const digest = useQuery(reasoningDigestQuery, { freshMs: 60_000 });\n const refetchLeader = useRefetch(leaderQuery);\n const refetchDigest = useRefetch(reasoningDigestQuery);\n usePollWhileVisible(() => {\n refetchLeader();\n refetchDigest();\n }, MIND_POLL_MS);\n const actions = useSurfaceActions();\n const facetId = useId();\n\n // Registered project names for the insight cards and the Repo facet. Both\n // reads are normally already cached by Chat (bootstrap on first paint, saved\n // projects in its sidebar) and names rarely change, so a cached answer up\n // to 5 minutes old is used as-is; either missing just means folder names.\n const bootstrap = useQuery(verseBootstrapQuery, { freshMs: NAMES_FRESH_MS });\n const saved = useQuery(verseWorkspacesQuery, { freshMs: NAMES_FRESH_MS });\n\n const d = digest.data?.value ?? null;\n // The facet offers one entry per folder; the labels cover every spelling an\n // insight recorded (`/tmp/x` and `/private/tmp/x` read the same), so a card\n // and the facet always agree.\n const repos = useMemo(() => insightRepos(d), [d]);\n const names = useMemo(() => projectNames(saved.data?.workspaces, bootstrap.data?.projects), [saved.data, bootstrap.data]);\n const places = useMemo(() => projectLabels(d ? d.insights.flatMap((i) => (i.repo ? [i.repo] : [])) : [], names), [d, names]);\n const placeText = (r: string) => {\n const p = places.get(r);\n return p ? `${p.label}${p.scratch ? ' · scratch' : ''}` : r;\n };\n const [repo, setRepo] = useState<string | null>(null);\n const facet = repo !== null && repos.includes(repo) ? repo : null;\n const matrix = useMemo(() => insightMatrix(d, facet), [d, facet]);\n const top = topInsights(d);\n const trends = reasoningTrendSeries(d);\n\n const digestStatus = (hasData: boolean, empty: string): ChartStatus =>\n !digest.data ? { kind: 'loading' } : !d ? { kind: 'unknown', reason: digest.data.reason ?? 'the reasoning digest did not answer.' } : hasData ? { kind: 'ready' } : { kind: 'empty', message: empty };\n const reasoned = d ? d.totals.steps > 0 : false;\n\n return (\n <Surface title=\"Mind\" actions={[leader, digest].some((q) => q.status === 'refreshing') ? <RefreshIndicator /> : null} lead={<ActionStatus actions={actions} />}>\n <Cell span={8}>\n <MemoTimeline read={leader.data} actions={actions} />\n </Cell>\n <Cell span={4}>\n <HitRateCard read={leader.data} />\n </Cell>\n <Cell span={12}>\n <Card title=\"What the reasoning shows\" caption={d ? `Last 30 days · ${d.totals.steps.toLocaleString('en-US')} reasoning steps across ${d.totals.sessions} sessions` : undefined}>\n <div id={anchorId('insights')}>\n <InsightCards insights={top} places={places} loading={!digest.data} reason={!digest.data || d ? null : (digest.data.reason ?? 'The reasoning digest did not answer.')} />\n </div>\n </Card>\n </Cell>\n <Cell span={8}>\n <MatrixHeatmap\n title=\"Insights by kind and engine\"\n description={facet ? `In ${placeText(facet)}` : 'All repos · 30 days'}\n status={digestStatus(reasoned && matrix.columns.length > 0, 'No reasoning was recorded in the last 30 days.')}\n rows={matrix.rows}\n columns={matrix.columns}\n values={matrix.values}\n unit=\"insights\"\n defaultView={compact ? 'table' : 'chart'}\n actions={\n repos.length > 1 ? (\n <label className={styles.facet} htmlFor={facetId}>\n Repo\n <select id={facetId} value={facet ?? ''} onChange={(e) => setRepo(e.target.value || null)}>\n <option value=\"\">All</option>\n {repos.map((r) => (\n <option key={r} value={r} title={r}>\n {placeText(r)}\n </option>\n ))}\n </select>\n </label>\n ) : null\n }\n />\n </Cell>\n <Cell span={4}>\n <AreaTrend\n title=\"Struggles and wins\"\n description=\"Per day · days with no reasoning are gaps\"\n status={digestStatus(reasoned, 'No reasoning was recorded in the last 30 days.')}\n series={trends}\n height={200}\n />\n </Cell>\n <Cell span={12}>\n <ActionLog read={leader.data} actions={actions} />\n </Cell>\n {actions.dialogs}\n </Surface>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._body_1kukj_1{font-size:var(--text-sm-size);line-height:var(--text-sm-line);color:var(--text-secondary);margin-bottom:var(--space-4)}._form_1kukj_8{gap:var(--space-2);flex-direction:column;display:flex}._label_1kukj_14{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._inputRow_1kukj_19{gap:var(--space-2);display:flex}._input_1kukj_19{padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--border-default);background:var(--bg-input);font-family:var(--font-mono);font-size:var(--text-sm-size);flex:1;min-width:0}._input_1kukj_19:focus-visible{border-color:var(--border-focus);box-shadow:var(--shadow-focus-ring)}._reveal_1kukj_40{padding:0 var(--space-3);border-radius:var(--radius-md);border:1px solid var(--border-default);font-size:var(--text-sm-size);color:var(--text-secondary)}._reveal_1kukj_40:hover{background:var(--bg-hover)}._error_1kukj_51{color:var(--status-danger-fg);font-size:var(--text-sm-size)}._actions_1kukj_56{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-3);display:flex}._cancel_1kukj_63{padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);color:var(--text-secondary)}._cancel_1kukj_63:hover{background:var(--bg-hover)}._submit_1kukj_72{padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);background:var(--accent-500);color:var(--text-on-accent);font-weight:var(--font-weight-medium)}._submit_1kukj_72:hover:not(:disabled){background:var(--accent-600)}._submit_1kukj_72:disabled{opacity:.5;cursor:not-allowed}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,n as t,o as n,s as r}from"./index-DbDw9UAs.js";import{f as i}from"./global-BkNl4e6E.js";import{t as a}from"./Dialog-BpgcEW6b.js";var o=r(e(),1),s={body:`_body_1kukj_1`,form:`_form_1kukj_8`,label:`_label_1kukj_14`,inputRow:`_inputRow_1kukj_19`,input:`_input_1kukj_19`,reveal:`_reveal_1kukj_40`,error:`_error_1kukj_51`,actions:`_actions_1kukj_56`,cancel:`_cancel_1kukj_63`,submit:`_submit_1kukj_72`},c=n({MutationTokenDialog:()=>d}),l=t(),u=/^[a-f0-9]{64}$/;function d({open:e,onClose:t,onUnlocked:n,reason:r,tokenLabel:c=`Mutation token`,tokenHelp:d=`the mutation token ashlr serve printed`}){let{setToken:f}=i(),[p,m]=(0,o.useState)(``),[h,g]=(0,o.useState)(!1),[_,v]=(0,o.useState)(null),y=(0,o.useRef)(null),b=(0,o.useId)(),x=(0,o.useId)();function S(e){e.preventDefault();let r=p.trim();if(!u.test(r)){v(`Expected 64 hex characters — ${d}.`);return}f(r),m(``),v(null),t(),n?.()}return(0,l.jsxs)(a,{open:e,onClose:t,titleId:b,title:`Unlock actions`,initialFocusRef:y,children:[(0,l.jsxs)(`p`,{className:s.body,children:[r??`This action mutates the fleet and requires the dispatch token.`,` It is held in memory only, for this browser tab, and is cleared automatically after 20 minutes idle.`]}),(0,l.jsxs)(`form`,{onSubmit:S,className:s.form,noValidate:!0,children:[(0,l.jsx)(`label`,{htmlFor:x,className:s.label,children:c}),(0,l.jsxs)(`div`,{className:s.inputRow,children:[(0,l.jsx)(`input`,{ref:y,id:x,type:h?`text`:`password`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,className:s.input,value:p,onChange:e=>m(e.target.value),"aria-invalid":_?!0:void 0,placeholder:`64 hex characters`}),(0,l.jsx)(`button`,{type:`button`,className:s.reveal,onClick:()=>g(e=>!e),"aria-pressed":h,children:h?`Hide`:`Show`})]}),_?(0,l.jsx)(`p`,{className:s.error,role:`alert`,children:_}):null,(0,l.jsxs)(`div`,{className:s.actions,children:[(0,l.jsx)(`button`,{type:`button`,className:s.cancel,onClick:t,children:`Cancel`}),(0,l.jsx)(`button`,{type:`submit`,className:s.submit,disabled:p.trim().length===0,children:`Unlock`})]})]})]})}export{c as n,d as t};
|
|
2
|
+
//# sourceMappingURL=MutationTokenDialog-DTQzEOHR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MutationTokenDialog-DTQzEOHR.js","names":[],"sources":["../../../../../../src/web-ui/components/auth/MutationTokenDialog.module.css","../../../../../../src/web-ui/components/auth/MutationTokenDialog.tsx"],"sourcesContent":[".body {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n margin-bottom: var(--space-4);\n}\n\n.form {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.label {\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-medium);\n}\n\n.inputRow {\n display: flex;\n gap: var(--space-2);\n}\n\n.input {\n flex: 1;\n padding: var(--space-3);\n border-radius: var(--radius-md);\n border: 1px solid var(--border-default);\n background: var(--bg-input);\n font-family: var(--font-mono);\n font-size: var(--text-sm-size);\n min-width: 0;\n}\n\n.input:focus-visible {\n border-color: var(--border-focus);\n box-shadow: var(--shadow-focus-ring);\n}\n\n.reveal {\n padding: 0 var(--space-3);\n border-radius: var(--radius-md);\n border: 1px solid var(--border-default);\n font-size: var(--text-sm-size);\n color: var(--text-secondary);\n}\n.reveal:hover {\n background: var(--bg-hover);\n}\n\n.error {\n color: var(--status-danger-fg);\n font-size: var(--text-sm-size);\n}\n\n.actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-2);\n margin-top: var(--space-3);\n}\n\n.cancel {\n padding: var(--space-2) var(--space-4);\n border-radius: var(--radius-md);\n color: var(--text-secondary);\n}\n.cancel:hover {\n background: var(--bg-hover);\n}\n\n.submit {\n padding: var(--space-2) var(--space-4);\n border-radius: var(--radius-md);\n background: var(--accent-500);\n color: var(--text-on-accent);\n font-weight: var(--font-weight-medium);\n}\n.submit:hover:not(:disabled) {\n background: var(--accent-600);\n}\n.submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n","/**\n * components/auth/MutationTokenDialog.tsx — replaces window.prompt() for\n * the mutation token (foundation brief item 5, the \"biggest reason\n * operators abandon the UI for the CLI\" finding). A focus-managed dialog\n * instead of a blocking native prompt, and a session-scoped hold (see\n * auth-store.ts) so approving 12 proposals is one paste, not twelve.\n *\n * The token is NEVER written to localStorage/sessionStorage/cookies — only\n * held in an in-memory module variable in auth-store.ts, cleared on tab\n * close, idle timeout, or the explicit \"Lock\" action here.\n */\nimport { useId, useRef, useState, type FormEvent } from 'react';\nimport { Dialog } from '../primitives/Dialog.js';\nimport { useMutationHold } from '../../data/hooks.js';\nimport styles from './MutationTokenDialog.module.css';\n\nconst TOKEN_RE = /^[a-f0-9]{64}$/;\n\nexport interface MutationTokenDialogProps {\n open: boolean;\n onClose: () => void;\n onUnlocked?: () => void;\n /** Human context for why the token is being requested right now. */\n reason?: string;\n /** Scoped consoles can name their own startup token without changing the hold. */\n tokenLabel?: string;\n tokenHelp?: string;\n}\n\nexport function MutationTokenDialog({ open, onClose, onUnlocked, reason, tokenLabel = 'Mutation token',\n tokenHelp = 'the mutation token ashlr serve printed' }: MutationTokenDialogProps) {\n const { setToken } = useMutationHold();\n const [value, setValue] = useState('');\n const [reveal, setReveal] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const titleId = useId();\n const inputId = useId();\n\n function submit(e: FormEvent) {\n e.preventDefault();\n const trimmed = value.trim();\n if (!TOKEN_RE.test(trimmed)) {\n setError(`Expected 64 hex characters — ${tokenHelp}.`);\n return;\n }\n setToken(trimmed);\n setValue('');\n setError(null);\n onClose();\n onUnlocked?.();\n }\n\n return (\n <Dialog open={open} onClose={onClose} titleId={titleId} title=\"Unlock actions\" initialFocusRef={inputRef}>\n <p className={styles.body}>\n {reason ?? 'This action mutates the fleet and requires the dispatch token.'} It is held in\n memory only, for this browser tab, and is cleared automatically after 20 minutes idle.\n </p>\n <form onSubmit={submit} className={styles.form} noValidate>\n <label htmlFor={inputId} className={styles.label}>\n {tokenLabel}\n </label>\n <div className={styles.inputRow}>\n <input\n ref={inputRef}\n id={inputId}\n type={reveal ? 'text' : 'password'}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n className={styles.input}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n aria-invalid={error ? true : undefined}\n placeholder=\"64 hex characters\"\n />\n <button\n type=\"button\"\n className={styles.reveal}\n onClick={() => setReveal((r) => !r)}\n aria-pressed={reveal}\n >\n {reveal ? 'Hide' : 'Show'}\n </button>\n </div>\n {error ? (\n <p className={styles.error} role=\"alert\">\n {error}\n </p>\n ) : null}\n <div className={styles.actions}>\n <button type=\"button\" className={styles.cancel} onClick={onClose}>\n Cancel\n </button>\n <button type=\"submit\" className={styles.submit} disabled={value.trim().length === 0}>\n Unlock\n </button>\n </div>\n </form>\n </Dialog>\n );\n}\n"],"mappings":"mcCgBM,EAAW,iBAajB,SAAgB,EAAoB,CAAE,OAAM,UAAS,aAAY,SAAQ,aAAa,iBACpF,YAAY,0CAAsE,CAClF,GAAM,CAAE,YAAa,EAAgB,EAC/B,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAS,EAAE,EAC/B,CAAC,EAAQ,IAAA,EAAa,EAAA,SAAA,CAAS,EAAK,EACpC,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAwB,IAAI,EAChD,GAAA,EAAW,EAAA,OAAA,CAAyB,IAAI,EACxC,GAAA,EAAU,EAAA,MAAA,CAAM,EAChB,GAAA,EAAU,EAAA,MAAA,CAAM,EAEtB,SAAS,EAAO,EAAc,CAC5B,EAAE,eAAe,EACjB,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,CAAC,EAAS,KAAK,CAAO,EAAG,CAC3B,EAAS,gCAAgC,EAAU,EAAE,EACrD,MACF,CACA,EAAS,CAAO,EAChB,EAAS,EAAE,EACX,EAAS,IAAI,EACb,EAAQ,EACR,IAAa,CACf,CAEA,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAc,OAAe,UAAkB,UAAS,MAAM,iBAAiB,gBAAiB,EAAhG,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAW,EAAO,KAArB,SAAA,CACG,GAAU,iEAAiE,uGAE3E,CACH,CAAA,GAAA,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,SAAU,EAAQ,UAAW,EAAO,KAAM,WAAA,GAAhD,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,QAAD,CAAO,QAAS,EAAS,UAAW,EAAO,MACxC,SAAA,CACI,CAAA,GACP,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,QAAD,CACE,IAAK,EACL,GAAI,EACJ,KAAM,EAAS,OAAS,WACxB,aAAa,MACb,YAAY,MACZ,WAAY,GACZ,UAAW,EAAO,MACX,QACP,SAAW,GAAM,EAAS,EAAE,OAAO,KAAK,EACxC,eAAc,EAAQ,GAAO,IAAA,GAC7B,YAAY,mBACb,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,SAAD,CACE,KAAK,SACL,UAAW,EAAO,OAClB,YAAe,EAAW,GAAM,CAAC,CAAC,EAClC,eAAc,EAEb,SAAA,EAAS,OAAS,MACb,CAAA,CACL,IACJ,GACC,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAO,MAAO,KAAK,QAC9B,SAAA,CACA,CAAA,EACD,MACJ,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAO,QAAvB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,OAAQ,QAAS,EAAS,SAAA,QAE1D,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,OAAQ,SAAU,EAAM,KAAK,CAAC,CAAC,SAAW,EAAG,SAAA,QAE7E,CAAA,CACL,GACD,CACA,CAAA,CAAA,GAEZ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,i as t,n,s as r}from"./index-DbDw9UAs.js";import{D as i,F as a,U as o,W as s,a as c,i as l,k as u,l as d,o as f,p as ee,s as p}from"./global-BkNl4e6E.js";import{t as m}from"./focus-trap-QqQxQdvH.js";import{t as h}from"./Epistemic-DVx6oHzp.js";import{n as g}from"./StatusBadge-Q9YYkijx.js";import{h as te}from"./queries-THD05gHP.js";import{r as _,t as ne}from"./mutations-Kvzsg-iK.js";import{t as v}from"./MutationTokenDialog-DTQzEOHR.js";import{t as y}from"./ConfirmDialog-B7ZwCQOX.js";import{r as b}from"./RouteErrorBoundary-C_B11J0s.js";import{t as x}from"./RefreshIndicator-CKY5BGdD.js";import{t as S}from"./DiffViewer-CoV5-nUf.js";import{l as C}from"./command-catalog-Bb_PxC5w.js";import{b as w,n as T}from"./workbench-types-DzN-5trg.js";import{i as E,n as D,r as re}from"./guarded-action-DHiL8tY5.js";import{n as O}from"./viewport-BYGH5EgA.js";import{C as k,S as A,b as j,g as M,r as N,s as P,t as F}from"./verse-ui-store-D7YXi63q.js";import{F as I,I as L,N as R,x as z}from"./VerseConsoleApp-CTF3Shs0.js";import{v as B}from"./format-CaMmVQCn.js";import{n as ie,t as V}from"./Button-DqgLUZvd.js";import{c as H,x as ae}from"./icons-C5EFt_Ts.js";import{a as oe}from"./verse-icons-DASWdYuE.js";import{C as U,D as W,E as G,S as K,T as q,_ as se,a as J,b as ce,c as le,d as ue,f as de,g as fe,h as pe,i as me,l as he,m as ge,n as _e,o as ve,p as ye,r as Y,s as be,t as xe,u as Se,v as Ce,w as we,x as Te,y as Ee}from"./NeedsYouList-ChnRmbSk.js";var X=r(e(),1),De=r(t(),1),Z={layout:`_layout_141uy_8`,listPane:`_listPane_141uy_9`,detailPane:`_detailPane_141uy_10`,filters:`_filters_141uy_12`,filterField:`_filterField_141uy_13`,filterLabel:`_filterLabel_141uy_14`,filterSelect:`_filterSelect_141uy_31`,count:`_count_141uy_46`,rows:`_rows_141uy_48`,row:`_row_141uy_48`,rowActive:`_rowActive_141uy_63`,riskRule:`_riskRule_141uy_68`,rowTitle:`_rowTitle_141uy_72`,rowMeta:`_rowMeta_141uy_73`,rowMetaMono:`_rowMetaMono_141uy_82`,rowAge:`_rowAge_141uy_83`,riskWord:`_riskWord_141uy_84`,detail:`_detail_141uy_10`,detailHead:`_detailHead_141uy_91`,eyebrow:`_eyebrow_141uy_92`,detailTitle:`_detailTitle_141uy_95`,project:`_project_141uy_109`,runFacts:`_runFacts_141uy_110`,diffStats:`_diffStats_141uy_112`,runSource:`_runSource_141uy_113`,hint:`_hint_141uy_114`,detailMeta:`_detailMeta_141uy_115`,summary:`_summary_141uy_117`,block:`_block_141uy_119`,blockTitle:`_blockTitle_141uy_120`,defs:`_defs_141uy_129`,muted:`_muted_141uy_133`,failedChecks:`_failedChecks_141uy_134`,actions:`_actions_141uy_136`,actionNote:`_actionNote_141uy_137`,reject:`_reject_141uy_138`,approve:`_approve_141uy_139`,decided:`_decided_141uy_155`,empty:`_empty_141uy_157`,emptyStrong:`_emptyStrong_141uy_158`,error:`_error_141uy_159`,skeletons:`_skeletons_141uy_160`},Q=n(),Oe={"judge-ship-would-merge":{label:`Ship (would merge)`,tone:`success`},"judge-ship-review-required":{label:`Ship (review required)`,tone:`success`},"judge-review":{label:`Review`,tone:`warning`},"judge-noise":{label:`Noise`,tone:`neutral`},"judge-harmful":{label:`Harmful`,tone:`danger`},"judge-verdict-unrecognized":{label:`Unrecognized verdict`,tone:`unknown`},"judge-parse-failure":{label:`Judge parse failure — not a review`,tone:`unknown`},"judge-network-failure":{label:`Judge network failure — not a review`,tone:`unknown`}};function ke(e){let t=e.filter(e=>e.action===`judged`&&e.judgeReasonCode);return t.length===0?null:t.reduce((e,t)=>Date.parse(t.ts)>Date.parse(e.ts)?t:e)}function Ae({id:e,dispatchEnabled:t,onDispatchDisabled:n,onDecided:r}){let i=ee(te(e)),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(!1),[d,f]=(0,X.useState)(!1),[m,b]=(0,X.useState)(!1),[C,w]=(0,X.useState)(null);function T(e){w(null),o(e),f(!0)}function E(){c(!1),u()?(f(!0),O()):o(null)}function re(){if(a){if(!u()){f(!1),c(!0);return}O()}}async function O(){if(a){b(!0),w(null);try{a===`approve`?await ne(e):await _(e),f(!1),o(null),r()}catch(e){e instanceof p?(f(!1),o(null),n()):w(D(e))}finally{b(!1)}}}if(i.status===`loading`)return(0,Q.jsxs)(`div`,{className:Z.detail,children:[(0,Q.jsx)(l,{width:`55%`}),(0,Q.jsx)(l,{width:`30%`}),(0,Q.jsx)(l,{width:`88%`})]});if(i.status===`error`||!i.data)return(0,Q.jsx)(`p`,{className:Z.error,role:`alert`,children:i.error?.message??`Could not load this proposal.`});let k=i.data,A=k.decisionEvidence,j=ke(A?.decisions??[]),M=j?.judgeReasonCode?Oe[j.judgeReasonCode]:null,N=k.status===`pending`&&t,P=Ee(k),F=se(k.kind,k.repo),I=G(k.title),L=W(k.repo),R=we(k.summary),z=R?R.rest:k.summary?B(k.summary):null;return(0,Q.jsxs)(`div`,{className:Z.detail,children:[(0,Q.jsxs)(`header`,{className:Z.detailHead,children:[(0,Q.jsxs)(`p`,{className:Z.eyebrow,children:[Te(k.kind),I.eyebrow?` \u00b7 ${I.eyebrow}`:``]}),(0,Q.jsx)(`h3`,{className:Z.detailTitle,title:k.title,children:I.text}),(0,Q.jsxs)(`div`,{className:Z.detailMeta,children:[(0,Q.jsx)(g,{status:k.status}),L?(0,Q.jsx)(`span`,{className:Z.project,title:k.repo??void 0,children:L}):(0,Q.jsx)(`span`,{children:`no repository`}),(0,Q.jsx)(`span`,{children:k.riskClass?`${k.riskClass} risk`:`risk unstated`}),P?(0,Q.jsx)(`code`,{title:`The model that produced this change`,children:P}):null,(0,Q.jsxs)(`span`,{title:K(k.createdAt),children:[`created `,U(k.createdAt)]}),k.decidedAt?(0,Q.jsxs)(`span`,{title:K(k.decidedAt),children:[`decided `,U(k.decidedAt)]}):null,i.status===`refreshing`?(0,Q.jsx)(x,{}):null]}),R?(0,Q.jsxs)(`p`,{className:Z.runFacts,children:[(0,Q.jsx)(`span`,{className:Z.diffStats,"aria-hidden":`true`,children:ce(R)}),(0,Q.jsx)(`span`,{className:`visually-hidden`,children:Ce(R)}),(0,Q.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Q.jsxs)(`span`,{className:Z.runSource,title:R.sourceHint??void 0,children:[R.partial?`Partial · `:``,R.sourceLabel]}),P===null?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Q.jsx)(`code`,{title:`The model that produced this change`,children:R.model})]}):null]}):null,z?(0,Q.jsx)(`p`,{className:Z.summary,children:z}):null]}),(0,Q.jsxs)(`section`,{className:Z.block,"aria-label":`Evidence`,children:[(0,Q.jsx)(`h4`,{className:Z.blockTitle,children:`Evidence`}),(0,Q.jsxs)(`dl`,{className:Z.defs,children:[(0,Q.jsx)(`dt`,{children:`Judge verdict`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(h,{quality:A?.sourceQuality,label:`judge verdict`,children:M&&j?.judgeReasonCode?(0,Q.jsx)(g,{status:j.judgeReasonCode,tone:M.tone,children:M.label}):(0,Q.jsx)(`span`,{className:Z.muted,children:`not yet judged`})})}),(0,Q.jsx)(`dt`,{children:`Verification`}),(0,Q.jsx)(`dd`,{children:k.verifyResult?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(g,{status:k.verifyResult.passed?`success`:`failed`,children:k.verifyResult.passed?`passed`:`failed`}),k.verifyResult.ran&&k.verifyResult.ran.length>0?(0,Q.jsxs)(`span`,{className:Z.muted,children:[` · ran `,k.verifyResult.ran.map(e=>e.kind).join(`, `)]}):null,!k.verifyResult.passed&&k.verifyResult.failureCategory&&k.verifyResult.failureCategory!==`code`?(0,Q.jsxs)(`span`,{className:Z.muted,children:[` · `,k.verifyResult.failureCategory,` failure — the verifier itself, not the diff`]}):null,k.verifyResult.failed&&k.verifyResult.failed.length>0?(0,Q.jsxs)(`p`,{className:Z.failedChecks,children:[`failed: `,k.verifyResult.failed.join(`, `)]}):null]}):(0,Q.jsx)(`span`,{className:Z.muted,children:`not verified`})}),k.decisionReason?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Decision reason`}),(0,Q.jsx)(`dd`,{children:B(k.decisionReason)})]}):null,k.evidenceOutcome?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Gates`}),(0,Q.jsxs)(`dd`,{className:Z.muted,children:[k.evidenceOutcome.gateCount??0,` gate`,k.evidenceOutcome.gateCount===1?``:`s`,k.evidenceOutcome.policyAction?` · policy ${k.evidenceOutcome.policyAction}`:``,k.evidenceOutcome.trustBasis?` · trust ${k.evidenceOutcome.trustBasis}`:``]})]}):null,k.result?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Result`}),(0,Q.jsx)(`dd`,{children:B(k.result)})]}):null]})]}),(0,Q.jsxs)(`section`,{className:Z.block,"aria-label":`Provenance`,children:[(0,Q.jsx)(`h4`,{className:Z.blockTitle,children:`Provenance`}),(0,Q.jsxs)(`dl`,{className:Z.defs,children:[(0,Q.jsx)(`dt`,{children:`Produced by`}),(0,Q.jsx)(`dd`,{children:P?(0,Q.jsx)(`code`,{children:P}):(0,Q.jsx)(`span`,{className:Z.muted,children:`unknown engine`})}),(0,Q.jsx)(`dt`,{children:`Origin`}),(0,Q.jsx)(`dd`,{children:k.origin}),R?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`How it was made`}),(0,Q.jsxs)(`dd`,{children:[(0,Q.jsx)(`span`,{title:R.sourceHint??void 0,children:R.sourceLabel}),R.sourceHint?(0,Q.jsx)(`p`,{className:Z.hint,children:R.sourceHint}):null]})]}):null,k.repo?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Repository`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(`code`,{children:k.repo})})]}):null,k.workItemId?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Work item`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(`code`,{children:k.workItemId})})]}):null,k.runId?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Run`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(`code`,{children:k.runId})})]}):null,(0,Q.jsx)(`dt`,{children:`Attestation`}),(0,Q.jsxs)(`dd`,{className:Z.muted,children:[k.producerProvenanceSig?`signed by the sandboxed producer (v${k.producerProvenanceVersion??2})`:k.provenanceSig?`legacy signature present`:`unsigned — earns no positive routing credit`,k.diffHash?` · diff hashed at signing time`:``]})]})]}),(0,Q.jsxs)(`section`,{className:Z.block,"aria-label":`Diff`,children:[(0,Q.jsx)(`h4`,{className:Z.blockTitle,children:`Diff`}),(0,Q.jsx)(S,{diff:k.diff,proposalKind:k.kind})]}),k.status===`pending`?(0,Q.jsxs)(`footer`,{className:Z.actions,children:[(0,Q.jsx)(`p`,{className:Z.actionNote,children:t?F:`Read-only session — approve and reject are unavailable without dispatch.`}),C&&!d?(0,Q.jsx)(`p`,{className:Z.error,role:`alert`,children:C}):null,(0,Q.jsx)(`button`,{type:`button`,className:Z.reject,disabled:!N||m,onClick:()=>T(`reject`),children:`Reject`}),(0,Q.jsx)(`button`,{type:`button`,className:Z.approve,disabled:!N||m,onClick:()=>T(`approve`),children:`Approve…`})]}):(0,Q.jsxs)(`footer`,{className:Z.decided,children:[`This proposal is already `,(0,Q.jsx)(`strong`,{children:k.status}),` — no further action is available.`]}),(0,Q.jsx)(v,{open:s,onClose:E,reason:a===`approve`?`Approving a proposal writes to a real repository and requires the dispatch token.`:`Rejecting a proposal requires the dispatch token.`,tokenHelp:`the mutation token ashlr verse printed`}),(0,Q.jsx)(y,{open:d,onClose:()=>{f(!1),o(null),w(null)},title:a===`approve`?`Approve this ${k.kind} against ${L??`the repository`}?`:`Reject this proposal?`,body:a===`approve`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`strong`,{children:I.text}),(0,Q.jsx)(`br`,{}),Te(k.kind),` · `,(0,Q.jsx)(`strong`,{children:L??`unknown repository`}),k.repo?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`br`,{}),(0,Q.jsx)(`code`,{children:k.repo})]}):null,(0,Q.jsx)(`br`,{}),(0,Q.jsx)(`br`,{}),F,q(k.kind)?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`br`,{}),(0,Q.jsx)(`br`,{}),`This one leaves your machine.`]}):null]}):(0,Q.jsxs)(Q.Fragment,{children:[`This rejects `,(0,Q.jsx)(`strong`,{children:I.text}),` and discards it. It stays in history as rejected and is never applied.`]}),confirmLabel:a===`approve`?`Approve and ${q(k.kind)?`open the pull request`:`apply`}`:`Reject`,destructive:a===`approve`,busy:m,error:C,onConfirm:re})]})}var $=new Map,je=new Set;function Me(){for(let e of[...je])e()}function Ne(e,t=Date.now()){$=new Map($).set(e,t),Me()}function Pe(e,t=Date.now()){let n=!1,r=new Map($);for(let[i,a]of r)(!e.has(i)||t-a>6e4)&&(r.delete(i),n=!0);n&&($=r,Me())}function Fe(){return(0,X.useSyncExternalStore)(e=>(je.add(e),()=>je.delete(e)),()=>$,()=>$)}function Ie(e){Ne(e.id),e.source===`approvals`&&(o(`inbox`),o(`dashboard-snapshot`),s(`inbox-list:`),e.target.kind===`approval`&&o(`proposal-detail-${e.target.proposalId}`)),I()}function Le(e,t,n){let r=t.request;if(!r){n.openTarget(e);return}if(!w(r.path)){n.toast(`That action points outside this app and was not sent.`,`danger`);return}let o=be(e,t),s=ue(e).text,c=async()=>{let e=i();if(!e)throw new f(`Mutation token was rejected.`,401,r.path);await d(r.path,r.body,e),a()},l=me.has(t.kind)||o!==null;E({title:o?.title??t.label,body:o?.body??s,confirmLabel:o?.confirmLabel??t.label,destructive:t.destructive,token:!0,tokenReason:`${t.label} changes state on this machine and requires the dispatch token.`,skipConfirm:!l,run:c,onDone:()=>{Ie(e),n.toast(`${t.label}: ${s}`,`success`)},onError:l?void 0:e=>n.toast(e,`danger`)})}var Re={"drawer.approve":`approve`,"drawer.reject":`reject`,"drawer.veto":`veto`,"drawer.done":`done`};function ze(e){return e instanceof HTMLElement?e.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(e.tagName):!1}function Be(){let e=R(),t=L(),n=b(),r=ee(z),{compact:i}=O(),a=Fe(),o=(0,X.useId)(),s=(0,X.useRef)(null),l=(0,X.useRef)(null),u=(0,X.useRef)(null),[d,f]=(0,X.useState)(null),[p,h]=(0,X.useState)(null),[g,te]=(0,X.useState)(!1),[_,ne]=(0,X.useState)(()=>Date.now());(0,X.useEffect)(()=>{let e=setInterval(()=>ne(Date.now()),15e3);return()=>clearInterval(e)},[]);let v=t.data,y=v?.needsYou;(0,X.useEffect)(()=>{y&&Pe(new Set(y.map(e=>e.id)))},[y]);let x=(0,X.useMemo)(()=>(y??[]).filter(e=>!a.has(e.id)),[y,a]),S=e.needsYouSplit,w=(0,X.useMemo)(()=>he(x,S),[x,S]),T=(0,X.useMemo)(()=>ge(x),[x]),E=pe(v?.sources??null,S),D=(r.data?.dispatchEnabled??!0)&&!g,j=e.needsYouFocus;(0,X.useEffect)(()=>{if(!j)return;let e=x.find(e=>e.id===j);e&&(f(e.id),h(e.id))},[j,x]),(0,X.useEffect)(()=>{if(w.length===0){d!==null&&f(null);return}(!d||!w.some(e=>e.id===d))&&f(w[0].id)},[w,d]);let N=p?x.find(e=>e.id===p)??null:null;(0,X.useEffect)(()=>{p&&!N&&h(null)},[p,N]);let B=(0,X.useCallback)(()=>h(null),[]),V=(0,X.useCallback)(()=>{re()||document.querySelector(`[aria-modal="true"]:not([data-verse-overlay])`)||(p?B():P())},[p,B]);m({open:!0,containerRef:s,onClose:V,initialFocusRef:l});let H=(0,X.useRef)(!1);(0,X.useEffect)(()=>{p?(H.current=!0,u.current?.focus({preventScroll:!0})):H.current&&(H.current=!1,l.current?.focus({preventScroll:!0}))},[p]);let U=w.length>0;(0,X.useEffect)(()=>{if(!U||p)return;let e=document.activeElement;(e===null||e===document.body||e===s.current)&&l.current?.focus({preventScroll:!0})},[U,p]);let W=(0,X.useCallback)(e=>{let t=e.target;switch(t.kind){case`approval`:f(e.id),h(e.id);return;case`session`:P(),M(t.sessionId);return;case`section`:P(),k(t.section,t.anchor);return;case`seat`:P(),k(`apps`,`seat:${t.seatId}`);return;case`url`:window.open(t.url,`_blank`,`noopener,noreferrer`);return;default:return}},[]),G=(0,X.useCallback)((e,t)=>{let r=ve(e,t);if(!r){n.show(`Nothing to ${t} on this item.`,`neutral`);return}if(!D&&r.request){n.show("This server was started without dispatch — run `ashlr verse` to act.",`neutral`);return}Le(e,r,{openTarget:W,toast:n.show})},[D,W,n]);function K(e){if(w.length===0)return;let t=Math.max(0,w.findIndex(e=>e.id===d)),n=w[(t+e+w.length)%w.length];f(n.id),p&&h(n.id)}function q(e){let t=F.indexOf(S),n=F[(t+e+F.length)%F.length];A(n),h(null)}function se(e){if(e.defaultPrevented||ze(e.target)||!(e.target instanceof Node)||!s.current?.contains(e.target))return;let t=C(e.nativeEvent,[`drawer`]);if(!t||t.id===`drawer.open`&&e.target instanceof HTMLButtonElement)return;e.preventDefault(),e.stopPropagation();let n=w.find(e=>e.id===(p??d))??null;switch(t.id){case`drawer.next`:K(1);return;case`drawer.prev`:K(-1);return;case`drawer.split-next`:q(1);return;case`drawer.split-prev`:q(-1);return;case`drawer.open`:n&&h(n.id);return;default:{let e=Re[t.id];e&&n&&G(n,e)}}}let ce=!v&&(t.status===`loading`||t.status===`idle`),ue=!v&&t.status===`unavailable`;return(0,De.createPortal)((0,Q.jsx)(`div`,{className:Y.backdrop,onMouseDown:e=>e.target===e.currentTarget&&P(),children:(0,Q.jsxs)(`div`,{ref:s,role:`dialog`,"aria-modal":`true`,"aria-labelledby":o,className:Y.panel,"data-presentation":i?`full`:`side`,"data-verse-overlay":`needs-you`,"data-scope":`drawer`,tabIndex:-1,onKeyDown:se,children:[(0,Q.jsxs)(`header`,{className:Y.head,children:[(0,Q.jsxs)(`h2`,{id:o,className:Y.title,children:[`Needs you`,v?(0,Q.jsx)(`span`,{className:Y.titleCount,children:T.all}):null]}),(0,Q.jsx)(ie,{variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(ae,{}),"aria-label":`Close Needs you`,onClick:P})]}),(0,Q.jsx)(`div`,{role:`tablist`,"aria-label":`Splits`,className:Y.splits,onKeyDown:e=>{(e.key===`ArrowRight`||e.key===`ArrowLeft`)&&(e.preventDefault(),q(e.key===`ArrowRight`?1:-1))},children:F.map(e=>(0,Q.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":e===S,tabIndex:e===S?0:-1,className:Y.split,onClick:()=>{A(e),h(null)},children:[J[e],(0,Q.jsx)(`span`,{className:Y.splitCount,"aria-label":`${T[e]} items`,children:T[e]})]},e))}),(0,Q.jsxs)(`div`,{className:Y.body,children:[N?(0,Q.jsxs)(`div`,{ref:u,className:Y.detail,tabIndex:-1,"aria-label":`Item detail`,children:[(0,Q.jsxs)(`button`,{type:`button`,className:Y.back,onClick:B,children:[`‹ All `,J[S].toLowerCase()]}),N.target.kind===`approval`?(0,Q.jsx)(`div`,{className:Y.approval,children:(0,Q.jsx)(Ae,{id:N.target.proposalId,dispatchEnabled:D,onDispatchDisabled:()=>te(!0),onDecided:()=>{Ne(N.id),I(),B()}},N.target.proposalId)}):(0,Q.jsx)(We,{item:N,now:_,seats:r.data?.seats??Ue,onAct:G,onOpenTarget:W,dispatchEnabled:D})]}):ce?(0,Q.jsxs)(`div`,{className:Y.loading,role:`status`,"aria-label":`Loading`,children:[(0,Q.jsx)(c,{}),(0,Q.jsx)(c,{}),(0,Q.jsx)(c,{})]}):ue?(0,Q.jsxs)(`div`,{className:Y.empty,children:[(0,Q.jsx)(`p`,{className:Y.emptyTitle,children:`Needs you isn't available on this server`}),(0,Q.jsx)(`p`,{className:Y.emptyBody,children:`This build does not report activity yet, so nothing here can be vouched for. Approvals still work from the inbox.`})]}):w.length===0?(0,Q.jsx)(Ve,{coverageText:le(E),vouched:E.vouched,autonomyLabel:v?.autonomy?.label??null,split:S}):(0,Q.jsx)(xe,{ref:l,items:w,selectedId:d,onSelect:f,onOpen:e=>{f(e),h(e)},now:_,label:`${J[S]} needing you`}),w.length===0&&!N?(0,Q.jsx)(`div`,{ref:l,tabIndex:-1,className:Y.focusSink,"aria-hidden":`true`}):null]}),i?null:(0,Q.jsxs)(`footer`,{className:Y.foot,"aria-hidden":`true`,children:[(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:Y.key,children:`J`}),(0,Q.jsx)(`kbd`,{className:Y.key,children:`K`}),` move`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:Y.key,children:(0,Q.jsx)(oe,{})}),` open`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:Y.key,children:`A`}),` approve`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:Y.key,children:`R`}),` reject`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:Y.key,children:`V`}),` veto`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:Y.key,children:`E`}),` done`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:Y.key,children:`H`}),(0,Q.jsx)(`kbd`,{className:Y.key,children:`L`}),` splits`]})]}),!E.vouched&&w.length>0?(0,Q.jsxs)(`p`,{className:Y.caveat,role:`note`,children:[le(E),` — this list may be incomplete.`]}):null]})}),document.body)}function Ve({vouched:e,coverageText:t,autonomyLabel:n,split:r}){return e?(0,Q.jsxs)(`div`,{className:Y.empty,"data-state":`clear`,children:[(0,Q.jsx)(`span`,{className:Y.clearMark,"aria-hidden":`true`}),(0,Q.jsx)(`p`,{className:Y.emptyTitle,children:`All clear`}),(0,Q.jsx)(`p`,{className:Y.emptyBody,children:n?`Fleet: ${n}.`:`Nothing is waiting on you.`})]}):(0,Q.jsxs)(`div`,{className:Y.empty,"data-state":`unknown`,children:[(0,Q.jsxs)(`p`,{className:Y.emptyTitle,children:[`Nothing to show`,r===`all`?``:` in ${J[r]}`,` — but it isn't an all-clear`]}),(0,Q.jsxs)(`p`,{className:Y.emptyBody,children:[t,`.`]})]})}var He=e=>{switch(e.target.kind){case`session`:return`Open chat`;case`section`:return`Open ${j(e.target.section).label}`;case`seat`:return`Open Apps & Accounts`;case`url`:return`Open on GitHub`;default:return null}},Ue=[];function We({item:e,now:t,seats:n,onAct:r,onOpenTarget:i,dispatchEnabled:a}){let o=He(e),s=Se(e,t),c=e.subject.seatId?ye(n,e.subject.seatId):null,l=s.run?de(n,s.run.model,e.subject.seatId):null;return(0,Q.jsxs)(`article`,{className:Y.item,children:[(0,Q.jsxs)(`header`,{className:Y.itemHead,children:[s.kindLabel?(0,Q.jsx)(`p`,{className:Y.rowKind,children:s.kindLabel}):null,(0,Q.jsx)(`h3`,{className:Y.itemTitle,title:s.fullTitle,children:s.title}),s.run?(0,Q.jsx)(_e,{run:s.run}):null]}),s.detail?(0,Q.jsx)(`p`,{className:Y.itemDetail,children:s.detail}):null,(0,Q.jsxs)(`dl`,{className:Y.defs,children:[s.repo?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Repo`}),(0,Q.jsx)(`dd`,{className:Y.repo,title:s.repoFull,children:s.repo})]}):null,e.subject.pr?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Pull request`}),(0,Q.jsxs)(`dd`,{children:[`#`,e.subject.pr]})]}):null,c?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Seat`}),(0,Q.jsx)(`dd`,{className:c.raw?void 0:Y.mono,title:c.raw,children:c.text})]}):null,l?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Model`}),(0,Q.jsx)(`dd`,{className:l.raw?void 0:Y.mono,title:l.raw,children:l.text})]}):null,(0,Q.jsx)(`dt`,{children:`Raised`}),(0,Q.jsx)(`dd`,{title:s.ageStamp,children:s.age}),e.expiresAt?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Closes`}),(0,Q.jsx)(`dd`,{className:Y.deadline,children:fe(e.expiresAt,t)})]}):null]}),(0,Q.jsxs)(`div`,{className:Y.itemActions,children:[o?(0,Q.jsx)(V,{variant:`subtle`,size:`sm`,onClick:()=>i(e),trailingIcon:e.target.kind===`url`?(0,Q.jsx)(H,{}):void 0,children:o}):null,e.actions.map(t=>{let n=T[t.kind],i=t.request!==null;return(0,Q.jsxs)(V,{size:`sm`,variant:t.destructive?`danger`:t.kind===`approve`?`primary`:`subtle`,disabled:i&&!a,onClick:()=>r(e,t.kind),"aria-keyshortcuts":n,children:[t.label,n?(0,Q.jsx)(`kbd`,{className:Y.inlineKey,"aria-hidden":`true`,children:n}):null]},t.kind)})]}),a?null:(0,Q.jsx)(`p`,{className:Y.caveat,children:"Read-only session — actions need `ashlr verse`."})]})}export{Be as NeedsYouDrawer,N as VERSE_ANCHOR_EVENT};
|
|
2
|
+
//# sourceMappingURL=NeedsYouDrawer-6AuN0BF3.js.map
|