@ashlr/hub 3.11.2 → 3.11.3
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 +8 -0
- package/dist/build-identity.json +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-_DhtX2gO.js → ActionMenu-FxXeRbPx.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-_DhtX2gO.js.map → ActionMenu-FxXeRbPx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Advanced-CAAfaBke.js → Advanced-D_eS4472.js} +2 -2
- package/dist/core/web/public/next/assets/{Advanced-CAAfaBke.js.map → Advanced-D_eS4472.js.map} +1 -1
- package/dist/core/web/public/next/assets/{App-BAywyjE8.js → App-Cj4zKbG3.js} +2 -2
- package/dist/core/web/public/next/assets/{App-BAywyjE8.js.map → App-Cj4zKbG3.js.map} +1 -1
- package/dist/core/web/public/next/assets/{AppsSection-CUypKeog.js → AppsSection-Ddu_RCQE.js} +2 -2
- package/dist/core/web/public/next/assets/{AppsSection-CUypKeog.js.map → AppsSection-Ddu_RCQE.js.map} +1 -1
- package/dist/core/web/public/next/assets/{AreaTrend-CblDqC8Q.js → AreaTrend-CDxrQU4b.js} +2 -2
- package/dist/core/web/public/next/assets/{AreaTrend-CblDqC8Q.js.map → AreaTrend-CDxrQU4b.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-DuQkHGD_.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-D3d8lYO3.js.map → AutonomySection-DuQkHGD_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BranchBar-DU0jAV1E.js → BranchBar-CLsvOcyK.js} +2 -2
- package/dist/core/web/public/next/assets/{BranchBar-DU0jAV1E.js.map → BranchBar-CLsvOcyK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BudgetControl-Mm1ZL4u6.js → BudgetControl-TL3FeZ1D.js} +2 -2
- package/dist/core/web/public/next/assets/{BudgetControl-Mm1ZL4u6.js.map → BudgetControl-TL3FeZ1D.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BurnDown-C1fgcFqo.js → BurnDown-sFXkUGdB.js} +2 -2
- package/dist/core/web/public/next/assets/{BurnDown-C1fgcFqo.js.map → BurnDown-sFXkUGdB.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-DqgLUZvd.js → Button-HHXgoXGr.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-DqgLUZvd.js.map → Button-HHXgoXGr.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CapacityStrip-nWFHvqFB.js → CapacityStrip-qReu0RaF.js} +2 -2
- package/dist/core/web/public/next/assets/{CapacityStrip-nWFHvqFB.js.map → CapacityStrip-qReu0RaF.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ChatSection-DUZNpiVr.js → ChatSection-DZuZfTaC.js} +3 -3
- package/dist/core/web/public/next/assets/{ChatSection-DUZNpiVr.js.map → ChatSection-DZuZfTaC.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CloudBudgetForm-2OW38o_C.js → CloudBudgetForm-DJbiT1wi.js} +2 -2
- package/dist/core/web/public/next/assets/{CloudBudgetForm-2OW38o_C.js.map → CloudBudgetForm-DJbiT1wi.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CommandPalette-C5w2o1-r.js → CommandPalette-zYLFZRnj.js} +2 -2
- package/dist/core/web/public/next/assets/{CommandPalette-C5w2o1-r.js.map → CommandPalette-zYLFZRnj.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CommandSection-Bx2knNqY.js → CommandSection-rIeMK5Ch.js} +2 -2
- package/dist/core/web/public/next/assets/{CommandSection-Bx2knNqY.js.map → CommandSection-rIeMK5Ch.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ConfirmDialog-B7ZwCQOX.js → ConfirmDialog-DLrLKM0c.js} +2 -2
- package/dist/core/web/public/next/assets/{ConfirmDialog-B7ZwCQOX.js.map → ConfirmDialog-DLrLKM0c.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Dialog-BpgcEW6b.js → Dialog-BS9Dxi3G.js} +2 -2
- package/dist/core/web/public/next/assets/{Dialog-BpgcEW6b.js.map → Dialog-BS9Dxi3G.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffPane-DpqRUtCx.js → DiffPane-TOmUf3b2.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffPane-DpqRUtCx.js.map → DiffPane-TOmUf3b2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffViewer-CoV5-nUf.js → DiffViewer-BpH56302.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-CoV5-nUf.js.map → DiffViewer-BpH56302.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DockHost-C0Pq7Jak.js → DockHost-DzkzR-HD.js} +2 -2
- package/dist/core/web/public/next/assets/{DockHost-C0Pq7Jak.js.map → DockHost-DzkzR-HD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{EmptyState-DYW29ncw.js → EmptyState-BqR5YAmf.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-DYW29ncw.js.map → EmptyState-BqR5YAmf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-DVx6oHzp.js → Epistemic-dhvDTwAZ.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-DVx6oHzp.js.map → Epistemic-dhvDTwAZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{FleetSection-DSETviPK.js → FleetSection-ViAb549H.js} +3 -3
- package/dist/core/web/public/next/assets/{FleetSection-DSETviPK.js.map → FleetSection-ViAb549H.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Funnel-DxiGqJrt.js → Funnel-D2u7Wlzc.js} +2 -2
- package/dist/core/web/public/next/assets/{Funnel-DxiGqJrt.js.map → Funnel-D2u7Wlzc.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GearTray-C3I89sIt.js → GearTray-Cb2npoxM.js} +2 -2
- package/dist/core/web/public/next/assets/{GearTray-C3I89sIt.js.map → GearTray-Cb2npoxM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GrowthSection-C3m2bPEz.js → GrowthSection-C5aDPs8B.js} +2 -2
- package/dist/core/web/public/next/assets/{GrowthSection-C3m2bPEz.js.map → GrowthSection-C5aDPs8B.js.map} +1 -1
- package/dist/core/web/public/next/assets/{HandoffDialog-Bjb96a0N.js → HandoffDialog-BF3AYg-X.js} +2 -2
- package/dist/core/web/public/next/assets/{HandoffDialog-Bjb96a0N.js.map → HandoffDialog-BF3AYg-X.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Input-ekTehVaH.js → Input-B5dmGLZx.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-ekTehVaH.js.map → Input-B5dmGLZx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{LeaderCard-85VBbbaZ.js → LeaderCard-DZrmjDbI.js} +2 -2
- package/dist/core/web/public/next/assets/{LeaderCard-85VBbbaZ.js.map → LeaderCard-DZrmjDbI.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MatrixHeatmap-Bo8j0QPC.js → MatrixHeatmap-BgEUs2Eu.js} +2 -2
- package/dist/core/web/public/next/assets/{MatrixHeatmap-Bo8j0QPC.js.map → MatrixHeatmap-BgEUs2Eu.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-DZkiOuoq.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-DvHFaVyp.js.map → McpSection-DZkiOuoq.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdown-fsY_ltVa.js → MessageMarkdown-BauY8ZTY.js} +3 -3
- package/dist/core/web/public/next/assets/{MessageMarkdown-fsY_ltVa.js.map → MessageMarkdown-BauY8ZTY.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DDdtu82l.js → MessageMarkdownRenderer-DLBNLfsn.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DDdtu82l.js.map → MessageMarkdownRenderer-DLBNLfsn.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-CeGDXdDM.js → Meter-DNeocJnD.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-CeGDXdDM.js.map → Meter-DNeocJnD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MindSection-CDVhHvXl.js → MindSection-BvJXFjyX.js} +2 -2
- package/dist/core/web/public/next/assets/{MindSection-CDVhHvXl.js.map → MindSection-BvJXFjyX.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MutationTokenDialog-DTQzEOHR.js → MutationTokenDialog-mxrw0Yvy.js} +2 -2
- package/dist/core/web/public/next/assets/{MutationTokenDialog-DTQzEOHR.js.map → MutationTokenDialog-mxrw0Yvy.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-6AuN0BF3.js → NeedsYouDrawer-CO-Balfp.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-6AuN0BF3.js.map → NeedsYouDrawer-CO-Balfp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouList-ChnRmbSk.js → NeedsYouList-CzDZbzRD.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouList-ChnRmbSk.js.map → NeedsYouList-CzDZbzRD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NewChatDialog-B06E7sqg.js → NewChatDialog-B8eJjlFf.js} +2 -2
- package/dist/core/web/public/next/assets/{NewChatDialog-B06E7sqg.js.map → NewChatDialog-B8eJjlFf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{OnboardingFlow-C2M3zov9.js → OnboardingFlow-Cij6KWat.js} +2 -2
- package/dist/core/web/public/next/assets/{OnboardingFlow-C2M3zov9.js.map → OnboardingFlow-Cij6KWat.js.map} +1 -1
- package/dist/core/web/public/next/assets/{PreviewPane-Bd6HsX1k.js → PreviewPane-BS-CleCd.js} +2 -2
- package/dist/core/web/public/next/assets/{PreviewPane-Bd6HsX1k.js.map → PreviewPane-BS-CleCd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ProviderLogo-Bz7KR5j3.js → ProviderLogo-C5mBg8i0.js} +2 -2
- package/dist/core/web/public/next/assets/{ProviderLogo-Bz7KR5j3.js.map → ProviderLogo-C5mBg8i0.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RailStatus-CctCuuLy.js → RailStatus-cPRyOmrk.js} +2 -2
- package/dist/core/web/public/next/assets/{RailStatus-CctCuuLy.js.map → RailStatus-cPRyOmrk.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-CKY5BGdD.js → RefreshIndicator-CMwSCiz5.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-CKY5BGdD.js.map → RefreshIndicator-CMwSCiz5.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-CspIsW_G.js → ResourcePoolConsoleApp-BFi1opsC.js} +2 -2
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-CspIsW_G.js.map → ResourcePoolConsoleApp-BFi1opsC.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcesChrome-B7fHZ6zX.js → ResourcesChrome-BJCauW_t.js} +3 -3
- package/dist/core/web/public/next/assets/{ResourcesChrome-B7fHZ6zX.js.map → ResourcesChrome-BJCauW_t.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcesDrawer-B7-N9n7-.js → ResourcesDrawer-BDecg6nO.js} +2 -2
- package/dist/core/web/public/next/assets/{ResourcesDrawer-B7-N9n7-.js.map → ResourcesDrawer-BDecg6nO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-C_B11J0s.js → RouteErrorBoundary-DYtwc2ja.js} +2 -2
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-C_B11J0s.js.map → RouteErrorBoundary-DYtwc2ja.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RunInCloudAction-_juw4EXd.js → RunInCloudAction-BEGEEM8O.js} +2 -2
- package/dist/core/web/public/next/assets/{RunInCloudAction-_juw4EXd.js.map → RunInCloudAction-BEGEEM8O.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SeatSelector-D_YXvkPy.js → SeatSelector-CYHRR7Wp.js} +2 -2
- package/dist/core/web/public/next/assets/{SeatSelector-D_YXvkPy.js.map → SeatSelector-CYHRR7Wp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-DnKP6rr7.js → Segmented-BE53BenI.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-DnKP6rr7.js.map → Segmented-BE53BenI.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-DlbUupTX.js → Select-BwSGkHCS.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-DlbUupTX.js.map → Select-BwSGkHCS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionGate-DnuTZACL.js → SessionGate-e0dFJm9d.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionGate-DnuTZACL.js.map → SessionGate-e0dFJm9d.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionInsightChip-C33-k-Q5.js → SessionInsightChip-CxlSyueJ.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionInsightChip-C33-k-Q5.js.map → SessionInsightChip-CxlSyueJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionSearch-DhhR9Csg.js → SessionSearch-_yp7S2TP.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionSearch-DhhR9Csg.js.map → SessionSearch-_yp7S2TP.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SettingsSection-C0xQvCz3.js → SettingsSection-wGnpWeGW.js} +2 -2
- package/dist/core/web/public/next/assets/{SettingsSection-C0xQvCz3.js.map → SettingsSection-wGnpWeGW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Sheet-BvNYOYv5.js → Sheet-DVP2Mgy6.js} +2 -2
- package/dist/core/web/public/next/assets/{Sheet-BvNYOYv5.js.map → Sheet-DVP2Mgy6.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-1nUBVO-Z.js → ShortcutsOverlay-BcIcoClX.js} +2 -2
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-1nUBVO-Z.js.map → ShortcutsOverlay-BcIcoClX.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Sidebar-YrVvvBNM.js → Sidebar-DjQOqPbm.js} +3 -3
- package/dist/core/web/public/next/assets/{Sidebar-YrVvvBNM.js.map → Sidebar-DjQOqPbm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Slider-B2c-dbQb.js → Slider-BypUWjpH.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-B2c-dbQb.js.map → Slider-BypUWjpH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatusBadge-Q9YYkijx.js → StatusBadge-HCZp416_.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-Q9YYkijx.js.map → StatusBadge-HCZp416_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StepBand-Ci-C0GUG.js → StepBand-Duz1PUes.js} +2 -2
- package/dist/core/web/public/next/assets/{StepBand-Ci-C0GUG.js.map → StepBand-Duz1PUes.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Surface-DBovMq4P.js → Surface-B75lVfzm.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-DBovMq4P.js.map → Surface-B75lVfzm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Swimlane-Cdc4TqDe.js → Swimlane-DGcIcnNA.js} +2 -2
- package/dist/core/web/public/next/assets/{Swimlane-Cdc4TqDe.js.map → Swimlane-DGcIcnNA.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Switch-CUrvzO2k.js → Switch-iveI-8NY.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-CUrvzO2k.js.map → Switch-iveI-8NY.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-Bv8u6APt.js → Tag-DH15CUJp.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-Bv8u6APt.js.map → Tag-DH15CUJp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{TerminalPane-BE4Xlqi5.js → TerminalPane-MQT-veKZ.js} +2 -2
- package/dist/core/web/public/next/assets/{TerminalPane-BE4Xlqi5.js.map → TerminalPane-MQT-veKZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-BGwejf0m.js → UniverseConsoleApp-C8yQ0AaR.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-BGwejf0m.js.map → UniverseConsoleApp-C8yQ0AaR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-CgKa-WXC.js → UniverseView-_nPURPqe.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseView-CgKa-WXC.js.map → UniverseView-_nPURPqe.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UsageSection-CazsHm1f.js → UsageSection-CqxRGJ40.js} +2 -2
- package/dist/core/web/public/next/assets/{UsageSection-CazsHm1f.js.map → UsageSection-CqxRGJ40.js.map} +1 -1
- package/dist/core/web/public/next/assets/{VerseConsoleApp-CTF3Shs0.js → VerseConsoleApp-DTjDpGCd.js} +3 -3
- package/dist/core/web/public/next/assets/{VerseConsoleApp-CTF3Shs0.js.map → VerseConsoleApp-DTjDpGCd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Workspace-CgdyXiEV.js → Workspace-DfcFGzME.js} +5 -5
- package/dist/core/web/public/next/assets/{Workspace-CgdyXiEV.js.map → Workspace-DfcFGzME.js.map} +1 -1
- package/dist/core/web/public/next/assets/{actions-MtxBGS5B.js → actions-tWevL9HV.js} +2 -2
- package/dist/core/web/public/next/assets/{actions-MtxBGS5B.js.map → actions-tWevL9HV.js.map} +1 -1
- package/dist/core/web/public/next/assets/{budget-queries-CP7hgR-p.js → budget-queries-V3wcJVK_.js} +2 -2
- package/dist/core/web/public/next/assets/{budget-queries-CP7hgR-p.js.map → budget-queries-V3wcJVK_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{capacity-strip-model-fHfu5cph.js → capacity-strip-model-BDbmQ3e3.js} +2 -2
- package/dist/core/web/public/next/assets/{capacity-strip-model-fHfu5cph.js.map → capacity-strip-model-BDbmQ3e3.js.map} +1 -1
- package/dist/core/web/public/next/assets/{charts-Bis9WSiS.js → charts-CfAjuKMv.js} +2 -2
- package/dist/core/web/public/next/assets/{charts-Bis9WSiS.js.map → charts-CfAjuKMv.js.map} +1 -1
- package/dist/core/web/public/next/assets/{cloud-queries-BsOepFz6.js → cloud-queries-Br_r0UAz.js} +2 -2
- package/dist/core/web/public/next/assets/{cloud-queries-BsOepFz6.js.map → cloud-queries-Br_r0UAz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{cloud.module-DoFnr8ZH.js → cloud.module-ascz58c3.js} +2 -2
- package/dist/core/web/public/next/assets/{cloud.module-DoFnr8ZH.js.map → cloud.module-ascz58c3.js.map} +1 -1
- package/dist/core/web/public/next/assets/{command-bus-CMvbYP5K.js → command-bus-xYZoK9nQ.js} +2 -2
- package/dist/core/web/public/next/assets/{command-bus-CMvbYP5K.js.map → command-bus-xYZoK9nQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-model-Ci3Ch9t5.js → context-model-BC-HOmPo.js} +2 -2
- package/dist/core/web/public/next/assets/{context-model-Ci3Ch9t5.js.map → context-model-BC-HOmPo.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-model-CjiJTnf1.js → context-model-CIBmSugV.js} +2 -2
- package/dist/core/web/public/next/assets/{context-model-CjiJTnf1.js.map → context-model-CIBmSugV.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-queries-BDXT6LQ3.js → context-queries-CrPcHWTz.js} +2 -2
- package/dist/core/web/public/next/assets/{context-queries-BDXT6LQ3.js.map → context-queries-CrPcHWTz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{control-queries-Dv-h1Clu.js → control-queries-CmgBgKV7.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-Dv-h1Clu.js.map → control-queries-CmgBgKV7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-icons-t--Eugrd.js → dock-icons-CUh8dOxJ.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-icons-t--Eugrd.js.map → dock-icons-CUh8dOxJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-store-qIu7kSQE.js → dock-store-B2vlxqPu.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-store-qIu7kSQE.js.map → dock-store-B2vlxqPu.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-model-IRbwfhkR.js → fleet-model-7i-FbzKI.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-model-IRbwfhkR.js.map → fleet-model-7i-FbzKI.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-queries-7FVNByX1.js → fleet-queries-DzGoqq8X.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-queries-7FVNByX1.js.map → fleet-queries-DzGoqq8X.js.map} +1 -1
- package/dist/core/web/public/next/assets/{focus-trap-QqQxQdvH.js → focus-trap-HtcoXeEq.js} +2 -2
- package/dist/core/web/public/next/assets/{focus-trap-QqQxQdvH.js.map → focus-trap-HtcoXeEq.js.map} +1 -1
- package/dist/core/web/public/next/assets/{format-CaMmVQCn.js → format-BkWdOQDL.js} +2 -2
- package/dist/core/web/public/next/assets/{format-CaMmVQCn.js.map → format-BkWdOQDL.js.map} +1 -1
- package/dist/core/web/public/next/assets/{git-model-B4S_GUNA.js → git-model-bk_RXh3y.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-B4S_GUNA.js.map → git-model-bk_RXh3y.js.map} +1 -1
- package/dist/core/web/public/next/assets/{global-BkNl4e6E.js → global-oEl9Qj8u.js} +2 -2
- package/dist/core/web/public/next/assets/{global-BkNl4e6E.js.map → global-oEl9Qj8u.js.map} +1 -1
- package/dist/core/web/public/next/assets/{guarded-action-DHiL8tY5.js → guarded-action-OzqcPjmh.js} +3 -3
- package/dist/core/web/public/next/assets/{guarded-action-DHiL8tY5.js.map → guarded-action-OzqcPjmh.js.map} +1 -1
- package/dist/core/web/public/next/assets/{guarded-runners-DmGEkM2P.js → guarded-runners-LHLXmXIk.js} +2 -2
- package/dist/core/web/public/next/assets/{guarded-runners-DmGEkM2P.js.map → guarded-runners-LHLXmXIk.js.map} +1 -1
- package/dist/core/web/public/next/assets/{icon-base-NtFmP2yB.js → icon-base-DvM1eI5V.js} +2 -2
- package/dist/core/web/public/next/assets/{icon-base-NtFmP2yB.js.map → icon-base-DvM1eI5V.js.map} +1 -1
- package/dist/core/web/public/next/assets/{icons-C5EFt_Ts.js → icons-DEQa2rTx.js} +2 -2
- package/dist/core/web/public/next/assets/{icons-C5EFt_Ts.js.map → icons-DEQa2rTx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{index-DbDw9UAs.js → index-BVxOlseC.js} +3 -3
- package/dist/core/web/public/next/assets/{index-DbDw9UAs.js.map → index-BVxOlseC.js.map} +1 -1
- package/dist/core/web/public/next/assets/{live-model-DEwrl7_A.js → live-model-bmsJgnYD.js} +2 -2
- package/dist/core/web/public/next/assets/{live-model-DEwrl7_A.js.map → live-model-bmsJgnYD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{mind.module-CLhqMQak.js → mind.module-gTGAuJt1.js} +2 -2
- package/dist/core/web/public/next/assets/{mind.module-CLhqMQak.js.map → mind.module-gTGAuJt1.js.map} +1 -1
- package/dist/core/web/public/next/assets/{mutations-Kvzsg-iK.js → mutations-C5S7okTW.js} +2 -2
- package/dist/core/web/public/next/assets/{mutations-Kvzsg-iK.js.map → mutations-C5S7okTW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{nav-C0IunEYF.js → nav-NVtnuG7A.js} +2 -2
- package/dist/core/web/public/next/assets/{nav-C0IunEYF.js.map → nav-NVtnuG7A.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-C_AfcL7q.js → overnight-queries-DGm3qL1b.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-C_AfcL7q.js.map → overnight-queries-DGm3qL1b.js.map} +1 -1
- package/dist/core/web/public/next/assets/{preloaded-CctOitLu.js → preloaded-Cwf9rsnZ.js} +2 -2
- package/dist/core/web/public/next/assets/{preloaded-CctOitLu.js.map → preloaded-Cwf9rsnZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/primitives-DyCKYSBG.js +1 -0
- package/dist/core/web/public/next/assets/{queries-THD05gHP.js → queries-CYisSAAB.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-THD05gHP.js.map → queries-CYisSAAB.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reasoning-pref-BVPu0SME.js → reasoning-pref-BUcFF_5G.js} +2 -2
- package/dist/core/web/public/next/assets/{reasoning-pref-BVPu0SME.js.map → reasoning-pref-BUcFF_5G.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reveal-anchor-wCT5b4m3.js → reveal-anchor-D-tV8xau.js} +2 -2
- package/dist/core/web/public/next/assets/{reveal-anchor-wCT5b4m3.js.map → reveal-anchor-D-tV8xau.js.map} +1 -1
- package/dist/core/web/public/next/assets/{seat-subscription-CR_VylsK.js → seat-subscription-B-f9ViU2.js} +2 -2
- package/dist/core/web/public/next/assets/{seat-subscription-CR_VylsK.js.map → seat-subscription-B-f9ViU2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{section-visibility-B0xXUQJ0.js → section-visibility-Yctxu-if.js} +2 -2
- package/dist/core/web/public/next/assets/{section-visibility-B0xXUQJ0.js.map → section-visibility-Yctxu-if.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-C5wVXGpb.js → sidebar-model-DQ-FyBHW.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-C5wVXGpb.js.map → sidebar-model-DQ-FyBHW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{slots-DDd8cEoh.js → slots-BhP8b8tf.js} +3 -3
- package/dist/core/web/public/next/assets/{slots-DDd8cEoh.js.map → slots-BhP8b8tf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{surface-data-BFxAlefI.js → surface-data-DTI7LjvH.js} +2 -2
- package/dist/core/web/public/next/assets/{surface-data-BFxAlefI.js.map → surface-data-DTI7LjvH.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CdUEBFrl.js +2 -0
- package/dist/core/web/public/next/assets/{surface-prefetch-CHusyO9q.js.map → surface-prefetch-CdUEBFrl.js.map} +1 -1
- package/dist/core/web/public/next/assets/{tasks-model-DvkWveXs.js → tasks-model-BKDNqmmt.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-DvkWveXs.js.map → tasks-model-BKDNqmmt.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-Dp6pJgV2.js → terminal-icons-D2xe-aM1.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-Dp6pJgV2.js.map → terminal-icons-D2xe-aM1.js.map} +1 -1
- package/dist/core/web/public/next/assets/{usage-queries-CUTmnegA.js → usage-queries-BZuAANlI.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-CUTmnegA.js.map → usage-queries-BZuAANlI.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-guarded-action-UCX2u1t1.js → use-guarded-action-Cf4MeNBa.js} +2 -2
- package/dist/core/web/public/next/assets/{use-guarded-action-UCX2u1t1.js.map → use-guarded-action-Cf4MeNBa.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-OXAjob3y.js → use-ticker-D9yi49my.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-OXAjob3y.js.map → use-ticker-D9yi49my.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-token-gate-CDDRAoKH.js → use-token-gate-DqrSXdX6.js} +2 -2
- package/dist/core/web/public/next/assets/{use-token-gate-CDDRAoKH.js.map → use-token-gate-DqrSXdX6.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useChartWidth-D9M7kUw7.js → useChartWidth-owwodNVz.js} +2 -2
- package/dist/core/web/public/next/assets/{useChartWidth-D9M7kUw7.js.map → useChartWidth-owwodNVz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useSeatsRefresh-B2dCVcj9.js → useSeatsRefresh-DgFy-Ph4.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-B2dCVcj9.js.map → useSeatsRefresh-DgFy-Ph4.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useVerseTranscript-BL3CljSI.js → useVerseTranscript-CDYrrWOO.js} +2 -2
- package/dist/core/web/public/next/assets/{useVerseTranscript-BL3CljSI.js.map → useVerseTranscript-CDYrrWOO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-icons-DASWdYuE.js → verse-icons-F9VwX07_.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-icons-DASWdYuE.js.map → verse-icons-F9VwX07_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-model-BQ0Y2CSr.js → verse-model-DyCwZF-M.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-model-BQ0Y2CSr.js.map → verse-model-DyCwZF-M.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-ui-store-D7YXi63q.js → verse-ui-store-62DxpVHS.js} +3 -3
- package/dist/core/web/public/next/assets/{verse-ui-store-D7YXi63q.js.map → verse-ui-store-62DxpVHS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{viewport-BYGH5EgA.js → viewport-nTubFCwf.js} +2 -2
- package/dist/core/web/public/next/assets/{viewport-BYGH5EgA.js.map → viewport-nTubFCwf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{warmup-AsqwWCUi.js → warmup-HG5vYbsN.js} +3 -3
- package/dist/core/web/public/next/assets/{warmup-AsqwWCUi.js.map → warmup-HG5vYbsN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{workspace-model-CXorJr0G.js → workspace-model-CbhdPhei.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-CXorJr0G.js.map → workspace-model-CbhdPhei.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 +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-D3d8lYO3.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-DvHFaVyp.js +0 -2
- package/dist/core/web/public/next/assets/primitives-CbAGCNKt.js +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CHusyO9q.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=Meter-
|
|
1
|
+
import{n as e}from"./index-BVxOlseC.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-DNeocJnD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Meter-
|
|
1
|
+
{"version":3,"file":"Meter-DNeocJnD.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"}
|
package/dist/core/web/public/next/assets/{MindSection-CDVhHvXl.js → MindSection-BvJXFjyX.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,n as t,s as n}from"./index-
|
|
2
|
-
//# sourceMappingURL=MindSection-
|
|
1
|
+
import{a as e,n as t,s as n}from"./index-BVxOlseC.js";import{m as r,p as i}from"./global-oEl9Qj8u.js";import{t as a}from"./RefreshIndicator-CMwSCiz5.js";import{t as o}from"./AreaTrend-CDxrQU4b.js";import{n as s,t as c}from"./MatrixHeatmap-BgEUs2Eu.js";import{n as l}from"./viewport-nTubFCwf.js";import{r as u}from"./section-visibility-Yctxu-if.js";import{T as d,x as f}from"./VerseConsoleApp-DTjDpGCd.js";import{l as p}from"./format-BkWdOQDL.js";import{t as m}from"./nav-NVtnuG7A.js";import{a as h,d as g,l as _}from"./surface-data-DTI7LjvH.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-gTGAuJt1.js";import{n as D,t as O}from"./actions-tWevL9HV.js";import{a as k,i as A,n as j,r as M,t as N}from"./Surface-B75lVfzm.js";import{a as P,i as F,o as I,r as L,t as R}from"./LeaderCard-DZrmjDbI.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-BvJXFjyX.js.map
|
package/dist/core/web/public/next/assets/{MindSection-CDVhHvXl.js.map → MindSection-BvJXFjyX.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
1
|
+
{"version":3,"file":"MindSection-BvJXFjyX.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,2 +1,2 @@
|
|
|
1
|
-
import{a as e,n as t,o as n,s as r}from"./index-
|
|
2
|
-
//# sourceMappingURL=MutationTokenDialog-
|
|
1
|
+
import{a as e,n as t,o as n,s as r}from"./index-BVxOlseC.js";import{f as i}from"./global-oEl9Qj8u.js";import{t as a}from"./Dialog-BS9Dxi3G.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-mxrw0Yvy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MutationTokenDialog-
|
|
1
|
+
{"version":3,"file":"MutationTokenDialog-mxrw0Yvy.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"}
|
package/dist/core/web/public/next/assets/{NeedsYouDrawer-6AuN0BF3.js → NeedsYouDrawer-CO-Balfp.js}
RENAMED
|
@@ -1,2 +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-
|
|
1
|
+
import{a as e,i as t,n,s as r}from"./index-BVxOlseC.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-oEl9Qj8u.js";import{t as m}from"./focus-trap-HtcoXeEq.js";import{t as h}from"./Epistemic-dhvDTwAZ.js";import{n as g}from"./StatusBadge-HCZp416_.js";import{h as te}from"./queries-CYisSAAB.js";import{r as _,t as ne}from"./mutations-C5S7okTW.js";import{t as v}from"./MutationTokenDialog-mxrw0Yvy.js";import{t as y}from"./ConfirmDialog-DLrLKM0c.js";import{r as b}from"./RouteErrorBoundary-DYtwc2ja.js";import{t as x}from"./RefreshIndicator-CMwSCiz5.js";import{t as S}from"./DiffViewer-BpH56302.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-OzqcPjmh.js";import{n as O}from"./viewport-nTubFCwf.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-62DxpVHS.js";import{F as I,I as L,N as R,x as z}from"./VerseConsoleApp-DTjDpGCd.js";import{v as B}from"./format-BkWdOQDL.js";import{n as ie,t as V}from"./Button-HHXgoXGr.js";import{c as H,x as ae}from"./icons-DEQa2rTx.js";import{a as oe}from"./verse-icons-F9VwX07_.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-CzDZbzRD.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-CO-Balfp.js.map
|