@ashlr/hub 3.13.0 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +74 -0
- package/dist/authority-surface.json +204 -124
- package/dist/build-identity.json +2 -2
- package/dist/cli/authority.js +112 -18
- package/dist/cli/authority.js.map +1 -1
- package/dist/cli/comms.d.ts +33 -19
- package/dist/cli/comms.js +128 -151
- package/dist/cli/comms.js.map +1 -1
- package/dist/cli/completions.js +1 -1
- package/dist/cli/completions.js.map +1 -1
- package/dist/cli/daemon.js +29 -0
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/director.d.ts +8 -12
- package/dist/cli/director.js +17 -52
- package/dist/cli/director.js.map +1 -1
- package/dist/cli/fleet.js +4 -1
- package/dist/cli/fleet.js.map +1 -1
- package/dist/cli/help.js +1 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/leader.d.ts +27 -3
- package/dist/cli/leader.js +253 -4
- package/dist/cli/leader.js.map +1 -1
- package/dist/core/authority/server-enforcement.d.ts +110 -0
- package/dist/core/authority/server-enforcement.js +260 -0
- package/dist/core/authority/server-enforcement.js.map +1 -0
- package/dist/core/authority/standing-grant.d.ts +24 -4
- package/dist/core/authority/standing-grant.js +19 -3
- package/dist/core/authority/standing-grant.js.map +1 -1
- package/dist/core/cloud/timeline.js +13 -7
- package/dist/core/cloud/timeline.js.map +1 -1
- package/dist/core/comms/change-digest.d.ts +130 -0
- package/dist/core/comms/change-digest.js +451 -0
- package/dist/core/comms/change-digest.js.map +1 -0
- package/dist/core/comms/director-prompt.d.ts +4 -5
- package/dist/core/comms/director-prompt.js +4 -71
- package/dist/core/comms/director-prompt.js.map +1 -1
- package/dist/core/comms/director.d.ts +24 -61
- package/dist/core/comms/director.js +29 -382
- package/dist/core/comms/director.js.map +1 -1
- package/dist/core/comms/dispatch.d.ts +37 -12
- package/dist/core/comms/dispatch.js +244 -177
- package/dist/core/comms/dispatch.js.map +1 -1
- package/dist/core/comms/elon-dialogue.d.ts +23 -15
- package/dist/core/comms/elon-dialogue.js +36 -307
- package/dist/core/comms/elon-dialogue.js.map +1 -1
- package/dist/core/comms/fleet-pulse.js +4 -7
- package/dist/core/comms/fleet-pulse.js.map +1 -1
- package/dist/core/comms/handlers.d.ts +10 -6
- package/dist/core/comms/handlers.js +14 -48
- package/dist/core/comms/handlers.js.map +1 -1
- package/dist/core/comms/migrations.d.ts +47 -0
- package/dist/core/comms/migrations.js +125 -0
- package/dist/core/comms/migrations.js.map +1 -0
- package/dist/core/comms/requests.d.ts +32 -5
- package/dist/core/comms/requests.js +101 -5
- package/dist/core/comms/requests.js.map +1 -1
- package/dist/core/comms/telegram-channel.d.ts +104 -0
- package/dist/core/comms/telegram-channel.js +622 -0
- package/dist/core/comms/telegram-channel.js.map +1 -0
- package/dist/core/comms/telegram-thread-map.d.ts +56 -0
- package/dist/core/comms/telegram-thread-map.js +144 -0
- package/dist/core/comms/telegram-thread-map.js.map +1 -0
- package/dist/core/daemon/capacity-publisher.d.ts +8 -1
- package/dist/core/daemon/capacity-publisher.js +40 -2
- package/dist/core/daemon/capacity-publisher.js.map +1 -1
- package/dist/core/daemon/loop.js +18 -4
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/daemon/tick-deadline.d.ts +44 -0
- package/dist/core/daemon/tick-deadline.js +83 -0
- package/dist/core/daemon/tick-deadline.js.map +1 -0
- package/dist/core/daemon/tick-hooks.d.ts +7 -0
- package/dist/core/daemon/tick-hooks.js.map +1 -1
- package/dist/core/daemon/tick-progress.d.ts +39 -0
- package/dist/core/daemon/tick-progress.js +194 -0
- package/dist/core/daemon/tick-progress.js.map +1 -0
- package/dist/core/dashboard.js +3 -1
- package/dist/core/dashboard.js.map +1 -1
- package/dist/core/fleet/fleet-merge-state.d.ts +6 -0
- package/dist/core/fleet/fleet-merge-state.js.map +1 -1
- package/dist/core/fleet/host-merge.d.ts +9 -0
- package/dist/core/fleet/host-merge.js +13 -2
- package/dist/core/fleet/host-merge.js.map +1 -1
- package/dist/core/fleet/merge-gates.d.ts +13 -0
- package/dist/core/fleet/merge-gates.js +14 -0
- package/dist/core/fleet/merge-gates.js.map +1 -1
- package/dist/core/fleet/mirrors.d.ts +162 -6
- package/dist/core/fleet/mirrors.js +1051 -49
- package/dist/core/fleet/mirrors.js.map +1 -1
- package/dist/core/fleet/standing-merge-pass.d.ts +8 -0
- package/dist/core/fleet/standing-merge-pass.js +72 -1
- package/dist/core/fleet/standing-merge-pass.js.map +1 -1
- package/dist/core/fleet/status.d.ts +17 -0
- package/dist/core/fleet/status.js +22 -0
- package/dist/core/fleet/status.js.map +1 -1
- package/dist/core/fleet/tick-hooks-live.d.ts +1 -1
- package/dist/core/fleet/tick-hooks-live.js +13 -3
- package/dist/core/fleet/tick-hooks-live.js.map +1 -1
- package/dist/core/git.d.ts +17 -0
- package/dist/core/git.js +124 -25
- package/dist/core/git.js.map +1 -1
- package/dist/core/goals/open-goals.d.ts +47 -0
- package/dist/core/goals/open-goals.js +33 -0
- package/dist/core/goals/open-goals.js.map +1 -0
- package/dist/core/inbox/merge.d.ts +5 -0
- package/dist/core/inbox/merge.js +58 -2
- package/dist/core/inbox/merge.js.map +1 -1
- package/dist/core/integrations/locus.d.ts +28 -0
- package/dist/core/integrations/locus.js +155 -30
- package/dist/core/integrations/locus.js.map +1 -1
- package/dist/core/integrations/telegram-format.d.ts +40 -0
- package/dist/core/integrations/telegram-format.js +123 -0
- package/dist/core/integrations/telegram-format.js.map +1 -0
- package/dist/core/integrations/telegram.d.ts +60 -4
- package/dist/core/integrations/telegram.js +161 -28
- package/dist/core/integrations/telegram.js.map +1 -1
- package/dist/core/mcp-registry.d.ts +12 -0
- package/dist/core/mcp-registry.js +70 -0
- package/dist/core/mcp-registry.js.map +1 -1
- package/dist/core/observability/rollup.d.ts +12 -10
- package/dist/core/observability/rollup.js +44 -17
- package/dist/core/observability/rollup.js.map +1 -1
- package/dist/core/resources/connection-monitor.d.ts +9 -0
- package/dist/core/resources/connection-monitor.js +19 -9
- package/dist/core/resources/connection-monitor.js.map +1 -1
- package/dist/core/resources/quota-refresh-lease.d.ts +17 -0
- package/dist/core/resources/quota-refresh-lease.js +34 -1
- package/dist/core/resources/quota-refresh-lease.js.map +1 -1
- package/dist/core/routing/budget-api.d.ts +7 -1
- package/dist/core/routing/budget-api.js +56 -2
- package/dist/core/routing/budget-api.js.map +1 -1
- package/dist/core/routing/readiness-types.d.ts +82 -0
- package/dist/core/routing/readiness-types.js +23 -0
- package/dist/core/routing/readiness-types.js.map +1 -0
- package/dist/core/routing/readiness.d.ts +103 -0
- package/dist/core/routing/readiness.js +480 -0
- package/dist/core/routing/readiness.js.map +1 -0
- package/dist/core/sandbox/confine.js +22 -1
- package/dist/core/sandbox/confine.js.map +1 -1
- package/dist/core/sandbox/policy.d.ts +23 -0
- package/dist/core/sandbox/policy.js +100 -0
- package/dist/core/sandbox/policy.js.map +1 -1
- package/dist/core/types.d.ts +13 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +1204 -939
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +1319 -1054
- package/dist/core/usage/frontier-usage.d.ts +20 -2
- package/dist/core/usage/frontier-usage.js +75 -17
- package/dist/core/usage/frontier-usage.js.map +1 -1
- package/dist/core/verse/accounts.d.ts +45 -0
- package/dist/core/verse/accounts.js +246 -17
- package/dist/core/verse/accounts.js.map +1 -1
- package/dist/core/verse/apps-api.js +23 -11
- package/dist/core/verse/apps-api.js.map +1 -1
- package/dist/core/verse/apps.d.ts +11 -9
- package/dist/core/verse/apps.js +2 -2
- package/dist/core/verse/apps.js.map +1 -1
- package/dist/core/verse/authority-api.d.ts +8 -2
- package/dist/core/verse/authority-api.js +40 -5
- package/dist/core/verse/authority-api.js.map +1 -1
- package/dist/core/verse/autonomy-ladder.d.ts +172 -0
- package/dist/core/verse/autonomy-ladder.js +251 -0
- package/dist/core/verse/autonomy-ladder.js.map +1 -0
- package/dist/core/verse/context-fit.js +7 -5
- package/dist/core/verse/context-fit.js.map +1 -1
- package/dist/core/verse/control-api.d.ts +23 -1
- package/dist/core/verse/control-api.js +117 -10
- package/dist/core/verse/control-api.js.map +1 -1
- package/dist/core/verse/fleet-live-api.js +13 -5
- package/dist/core/verse/fleet-live-api.js.map +1 -1
- package/dist/core/verse/folder-io.d.ts +50 -0
- package/dist/core/verse/folder-io.js +142 -0
- package/dist/core/verse/folder-io.js.map +1 -0
- package/dist/core/verse/git-api.js +5 -4
- package/dist/core/verse/git-api.js.map +1 -1
- package/dist/core/verse/git-ops.d.ts +10 -1
- package/dist/core/verse/git-ops.js +18 -2
- package/dist/core/verse/git-ops.js.map +1 -1
- package/dist/core/verse/github-api.d.ts +1 -1
- package/dist/core/verse/github-api.js +5 -4
- package/dist/core/verse/github-api.js.map +1 -1
- package/dist/core/verse/github-repo.js +118 -14
- package/dist/core/verse/github-repo.js.map +1 -1
- package/dist/core/verse/leader-api.d.ts +5 -4
- package/dist/core/verse/leader-api.js +237 -10
- package/dist/core/verse/leader-api.js.map +1 -1
- package/dist/core/verse/local-models.d.ts +10 -0
- package/dist/core/verse/local-models.js +10 -1
- package/dist/core/verse/local-models.js.map +1 -1
- package/dist/core/verse/login-path.d.ts +73 -0
- package/dist/core/verse/login-path.js +123 -14
- package/dist/core/verse/login-path.js.map +1 -1
- package/dist/core/verse/mcp-control-api.js +4 -4
- package/dist/core/verse/mcp-control-api.js.map +1 -1
- package/dist/core/verse/mcp-scope.d.ts +22 -0
- package/dist/core/verse/mcp-scope.js +41 -1
- package/dist/core/verse/mcp-scope.js.map +1 -1
- package/dist/core/verse/mcp-seat-view.d.ts +10 -0
- package/dist/core/verse/mcp-seat-view.js +30 -4
- package/dist/core/verse/mcp-seat-view.js.map +1 -1
- package/dist/core/verse/overnight-api.js +20 -2
- package/dist/core/verse/overnight-api.js.map +1 -1
- package/dist/core/verse/path-guard.d.ts +24 -0
- package/dist/core/verse/path-guard.js +91 -22
- package/dist/core/verse/path-guard.js.map +1 -1
- package/dist/core/verse/preview-api.js +22 -0
- package/dist/core/verse/preview-api.js.map +1 -1
- package/dist/core/verse/projects.d.ts +21 -0
- package/dist/core/verse/projects.js +82 -0
- package/dist/core/verse/projects.js.map +1 -1
- package/dist/core/verse/session-controls-api.js +5 -3
- package/dist/core/verse/session-controls-api.js.map +1 -1
- package/dist/core/verse/session-handoff.d.ts +26 -0
- package/dist/core/verse/session-handoff.js +90 -12
- package/dist/core/verse/session-handoff.js.map +1 -1
- package/dist/core/verse/terminal-api.js +7 -4
- package/dist/core/verse/terminal-api.js.map +1 -1
- package/dist/core/verse/terminal.js +9 -5
- package/dist/core/verse/terminal.js.map +1 -1
- package/dist/core/verse/verse-api.js +81 -27
- package/dist/core/verse/verse-api.js.map +1 -1
- package/dist/core/verse/workspaces.d.ts +51 -0
- package/dist/core/verse/workspaces.js +177 -47
- package/dist/core/verse/workspaces.js.map +1 -1
- package/dist/core/vision/leader-apply.d.ts +40 -0
- package/dist/core/vision/leader-apply.js +101 -30
- package/dist/core/vision/leader-apply.js.map +1 -1
- package/dist/core/vision/leader-cadence.d.ts +114 -0
- package/dist/core/vision/leader-cadence.js +127 -0
- package/dist/core/vision/leader-cadence.js.map +1 -0
- package/dist/core/vision/leader-goal-evidence.d.ts +25 -0
- package/dist/core/vision/leader-goal-evidence.js +36 -0
- package/dist/core/vision/leader-goal-evidence.js.map +1 -0
- package/dist/core/vision/leader-health.d.ts +53 -0
- package/dist/core/vision/leader-health.js +92 -0
- package/dist/core/vision/leader-health.js.map +1 -0
- package/dist/core/vision/leader-operator.d.ts +176 -0
- package/dist/core/vision/leader-operator.js +355 -0
- package/dist/core/vision/leader-operator.js.map +1 -0
- package/dist/core/vision/leader-run-chain.d.ts +41 -0
- package/dist/core/vision/leader-run-chain.js +54 -0
- package/dist/core/vision/leader-run-chain.js.map +1 -0
- package/dist/core/vision/leader-seat-plan.d.ts +68 -0
- package/dist/core/vision/leader-seat-plan.js +93 -0
- package/dist/core/vision/leader-seat-plan.js.map +1 -0
- package/dist/core/vision/leader-seat.d.ts +71 -5
- package/dist/core/vision/leader-seat.js +235 -33
- package/dist/core/vision/leader-seat.js.map +1 -1
- package/dist/core/vision/leader-thread-types.d.ts +104 -0
- package/dist/core/vision/leader-thread-types.js +9 -0
- package/dist/core/vision/leader-thread-types.js.map +1 -0
- package/dist/core/vision/leader-thread.d.ts +138 -0
- package/dist/core/vision/leader-thread.js +926 -0
- package/dist/core/vision/leader-thread.js.map +1 -0
- package/dist/core/vision/leader-types.d.ts +75 -1
- package/dist/core/vision/leader.d.ts +88 -18
- package/dist/core/vision/leader.js +269 -69
- package/dist/core/vision/leader.js.map +1 -1
- package/dist/core/web/public/next/assets/{ActionMenu-Dwjk6rUQ.js → ActionMenu-CIiX2X8w.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-Dwjk6rUQ.js.map → ActionMenu-CIiX2X8w.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-DHsysoIL.js +2 -0
- package/dist/core/web/public/next/assets/{Advanced-cVYTAsfB.js.map → Advanced-DHsysoIL.js.map} +1 -1
- package/dist/core/web/public/next/assets/{App-IsaWDsdF.js → App-CMeAocmW.js} +5 -5
- package/dist/core/web/public/next/assets/{App-IsaWDsdF.js.map → App-CMeAocmW.js.map} +1 -1
- package/dist/core/web/public/next/assets/AppsSection-DISYnMnc.js +2 -0
- package/dist/core/web/public/next/assets/{AppsSection-DDqeSrty.js.map → AppsSection-DISYnMnc.js.map} +1 -1
- package/dist/core/web/public/next/assets/AreaTrend-DK2Y2TbZ.js +2 -0
- package/dist/core/web/public/next/assets/AreaTrend-DK2Y2TbZ.js.map +1 -0
- package/dist/core/web/public/next/assets/{AutonomyOffState-CpFYS3tQ.js → AutonomyOffState-CEPSZToP.js} +3 -3
- package/dist/core/web/public/next/assets/{AutonomyOffState-CpFYS3tQ.js.map → AutonomyOffState-CEPSZToP.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-DWc3ciAD.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-Dwn8UtOy.js.map → AutonomySection-DWc3ciAD.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomyStatus-CYaHjJ9U.js +2 -0
- package/dist/core/web/public/next/assets/AutonomyStatus-CYaHjJ9U.js.map +1 -0
- package/dist/core/web/public/next/assets/{BranchBar-ISZ7xUCj.js → BranchBar-BxhdiIpx.js} +2 -2
- package/dist/core/web/public/next/assets/{BranchBar-ISZ7xUCj.js.map → BranchBar-BxhdiIpx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BudgetControl-BARVp-En.js → BudgetControl-C-0KhjRS.js} +2 -2
- package/dist/core/web/public/next/assets/{BudgetControl-BARVp-En.js.map → BudgetControl-C-0KhjRS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-DtE0rlWD.js → Button-D90dzI_o.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-DtE0rlWD.js.map → Button-D90dzI_o.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CapacityStrip-DKbKA_Aa.js → CapacityStrip-qKDBC65C.js} +2 -2
- package/dist/core/web/public/next/assets/{CapacityStrip-DKbKA_Aa.js.map → CapacityStrip-qKDBC65C.js.map} +1 -1
- package/dist/core/web/public/next/assets/ChartFrame-DY-GVUb3.js +2 -0
- package/dist/core/web/public/next/assets/ChartFrame-DY-GVUb3.js.map +1 -0
- package/dist/core/web/public/next/assets/ChartFrame-DyjmyV8N.css +1 -0
- package/dist/core/web/public/next/assets/ChatSection-DlT4QU6a.js +3 -0
- package/dist/core/web/public/next/assets/{ChatSection-C9myY4ei.js.map → ChatSection-DlT4QU6a.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CloudBudgetForm-CvjK4Oh6.js → CloudBudgetForm-BrNun_Yu.js} +2 -2
- package/dist/core/web/public/next/assets/{CloudBudgetForm-CvjK4Oh6.js.map → CloudBudgetForm-BrNun_Yu.js.map} +1 -1
- package/dist/core/web/public/next/assets/CommandPalette-C5lDDKN0.js +2 -0
- package/dist/core/web/public/next/assets/CommandPalette-C5lDDKN0.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandSection-B0xuU-yZ.css +1 -0
- package/dist/core/web/public/next/assets/CommandSection-DXFvPgKp.js +3 -0
- package/dist/core/web/public/next/assets/CommandSection-DXFvPgKp.js.map +1 -0
- package/dist/core/web/public/next/assets/{ConfirmDialog-CLUhzaBj.js → ConfirmDialog-BR4nZQ2D.js} +2 -2
- package/dist/core/web/public/next/assets/{ConfirmDialog-CLUhzaBj.js.map → ConfirmDialog-BR4nZQ2D.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DeleteChatDialog-C_eDhV8b.js → DeleteChatDialog-BCfP12GH.js} +2 -2
- package/dist/core/web/public/next/assets/{DeleteChatDialog-C_eDhV8b.js.map → DeleteChatDialog-BCfP12GH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Dialog-BRd_B9OE.js → Dialog-D3msQlCj.js} +2 -2
- package/dist/core/web/public/next/assets/{Dialog-BRd_B9OE.js.map → Dialog-D3msQlCj.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffPane-Cpr9soB2.js → DiffPane-Ix6hvXlY.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffPane-Cpr9soB2.js.map → DiffPane-Ix6hvXlY.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffViewer-CNwd0W3Q.js → DiffViewer-C4WKsCIe.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-CNwd0W3Q.js.map → DiffViewer-C4WKsCIe.js.map} +1 -1
- package/dist/core/web/public/next/assets/DockHost-aWP7liri.js +2 -0
- package/dist/core/web/public/next/assets/{DockHost-BcEq2qaS.js.map → DockHost-aWP7liri.js.map} +1 -1
- package/dist/core/web/public/next/assets/{EmptyState-DsN1H6MC.js → EmptyState-D2IRy3Cg.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-DsN1H6MC.js.map → EmptyState-D2IRy3Cg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-fycQTBRO.js → Epistemic-DMr18muX.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-fycQTBRO.js.map → Epistemic-DMr18muX.js.map} +1 -1
- package/dist/core/web/public/next/assets/{EvidenceTimeline-sCCAdnBK.js → EvidenceTimeline-DXmmz6Fi.js} +2 -2
- package/dist/core/web/public/next/assets/{EvidenceTimeline-sCCAdnBK.js.map → EvidenceTimeline-DXmmz6Fi.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-BfplcwFU.js +3 -0
- package/dist/core/web/public/next/assets/FleetSection-BfplcwFU.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-Dh2yVHws.js +2 -0
- package/dist/core/web/public/next/assets/Funnel-Dh2yVHws.js.map +1 -0
- package/dist/core/web/public/next/assets/{GearTray-CpDt0xwj.js → GearTray-Dt-ee32-.js} +2 -2
- package/dist/core/web/public/next/assets/{GearTray-CpDt0xwj.js.map → GearTray-Dt-ee32-.js.map} +1 -1
- package/dist/core/web/public/next/assets/GrowthSection-P9EUfGeA.js +2 -0
- package/dist/core/web/public/next/assets/{GrowthSection-BvZezOsX.js.map → GrowthSection-P9EUfGeA.js.map} +1 -1
- package/dist/core/web/public/next/assets/{HandoffDialog-B1G6gQyk.js → HandoffDialog-CLJQLe7M.js} +2 -2
- package/dist/core/web/public/next/assets/{HandoffDialog-B1G6gQyk.js.map → HandoffDialog-CLJQLe7M.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Input-CI0yBHmn.js → Input-D_KRJA9V.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-CI0yBHmn.js.map → Input-D_KRJA9V.js.map} +1 -1
- package/dist/core/web/public/next/assets/LeaderCard-D-7DlJuR.js +2 -0
- package/dist/core/web/public/next/assets/LeaderCard-D-7DlJuR.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderCard-DNsbLwY3.css +1 -0
- package/dist/core/web/public/next/assets/LeaderConversation-DGZjWI-E.js +2 -0
- package/dist/core/web/public/next/assets/LeaderConversation-DGZjWI-E.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderConversation-DPHUTq6W.css +1 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-C7BCG2d7.js +2 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-C7BCG2d7.js.map +1 -0
- package/dist/core/web/public/next/assets/McpSection-DGbRcyv8.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-nuXer4K-.js.map → McpSection-DGbRcyv8.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdown-BCe4TsXk.js → MessageMarkdown-DFvk06qG.js} +3 -3
- package/dist/core/web/public/next/assets/{MessageMarkdown-BCe4TsXk.js.map → MessageMarkdown-DFvk06qG.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DL3LU5kL.js → MessageMarkdownRenderer-BAv4oEUf.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DL3LU5kL.js.map → MessageMarkdownRenderer-BAv4oEUf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-b69LM0mU.js → Meter-CMj-VafN.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-b69LM0mU.js.map → Meter-CMj-VafN.js.map} +1 -1
- package/dist/core/web/public/next/assets/MindSection-C6kLPIjt.js +3 -0
- package/dist/core/web/public/next/assets/MindSection-C6kLPIjt.js.map +1 -0
- package/dist/core/web/public/next/assets/{MutationTokenDialog-Bm34BNVV.js → MutationTokenDialog-DbnO8aYi.js} +2 -2
- package/dist/core/web/public/next/assets/{MutationTokenDialog-Bm34BNVV.js.map → MutationTokenDialog-DbnO8aYi.js.map} +1 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-crsiX-Nc.js +3 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-crsiX-Nc.js.map +1 -0
- package/dist/core/web/public/next/assets/{NeedsYouList-D5Kk549g.js → NeedsYouList-CCsijdWt.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouList-D5Kk549g.js.map → NeedsYouList-CCsijdWt.js.map} +1 -1
- package/dist/core/web/public/next/assets/NewChatDialog-BlCHtOIr.js +3 -0
- package/dist/core/web/public/next/assets/{NewChatDialog-BqFTWgHU.js.map → NewChatDialog-BlCHtOIr.js.map} +1 -1
- package/dist/core/web/public/next/assets/{OnboardingFlow-DcDsguAM.js → OnboardingFlow-Cy9BA9eR.js} +3 -3
- package/dist/core/web/public/next/assets/{OnboardingFlow-DcDsguAM.js.map → OnboardingFlow-Cy9BA9eR.js.map} +1 -1
- package/dist/core/web/public/next/assets/OnboardingGate-BXpNFoLt.js +3 -0
- package/dist/core/web/public/next/assets/{OnboardingGate-BZafM1Vf.js.map → OnboardingGate-BXpNFoLt.js.map} +1 -1
- package/dist/core/web/public/next/assets/PreviewPane-COid5A0f.js +2 -0
- package/dist/core/web/public/next/assets/{PreviewPane-zT3gK9TD.js.map → PreviewPane-COid5A0f.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ProviderLogo-AwHn2sKm.js → ProviderLogo-Cq-CYIwT.js} +2 -2
- package/dist/core/web/public/next/assets/{ProviderLogo-AwHn2sKm.js.map → ProviderLogo-Cq-CYIwT.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RailStatus-xHrovWvI.js → RailStatus-Co5UB6We.js} +2 -2
- package/dist/core/web/public/next/assets/{RailStatus-xHrovWvI.js.map → RailStatus-Co5UB6We.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-SEFZlMB2.js → RefreshIndicator-DO9ibnSq.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-SEFZlMB2.js.map → RefreshIndicator-DO9ibnSq.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-Dr2WRgkq.js +7 -0
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-CAxPQ4sZ.js.map → ResourcePoolConsoleApp-Dr2WRgkq.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-CwMnbqI1.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-CwMnbqI1.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-B_Xp_JNc.js +2 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-B_Xp_JNc.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-DrGoO8KG.css +1 -0
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-C8WGiixc.js → RouteErrorBoundary-SkNhhUbt.js} +2 -2
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-C8WGiixc.js.map → RouteErrorBoundary-SkNhhUbt.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RunInCloudAction-1-IPLYhf.js → RunInCloudAction-BXPlZwJQ.js} +2 -2
- package/dist/core/web/public/next/assets/{RunInCloudAction-1-IPLYhf.js.map → RunInCloudAction-BXPlZwJQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SeatSelector-DpwNiX8F.js → SeatSelector-J5R3zDkB.js} +3 -3
- package/dist/core/web/public/next/assets/{SeatSelector-DpwNiX8F.js.map → SeatSelector-J5R3zDkB.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-Wt1ATod9.js → Segmented-CGh_-tBb.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-Wt1ATod9.js.map → Segmented-CGh_-tBb.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-By-V9lMc.js → Select-CWnmUzs3.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-By-V9lMc.js.map → Select-CWnmUzs3.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionGate-WROS02tK.js → SessionGate-sp4KsnUo.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionGate-WROS02tK.js.map → SessionGate-sp4KsnUo.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionInsightChip-DNUcruwp.js → SessionInsightChip-DLFAzdbi.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionInsightChip-DNUcruwp.js.map → SessionInsightChip-DLFAzdbi.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionSearch-UHtt7a8f.js → SessionSearch-DbFjwR1h.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionSearch-UHtt7a8f.js.map → SessionSearch-DbFjwR1h.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SettingsSection-Bf74l0Gj.js → SettingsSection-Ch23msJ5.js} +2 -2
- package/dist/core/web/public/next/assets/SettingsSection-Ch23msJ5.js.map +1 -0
- package/dist/core/web/public/next/assets/{SetupChecklist-CzpEcfOl.js → SetupChecklist-Bd76MBAR.js} +2 -2
- package/dist/core/web/public/next/assets/{SetupChecklist-CzpEcfOl.js.map → SetupChecklist-Bd76MBAR.js.map} +1 -1
- package/dist/core/web/public/next/assets/ShadowDecisions-C5RAY91f.js +3 -0
- package/dist/core/web/public/next/assets/ShadowDecisions-C5RAY91f.js.map +1 -0
- package/dist/core/web/public/next/assets/{Sheet-HkBOBMTT.js → Sheet-BZ2AG4Eo.js} +2 -2
- package/dist/core/web/public/next/assets/{Sheet-HkBOBMTT.js.map → Sheet-BZ2AG4Eo.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-DiigiT8H.js → ShortcutsOverlay-C8n8y3zf.js} +2 -2
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-DiigiT8H.js.map → ShortcutsOverlay-C8n8y3zf.js.map} +1 -1
- package/dist/core/web/public/next/assets/Sidebar-DN--cPYN.js +3 -0
- package/dist/core/web/public/next/assets/{Sidebar-C9YtBYVZ.js.map → Sidebar-DN--cPYN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Slider-DaEDws-b.js → Slider-KVoJLDD6.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-DaEDws-b.js.map → Slider-KVoJLDD6.js.map} +1 -1
- package/dist/core/web/public/next/assets/StatTile-C4KgjltA.js +2 -0
- package/dist/core/web/public/next/assets/StatTile-C4KgjltA.js.map +1 -0
- package/dist/core/web/public/next/assets/StatTile-CNCqDoPO.css +1 -0
- package/dist/core/web/public/next/assets/{StatusBadge-CXG3iNL4.js → StatusBadge-CXsYqmdU.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-CXG3iNL4.js.map → StatusBadge-CXsYqmdU.js.map} +1 -1
- package/dist/core/web/public/next/assets/StepBand-BMtVOFpK.js +2 -0
- package/dist/core/web/public/next/assets/StepBand-BMtVOFpK.js.map +1 -0
- package/dist/core/web/public/next/assets/{Surface-5bNA08tK.js → Surface-BfDmQcKe.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-5bNA08tK.js.map → Surface-BfDmQcKe.js.map} +1 -1
- package/dist/core/web/public/next/assets/Swimlane-B9Exxekk.js +2 -0
- package/dist/core/web/public/next/assets/Swimlane-B9Exxekk.js.map +1 -0
- package/dist/core/web/public/next/assets/Swimlane-Bf4Rjoy9.css +1 -0
- package/dist/core/web/public/next/assets/{Switch-BmCzfFnu.js → Switch-9NtO_6Lj.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-BmCzfFnu.js.map → Switch-9NtO_6Lj.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-WSUIaMVy.js → Tag-DscCRFcN.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-WSUIaMVy.js.map → Tag-DscCRFcN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{TerminalPane-BVFgYX6K.js → TerminalPane-B668-DJW.js} +5 -5
- package/dist/core/web/public/next/assets/{TerminalPane-BVFgYX6K.js.map → TerminalPane-B668-DJW.js.map} +1 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BUV_brY7.js +2 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-BpphLqoz.js.map → UniverseConsoleApp-BUV_brY7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-DbpbSMwO.js → UniverseView-DG70zH0W.js} +4 -4
- package/dist/core/web/public/next/assets/{UniverseView-DbpbSMwO.js.map → UniverseView-DG70zH0W.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-DY7uOTm1.js +3 -0
- package/dist/core/web/public/next/assets/UsageSection-DY7uOTm1.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CWU6R3By.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CWU6R3By.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-D1nP9BhD.js +10 -0
- package/dist/core/web/public/next/assets/{Workspace-RXy0pqp6.js.map → Workspace-D1nP9BhD.js.map} +1 -1
- package/dist/core/web/public/next/assets/actions-CY-PjpGc.js +2 -0
- package/dist/core/web/public/next/assets/{actions-BZTidCXZ.js.map → actions-CY-PjpGc.js.map} +1 -1
- package/dist/core/web/public/next/assets/actions-DkWhhWIg.css +1 -0
- package/dist/core/web/public/next/assets/{apps-model-CHO133qt.js → apps-model-Du02KhAf.js} +2 -2
- package/dist/core/web/public/next/assets/{apps-model-CHO133qt.js.map → apps-model-Du02KhAf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{authority-model-8NeAEwAF.js → authority-model-79SeuKlJ.js} +2 -2
- package/dist/core/web/public/next/assets/{authority-model-8NeAEwAF.js.map → authority-model-79SeuKlJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/autonomy-ladder-BGWmZzP7.css +1 -0
- package/dist/core/web/public/next/assets/autonomy-ladder.module-ArDv4bkr.js +2 -0
- package/dist/core/web/public/next/assets/autonomy-ladder.module-ArDv4bkr.js.map +1 -0
- package/dist/core/web/public/next/assets/budget-queries-D8QV5XtH.js +2 -0
- package/dist/core/web/public/next/assets/{budget-queries-DFF-3ICg.js.map → budget-queries-D8QV5XtH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{capacity-strip-model-5ViUgUlP.js → capacity-strip-model-BwZ1ZbkU.js} +2 -2
- package/dist/core/web/public/next/assets/{capacity-strip-model-5ViUgUlP.js.map → capacity-strip-model-BwZ1ZbkU.js.map} +1 -1
- package/dist/core/web/public/next/assets/charts-BZ50mZD_.js +2 -0
- package/dist/core/web/public/next/assets/charts-BZ50mZD_.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-ClCB18la.css +1 -0
- package/dist/core/web/public/next/assets/{cloud-model-CfRydq8N.js → cloud-model-BDivRMqv.js} +2 -2
- package/dist/core/web/public/next/assets/{cloud-model-CfRydq8N.js.map → cloud-model-BDivRMqv.js.map} +1 -1
- package/dist/core/web/public/next/assets/{cloud-queries-DmptbjS8.js → cloud-queries-BPQQ5_pJ.js} +2 -2
- package/dist/core/web/public/next/assets/{cloud-queries-DmptbjS8.js.map → cloud-queries-BPQQ5_pJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{colors-BZ3a9wFf.js → colors-DvK0wMHH.js} +2 -2
- package/dist/core/web/public/next/assets/{colors-BZ3a9wFf.js.map → colors-DvK0wMHH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{command-catalog-ffCAijVY.js → command-catalog-BIntSa9l.js} +2 -2
- package/dist/core/web/public/next/assets/command-catalog-BIntSa9l.js.map +1 -0
- package/dist/core/web/public/next/assets/{context-model-CDeyP0cA.js → context-model-Br8t9jgG.js} +2 -2
- package/dist/core/web/public/next/assets/{context-model-CDeyP0cA.js.map → context-model-Br8t9jgG.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-model-Bb15chFt.js → context-model-CokrgEUq.js} +3 -3
- package/dist/core/web/public/next/assets/{context-model-Bb15chFt.js.map → context-model-CokrgEUq.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-queries-eL3caKVG.js +2 -0
- package/dist/core/web/public/next/assets/{context-queries-_9bFWb9v.js.map → context-queries-eL3caKVG.js.map} +1 -1
- package/dist/core/web/public/next/assets/{control-queries-CXtmZZH6.js → control-queries-B9K-wmcB.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-CXtmZZH6.js.map → control-queries-B9K-wmcB.js.map} +1 -1
- package/dist/core/web/public/next/assets/{copy-setup-BIp0iaiZ.js → copy-setup-XMgCC5f8.js} +2 -2
- package/dist/core/web/public/next/assets/{copy-setup-BIp0iaiZ.js.map → copy-setup-XMgCC5f8.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-icons-Cc43W7r4.js → dock-icons-BJ6ZqB2t.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-icons-Cc43W7r4.js.map → dock-icons-BJ6ZqB2t.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-model-DOK8ZtEt.js → fleet-model-BvDR3gjp.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-model-DOK8ZtEt.js.map → fleet-model-BvDR3gjp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-queries-BeEAqD6y.js → fleet-queries-W2UFVMZJ.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-queries-BeEAqD6y.js.map → fleet-queries-W2UFVMZJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{focus-trap-ChZ5EFfM.js → focus-trap-CtI1SlMX.js} +2 -2
- package/dist/core/web/public/next/assets/{focus-trap-ChZ5EFfM.js.map → focus-trap-CtI1SlMX.js.map} +1 -1
- package/dist/core/web/public/next/assets/{format-BmH2yWL6.js → format-CH4g_sl1.js} +2 -2
- package/dist/core/web/public/next/assets/{format-BmH2yWL6.js.map → format-CH4g_sl1.js.map} +1 -1
- package/dist/core/web/public/next/assets/{format-DKrNjdwD.js → format-D7nBg2bn.js} +2 -2
- package/dist/core/web/public/next/assets/{format-DKrNjdwD.js.map → format-D7nBg2bn.js.map} +1 -1
- package/dist/core/web/public/next/assets/{git-model-BFwAVbxF.js → git-model-Dnkd1TnK.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-BFwAVbxF.js.map → git-model-Dnkd1TnK.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-CMNW_dqn.js +2 -0
- package/dist/core/web/public/next/assets/{global-y_exIyAP.js.map → global-CMNW_dqn.js.map} +1 -1
- package/dist/core/web/public/next/assets/guarded-runners-YeAc9wLQ.js +2 -0
- package/dist/core/web/public/next/assets/{guarded-runners-Cd4POBtI.js.map → guarded-runners-YeAc9wLQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{icons-CygCEFWs.js → icons-D1sYbCTQ.js} +2 -2
- package/dist/core/web/public/next/assets/{icons-CygCEFWs.js.map → icons-D1sYbCTQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{index-CyK31YRm.js → index-DZ-UQ7v8.js} +3 -3
- package/dist/core/web/public/next/assets/{index-CyK31YRm.js.map → index-DZ-UQ7v8.js.map} +1 -1
- package/dist/core/web/public/next/assets/leader-focus-BjeJv7CW.js +2 -0
- package/dist/core/web/public/next/assets/leader-focus-BjeJv7CW.js.map +1 -0
- package/dist/core/web/public/next/assets/leader-thread-types-CDb-VPPO.js +2 -0
- package/dist/core/web/public/next/assets/leader-thread-types-CDb-VPPO.js.map +1 -0
- package/dist/core/web/public/next/assets/{live-model-D7hilYFk.js → live-model-D_32RAOR.js} +2 -2
- package/dist/core/web/public/next/assets/{live-model-D7hilYFk.js.map → live-model-D_32RAOR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{mind.module-B15k0Y9q.js → mind.module-7hA92hRg.js} +2 -2
- package/dist/core/web/public/next/assets/{mind.module-B15k0Y9q.js.map → mind.module-7hA92hRg.js.map} +1 -1
- package/dist/core/web/public/next/assets/mutations-DQPbFdRJ.js +2 -0
- package/dist/core/web/public/next/assets/{mutations-CWlxEMEm.js.map → mutations-DQPbFdRJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{nav-mimleI0R.js → nav-0dOYe2rJ.js} +2 -2
- package/dist/core/web/public/next/assets/{nav-mimleI0R.js.map → nav-0dOYe2rJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-DJ4mZKSj.js → overnight-queries-C4wOnFtE.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-DJ4mZKSj.js.map → overnight-queries-C4wOnFtE.js.map} +1 -1
- package/dist/core/web/public/next/assets/primitives-2A5Eq8FQ.js +1 -0
- package/dist/core/web/public/next/assets/{queries-Bw1McHTj.js → queries-BTXWdZzU.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-Bw1McHTj.js.map → queries-BTXWdZzU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reasoning-pref-KkhI_5-j.js → reasoning-pref-Ca6lN6x_.js} +2 -2
- package/dist/core/web/public/next/assets/{reasoning-pref-KkhI_5-j.js.map → reasoning-pref-Ca6lN6x_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reveal-anchor-CCCx_kfT.js → reveal-anchor-DfNLgK_I.js} +2 -2
- package/dist/core/web/public/next/assets/{reveal-anchor-CCCx_kfT.js.map → reveal-anchor-DfNLgK_I.js.map} +1 -1
- package/dist/core/web/public/next/assets/seat-subscription-C5uPHBsN.js +2 -0
- package/dist/core/web/public/next/assets/{seat-subscription-BhUUz7VL.js.map → seat-subscription-C5uPHBsN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-Dcd437cf.js → sidebar-model-CLCdqwkR.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-Dcd437cf.js.map → sidebar-model-CLCdqwkR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{slots-BL_J5mmV.js → slots-C-qBeu-8.js} +3 -3
- package/dist/core/web/public/next/assets/{slots-BL_J5mmV.js.map → slots-C-qBeu-8.js.map} +1 -1
- package/dist/core/web/public/next/assets/{surface-data-C3UAQ4QX.js → surface-data-Dj71tdD-.js} +2 -2
- package/dist/core/web/public/next/assets/{surface-data-C3UAQ4QX.js.map → surface-data-Dj71tdD-.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-prefetch-B0WdJOJG.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-B0WdJOJG.js.map +1 -0
- package/dist/core/web/public/next/assets/{tasks-model-CzHvclVm.js → tasks-model-O8yR5YXp.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-CzHvclVm.js.map → tasks-model-O8yR5YXp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-BwgQTQP0.js → terminal-icons-CoRZq9iO.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-BwgQTQP0.js.map → terminal-icons-CoRZq9iO.js.map} +1 -1
- package/dist/core/web/public/next/assets/thread-data-DQB_g66d.js +2 -0
- package/dist/core/web/public/next/assets/thread-data-DQB_g66d.js.map +1 -0
- package/dist/core/web/public/next/assets/{usage-queries-pXxvy54x.js → usage-queries-AdjEyEtn.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-pXxvy54x.js.map → usage-queries-AdjEyEtn.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-guarded-action-EgVWjM5c.js → use-guarded-action-CuuMHeDX.js} +2 -2
- package/dist/core/web/public/next/assets/{use-guarded-action-EgVWjM5c.js.map → use-guarded-action-CuuMHeDX.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-BoqFxRFG.js → use-ticker-BBcp02SZ.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-BoqFxRFG.js.map → use-ticker-BBcp02SZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-token-gate-DSNIIpI6.js → use-token-gate-CbXVYQYI.js} +2 -2
- package/dist/core/web/public/next/assets/{use-token-gate-DSNIIpI6.js.map → use-token-gate-CbXVYQYI.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useOnboarding-Bk0VnkxQ.js → useOnboarding-C_Fpe_sH.js} +2 -2
- package/dist/core/web/public/next/assets/{useOnboarding-Bk0VnkxQ.js.map → useOnboarding-C_Fpe_sH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useSeatsRefresh-q7Id9RcW.js → useSeatsRefresh-Co1CnxLc.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-q7Id9RcW.js.map → useSeatsRefresh-Co1CnxLc.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useVerseTranscript-CqH51rt9.js → useVerseTranscript-DgbigUlV.js} +2 -2
- package/dist/core/web/public/next/assets/{useVerseTranscript-CqH51rt9.js.map → useVerseTranscript-DgbigUlV.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-icons-DsG1dOQx.js → verse-icons-S56hIiXS.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-icons-DsG1dOQx.js.map → verse-icons-S56hIiXS.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-model-DAVevkNe.js +2 -0
- package/dist/core/web/public/next/assets/{verse-model-JTuvRBVK.js.map → verse-model-DAVevkNe.js.map} +1 -1
- package/dist/core/web/public/next/assets/{warmup-Bv1RumVq.js → warmup-B_RAtNZ_.js} +3 -3
- package/dist/core/web/public/next/assets/{warmup-Bv1RumVq.js.map → warmup-B_RAtNZ_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{why-seat-model-Cau8qG6O.js → why-seat-model-M_r0wX3b.js} +2 -2
- package/dist/core/web/public/next/assets/{why-seat-model-Cau8qG6O.js.map → why-seat-model-M_r0wX3b.js.map} +1 -1
- package/dist/core/web/public/next/assets/{workspace-model-D-SLfads.js → workspace-model-dji5-Al3.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-D-SLfads.js.map → workspace-model-dji5-Al3.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/core/web/read-projection-worker.js +2 -1
- package/dist/core/web/read-projection-worker.js.map +1 -1
- package/dist/core/web/read-projections.d.ts +3 -0
- package/dist/core/web/read-projections.js +2 -2
- package/dist/core/web/read-projections.js.map +1 -1
- package/dist/core/web/visibility.js +3 -4
- package/dist/core/web/visibility.js.map +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +3 -2
- package/dist/core/web/public/next/assets/Advanced-cVYTAsfB.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-DDqeSrty.js +0 -2
- package/dist/core/web/public/next/assets/AreaTrend-C32rUaxm.js +0 -2
- package/dist/core/web/public/next/assets/AreaTrend-C32rUaxm.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-Dwn8UtOy.js +0 -2
- package/dist/core/web/public/next/assets/ChartFrame-BVuBe6RP.css +0 -1
- package/dist/core/web/public/next/assets/ChartFrame-DK_BDXCt.js +0 -2
- package/dist/core/web/public/next/assets/ChartFrame-DK_BDXCt.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-C9myY4ei.js +0 -3
- package/dist/core/web/public/next/assets/CommandPalette-DzPsth0u.js +0 -2
- package/dist/core/web/public/next/assets/CommandPalette-DzPsth0u.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandSection-Brp73iox.js +0 -3
- package/dist/core/web/public/next/assets/CommandSection-Brp73iox.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandSection-CvAVd1w4.css +0 -1
- package/dist/core/web/public/next/assets/DockHost-BcEq2qaS.js +0 -2
- package/dist/core/web/public/next/assets/FleetSection-BG8iGraG.js +0 -3
- package/dist/core/web/public/next/assets/FleetSection-BG8iGraG.js.map +0 -1
- package/dist/core/web/public/next/assets/Funnel-B88_wpA4.js +0 -2
- package/dist/core/web/public/next/assets/Funnel-B88_wpA4.js.map +0 -1
- package/dist/core/web/public/next/assets/GrowthSection-BvZezOsX.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-BxxiEg4e.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-BxxiEg4e.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-iPFEU2Tv.js +0 -2
- package/dist/core/web/public/next/assets/MatrixHeatmap-iPFEU2Tv.js.map +0 -1
- package/dist/core/web/public/next/assets/McpSection-nuXer4K-.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-Dc5v5rH3.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-Dc5v5rH3.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-N1cWJjpz.js +0 -3
- package/dist/core/web/public/next/assets/NeedsYouDrawer-N1cWJjpz.js.map +0 -1
- package/dist/core/web/public/next/assets/NewChatDialog-BqFTWgHU.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingGate-BZafM1Vf.js +0 -3
- package/dist/core/web/public/next/assets/PreviewPane-zT3gK9TD.js +0 -2
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CAxPQ4sZ.js +0 -7
- package/dist/core/web/public/next/assets/ResourcesChrome-BnhnEdJe.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesChrome-BnhnEdJe.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-BAFGodny.js +0 -2
- package/dist/core/web/public/next/assets/ResourcesDrawer-BAFGodny.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-BCFJ2Uq8.css +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-Bf74l0Gj.js.map +0 -1
- package/dist/core/web/public/next/assets/Sidebar-C9YtBYVZ.js +0 -3
- package/dist/core/web/public/next/assets/StatTile-BuLMsJMx.css +0 -1
- package/dist/core/web/public/next/assets/StatTile-CTX41O6y.js +0 -2
- package/dist/core/web/public/next/assets/StatTile-CTX41O6y.js.map +0 -1
- package/dist/core/web/public/next/assets/StepBand-jJTqYIdX.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-jJTqYIdX.js.map +0 -1
- package/dist/core/web/public/next/assets/Swimlane-LrslsGxw.js +0 -2
- package/dist/core/web/public/next/assets/Swimlane-LrslsGxw.js.map +0 -1
- package/dist/core/web/public/next/assets/Swimlane-o6_Zsrnr.css +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BpphLqoz.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-CUlaKtws.js +0 -3
- package/dist/core/web/public/next/assets/UsageSection-CUlaKtws.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-DXDv1aOi.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-DXDv1aOi.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-RXy0pqp6.js +0 -10
- package/dist/core/web/public/next/assets/actions-BZTidCXZ.js +0 -2
- package/dist/core/web/public/next/assets/actions-BmIf9avl.css +0 -1
- package/dist/core/web/public/next/assets/budget-queries-DFF-3ICg.js +0 -2
- package/dist/core/web/public/next/assets/charts-CzxWrZn7.js +0 -2
- package/dist/core/web/public/next/assets/charts-CzxWrZn7.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-DhKTrQLw.css +0 -1
- package/dist/core/web/public/next/assets/command-catalog-ffCAijVY.js.map +0 -1
- package/dist/core/web/public/next/assets/context-queries-_9bFWb9v.js +0 -2
- package/dist/core/web/public/next/assets/global-y_exIyAP.js +0 -2
- package/dist/core/web/public/next/assets/guarded-runners-Cd4POBtI.js +0 -2
- package/dist/core/web/public/next/assets/mutations-CWlxEMEm.js +0 -2
- package/dist/core/web/public/next/assets/primitives-DMijqcu0.js +0 -1
- package/dist/core/web/public/next/assets/seat-subscription-BhUUz7VL.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-BXKjPsV5.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-BXKjPsV5.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-JTuvRBVK.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeaderConversation-DGZjWI-E.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/leader/leader.module.css","../../../../../../src/web-ui/routes/verse/leader/DirectivesStrip.tsx","../../../../../../src/web-ui/routes/verse/leader/LeaderComposer.tsx","../../../../../../src/web-ui/routes/verse/leader/ThreadItems.tsx","../../../../../../src/web-ui/routes/verse/leader/LeaderConversation.tsx"],"sourcesContent":["/*\n * routes/verse/leader/leader.module.css — the Leader conversation on Mind.\n * Calm by construction: one surface, hairline dividers, no bubbles for the\n * Leader (its words read like a document), a quiet bubble for Mason's.\n * Tokens only (style-scan-310).\n */\n\n/* ---- panel ------------------------------------------------------------- */\n.panel {\n display: flex;\n flex-direction: column;\n min-width: 0;\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n}\n\n.head {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-2) var(--space-3);\n padding: var(--card-pad) var(--card-pad) var(--space-2);\n}\n\n.heading {\n display: flex;\n flex: 1 1 240px;\n flex-direction: column;\n gap: var(--space-px);\n min-width: 0;\n}\n\n.title {\n margin: 0;\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n}\n\n.caption {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.dormant {\n display: inline-flex;\n flex: none;\n align-items: center;\n gap: var(--space-2);\n padding: 0 var(--space-2);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-full);\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-sm-line);\n white-space: nowrap;\n}\n\n.dormantDot {\n width: 6px;\n height: 6px;\n border-radius: var(--radius-full);\n background: var(--status-neutral-solid);\n}\n\n.micro {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n\n.muted {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.textButton {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n padding: 0;\n border: 0;\n background: none;\n color: var(--text-link);\n font: inherit;\n font-size: var(--text-xs-size);\n cursor: pointer;\n}\n\n.textButton:hover:not(:disabled) {\n text-decoration: underline;\n}\n\n.textButton:disabled {\n color: var(--text-disabled);\n cursor: default;\n}\n\n.textButton svg {\n width: 12px;\n height: 12px;\n}\n\n.iconButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n padding: 0;\n border: 0;\n border-radius: var(--radius-xs);\n background: none;\n color: var(--text-tertiary);\n cursor: pointer;\n}\n\n.iconButton svg {\n width: 12px;\n height: 12px;\n}\n\n.iconButton:hover:not(:disabled) {\n background: var(--bg-hover);\n color: var(--text-primary);\n}\n\n.iconButton:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.textButton:focus-visible,\n.iconButton:focus-visible,\n.suggestion:focus-visible,\n.send:focus-visible,\n.log:focus-visible {\n outline: 2px solid var(--border-focus);\n outline-offset: 2px;\n}\n\n/* ---- directives -------------------------------------------------------- */\n.directives {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--card-pad);\n border-top: 1px solid var(--border-subtle);\n}\n\n.chips {\n display: contents;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.directiveChip {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n max-width: 100%;\n padding: 0 var(--space-1) 0 var(--space-2);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-full);\n background: var(--bg-surface-raised);\n color: var(--text-primary);\n font-size: var(--text-xs-size);\n line-height: var(--text-sm-line);\n}\n\n.directiveText {\n overflow: hidden;\n max-width: 48ch;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pin {\n flex: none;\n width: 6px;\n height: 6px;\n border-radius: var(--radius-full);\n background: var(--accent-500);\n}\n\n.addDirective {\n display: inline-flex;\n flex: 1 1 240px;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.directiveInput {\n flex: 1;\n min-width: 0;\n height: var(--control-h-xs);\n padding: 0 var(--space-2);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n background: var(--bg-input);\n color: var(--text-primary);\n font: inherit;\n font-size: var(--text-xs-size);\n}\n\n.directiveInput:focus {\n border-color: var(--border-focus);\n outline: none;\n}\n\n/* ---- the log ----------------------------------------------------------- */\n.log {\n display: flex;\n flex-direction: column;\n min-height: 240px;\n max-height: clamp(320px, 62vh, 760px);\n padding: var(--space-4) var(--card-pad);\n overflow-y: auto;\n overscroll-behavior: contain;\n border-top: 1px solid var(--border-subtle);\n scroll-padding-bottom: var(--space-4);\n container-type: inline-size;\n}\n\n.logInner {\n display: flex;\n flex: 1 0 auto;\n flex-direction: column;\n gap: var(--space-4);\n}\n\n/* A narrow log (a phone, a split window): runs use the full width. */\n@container (max-width: 520px) {\n .groupBody,\n .group[data-from='mason'] .groupBody {\n padding-left: 0;\n padding-right: 0;\n }\n\n .thinking {\n padding-left: 0;\n }\n\n .masonItem {\n max-width: 88%;\n }\n}\n\n.older {\n display: flex;\n justify-content: center;\n}\n\n.placeholder {\n margin: auto 0;\n color: var(--text-tertiary);\n font-size: var(--text-sm-size);\n text-align: center;\n}\n\n.placeholder[data-tone='unknown'] {\n color: var(--status-unknown-fg);\n}\n\n.empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-2);\n margin: auto 0;\n padding: var(--space-6) 0;\n text-align: center;\n}\n\n.emptyTitle {\n margin: 0;\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-semibold);\n}\n\n.emptyBody {\n max-width: var(--measure-read);\n margin: 0;\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n}\n\n.suggestions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--space-2);\n margin-top: var(--space-2);\n}\n\n.suggestion {\n padding: var(--space-1) var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-full);\n background: none;\n color: var(--text-secondary);\n font: inherit;\n font-size: var(--text-xs-size);\n cursor: pointer;\n transition: border-color var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);\n}\n\n.suggestion:hover {\n border-color: var(--border-strong);\n color: var(--text-primary);\n}\n\n.day {\n display: flex;\n align-items: center;\n gap: var(--space-3);\n color: var(--text-tertiary);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n font-family: var(--font-display);\n}\n\n.day::before,\n.day::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--border-subtle);\n}\n\n.system {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n text-align: center;\n}\n\n/* ---- a run of messages ------------------------------------------------- */\n.group {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.group[data-from='mason'] {\n align-items: flex-end;\n}\n\n.groupHead {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.group[data-from='mason'] .groupHead {\n flex-direction: row-reverse;\n}\n\n.avatar {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--accent-50);\n color: var(--accent-700);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n font-weight: var(--font-weight-semibold);\n}\n\n.avatar[data-from='mason'] {\n background: var(--status-neutral-bg);\n color: var(--status-neutral-fg);\n}\n\n.who {\n color: var(--text-primary);\n font-weight: var(--font-weight-semibold);\n}\n\n.time {\n font-variant-numeric: tabular-nums;\n}\n\n.channel {\n padding: 0 var(--space-1);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n color: var(--text-tertiary);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n}\n\n.channel[data-channel='telegram'] {\n border-color: var(--status-info-solid);\n color: var(--status-info-fg);\n}\n\n.channel[data-channel='cli'] {\n font-family: var(--font-mono);\n}\n\n.groupBody {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n width: 100%;\n min-width: 0;\n padding-left: calc(20px + var(--space-2));\n}\n\n.group[data-from='mason'] .groupBody {\n align-items: flex-end;\n padding-left: 0;\n padding-right: calc(20px + var(--space-2));\n}\n\n.entry {\n width: 100%;\n min-width: 0;\n}\n\n.group[data-from='mason'] .entry {\n display: flex;\n justify-content: flex-end;\n}\n\n.leaderText {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n max-width: var(--measure-read);\n}\n\n.prose {\n min-width: 0;\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n overflow-wrap: anywhere;\n}\n\n.masonItem {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: var(--space-1);\n max-width: min(78%, var(--measure-read));\n}\n\n.bubble {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-lg);\n background: var(--bg-surface-raised);\n border: 1px solid var(--border-subtle);\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n\n.bubble[data-state='sending'] {\n opacity: 0.7;\n}\n\n.bubble[data-state='failed'] {\n border-color: var(--status-danger-solid);\n border-style: dashed;\n}\n\n.replyTo {\n overflow: hidden;\n max-width: 100%;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.delivery {\n color: var(--text-tertiary);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n}\n\n.delivery[data-failed='true'] {\n color: var(--status-warning-fg);\n}\n\n.failed {\n display: inline-flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--space-2);\n color: var(--status-danger-fg);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.thinking {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n margin: 0;\n padding-left: calc(20px + var(--space-2));\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n}\n\n.dots {\n display: inline-flex;\n gap: 3px;\n}\n\n.dots span {\n width: 4px;\n height: 4px;\n border-radius: var(--radius-full);\n background: var(--text-tertiary);\n animation: leader-dot 1.2s var(--ease-standard) infinite;\n}\n\n.dots span:nth-child(2) {\n animation-delay: 0.15s;\n}\n\n.dots span:nth-child(3) {\n animation-delay: 0.3s;\n}\n\n@keyframes leader-dot {\n 0%,\n 80%,\n 100% {\n opacity: 0.3;\n }\n 40% {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .dots span {\n animation: none;\n opacity: 0.6;\n }\n}\n\n/* ---- memo card --------------------------------------------------------- */\n.memoCard {\n container-type: inline-size;\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n max-width: 720px;\n padding: var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n background: var(--bg-canvas);\n}\n\n.memoCard[data-dry-run='true'] {\n border-style: dashed;\n}\n\n.memoHead {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.memoHead .textButton {\n margin-left: auto;\n}\n\n.memoFacts {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n}\n\n.memoFacts > div {\n display: grid;\n grid-template-columns: 96px minmax(0, 1fr);\n gap: var(--space-3);\n align-items: baseline;\n}\n\n.memoFacts dd {\n margin: 0;\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow-wrap: anywhere;\n}\n\n.delta {\n display: block;\n margin-top: var(--space-1);\n color: var(--status-success-fg);\n font-size: var(--text-xs-size);\n font-variant-numeric: tabular-nums;\n}\n\n/* A narrow memo: labels above their lines, and each action's state under its text. */\n@container (max-width: 460px) {\n .memoFacts > div {\n grid-template-columns: minmax(0, 1fr);\n gap: var(--space-1);\n }\n\n .memoActions > li {\n grid-template-columns: auto minmax(0, 1fr);\n row-gap: var(--space-2);\n }\n\n .memoActions > li > :last-child {\n grid-column: 2;\n justify-self: start;\n }\n}\n\n.more summary {\n color: var(--text-link);\n font-size: var(--text-xs-size);\n cursor: pointer;\n}\n\n.more[open] summary {\n margin-bottom: var(--space-2);\n}\n\n/* ---- question ---------------------------------------------------------- */\n.question {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n max-width: 720px;\n padding: var(--space-3);\n border: 1px solid var(--border-default);\n border-left: 2px solid var(--accent-500);\n border-radius: var(--radius-md);\n background: var(--bg-canvas);\n transition: box-shadow var(--duration-base) var(--ease-standard);\n}\n\n.question[data-answered='true'] {\n border-left-color: var(--status-success-solid);\n}\n\n.question[data-focused='true'] {\n box-shadow: var(--shadow-focus-ring);\n}\n\n.answered {\n display: flex;\n align-items: center;\n gap: var(--space-1);\n margin: 0;\n min-width: 0;\n color: var(--status-success-fg);\n font-size: var(--text-xs-size);\n}\n\n.answered svg {\n flex: none;\n width: 12px;\n height: 12px;\n}\n\n.answeredText {\n overflow: hidden;\n color: var(--text-secondary);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* ---- directive in the thread ------------------------------------------- */\n.directiveNote {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n max-width: 100%;\n margin: 0;\n padding: var(--space-1) var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-full);\n background: var(--bg-surface-raised);\n}\n\n.directiveNoteText {\n overflow: hidden;\n color: var(--text-primary);\n font-size: var(--text-xs-size);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* ---- composer ---------------------------------------------------------- */\n.foot {\n padding: var(--space-3) var(--card-pad) var(--card-pad);\n border-top: 1px solid var(--border-subtle);\n}\n\n.composer {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.composerContext {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n}\n\n.composerContextText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.composerRow {\n display: flex;\n align-items: flex-end;\n gap: var(--space-2);\n padding: var(--space-1) var(--space-1) var(--space-1) var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-lg);\n background: var(--bg-input);\n transition: border-color var(--duration-fast) var(--ease-standard);\n}\n\n.composerRow:focus-within {\n border-color: var(--border-focus);\n}\n\n.composer[data-variant='answer'] .composerRow {\n border-radius: var(--radius-md);\n}\n\n.composer[data-disabled='true'] .composerRow {\n background: var(--bg-canvas);\n}\n\n.composerBox {\n flex: 1;\n min-width: 0;\n min-height: var(--control-h-sm);\n padding: var(--space-1) 0;\n border: 0;\n background: none;\n color: var(--text-primary);\n font: inherit;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n resize: none;\n overflow-y: hidden;\n}\n\n.composerBox:focus {\n outline: none;\n}\n\n.composerBox::placeholder {\n color: var(--text-tertiary);\n}\n\n.send {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: var(--control-h-sm);\n height: var(--control-h-sm);\n padding: 0;\n border: 0;\n border-radius: var(--radius-md);\n background: var(--accent-600);\n color: var(--text-on-accent);\n cursor: pointer;\n transition: opacity var(--duration-fast) var(--ease-standard);\n}\n\n.send svg {\n width: 14px;\n height: 14px;\n}\n\n.send:disabled {\n background: var(--bg-active);\n color: var(--text-disabled);\n cursor: default;\n}\n\n.composerHint {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-3);\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n}\n\n.counter {\n font-variant-numeric: tabular-nums;\n}\n\n.counter[data-over='true'] {\n color: var(--status-danger-fg);\n}\n\n.key {\n display: inline-block;\n min-width: 14px;\n padding: 0 2px;\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n font-family: var(--font-ui);\n text-align: center;\n}\n","/**\n * routes/verse/leader/DirectivesStrip.tsx — Mason's standing instructions to\n * the Leader, pinned above the conversation as chips.\n *\n * DIRECTIVES [Ship binshield before new goals ×] [No spend raises at night ×] + Add directive\n *\n * × retires one (token, no confirmation: a directive can be added back in a\n * second, and retiring one only removes an instruction). \"+ Add directive\"\n * opens an inline box: Enter adds, Escape cancels. Both go through the\n * surface's actions (token prompt, read-only explanation, the server's own\n * refusal sentence on the Mind action line).\n */\nimport { useEffect, useRef, useState, type KeyboardEvent } from 'react';\nimport { IconPlus, IconX } from '../../../components/primitives/icons.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport type { OptionalRead } from '../command/surface-data.js';\nimport { addLeaderDirective, retireLeaderDirective } from './thread-data.js';\nimport { CHANNEL_LABEL } from './thread-model.js';\nimport type { DirectiveChip } from './thread-types.js';\nimport styles from './leader.module.css';\n\nexport const DIRECTIVE_MAX = 500;\n\nexport interface DirectivesStripProps {\n read: OptionalRead<DirectiveChip[]> | undefined;\n actions: SurfaceActions;\n /** The inline add box is open (the panel opens it for ⌘K \"Add Leader directive…\"). */\n adding: boolean;\n onAddingChange: (adding: boolean) => void;\n}\n\nexport function DirectivesStrip({ read, actions, adding, onAddingChange }: DirectivesStripProps) {\n const [draft, setDraft] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (adding) inputRef.current?.focus();\n }, [adding]);\n\n const list = read?.value ?? null;\n const disabled = actions.busy || actions.readOnly;\n\n function add() {\n const text = draft.trim();\n if (!text || text.length > DIRECTIVE_MAX) return;\n actions.act(() => addLeaderDirective(text), 'Adding a Leader directive requires the dispatch token.', {\n onDone: () => {\n setDraft('');\n onAddingChange(false);\n },\n });\n }\n\n function onKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setDraft('');\n onAddingChange(false);\n return;\n }\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n event.stopPropagation();\n add();\n }\n }\n\n return (\n <div className={styles.directives} role=\"group\" aria-label=\"Directives\">\n <span className={styles.micro}>Directives</span>\n {!read ? (\n <span className={styles.muted} aria-busy=\"true\">Reading…</span>\n ) : list === null ? (\n <span className={styles.muted}>{read.reason ?? 'Directives did not answer.'}</span>\n ) : list.length === 0 && !adding ? (\n <span className={styles.muted}>None standing — the Leader works from its own judgment.</span>\n ) : (\n <ul className={styles.chips}>\n {list.map((d) => (\n <li key={d.id} className={styles.directiveChip} title={[d.text, d.channel ? `added from ${CHANNEL_LABEL[d.channel]}` : null].filter(Boolean).join(' — ')}>\n <span className={styles.pin} aria-hidden=\"true\" />\n <span className={styles.directiveText}>{d.text}</span>\n <button\n type=\"button\"\n className={styles.iconButton}\n aria-label={`Retire directive: ${d.text}`}\n disabled={disabled}\n onClick={() => actions.act(() => retireLeaderDirective(d.id), 'Retiring a Leader directive requires the dispatch token.')}\n >\n <IconX />\n </button>\n </li>\n ))}\n </ul>\n )}\n {adding ? (\n <span className={styles.addDirective}>\n <input\n ref={inputRef}\n className={styles.directiveInput}\n aria-label=\"New directive\"\n placeholder=\"e.g. No new goals until binshield ships\"\n value={draft}\n maxLength={DIRECTIVE_MAX}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKeyDown}\n onBlur={() => {\n // An empty box closes on blur; words typed stay until Escape or Add.\n if (!draft.trim()) onAddingChange(false);\n }}\n />\n <button type=\"button\" className={styles.textButton} disabled={disabled || !draft.trim()} onClick={add}>\n Add\n </button>\n </span>\n ) : list !== null ? (\n <button type=\"button\" className={styles.textButton} disabled={actions.readOnly} onClick={() => onAddingChange(true)}>\n <IconPlus /> Add directive\n </button>\n ) : null}\n </div>\n );\n}\n","/**\n * routes/verse/leader/LeaderComposer.tsx — the Leader conversation's input:\n * a growing text box and one Send button. Deliberately NOT the chat\n * composer (no seats, models, attachments or slash commands — the Leader\n * reads words).\n *\n * Enter sends · Shift+Enter is a new line · an IME composition is never\n * sent mid-word · an empty or whitespace box never sends.\n *\n * Also the inline answer box under a Leader question (`variant=\"answer\"`):\n * the same keys, one line to start.\n */\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, type KeyboardEvent } from 'react';\nimport { IconSend, IconX } from '../../../components/primitives/icons.js';\nimport { LEADER_MESSAGE_MAX } from './thread-model.js';\nimport styles from './leader.module.css';\n\nexport interface LeaderComposerHandle {\n focus: () => void;\n}\n\nexport interface LeaderComposerProps {\n value: string;\n onChange: (value: string) => void;\n /** Called with the trimmed text; the owner clears `value` when the send starts. */\n onSend: (text: string) => void;\n label: string;\n placeholder: string;\n /** Why sending is off right now (read-only session, route absent); null = on. */\n disabledReason?: string | null;\n variant?: 'thread' | 'answer';\n /** A line above the box (\"Answering: …\") with a way to drop it. */\n context?: { label: string; onClear: () => void } | null;\n autoFocus?: boolean;\n /** Grow up to this many lines before scrolling. */\n maxLines?: number;\n}\n\n/** Grow the box to its content, up to `maxLines`. */\nfunction fit(el: HTMLTextAreaElement, maxLines: number): void {\n el.style.height = 'auto';\n const line = Number.parseFloat(getComputedStyle(el).lineHeight) || 20;\n const pad = el.offsetHeight - el.clientHeight;\n const max = line * maxLines + pad + 16;\n el.style.height = `${Math.min(el.scrollHeight + pad, max)}px`;\n el.style.overflowY = el.scrollHeight + pad > max ? 'auto' : 'hidden';\n}\n\nexport const LeaderComposer = forwardRef<LeaderComposerHandle, LeaderComposerProps>(function LeaderComposer(\n { value, onChange, onSend, label, placeholder, disabledReason = null, variant = 'thread', context = null, autoFocus = false, maxLines = 8 },\n ref,\n) {\n const boxRef = useRef<HTMLTextAreaElement>(null);\n useImperativeHandle(ref, () => ({ focus: () => boxRef.current?.focus({ preventScroll: false }) }), []);\n\n useEffect(() => {\n if (boxRef.current) fit(boxRef.current, maxLines);\n }, [value, maxLines]);\n\n const trimmed = value.trim();\n const over = value.length > LEADER_MESSAGE_MAX;\n const canSend = trimmed.length > 0 && !over && disabledReason === null;\n\n const send = useCallback(() => {\n if (!canSend) return;\n onSend(trimmed);\n }, [canSend, onSend, trimmed]);\n\n function onKeyDown(event: KeyboardEvent<HTMLTextAreaElement>) {\n if (event.key !== 'Enter' || event.shiftKey || event.altKey) return;\n // Mid-composition (Japanese, Chinese, …) Enter picks a candidate, not \"send\".\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n event.preventDefault();\n // Keep the key from reaching a shell or drawer shortcut.\n event.stopPropagation();\n send();\n }\n\n const near = value.length > LEADER_MESSAGE_MAX * 0.9;\n return (\n <div className={styles.composer} data-variant={variant} data-disabled={disabledReason !== null ? 'true' : undefined}>\n {context ? (\n <div className={styles.composerContext}>\n <span className={styles.composerContextText} title={context.label}>{context.label}</span>\n <button type=\"button\" className={styles.iconButton} aria-label=\"Stop answering this question\" onClick={context.onClear}>\n <IconX />\n </button>\n </div>\n ) : null}\n <div className={styles.composerRow}>\n <textarea\n ref={boxRef}\n className={styles.composerBox}\n aria-label={label}\n placeholder={disabledReason ?? placeholder}\n value={value}\n rows={1}\n disabled={disabledReason !== null}\n // Only when the operator asked for this box (a Needs-you \"Answer\").\n autoFocus={autoFocus}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n aria-invalid={over || undefined}\n />\n <button type=\"button\" className={styles.send} aria-label={variant === 'answer' ? 'Send answer' : 'Send to the Leader'} disabled={!canSend} onClick={send}>\n <IconSend />\n </button>\n </div>\n {variant === 'thread' ? (\n <p className={styles.composerHint}>\n {near ? (\n <span className={styles.counter} data-over={over ? 'true' : undefined}>\n {value.length.toLocaleString('en-US')} / {LEADER_MESSAGE_MAX.toLocaleString('en-US')}\n </span>\n ) : null}\n <span>\n <kbd className={styles.key}>↵</kbd> send · <kbd className={styles.key}>Shift</kbd> <kbd className={styles.key}>↵</kbd> new line\n </span>\n </p>\n ) : null}\n </div>\n );\n});\n","/**\n * routes/verse/leader/ThreadItems.tsx — how each kind of Leader-thread\n * message draws (grouping and order are thread-model.ts; state and sends\n * are LeaderConversation.tsx).\n *\n * message / update Leader: prose (sanitised Markdown), left\n * Mason: a quiet bubble (plain text), right\n * memo a card: bottleneck, the move (+ expected delta), the\n * actions with their class chip, veto countdown and\n * [Approve] [Veto]; a dry-run memo says so and offers none\n * question the question and, until answered, its answer box\n * answer Mason's bubble, headed by the question it answers\n * directive a pinned chip (\"Directive · …\")\n * action the Leader's note plus the actions it is about\n * system one centred quiet line\n * pending Mason's bubble while sending; on failure the reason,\n * Retry and Discard\n *\n * Memo and action fields are the Leader's own text: plain text, like the\n * rest of Mind. Conversational text goes through MessageMarkdown, the chat's\n * sanitising renderer (DOMPurify; links open in a new tab, no HTML survives).\n */\nimport type { LeaderAction, LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport { IconCheck } from '../../../components/primitives/icons.js';\nimport { MessageMarkdown } from '../MessageMarkdown.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { ActionRow } from '../command/LeaderCard.js';\nimport { scrollToAnchor } from '../command/nav.js';\nimport commandStyles from '../command/command.module.css';\nimport { expectedDeltaText, memoActions } from '../mind/leader-model.js';\nimport { LeaderComposer } from './LeaderComposer.js';\nimport { CHANNEL_LABEL, clockTime, previewText, type PendingMessage, type ThreadEntry, type ThreadRow } from './thread-model.js';\nimport type { LeaderThreadChannel, LeaderThreadMessage } from './thread-types.js';\nimport styles from './leader.module.css';\n\nexport function ChannelBadge({ channel }: { channel: LeaderThreadChannel }) {\n return (\n <span className={styles.channel} data-channel={channel} title={`Sent via ${CHANNEL_LABEL[channel]}`}>\n {CHANNEL_LABEL[channel]}\n </span>\n );\n}\n\n/** \"Also sent to Telegram\" / \"Telegram: not delivered\" — only what the server reported. */\nexport function deliveryNote(delivery: LeaderThreadMessage['delivery']): { text: string; failed: boolean } | null {\n switch (delivery?.telegram) {\n case 'sent':\n return { text: 'Also sent to Telegram', failed: false };\n case 'failed':\n return { text: 'Telegram: not delivered', failed: true };\n case 'pending':\n return { text: 'Sending to Telegram…', failed: false };\n default:\n return null;\n }\n}\n\nfunction DeliveryNote({ message }: { message: LeaderThreadMessage }) {\n const note = deliveryNote(message.delivery);\n return note ? <span className={styles.delivery} data-failed={note.failed ? 'true' : undefined}>{note.text}</span> : null;\n}\n\nexport interface ThreadContext {\n leader: LeaderStateV1 | null;\n actions: SurfaceActions;\n /** question message id → its answer. */\n answered: ReadonlyMap<string, LeaderThreadMessage>;\n /** Every known message by id (an answer names its question). */\n byId: ReadonlyMap<string, LeaderThreadMessage>;\n /** Question ids with an answer in flight. */\n answering: ReadonlySet<string>;\n /** The question whose box should take focus (a Needs-you \"Answer\"). */\n focusQuestionId: string | null;\n answerDraft: (questionMessageId: string) => string;\n setAnswerDraft: (questionMessageId: string, text: string) => void;\n onAnswer: (question: LeaderThreadMessage, text: string) => void;\n onRetry: (clientId: string) => void;\n onDiscard: (clientId: string) => void;\n /** Why sending is off (read-only, route absent); null = on. */\n sendDisabledReason: string | null;\n /** Autonomy is off: memos are dry runs. */\n dormant: boolean;\n}\n\n/** The question an answer closes, by its id or the message it replies to. */\nfunction questionOf(m: LeaderThreadMessage, ctx: ThreadContext): LeaderThreadMessage | null {\n if (m.replyTo) {\n const q = ctx.byId.get(m.replyTo);\n if (q) return q;\n }\n if (m.questionId) {\n for (const q of ctx.byId.values()) if (q.kind === 'question' && q.questionId === m.questionId) return q;\n }\n return null;\n}\n\nfunction MemoCard({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const { leader } = ctx;\n const memoId = message.memoId ?? null;\n const memo = memoId && leader?.latest?.id === memoId ? leader.latest : null;\n const summary = memoId ? leader?.timeline.find((t) => t.id === memoId) ?? null : null;\n let list: LeaderAction[] = [];\n if (leader) {\n if (memo) list = memoActions(leader);\n else if (message.actionIds) list = message.actionIds.flatMap((id) => leader.actions.find((a) => a.id === id) ?? []);\n else if (memoId) list = leader.actions.filter((a) => a.memoId === memoId);\n }\n const bottleneck = memo?.bottleneck?.statement ?? summary?.bottleneck ?? null;\n const move = memo?.move?.statement ?? summary?.move ?? null;\n const delta = expectedDeltaText(memo?.move?.expectedDelta ?? summary?.expectedDelta ?? null);\n const dryRun = memo?.dryRun ?? false;\n const structured = bottleneck !== null || move !== null || list.length > 0;\n return (\n <article className={styles.memoCard} aria-label=\"Leader memo\" data-dry-run={dryRun ? 'true' : undefined}>\n <header className={styles.memoHead}>\n <span className={styles.micro}>Memo</span>\n {dryRun ? <span className={commandStyles.dryRun}>Dry run</span> : null}\n {summary ? (\n <button type=\"button\" className={styles.textButton} onClick={() => scrollToAnchor(`memo-${summary.id}`)}>\n In the timeline\n </button>\n ) : null}\n </header>\n {structured ? (\n <dl className={styles.memoFacts}>\n {bottleneck ? (\n <div>\n <dt className={styles.micro}>Bottleneck</dt>\n <dd>{bottleneck}</dd>\n </div>\n ) : null}\n {move ? (\n <div>\n <dt className={styles.micro}>The move</dt>\n <dd>\n {move}\n {delta ? <span className={styles.delta}>{delta}</span> : null}\n </dd>\n </div>\n ) : null}\n </dl>\n ) : (\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n )}\n {list.length ? (\n <ul className={`${commandStyles.actionList} ${styles.memoActions}`} aria-label=\"Memo actions\">\n {list.map((a) => (\n <ActionRow key={a.id} action={a} actions={ctx.actions} approve dryRun={dryRun} anchored={false} />\n ))}\n </ul>\n ) : null}\n {dryRun ? (\n <p className={styles.muted}>\n {ctx.dormant ? 'Autonomy is off, so this memo is a dry run — its actions are shown, never applied.' : 'Shadow stage — these actions are shown, never applied.'}\n </p>\n ) : null}\n {structured && message.text.trim() ? (\n <details className={styles.more}>\n <summary>The Leader’s note</summary>\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n </details>\n ) : null}\n </article>\n );\n}\n\nfunction QuestionCard({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const answer = ctx.answered.get(message.id) ?? null;\n const sending = ctx.answering.has(message.questionId ?? message.id);\n return (\n <article className={styles.question} aria-label=\"Leader question\" data-answered={answer ? 'true' : undefined} data-focused={ctx.focusQuestionId === message.id ? 'true' : undefined} data-question-id={message.id}>\n <span className={styles.micro}>Question{message.memoId ? ' · from the memo' : ''}</span>\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n {answer ? (\n <p className={styles.answered}>\n <IconCheck /> Answered{answer.channel !== 'verse' ? ` on ${CHANNEL_LABEL[answer.channel]}` : ''} · <span className={styles.answeredText}>{previewText(answer.text, 120)}</span>\n </p>\n ) : sending ? (\n <p className={styles.muted} role=\"status\">Sending your answer…</p>\n ) : (\n <LeaderComposer\n variant=\"answer\"\n label={`Answer the Leader: ${previewText(message.text, 80)}`}\n placeholder=\"Answer the Leader…\"\n value={ctx.answerDraft(message.id)}\n onChange={(v) => ctx.setAnswerDraft(message.id, v)}\n onSend={(text) => ctx.onAnswer(message, text)}\n disabledReason={ctx.sendDisabledReason}\n autoFocus={ctx.focusQuestionId === message.id}\n maxLines={6}\n />\n )}\n </article>\n );\n}\n\nfunction ActionNote({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const list = ctx.leader && message.actionIds ? message.actionIds.flatMap((id) => ctx.leader!.actions.find((a) => a.id === id) ?? []) : [];\n return (\n <div className={styles.leaderText}>\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n {list.length ? (\n <ul className={`${commandStyles.actionList} ${styles.memoActions}`} aria-label=\"Actions\">\n {list.map((a) => (\n <ActionRow key={a.id} action={a} actions={ctx.actions} approve compact anchored={false} />\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\nfunction MasonBubble({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const question = message.kind === 'answer' || message.replyTo ? questionOf(message, ctx) : null;\n return (\n <div className={styles.masonItem}>\n {question ? <span className={styles.replyTo} title={question.text}>Re: {previewText(question.text, 90)}</span> : null}\n {/* Mason's words, possibly from Telegram: plain text, never HTML. */}\n <p className={styles.bubble}>{message.text}</p>\n <DeliveryNote message={message} />\n </div>\n );\n}\n\nfunction PendingBubble({ pending, ctx }: { pending: PendingMessage; ctx: ThreadContext }) {\n return (\n <div className={styles.masonItem} data-state={pending.state}>\n <p className={styles.bubble} data-state={pending.state}>{pending.text}</p>\n {pending.state === 'sending' ? (\n <span className={styles.delivery}>Sending…</span>\n ) : (\n <span className={styles.failed} role=\"alert\">\n Not sent{pending.error ? ` — ${pending.error.replace(/\\.$/, '')}` : ''}.\n <button type=\"button\" className={styles.textButton} onClick={() => ctx.onRetry(pending.clientId)} disabled={ctx.sendDisabledReason !== null}>\n Retry\n </button>\n <button type=\"button\" className={styles.textButton} onClick={() => ctx.onDiscard(pending.clientId)}>\n Discard\n </button>\n </span>\n )}\n </div>\n );\n}\n\nfunction DirectiveNote({ message }: { message: LeaderThreadMessage }) {\n return (\n <p className={styles.directiveNote}>\n <span className={styles.pin} aria-hidden=\"true\" />\n <span className={styles.micro}>Directive</span>\n <span className={styles.directiveNoteText}>{message.text}</span>\n </p>\n );\n}\n\nfunction EntryView({ entry, ctx }: { entry: ThreadEntry; ctx: ThreadContext }) {\n if (entry.type === 'pending') return <PendingBubble pending={entry.pending} ctx={ctx} />;\n const m = entry.message;\n switch (m.kind) {\n case 'memo':\n return <MemoCard message={m} ctx={ctx} />;\n case 'question':\n return <QuestionCard message={m} ctx={ctx} />;\n case 'directive':\n return <DirectiveNote message={m} />;\n case 'action':\n return m.from === 'leader' ? <ActionNote message={m} ctx={ctx} /> : <MasonBubble message={m} ctx={ctx} />;\n default:\n return m.from === 'mason' ? (\n <MasonBubble message={m} ctx={ctx} />\n ) : (\n <div className={styles.leaderText}>\n <div className={styles.prose}>\n <MessageMarkdown text={m.text} />\n </div>\n <DeliveryNote message={m} />\n </div>\n );\n }\n}\n\nexport function ThreadRows({ rows, ctx }: { rows: readonly ThreadRow[]; ctx: ThreadContext }) {\n return (\n <>\n {rows.map((row) => {\n if (row.type === 'day') {\n return (\n <div key={row.key} className={styles.day} role=\"separator\" aria-label={row.label}>\n <span>{row.label}</span>\n </div>\n );\n }\n if (row.type === 'system') {\n return (\n <p key={row.key} className={styles.system} data-message-id={row.entry.message.id}>\n {row.entry.message.text} <time dateTime={row.entry.message.at}>{clockTime(row.entry.message.at)}</time>\n </p>\n );\n }\n const leader = row.from === 'leader';\n return (\n <section key={row.key} className={styles.group} data-from={row.from} aria-label={`${leader ? 'Leader' : 'You'}, ${clockTime(row.at)}`}>\n <header className={styles.groupHead}>\n <span className={styles.avatar} data-from={row.from} aria-hidden=\"true\">{leader ? 'L' : 'M'}</span>\n <span className={styles.who}>{leader ? 'Leader' : 'You'}</span>\n <ChannelBadge channel={row.channel} />\n <time className={styles.time} dateTime={row.at} title={new Date(row.at).toLocaleString('en-US')}>\n {clockTime(row.at)}\n </time>\n </header>\n <div className={styles.groupBody}>\n {row.entries.map((e) => (\n <div key={e.key} className={styles.entry} data-message-id={e.type === 'message' ? e.message.id : undefined} data-kind={e.type === 'message' ? e.message.kind : 'pending'}>\n <EntryView entry={e} ctx={ctx} />\n </div>\n ))}\n </div>\n </section>\n );\n })}\n </>\n );\n}\n","/**\n * routes/verse/leader/LeaderConversation.tsx — talk to the Leader: the heart\n * of Mind (⌘4). Loaded lazily by MindSection (its own chunk: the chat's\n * first paint never pays for it).\n *\n * ┌ Leader ───────────────────── One thread · Verse, Telegram, CLI ─ ● Autonomy off ┐\n * │ DIRECTIVES [Ship binshield first ×] [+ Add directive] │\n * │ ─────────────────────────── Today ─────────────────────────── │\n * │ L Leader · Telegram · 9:14 AM │\n * │ ┌ MEMO ───────────────────────────────── Dry run ┐ │\n * │ │ BOTTLENECK Judge queue on grok-a… │ │\n * │ │ THE MOVE Raise Grok to 3 lanes +4 merges/day by Fri │\n * │ │ [B] Raise Grok to 3 lanes ◔ 18m [Approve] [Veto] │\n * │ ┌ QUESTION Should measurably stay at local enforcement…? │\n * │ │ [ Answer the Leader… ↑ ] │\n * │ You · Verse · 9:20 AM [ Yes, keep… ]│\n * │ ··· Leader is thinking… │\n * │ [ Message the Leader… ↑ ] │\n * └────────────────────────────────────────────────────────────────────────────────┘\n *\n * SENDING is optimistic: the words appear at once as a pending bubble; the\n * server's copy replaces it (thread-model mergeThread dedupes, even when a\n * poll lands before the POST returns); a failure keeps the words with the\n * server's reason, Retry and Discard. Every send needs the mutation token —\n * without one the token dialog opens FIRST and the draft stays in the box\n * until it is unlocked (cancelling loses nothing).\n *\n * \"Leader is thinking…\" shows while a send is in flight and, when the server\n * said it will reply later (reply: null), until the Leader's next message —\n * for at most AWAIT_REPLY_MS. Meanwhile the thread polls every 3 s instead\n * of 10 s. There is no Leader event stream to subscribe to (/api/events has\n * no leader topic), so polling while visible is the honest refresh.\n */\nimport { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport type { LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { hasMutationHold } from '../../../data/auth-store.js';\nimport { DispatchDisabledError } from '../../../data/client.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { describeControlError } from '../autonomy/use-guarded-action.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport type { OptionalRead } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { DirectivesStrip } from './DirectivesStrip.js';\nimport { getLeaderFocus, isLeaderFocusLive, subscribeLeaderFocus, takeLeaderFocus } from './leader-focus.js';\nimport { LeaderComposer, type LeaderComposerHandle } from './LeaderComposer.js';\nimport { answerLeaderQuestion, fetchOlderThread, leaderDirectivesQuery, leaderThreadQuery, sendLeaderMessage, THREAD_PAGE_SIZE } from './thread-data.js';\nimport {\n answeredQuestions,\n awaitingReply,\n findQuestion,\n groupThread,\n mergeThread,\n previewText,\n type PendingMessage,\n} from './thread-model.js';\nimport { ThreadRows, type ThreadContext } from './ThreadItems.js';\nimport type { LeaderThreadMessage } from './thread-types.js';\nimport styles from './leader.module.css';\n\nexport const THREAD_POLL_MS = 10_000;\nexport const THREAD_POLL_THINKING_MS = 3_000;\nexport const DIRECTIVES_POLL_MS = 30_000;\n\nconst SEND_TOKEN_REASON = 'Messaging the Leader requires the dispatch token.';\n\n/** A thread scrolled within this of its end counts as \"at the end\" (new messages follow it down). */\nconst STICK_PX = 96;\n\nconst SUGGESTIONS = ['What is the bottleneck right now?', 'Why this move, and what would change your mind?', 'What would you do with more Claude budget?'];\n\nexport interface LeaderConversationProps {\n /** The Leader's state (Mind already reads it): memo cards and action rows come from here. */\n leader: OptionalRead<LeaderStateV1> | undefined;\n /** Mind's actions: Approve / Veto / directives share its confirm → token → error line. */\n actions: SurfaceActions;\n /** Autonomy is off: the Leader still talks, its memos are dry runs. */\n dormant: boolean;\n}\n\n/**\n * Token first, then the send — so a cancelled unlock never leaves a\n * phantom pending bubble, and the draft is still in the box.\n */\nfunction useTokenGate() {\n const [open, setOpen] = useState(false);\n const [reason, setReason] = useState('');\n const next = useRef<(() => void) | null>(null);\n const run = useCallback((why: string, fn: () => void) => {\n if (hasMutationHold()) {\n fn();\n return;\n }\n next.current = fn;\n setReason(why);\n setOpen(true);\n }, []);\n const close = useCallback(() => {\n setOpen(false);\n const fn = next.current;\n next.current = null;\n // Read live: the dialog closes synchronously after the token is set.\n if (fn && hasMutationHold()) fn();\n }, []);\n return { run, dialog: <MutationTokenDialog open={open} onClose={close} reason={reason} tokenHelp=\"the mutation token ashlr verse printed\" /> };\n}\n\nlet localSeq = 0;\n\nexport function LeaderConversation({ leader, actions, dormant }: LeaderConversationProps) {\n const titleId = useId();\n const thread = useQuery(leaderThreadQuery, { freshMs: 5_000 });\n const refetchThread = useRefetch(leaderThreadQuery);\n const directives = useQuery(leaderDirectivesQuery, { freshMs: 30_000 });\n const refetchDirectives = useRefetch(leaderDirectivesQuery);\n const gate = useTokenGate();\n // Day labels and the \"thinking\" time-out only: a coarse tick is plenty.\n const now = useNow(10_000);\n\n const [older, setOlder] = useState<LeaderThreadMessage[]>([]);\n const [olderState, setOlderState] = useState<'idle' | 'loading' | 'done' | 'error'>('idle');\n const [received, setReceived] = useState<LeaderThreadMessage[]>([]);\n const [pending, setPending] = useState<PendingMessage[]>([]);\n const [awaiting, setAwaiting] = useState<ReadonlySet<string>>(() => new Set());\n const [draft, setDraft] = useState('');\n /** A Needs-you question the thread has no message for: answered as a quoted message. */\n const [quote, setQuote] = useState<string | null>(null);\n const [answerDrafts, setAnswerDrafts] = useState<Record<string, string>>({});\n const [focusQuestionId, setFocusQuestionId] = useState<string | null>(null);\n const [addingDirective, setAddingDirective] = useState(false);\n const [readOnly, setReadOnly] = useState(false);\n\n const composerRef = useRef<LeaderComposerHandle>(null);\n const logRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const atEnd = useRef(true);\n const stick = useRef(true);\n\n const read = thread.data;\n const page = read?.value?.messages ?? null;\n const entries = useMemo(() => mergeThread(page ? [older, page] : [older], received, pending), [older, page, received, pending]);\n const messages = useMemo(() => entries.flatMap((e) => (e.type === 'message' ? [e.message] : [])), [entries]);\n const byId = useMemo(() => new Map(messages.map((m) => [m.id, m])), [messages]);\n const answered = useMemo(() => answeredQuestions(messages), [messages]);\n const rows = useMemo(() => groupThread(entries, now), [entries, now]);\n const thinking = awaitingReply(entries, awaiting, now);\n\n usePollWhileVisible(refetchThread, thinking ? THREAD_POLL_THINKING_MS : THREAD_POLL_MS);\n usePollWhileVisible(refetchDirectives, DIRECTIVES_POLL_MS);\n\n // A send's echo is dropped once a server read carries it.\n useEffect(() => {\n if (!page || received.length === 0) return;\n const onPage = new Set(page.map((m) => m.id));\n if (received.some((m) => onPage.has(m.id))) setReceived((r) => r.filter((m) => !onPage.has(m.id)));\n }, [page, received]);\n\n const unavailable = read !== undefined && read.value === null;\n const sendDisabledReason =\n readOnly || actions.readOnly\n ? 'Read-only session — this server runs without dispatch, so messages cannot be sent.'\n : unavailable\n ? 'The conversation is not available on this server.'\n : null;\n\n // ---- sending ------------------------------------------------------------\n\n const deliver = useCallback(\n async (p: PendingMessage) => {\n try {\n const result =\n p.kind === 'answer' && p.questionId ? await answerLeaderQuestion(p.questionId, p.text) : await sendLeaderMessage(p.text, p.replyTo);\n setPending((ps) => ps.filter((x) => x.clientId !== p.clientId));\n if (result) {\n setReceived((r) => [...r, result.message, ...(result.reply ? [result.reply] : [])]);\n if (!result.reply) setAwaiting((a) => new Set(a).add(result.message.id));\n }\n stick.current = true;\n refetchThread();\n } catch (err) {\n if (err instanceof DispatchDisabledError) setReadOnly(true);\n setPending((ps) => ps.map((x) => (x.clientId === p.clientId ? { ...x, state: 'failed', error: describeControlError(err) } : x)));\n }\n },\n [refetchThread],\n );\n\n const submit = useCallback(\n (text: string, opts: { kind: 'message' | 'answer'; replyTo: string | null; questionId: string | null; onStart: () => void }) => {\n gate.run(SEND_TOKEN_REASON, () => {\n localSeq += 1;\n const p: PendingMessage = {\n clientId: `local-${localSeq}`,\n kind: opts.kind,\n text,\n at: new Date().toISOString(),\n replyTo: opts.replyTo,\n questionId: opts.questionId,\n state: 'sending',\n error: null,\n };\n opts.onStart();\n stick.current = true;\n setPending((ps) => [...ps, p]);\n void deliver(p);\n });\n },\n [gate, deliver],\n );\n\n const sendDraft = useCallback(\n (text: string) => {\n // A question the thread has no message for is answered as a quoted message.\n const body = quote ? `> ${quote.replace(/\\n/g, ' ')}\\n\\n${text}` : text;\n submit(body, {\n kind: 'message',\n replyTo: null,\n questionId: null,\n onStart: () => {\n setDraft('');\n setQuote(null);\n },\n });\n },\n [quote, submit],\n );\n\n const onAnswer = useCallback(\n (question: LeaderThreadMessage, text: string) => {\n submit(text, {\n kind: 'answer',\n replyTo: question.id,\n questionId: question.questionId ?? question.id,\n onStart: () => setAnswerDrafts((d) => ({ ...d, [question.id]: '' })),\n });\n },\n [submit],\n );\n\n const onRetry = useCallback(\n (clientId: string) => {\n gate.run(SEND_TOKEN_REASON, () => {\n const found = pending.find((x) => x.clientId === clientId);\n if (!found) return;\n // Retried now: it moves to the end of the thread, where a new send would sit.\n const again: PendingMessage = { ...found, state: 'sending', error: null, at: new Date().toISOString() };\n stick.current = true;\n setPending((ps) => ps.map((x) => (x.clientId === clientId ? again : x)));\n void deliver(again);\n });\n },\n [gate, pending, deliver],\n );\n\n const onDiscard = useCallback((clientId: string) => setPending((ps) => ps.filter((x) => x.clientId !== clientId)), []);\n\n // ---- focus requests (⌘K, Command, Needs-you) ------------------------------\n\n const request = useSyncExternalStore(subscribeLeaderFocus, getLeaderFocus, () => null);\n useEffect(() => {\n if (!request) return;\n if (!isLeaderFocusLive(request)) {\n takeLeaderFocus(request.seq);\n return;\n }\n if (request.kind === 'composer') {\n stick.current = true;\n composerRef.current?.focus();\n takeLeaderFocus(request.seq);\n return;\n }\n if (request.kind === 'directive') {\n setAddingDirective(true);\n takeLeaderFocus(request.seq);\n return;\n }\n // A question: wait for the first read, then find it.\n if (!read) return;\n const q = findQuestion(messages, request);\n if (q) setFocusQuestionId(q.id);\n else {\n setQuote(request.text ?? 'the Leader’s question');\n composerRef.current?.focus();\n }\n takeLeaderFocus(request.seq);\n }, [request, read, messages]);\n\n // Reveal the asked-for question; focus its answer box when it has one.\n useEffect(() => {\n if (!focusQuestionId) return;\n // Matched by dataset, not a selector: ids are server strings.\n const host = [...(logRef.current?.querySelectorAll<HTMLElement>('[data-question-id]') ?? [])].find((el) => el.dataset['questionId'] === focusQuestionId);\n if (!host) return;\n host.scrollIntoView?.({ block: 'center', behavior: 'smooth' });\n const box = host.querySelector<HTMLTextAreaElement>('textarea');\n box?.focus({ preventScroll: true });\n const t = window.setTimeout(() => setFocusQuestionId(null), 2_400);\n return () => window.clearTimeout(t);\n }, [focusQuestionId]);\n\n // ---- scrolling ------------------------------------------------------------\n\n const onScroll = useCallback(() => {\n const el = logRef.current;\n if (!el) return;\n atEnd.current = el.scrollHeight - el.scrollTop - el.clientHeight <= STICK_PX;\n }, []);\n\n const lastKey = entries.length ? entries[entries.length - 1]!.key : null;\n useLayoutEffect(() => {\n const el = logRef.current;\n if (!el) return;\n // Follow the conversation down only when the operator is already at its end (or just sent).\n if (stick.current || atEnd.current) el.scrollTop = el.scrollHeight;\n stick.current = false;\n }, [lastKey, thinking]);\n\n // Content also grows WITHOUT a new message — the Markdown chunk lands, the\n // Leader's state turns a memo's text into its card, a font swaps in. An\n // operator at the end stays at the end through all of it.\n useEffect(() => {\n const el = logRef.current;\n const content = contentRef.current;\n if (!el || !content || typeof ResizeObserver === 'undefined') return;\n // Judged against the height BEFORE this growth: the scroll event for the\n // growth can land first and call the operator \"not at the end\" when they were.\n let before = el.scrollHeight;\n const ro = new ResizeObserver(() => {\n const wasAtEnd = el.scrollTop + el.clientHeight >= before - STICK_PX;\n if (wasAtEnd || atEnd.current) {\n el.scrollTop = el.scrollHeight;\n atEnd.current = true;\n }\n before = el.scrollHeight;\n });\n ro.observe(content);\n return () => ro.disconnect();\n }, []);\n\n // ---- older pages ----------------------------------------------------------\n\n const oldestId = messages.length ? messages[0]!.id : null;\n const canLoadOlder = olderState !== 'done' && olderState !== 'loading' && (page?.length ?? 0) >= THREAD_PAGE_SIZE && oldestId !== null;\n const loadOlder = useCallback(async () => {\n if (!oldestId) return;\n const el = logRef.current;\n const before = el ? el.scrollHeight - el.scrollTop : 0;\n setOlderState('loading');\n try {\n const got = await fetchOlderThread(oldestId);\n setOlder((o) => [...got, ...o]);\n setOlderState(got.length < THREAD_PAGE_SIZE ? 'done' : 'idle');\n // Keep the operator's place: the page grows above them.\n requestAnimationFrame(() => {\n if (el) el.scrollTop = el.scrollHeight - before;\n });\n } catch {\n setOlderState('error');\n }\n }, [oldestId]);\n\n // ---- render ---------------------------------------------------------------\n\n const answering = useMemo(\n () => new Set(pending.filter((p) => p.kind === 'answer' && p.state === 'sending' && p.questionId).map((p) => p.questionId!)),\n [pending],\n );\n const ctx: ThreadContext = {\n leader: leader?.value ?? null,\n actions,\n answered,\n byId,\n answering,\n focusQuestionId,\n answerDraft: (id) => answerDrafts[id] ?? '',\n setAnswerDraft: (id, text) => setAnswerDrafts((d) => ({ ...d, [id]: text })),\n onAnswer,\n onRetry,\n onDiscard,\n sendDisabledReason,\n dormant,\n };\n\n return (\n <section className={styles.panel} aria-labelledby={titleId} data-testid=\"leader-conversation\">\n <header className={styles.head}>\n <span className={styles.heading}>\n <h3 id={titleId} className={styles.title}>Leader</h3>\n <span className={styles.caption}>One conversation across Verse, Telegram and the CLI</span>\n </span>\n {dormant ? (\n <span className={styles.dormant} title=\"The Leader still reads, answers and writes memos. With autonomy off, every memo is a dry run: its actions are shown, never applied.\">\n <span className={styles.dormantDot} aria-hidden=\"true\" />\n Autonomy off · memos are dry runs\n </span>\n ) : null}\n </header>\n\n <DirectivesStrip read={directives.data} actions={actions} adding={addingDirective} onAddingChange={setAddingDirective} />\n\n <div ref={logRef} className={styles.log} role=\"log\" aria-label=\"Conversation with the Leader\" aria-live=\"polite\" aria-relevant=\"additions\" onScroll={onScroll} tabIndex={0}>\n <div ref={contentRef} className={styles.logInner}>\n {canLoadOlder || olderState === 'error' || olderState === 'loading' ? (\n <div className={styles.older}>\n <button type=\"button\" className={styles.textButton} onClick={() => void loadOlder()} disabled={olderState === 'loading'}>\n {olderState === 'loading' ? 'Loading earlier messages…' : olderState === 'error' ? 'Earlier messages did not load — try again' : 'Load earlier messages'}\n </button>\n </div>\n ) : null}\n {!read ? (\n <p className={styles.placeholder} aria-busy=\"true\">Reading the conversation…</p>\n ) : unavailable && entries.length === 0 ? (\n <p className={styles.placeholder} data-tone=\"unknown\">{read.reason ?? 'The Leader conversation did not answer.'}</p>\n ) : entries.length === 0 ? (\n <div className={styles.empty}>\n <p className={styles.emptyTitle}>No conversation yet</p>\n <p className={styles.emptyBody}>\n Ask the Leader why it made a move, what it would do next, or give it a standing directive. Replies here also reach Telegram when it is connected.\n </p>\n {sendDisabledReason === null ? (\n <div className={styles.suggestions}>\n {SUGGESTIONS.map((s) => (\n <button\n key={s}\n type=\"button\"\n className={styles.suggestion}\n onClick={() => {\n setDraft(s);\n composerRef.current?.focus();\n }}\n >\n {s}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n ) : (\n <ThreadRows rows={rows} ctx={ctx} />\n )}\n {thinking ? (\n <p className={styles.thinking} role=\"status\">\n <span className={styles.dots} aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n Leader is thinking…\n </p>\n ) : null}\n </div>\n </div>\n\n <div className={styles.foot}>\n <LeaderComposer\n ref={composerRef}\n label=\"Message the Leader\"\n placeholder=\"Message the Leader…\"\n value={draft}\n onChange={setDraft}\n onSend={sendDraft}\n disabledReason={sendDisabledReason}\n context={quote ? { label: `Answering: ${previewText(quote, 120)}`, onClear: () => setQuote(null) } : null}\n />\n </div>\n {gate.dialog}\n </section>\n );\n}\n\nexport default LeaderConversation;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._panel_13qlu_9{border:1px solid var(--border-subtle);border-radius:var(--radius-lg);background:var(--bg-surface);flex-direction:column;min-width:0;display:flex}._head_13qlu_18{justify-content:space-between;align-items:flex-start;gap:var(--space-2) var(--space-3);padding:var(--card-pad) var(--card-pad) var(--space-2);flex-wrap:wrap;display:flex}._heading_13qlu_27{gap:var(--space-px);flex-direction:column;flex:240px;min-width:0;display:flex}._title_13qlu_35{color:var(--text-primary);font-size:var(--text-sm-size);line-height:var(--text-sm-line);font-weight:var(--font-weight-semibold);margin:0}._caption_13qlu_43{color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line)}._dormant_13qlu_49{align-items:center;gap:var(--space-2);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-full);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-sm-line);white-space:nowrap;flex:none;display:inline-flex}._dormantDot_13qlu_63{border-radius:var(--radius-full);background:var(--status-neutral-solid);width:6px;height:6px}._micro_13qlu_70{font-family:var(--font-display);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-tertiary)}._muted_13qlu_79{color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin:0}._textButton_13qlu_86{align-items:center;gap:var(--space-1);color:var(--text-link);font:inherit;font-size:var(--text-xs-size);cursor:pointer;background:0 0;border:0;padding:0;display:inline-flex}._textButton_13qlu_86:hover:not(:disabled){text-decoration:underline}._textButton_13qlu_86:disabled{color:var(--text-disabled);cursor:default}._textButton_13qlu_86 svg{width:12px;height:12px}._iconButton_13qlu_113{border-radius:var(--radius-xs);width:18px;height:18px;color:var(--text-tertiary);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}._iconButton_13qlu_113 svg{width:12px;height:12px}._iconButton_13qlu_113:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._iconButton_13qlu_113:disabled{opacity:.4;cursor:default}._textButton_13qlu_86:focus-visible,._iconButton_13qlu_113:focus-visible,._suggestion_13qlu_145:focus-visible,._send_13qlu_146:focus-visible,._log_13qlu_147:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}._directives_13qlu_153{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--card-pad);border-top:1px solid var(--border-subtle);flex-wrap:wrap;display:flex}._chips_13qlu_162{margin:0;padding:0;list-style:none;display:contents}._directiveChip_13qlu_169{align-items:center;gap:var(--space-1);max-width:100%;padding:0 var(--space-1) 0 var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-full);background:var(--bg-surface-raised);color:var(--text-primary);font-size:var(--text-xs-size);line-height:var(--text-sm-line);display:inline-flex}._directiveText_13qlu_183{text-overflow:ellipsis;white-space:nowrap;max-width:48ch;overflow:hidden}._pin_13qlu_190{border-radius:var(--radius-full);background:var(--accent-500);flex:none;width:6px;height:6px}._addDirective_13qlu_198{align-items:center;gap:var(--space-2);flex:240px;min-width:0;display:inline-flex}._directiveInput_13qlu_206{min-width:0;height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-input);color:var(--text-primary);font:inherit;font-size:var(--text-xs-size);flex:1}._directiveInput_13qlu_206:focus{border-color:var(--border-focus);outline:none}._log_13qlu_147{min-height:240px;max-height:clamp(320px,62vh,760px);padding:var(--space-4) var(--card-pad);overscroll-behavior:contain;border-top:1px solid var(--border-subtle);scroll-padding-bottom:var(--space-4);flex-direction:column;display:flex;overflow-y:auto;container-type:inline-size}._logInner_13qlu_238{gap:var(--space-4);flex-direction:column;flex:1 0 auto;display:flex}@container (width<=520px){._groupBody_13qlu_247,._group_13qlu_247[data-from=mason] ._groupBody_13qlu_247{padding-left:0;padding-right:0}._thinking_13qlu_253{padding-left:0}._masonItem_13qlu_257{max-width:88%}}._older_13qlu_262{justify-content:center;display:flex}._placeholder_13qlu_267{color:var(--text-tertiary);font-size:var(--text-sm-size);text-align:center;margin:auto 0}._placeholder_13qlu_267[data-tone=unknown]{color:var(--status-unknown-fg)}._empty_13qlu_278{align-items:center;gap:var(--space-2);padding:var(--space-6) 0;text-align:center;flex-direction:column;margin:auto 0;display:flex}._emptyTitle_13qlu_288{color:var(--text-primary);font-size:var(--text-sm-size);font-weight:var(--font-weight-semibold);margin:0}._emptyBody_13qlu_295{max-width:var(--measure-read);color:var(--text-secondary);font-size:var(--text-sm-size);line-height:var(--text-sm-line-relaxed);margin:0}._suggestions_13qlu_303{justify-content:center;gap:var(--space-2);margin-top:var(--space-2);flex-wrap:wrap;display:flex}._suggestion_13qlu_145{padding:var(--space-1) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-full);color:var(--text-secondary);font:inherit;font-size:var(--text-xs-size);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);background:0 0}._suggestion_13qlu_145:hover{border-color:var(--border-strong);color:var(--text-primary)}._day_13qlu_328{align-items:center;gap:var(--space-3);color:var(--text-tertiary);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);letter-spacing:var(--tracking-label);text-transform:uppercase;font-family:var(--font-display);display:flex}._day_13qlu_328:before,._day_13qlu_328:after{content:"";background:var(--border-subtle);flex:1;height:1px}._system_13qlu_348{color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);text-align:center;margin:0}._group_13qlu_247{gap:var(--space-2);flex-direction:column;min-width:0;display:flex}._group_13qlu_247[data-from=mason]{align-items:flex-end}._groupHead_13qlu_368{align-items:center;gap:var(--space-2);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);display:flex}._group_13qlu_247[data-from=mason] ._groupHead_13qlu_368{flex-direction:row-reverse}._avatar_13qlu_381{border-radius:var(--radius-sm);background:var(--accent-50);width:20px;height:20px;color:var(--accent-700);font-family:var(--font-display);font-size:var(--text-2xs-size);font-weight:var(--font-weight-semibold);flex:none;justify-content:center;align-items:center;display:inline-flex}._avatar_13qlu_381[data-from=mason]{background:var(--status-neutral-bg);color:var(--status-neutral-fg)}._who_13qlu_401{color:var(--text-primary);font-weight:var(--font-weight-semibold)}._time_13qlu_406{font-variant-numeric:tabular-nums}._channel_13qlu_410{padding:0 var(--space-1);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-2xs-size);line-height:var(--text-xs-line)}._channel_13qlu_410[data-channel=telegram]{border-color:var(--status-info-solid);color:var(--status-info-fg)}._channel_13qlu_410[data-channel=cli]{font-family:var(--font-mono)}._groupBody_13qlu_247{gap:var(--space-2);width:100%;min-width:0;padding-left:calc(20px + var(--space-2));flex-direction:column;display:flex}._group_13qlu_247[data-from=mason] ._groupBody_13qlu_247{padding-left:0;padding-right:calc(20px + var(--space-2));align-items:flex-end}._entry_13qlu_443{width:100%;min-width:0}._group_13qlu_247[data-from=mason] ._entry_13qlu_443{justify-content:flex-end;display:flex}._leaderText_13qlu_453{gap:var(--space-2);max-width:var(--measure-read);flex-direction:column;display:flex}._prose_13qlu_460{min-width:0;color:var(--text-primary);font-size:var(--text-sm-size);line-height:var(--text-sm-line-relaxed);overflow-wrap:anywhere}._masonItem_13qlu_257{align-items:flex-end;gap:var(--space-1);max-width:min(78%, var(--measure-read));flex-direction:column;display:flex}._bubble_13qlu_476{padding:var(--space-2) var(--space-3);border-radius:var(--radius-lg);background:var(--bg-surface-raised);border:1px solid var(--border-subtle);color:var(--text-primary);font-size:var(--text-sm-size);line-height:var(--text-sm-line-relaxed);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}._bubble_13qlu_476[data-state=sending]{opacity:.7}._bubble_13qlu_476[data-state=failed]{border-color:var(--status-danger-solid);border-style:dashed}._replyTo_13qlu_498{max-width:100%;color:var(--text-tertiary);font-size:var(--text-xs-size);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._delivery_13qlu_507{color:var(--text-tertiary);font-size:var(--text-2xs-size);line-height:var(--text-xs-line)}._delivery_13qlu_507[data-failed=true]{color:var(--status-warning-fg)}._failed_13qlu_517{justify-content:flex-end;gap:var(--space-2);color:var(--status-danger-fg);font-size:var(--text-xs-size);line-height:var(--text-xs-line);flex-wrap:wrap;display:inline-flex}._thinking_13qlu_253{align-items:center;gap:var(--space-2);padding-left:calc(20px + var(--space-2));color:var(--text-tertiary);font-size:var(--text-xs-size);margin:0;display:inline-flex}._dots_13qlu_537{gap:3px;display:inline-flex}._dots_13qlu_537 span{border-radius:var(--radius-full);background:var(--text-tertiary);width:4px;height:4px;animation:_leader-dot_13qlu_1 1.2s var(--ease-standard) infinite}._dots_13qlu_537 span:nth-child(2){animation-delay:.15s}._dots_13qlu_537 span:nth-child(3){animation-delay:.3s}@keyframes _leader-dot_13qlu_1{0%,80%,to{opacity:.3}40%{opacity:1}}@media (prefers-reduced-motion:reduce){._dots_13qlu_537 span{opacity:.6;animation:none}}._memoCard_13qlu_577{gap:var(--space-2);max-width:720px;padding:var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-canvas);flex-direction:column;display:flex;container-type:inline-size}._memoCard_13qlu_577[data-dry-run=true]{border-style:dashed}._memoHead_13qlu_593{align-items:center;gap:var(--space-2);display:flex}._memoHead_13qlu_593 ._textButton_13qlu_86{margin-left:auto}._memoFacts_13qlu_603{gap:var(--space-2);flex-direction:column;margin:0;display:flex}._memoFacts_13qlu_603>div{gap:var(--space-3);grid-template-columns:96px minmax(0,1fr);align-items:baseline;display:grid}._memoFacts_13qlu_603 dd{color:var(--text-primary);font-size:var(--text-sm-size);line-height:var(--text-sm-line);overflow-wrap:anywhere;margin:0}._delta_13qlu_625{margin-top:var(--space-1);color:var(--status-success-fg);font-size:var(--text-xs-size);font-variant-numeric:tabular-nums;display:block}@container (width<=460px){._memoFacts_13qlu_603>div{gap:var(--space-1);grid-template-columns:minmax(0,1fr)}._memoActions_13qlu_640>li{row-gap:var(--space-2);grid-template-columns:auto minmax(0,1fr)}._memoActions_13qlu_640>li>:last-child{grid-column:2;justify-self:start}}._more_13qlu_651 summary{color:var(--text-link);font-size:var(--text-xs-size);cursor:pointer}._more_13qlu_651[open] summary{margin-bottom:var(--space-2)}._question_13qlu_662{gap:var(--space-2);max-width:720px;padding:var(--space-3);border:1px solid var(--border-default);border-left:2px solid var(--accent-500);border-radius:var(--radius-md);background:var(--bg-canvas);transition:box-shadow var(--duration-base) var(--ease-standard);flex-direction:column;display:flex}._question_13qlu_662[data-answered=true]{border-left-color:var(--status-success-solid)}._question_13qlu_662[data-focused=true]{box-shadow:var(--shadow-focus-ring)}._answered_13qlu_683{align-items:center;gap:var(--space-1);min-width:0;color:var(--status-success-fg);font-size:var(--text-xs-size);margin:0;display:flex}._answered_13qlu_683 svg{flex:none;width:12px;height:12px}._answeredText_13qlu_699{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._directiveNote_13qlu_707{align-items:center;gap:var(--space-2);max-width:100%;padding:var(--space-1) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-full);background:var(--bg-surface-raised);margin:0;display:inline-flex}._directiveNoteText_13qlu_719{color:var(--text-primary);font-size:var(--text-xs-size);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._foot_13qlu_728{padding:var(--space-3) var(--card-pad) var(--card-pad);border-top:1px solid var(--border-subtle)}._composer_13qlu_733{gap:var(--space-1);flex-direction:column;min-width:0;display:flex}._composerContext_13qlu_740{align-items:center;gap:var(--space-2);min-width:0;color:var(--text-secondary);font-size:var(--text-xs-size);display:flex}._composerContextText_13qlu_749{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._composerRow_13qlu_755{align-items:flex-end;gap:var(--space-2);padding:var(--space-1) var(--space-1) var(--space-1) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-lg);background:var(--bg-input);transition:border-color var(--duration-fast) var(--ease-standard);display:flex}._composerRow_13qlu_755:focus-within{border-color:var(--border-focus)}._composer_13qlu_733[data-variant=answer] ._composerRow_13qlu_755{border-radius:var(--radius-md)}._composer_13qlu_733[data-disabled=true] ._composerRow_13qlu_755{background:var(--bg-canvas)}._composerBox_13qlu_778{min-width:0;min-height:var(--control-h-sm);padding:var(--space-1) 0;color:var(--text-primary);font:inherit;font-size:var(--text-sm-size);line-height:var(--text-sm-line);resize:none;background:0 0;border:0;flex:1;overflow-y:hidden}._composerBox_13qlu_778:focus{outline:none}._composerBox_13qlu_778::placeholder{color:var(--text-tertiary)}._send_13qlu_146{width:var(--control-h-sm);height:var(--control-h-sm);border-radius:var(--radius-md);background:var(--accent-600);color:var(--text-on-accent);cursor:pointer;transition:opacity var(--duration-fast) var(--ease-standard);border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}._send_13qlu_146 svg{width:14px;height:14px}._send_13qlu_146:disabled{background:var(--bg-active);color:var(--text-disabled);cursor:default}._composerHint_13qlu_828{justify-content:flex-end;gap:var(--space-3);color:var(--text-tertiary);font-size:var(--text-2xs-size);line-height:var(--text-xs-line);margin:0;display:flex}._counter_13qlu_838{font-variant-numeric:tabular-nums}._counter_13qlu_838[data-over=true]{color:var(--status-danger-fg)}._key_13qlu_846{border:1px solid var(--border-subtle);border-radius:var(--radius-xs);min-width:14px;font-family:var(--font-ui);text-align:center;padding:0 2px;display:inline-block}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,c as t,n}from"./index-DZ-UQ7v8.js";import{B as r,H as i,T as a,V as o,W as s,h as c,i as l,m as u,n as ee,r as d,t as f,z as p}from"./ChartFrame-DY-GVUb3.js";import{_ as m,c as h,g,h as _,l as v,m as y,u as b,y as x}from"./colors-DvK0wMHH.js";import{i as S,t as C}from"./format-D7nBg2bn.js";var w=t(e(),1),T={gauge:`_gauge_1y0vx_1`,readout:`_readout_1y0vx_8`,value:`_value_1y0vx_18`,unknownValue:`_unknownValue_1y0vx_24`,state:`_state_1y0vx_30`,caption:`_caption_1y0vx_43`,fit:`_fit_1y0vx_49`},E=n(),D={ok:`within limits`,warn:`near the limit`,danger:`at the limit`,unknown:`unknown`};function te(e){let[t,n]=(0,w.useState)(0),[r,i]=(0,w.useState)(null);return(0,w.useLayoutEffect)(()=>{e.current!==r&&i(e.current)}),(0,w.useLayoutEffect)(()=>{let e=r;if(!e)return;let t=()=>{let t=Math.floor(e.getBoundingClientRect().width);n(e=>e===t?e:t)};if(t(),typeof ResizeObserver>`u`)return;let i=0,a=new ResizeObserver(()=>{cancelAnimationFrame(i),i=requestAnimationFrame(t)});return a.observe(e),()=>{cancelAnimationFrame(i),a.disconnect()}},[r]),t}function ne(e,t){return e>0?Math.max(112,Math.min(t,Math.floor(e))):t}function O(e){return e===`danger`?x(`danger`):e===`warn`?x(`warning`):h}function k({title:e,description:t,caveat:n,status:r,value:i,warnAt:l=.7,dangerAt:d=.9,marker:p,caption:m,size:h=180,formatValue:g=e=>S(e),showState:_=!0}){let v=(0,w.useId)(),x=y((0,w.useId)()),C=(0,w.useRef)(null),k=ne(te(C),h),A=_?c(i,l,d):i===null?`unknown`:`ok`,j=Math.max(10,Math.round(k/12)),M=k/2-j/2-2,N=k/2,P=k/2,F=k/2+j/2+4,I=i===null?`unknown`:g(i),L=i===null?`${e}: unknown`:_?`${e}: ${I}, ${D[A]}`:`${e}: ${I}`,R=[{key:`value`,label:`Used`,value:I},..._?[{key:`state`,label:`State`,value:D[A]},{key:`warn`,label:`Warning at`,value:g(l)},{key:`danger`,label:`Limit at`,value:g(d)}]:[],...p?[{key:`marker`,label:p.label,value:g(p.value)}]:[]],z=[{key:`label`,label:`Measure`,render:e=>e.label},{key:`value`,label:`Value`,numeric:!0,render:e=>e.value}],B=p?a(N,P,M+j/2+3,Math.PI*(1-Math.min(1,Math.max(0,p.value)))):null,V=p?a(N,P,M-j/2-3,Math.PI*(1-Math.min(1,Math.max(0,p.value)))):null;return(0,E.jsx)(f,{title:e,description:t,caveat:n,status:r??{kind:`ready`},skeleton:`gauge`,table:(0,E.jsx)(ee,{caption:e,columns:z,rows:R,rowKey:e=>e.key}),children:(0,E.jsx)(`div`,{ref:C,className:T.fit,children:(0,E.jsxs)(`div`,{className:T.gauge,role:`meter`,"aria-label":e,"aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":i===null?void 0:Math.min(1,Math.max(0,i)),"aria-valuetext":L,"aria-describedby":m?v:void 0,"data-severity":A,children:[(0,E.jsxs)(`svg`,{className:s.svg,width:k,height:F,viewBox:`0 0 ${k} ${F}`,"aria-hidden":`true`,children:[(0,E.jsx)(`defs`,{children:(0,E.jsx)(o,{id:x})}),(0,E.jsx)(`path`,{"data-role":`track`,d:u(N,P,M,0,1),fill:`none`,stroke:i===null?`url(#${x})`:b,strokeWidth:j,strokeLinecap:`round`}),i!==null&&i>0?(0,E.jsx)(`path`,{"data-role":`fill`,d:u(N,P,M,0,Math.min(1,i)),fill:`none`,stroke:O(A),strokeWidth:j,strokeLinecap:`round`}):null,B&&V?(0,E.jsx)(`line`,{"data-role":`marker`,x1:V.x,y1:V.y,x2:B.x,y2:B.y,stroke:`var(--text-primary)`,strokeWidth:2,strokeLinecap:`round`}):null]}),(0,E.jsxs)(`div`,{className:T.readout,children:[(0,E.jsx)(`span`,{className:i===null?T.unknownValue:T.value,children:I}),_&&A!==`unknown`?(0,E.jsx)(`span`,{className:T.state,children:D[A]}):null,m?(0,E.jsx)(`span`,{id:v,className:T.caption,children:m}):null,p?(0,E.jsxs)(`span`,{className:T.caption,children:[p.label,`: `,g(p.value)]}):null]})]})})})}var A={scroll:`_scroll_1j5ed_3`,focus:`_focus_1j5ed_8`,num:`_num_1j5ed_17`};function j(e,t,n){let r=(t,n)=>{let r=e[t]?.[n];return r==null||!Number.isFinite(r)?null:r},i=e=>{let t=e.filter(e=>e!==null);return t.length?t.reduce((e,t)=>e+t,0):null},a=Array.from({length:t},(e,t)=>i(Array.from({length:n},(e,n)=>r(t,n)))),o=Array.from({length:n},(e,n)=>i(Array.from({length:t},(e,t)=>r(t,n)))),s=0;for(let e=0;e<t;e++)for(let t=0;t<n;t++)s=Math.max(s,r(e,t)??0);return{rows:a,columns:o,max:s,grand:i(a)}}var M=26,N=40,P=2,F=22,I=56;function L({title:e,description:t,caveat:n,status:a,rows:c,columns:u,values:h,unit:b=``,formatValue:x=C,showTotals:S=!0,defaultView:T,actions:D,width:te,ariaLabel:ne}){let O=(0,w.useRef)(null),k=l(O,te),L=d(),[R,z]=(0,w.useState)(null),B=(0,w.useId)(),V=y((0,w.useId)()),re=b?` ${b}`:``,H=j(h,c.length,u.length),ie=H.grand!==null,ae=a??(c.length===0||u.length===0?{kind:`empty`}:ie?{kind:`ready`}:{kind:`unknown`,reason:`no cell in this matrix was measured.`}),U=Math.max(72,Math.min(150,Math.round(k*.24))),oe=S?74:0,W=S?N*.6:0,se=k-U-oe,G=Math.max(F,Math.min(112,Math.floor(se/Math.max(1,u.length))-P)),K=Math.max(F,Math.min(I,30)),q=U,J=W+M,Y=q+u.length*(G+P)+oe,ce=J+c.length*32,le=Math.max(1,...H.rows.map(e=>e??0)),ue=Math.max(1,...H.columns.map(e=>e??0)),de=G>=28,fe=Math.floor(U/(7*L)),X=(e,t)=>{let n=h[e]?.[t];return n==null||!Number.isFinite(n)?null:n},pe=e=>H.max>0?e/H.max:0,me=e=>e===null?`url(#${V})`:e<=0?_(0):g(pe(e)),he=e=>m(e<=0?0:pe(e)),ge=(e,t)=>{let n=X(e,t);return`${c[e].label} × ${u[t].label}: ${n===null?`not measured`:`${x(n)}${re}`}`};function _e(e){if(c.length===0||u.length===0)return;let t=R??{r:0,c:0},n=null;e.key===`ArrowRight`?n={r:t.r,c:t.c+1}:e.key===`ArrowLeft`?n={r:t.r,c:t.c-1}:e.key===`ArrowDown`?n={r:t.r+1,c:t.c}:e.key===`ArrowUp`?n={r:t.r-1,c:t.c}:e.key===`Home`?n={r:t.r,c:0}:e.key===`End`&&(n={r:t.r,c:u.length-1}),n&&(e.preventDefault(),z({r:Math.max(0,Math.min(c.length-1,n.r)),c:Math.max(0,Math.min(u.length-1,n.c))}))}let Z=null;for(let e=0;e<c.length;e++)for(let t=0;t<u.length;t++){let n=X(e,t);n!==null&&(!Z||n>Z.v)&&(Z={r:e,c:t,v:n})}let Q=c.length*u.length-h.flat().filter(e=>e!=null).length,ve=ne??`${e}: ${c.length} × ${u.length} grid, ${H.grand===null?`nothing measured`:`${x(H.grand)}${re} in total`}`+(Z&&Z.v>0?`; most in ${c[Z.r].label} × ${u[Z.c].label} (${x(Z.v)})`:``)+(Q>0?`; ${Q} cell${Q===1?``:`s`} not measured`:``)+`.`,ye=c.map((e,t)=>({id:e.id,label:e.label,index:t})),be=[{key:`__row`,label:``,render:e=>e.label},...u.map((e,t)=>({key:e.id,label:e.label,numeric:!0,render:e=>{let n=X(e.index,t);return n===null?`—`:x(n)}})),{key:`__total`,label:`Total`,numeric:!0,render:e=>H.rows[e.index]===null?`—`:x(H.rows[e.index])}],$=R;return(0,E.jsx)(f,{title:e,description:t,caveat:n,status:ae,skeleton:`heat`,defaultView:T,actions:D,table:(0,E.jsx)(ee,{caption:e,columns:be,rows:ye,rowKey:e=>e.id}),footer:(0,E.jsxs)(`div`,{className:s.legend,"aria-hidden":`true`,children:[(0,E.jsx)(`span`,{className:s.legendItem,children:`0`}),[0,1,2,3,4].map(e=>(0,E.jsx)(`span`,{className:s.swatch,style:{background:e===0?_(0):g(e/4)}},e)),(0,E.jsx)(`span`,{className:s.legendItem,children:H.max>0?x(H.max):`more`}),Q>0?(0,E.jsxs)(`span`,{className:s.legendItem,children:[(0,E.jsx)(`span`,{className:s.swatchHatch}),`not measured`]}):null]}),children:(0,E.jsxs)(`div`,{ref:O,className:`${s.plotWrap} ${s.focusable} ${A.scroll}`,tabIndex:0,role:`group`,"aria-label":`${e}. Use the arrow keys to move between cells.`,"aria-describedby":B,onFocus:()=>z(e=>e??{r:0,c:0}),onBlur:()=>z(null),onKeyDown:_e,children:[(0,E.jsxs)(`svg`,{className:s.svg,width:Y,height:ce,viewBox:`0 0 ${Y} ${ce}`,role:`img`,"aria-label":ve,children:[(0,E.jsx)(`defs`,{children:(0,E.jsx)(o,{id:V})}),S?u.map((e,t)=>{let n=H.columns[t]??null,r=n===null?0:Math.max(n>0?2:0,n/ue*(W-4)),i=q+t*(G+P);return(0,E.jsx)(`g`,{"data-col-total":e.id,children:n===null?null:(0,E.jsx)(`rect`,{x:i+G*.2,y:W-r,width:G*.6,height:r,rx:2,fill:v})},`ct-${e.id}`)}):null,u.map((e,t)=>{let n=q+t*(G+P),i=Math.max(2,Math.floor((G-(e.engine?22:0))/7));return(0,E.jsxs)(`g`,{children:[e.engine?(0,E.jsx)(r,{engine:e.engine,x:n+2,y:W+5,height:14}):null,(0,E.jsx)(`text`,{className:s.label,x:n+(e.engine?24:G/2),y:W+M/2,dy:`0.32em`,textAnchor:e.engine?`start`:`middle`,children:e.label.length>i?`${e.label.slice(0,i-1)}…`:e.label})]},`ch-${e.id}`)}),c.map((e,t)=>{let n=J+t*32,r=H.rows[t]??null,i=r===null?0:Math.max(r>0?2:0,r/le*N),a=q+u.length*(G+P)+6;return(0,E.jsxs)(`g`,{"data-row":e.id,children:[(0,E.jsx)(`text`,{className:s.label,x:U-8,y:n+K/2,dy:`0.32em`,textAnchor:`end`,children:e.label.length>fe?`${e.label.slice(0,fe-1)}…`:e.label}),u.map((r,i)=>{let a=X(t,i),o=q+i*(G+P),c=$?.r===t&&$.c===i;return(0,E.jsxs)(`g`,{children:[(0,E.jsx)(`rect`,{"data-cell":`${e.id}:${r.id}`,"data-value":a===null?`unknown`:a,className:`${a===null?s.unknownMark:``} ${c?A.focus:``}`,x:a===null?o+.5:o,y:a===null?n+.5:n,width:a===null?G-1:G,height:a===null?29:K,rx:3,fill:me(a),onPointerEnter:()=>z({r:t,c:i}),onPointerLeave:()=>z(null)}),de&&a!==null?(0,E.jsx)(`text`,{"data-cell-value":`${e.id}:${r.id}`,className:A.num,x:o+G/2,y:n+K/2,dy:`0.32em`,textAnchor:`middle`,fill:he(a),children:x(a)}):null]},r.id)}),S?(0,E.jsxs)(`g`,{"data-row-total":e.id,children:[r===null?null:(0,E.jsx)(`rect`,{x:a,y:n+K*.25,width:i,height:K*.5,rx:2,fill:v}),(0,E.jsx)(`text`,{className:s.tick,x:a+i+4,y:n+K/2,dy:`0.32em`,children:r===null?`—`:x(r)})]}):null]},e.id)})]}),(0,E.jsx)(`span`,{id:B,className:s.srOnly,"aria-live":`polite`,children:$?ge($.r,$.c):``}),$?(0,E.jsx)(p,{left:i(q+$.c*(G+P)+G/2,Y,80),top:J+$.r*32,title:`${c[$.r].label} × ${u[$.c].label}`,rows:[{key:`v`,label:b||`Value`,value:X($.r,$.c)===null?null:x(X($.r,$.c))}]}):null]})})}export{k as n,L as t};
|
|
2
|
+
//# sourceMappingURL=MatrixHeatmap-C7BCG2d7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MatrixHeatmap-C7BCG2d7.js","names":[],"sources":["../../../../../../src/web-ui/components/charts/Gauge.module.css","../../../../../../src/web-ui/components/charts/Gauge.tsx","../../../../../../src/web-ui/components/charts/MatrixHeatmap.module.css","../../../../../../src/web-ui/components/charts/MatrixHeatmap.tsx"],"sourcesContent":[".gauge {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-1);\n}\n\n.readout {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n margin-top: calc(-1 * var(--space-6));\n text-align: center;\n}\n\n/* Proportional figures for a standalone number (tabular only in columns). */\n.value {\n font-size: var(--text-2xl-size);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.unknownValue {\n font-size: var(--text-lg-size, var(--text-sm-size));\n font-weight: var(--font-weight-medium);\n color: var(--status-unknown-fg);\n}\n\n.state {\n font-size: var(--text-xs-size);\n color: var(--text-secondary);\n}\n\n.gauge[data-severity='warn'] .state {\n color: var(--status-warning-fg);\n}\n\n.gauge[data-severity='danger'] .state {\n color: var(--status-danger-fg);\n}\n\n.caption {\n font-size: var(--text-xs-size);\n color: var(--text-tertiary);\n}\n\n/* V3.10: the measuring box — full card width, so the arc can size to it. */\n.fit {\n width: 100%;\n min-width: 0;\n display: flex;\n justify-content: center;\n}\n","/**\n * components/charts/Gauge.tsx — one fraction on a 180° arc: how much of a\n * window is used, how close a cap is. The fill carries SEVERITY (accent →\n * warning → danger at the thresholds) over a track that is a lighter step of\n * the same ramp; an optional marker shows a line that matters (e.g. the\n * reserve kept for interactive use). The number and a words-first state label\n * sit under the arc, so severity is never colour alone.\n *\n * Honesty: `null` is UNKNOWN — an empty track and \"unknown\", never 0%. Values\n * past 100% are drawn full and printed as they are (\"112%\").\n *\n * Semantics: role=\"meter\" with aria-valuenow/min/max/valuetext.\n */\nimport { useId, useLayoutEffect, useRef, useState } from 'react';\nimport { CHART_SEQUENTIAL, CHART_TRACK, hatchPatternId, toneColor } from './colors.js';\nimport { HatchPattern } from './ChartParts.js';\nimport { ChartFrame, type ChartStatus } from './ChartFrame.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { gaugeArc, gaugeSeverity, polar, type GaugeSeverity } from './chart-math.js';\nimport { formatPercent } from './format.js';\nimport plot from './plot.module.css';\nimport styles from './Gauge.module.css';\n\nexport interface GaugeProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n /** Fraction used, 0..1 (may exceed 1). null = unknown. */\n value: number | null;\n /** Severity thresholds as fractions (defaults 0.7 / 0.9). */\n warnAt?: number;\n dangerAt?: number;\n /** A reference line on the arc, e.g. { value: 0.6, label: 'Autonomy cap' }. */\n marker?: { value: number; label: string };\n /** Words under the number, e.g. \"resets in 2h\". */\n caption?: string;\n /**\n * The LARGEST diameter in px (default 180). V3.10: the gauge fits its\n * container — two gauges side by side at 375 px each shrink (never below\n * MIN_GAUGE_SIZE) instead of widening the page.\n */\n size?: number;\n formatValue?: (fraction: number) => string;\n /**\n * Print the severity words (\"near the limit\"). Default true. Set false for\n * a fraction where higher is BETTER (a hit rate): the fill stays one\n * quantity hue and no limit language is used.\n */\n showState?: boolean;\n}\n\nconst SEVERITY_LABEL: Record<GaugeSeverity, string> = {\n ok: 'within limits',\n warn: 'near the limit',\n danger: 'at the limit',\n unknown: 'unknown',\n};\n\n/** Smallest diameter a gauge draws at; below it the readout would collide with the arc. */\nexport const MIN_GAUGE_SIZE = 112;\n\n/** The container's measured width (0 until laid out: jsdom, a hidden tab). */\nfunction useContainerWidth(ref: React.RefObject<HTMLElement | null>): number {\n const [width, setWidth] = useState(0);\n // Track the node: the gauge mounts after a loading frame (see useChartWidth).\n const [node, setNode] = useState<HTMLElement | null>(null);\n // Runs after every render on purpose (ref.current is not a dependency React\n // can see); the equality guard makes it settle in one pass, never a loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(() => {\n if (ref.current !== node) setNode(ref.current);\n });\n useLayoutEffect(() => {\n const el = node;\n if (!el) return undefined;\n const read = (): void => {\n const w = Math.floor(el.getBoundingClientRect().width);\n setWidth((prev) => (prev === w ? prev : w));\n };\n read();\n if (typeof ResizeObserver === 'undefined') return undefined;\n let frame = 0;\n const observer = new ResizeObserver(() => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(read);\n });\n observer.observe(el);\n return () => {\n cancelAnimationFrame(frame);\n observer.disconnect();\n };\n }, [node]);\n return width;\n}\n\n/** Diameter for a container: the largest that fits, clamped to [MIN_GAUGE_SIZE, max]. */\nexport function gaugeDiameter(containerWidth: number, max: number): number {\n if (!(containerWidth > 0)) return max;\n return Math.max(MIN_GAUGE_SIZE, Math.min(max, Math.floor(containerWidth)));\n}\n\nfunction severityColor(severity: GaugeSeverity): string {\n if (severity === 'danger') return toneColor('danger');\n if (severity === 'warn') return toneColor('warning');\n return CHART_SEQUENTIAL;\n}\n\ninterface Row {\n key: string;\n label: string;\n value: string;\n}\n\nexport function Gauge({\n title,\n description,\n caveat,\n status,\n value,\n warnAt = 0.7,\n dangerAt = 0.9,\n marker,\n caption,\n size: maxSize = 180,\n formatValue = (f) => formatPercent(f),\n showState = true,\n}: GaugeProps) {\n const captionId = useId();\n const hatchId = hatchPatternId(useId());\n const fitRef = useRef<HTMLDivElement>(null);\n const size = gaugeDiameter(useContainerWidth(fitRef), maxSize);\n const severity = showState ? gaugeSeverity(value, warnAt, dangerAt) : value === null ? 'unknown' : 'ok';\n const stroke = Math.max(10, Math.round(size / 12));\n const r = size / 2 - stroke / 2 - 2;\n const cx = size / 2;\n const cy = size / 2;\n const h = size / 2 + stroke / 2 + 4;\n const valueText = value === null ? 'unknown' : formatValue(value);\n const spoken = value === null ? `${title}: unknown` : showState ? `${title}: ${valueText}, ${SEVERITY_LABEL[severity]}` : `${title}: ${valueText}`;\n\n const rows: Row[] = [\n { key: 'value', label: 'Used', value: valueText },\n ...(showState\n ? [\n { key: 'state', label: 'State', value: SEVERITY_LABEL[severity] },\n { key: 'warn', label: 'Warning at', value: formatValue(warnAt) },\n { key: 'danger', label: 'Limit at', value: formatValue(dangerAt) },\n ]\n : []),\n ...(marker ? [{ key: 'marker', label: marker.label, value: formatValue(marker.value) }] : []),\n ];\n const columns: TableColumn<Row>[] = [\n { key: 'label', label: 'Measure', render: (row) => row.label },\n { key: 'value', label: 'Value', numeric: true, render: (row) => row.value },\n ];\n\n const markerOuter = marker ? polar(cx, cy, r + stroke / 2 + 3, Math.PI * (1 - Math.min(1, Math.max(0, marker.value)))) : null;\n const markerInner = marker ? polar(cx, cy, r - stroke / 2 - 3, Math.PI * (1 - Math.min(1, Math.max(0, marker.value)))) : null;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={status ?? { kind: 'ready' }}\n skeleton=\"gauge\"\n table={<TableView caption={title} columns={columns} rows={rows} rowKey={(row) => row.key} />}\n >\n <div ref={fitRef} className={styles.fit}>\n <div\n className={styles.gauge}\n role=\"meter\"\n aria-label={title}\n aria-valuemin={0}\n aria-valuemax={1}\n aria-valuenow={value === null ? undefined : Math.min(1, Math.max(0, value))}\n aria-valuetext={spoken}\n aria-describedby={caption ? captionId : undefined}\n data-severity={severity}\n >\n <svg className={plot.svg} width={size} height={h} viewBox={`0 0 ${size} ${h}`} aria-hidden=\"true\">\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {/* Unknown: the track is hatched, not the pale ramp step a \"little\" value would get. */}\n <path\n data-role=\"track\"\n d={gaugeArc(cx, cy, r, 0, 1)}\n fill=\"none\"\n stroke={value === null ? `url(#${hatchId})` : CHART_TRACK}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n />\n {value !== null && value > 0 ? (\n <path\n data-role=\"fill\"\n d={gaugeArc(cx, cy, r, 0, Math.min(1, value))}\n fill=\"none\"\n stroke={severityColor(severity)}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n />\n ) : null}\n {markerOuter && markerInner ? (\n <line\n data-role=\"marker\"\n x1={markerInner.x}\n y1={markerInner.y}\n x2={markerOuter.x}\n y2={markerOuter.y}\n stroke=\"var(--text-primary)\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n />\n ) : null}\n </svg>\n <div className={styles.readout}>\n <span className={value === null ? styles.unknownValue : styles.value}>{valueText}</span>\n {showState && severity !== 'unknown' ? <span className={styles.state}>{SEVERITY_LABEL[severity]}</span> : null}\n {caption ? <span id={captionId} className={styles.caption}>{caption}</span> : null}\n {marker ? <span className={styles.caption}>{marker.label}: {formatValue(marker.value)}</span> : null}\n </div>\n </div>\n </div>\n </ChartFrame>\n );\n}\n","/* MatrixHeatmap — horizontal scroll when a wide matrix meets a narrow card,\n the focused-cell ring, and in-cell numbers. Tokens only. */\n.scroll {\n overflow-x: auto;\n overscroll-behavior-x: contain;\n}\n\n.focus {\n stroke: var(--border-focus);\n stroke-width: 2;\n}\n\n/* In-cell numbers: the fill is set per cell (colors.ts quantityInk, by the\n cell's luminance), so this class must NOT set one — a CSS fill would beat\n the attribute. Never a stroke / halo: paint-order stroke around dark text\n on a dark cell turned the glyphs into blobs. */\n.num {\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n font-weight: var(--font-weight-medium);\n font-variant-numeric: tabular-nums;\n stroke: none;\n pointer-events: none;\n}\n","/**\n * components/charts/MatrixHeatmap.tsx — a rows × columns grid of counts\n * (V3.10, SPEC-310C §5 Mind: insight KIND × ENGINE, faceted per repo;\n * r5/visual.md §2 \"MatrixHeatmap\").\n *\n * Encoding, one meaning per mark:\n * - a KNOWN value is a step of the fixed azure quantity ramp\n * (colors.ts quantityColor) — a TRUE ZERO is the faint heat-0 cell;\n * - an UNKNOWN value (null: nothing was measured for that cell, e.g. an\n * engine with no recorded reasoning) is the 45° unknown hatch with an\n * outline — never the palest step, which would claim \"a little\";\n * - row and column TOTALS sit in the margins as bars (right and top), so\n * \"which kind dominates\" reads without adding cells in your head.\n * A column may carry an engine: its header gets the 2px tick + monogram.\n *\n * Keyboard: the grid is one tab stop; arrows move a cell, Home/End jump\n * along the row; the focused cell is announced. The Table view has every\n * cell and both totals. At 375 px callers usually start on the table\n * (`defaultView=\"table\"`, SPEC-310C §5 \"Mind's matrix shows as a table\").\n */\nimport { useId, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { CHART_SEQUENTIAL_SOFT, hatchPatternId, heatColor, quantityColor, quantityInk, type ChartEngine } from './colors.js';\nimport { ChartFrame, type ChartStatus, type ChartView } from './ChartFrame.js';\nimport { ChartTooltip, EngineTick, HatchPattern, clampTooltipLeft } from './ChartParts.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { formatCompact } from './format.js';\nimport { useChartWidth } from './useChartWidth.js';\nimport { useTextScale } from './useTextScale.js';\nimport plot from './plot.module.css';\nimport styles from './MatrixHeatmap.module.css';\n\nexport interface MatrixAxisItem {\n id: string;\n label: string;\n /** Column-only: the engine this column stands for (tick + monogram in the header). */\n engine?: ChartEngine;\n}\n\nexport interface MatrixHeatmapProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n rows: MatrixAxisItem[];\n columns: MatrixAxisItem[];\n /** values[rowIndex][columnIndex]; null = not measured. */\n values: ReadonlyArray<ReadonlyArray<number | null>>;\n /** Unit word for spoken text and the table (\"insights\"). */\n unit?: string;\n formatValue?: (v: number) => string;\n /** Row / column totals as margin bars (default true). */\n showTotals?: boolean;\n defaultView?: ChartView;\n /** Extra header controls (e.g. the repo facet picker). */\n actions?: ReactNode;\n width?: number;\n ariaLabel?: string;\n}\n\ninterface Totals {\n rows: (number | null)[];\n columns: (number | null)[];\n max: number;\n grand: number | null;\n}\n\n/** Sum known values; a line with NO known value has an unknown (null) total, never 0. */\nexport function matrixTotals(values: ReadonlyArray<ReadonlyArray<number | null>>, rows: number, columns: number): Totals {\n const cell = (r: number, c: number): number | null => {\n const v = values[r]?.[c];\n return v === undefined || v === null || !Number.isFinite(v) ? null : v;\n };\n const sum = (xs: (number | null)[]): number | null => {\n const known = xs.filter((x): x is number => x !== null);\n return known.length ? known.reduce((a, b) => a + b, 0) : null;\n };\n const rowTotals = Array.from({ length: rows }, (_, r) => sum(Array.from({ length: columns }, (_, c) => cell(r, c))));\n const colTotals = Array.from({ length: columns }, (_, c) => sum(Array.from({ length: rows }, (_, r) => cell(r, c))));\n let max = 0;\n for (let r = 0; r < rows; r++) for (let c = 0; c < columns; c++) max = Math.max(max, cell(r, c) ?? 0);\n return { rows: rowTotals, columns: colTotals, max, grand: sum(rowTotals) };\n}\n\nconst HEADER_H = 26;\nconst MARGIN_BAR = 40;\nconst GAP = 2;\nconst MIN_CELL = 22;\nconst MAX_CELL = 56;\n\nexport function MatrixHeatmap({\n title,\n description,\n caveat,\n status,\n rows,\n columns,\n values,\n unit = '',\n formatValue = formatCompact,\n showTotals = true,\n defaultView,\n actions,\n width: fixedWidth,\n ariaLabel,\n}: MatrixHeatmapProps) {\n const wrapRef = useRef<HTMLDivElement>(null);\n const width = useChartWidth(wrapRef, fixedWidth);\n const textScale = useTextScale();\n const [focus, setFocus] = useState<{ r: number; c: number } | null>(null);\n const liveId = useId();\n const hatchId = hatchPatternId(useId());\n const unitText = unit ? ` ${unit}` : '';\n\n const totals = matrixTotals(values, rows.length, columns.length);\n const anyKnown = totals.grand !== null;\n const resolvedStatus: ChartStatus = status ?? (rows.length === 0 || columns.length === 0\n ? { kind: 'empty' }\n : anyKnown ? { kind: 'ready' } : { kind: 'unknown', reason: 'no cell in this matrix was measured.' });\n\n const labelW = Math.max(72, Math.min(150, Math.round(width * 0.24)));\n const marginRight = showTotals ? MARGIN_BAR + 34 : 0;\n const marginTop = showTotals ? MARGIN_BAR * 0.6 : 0;\n const avail = width - labelW - marginRight;\n const cellW = Math.max(MIN_CELL, Math.min(MAX_CELL * 2, Math.floor(avail / Math.max(1, columns.length)) - GAP));\n const cellH = Math.max(MIN_CELL, Math.min(MAX_CELL, 30));\n const gridX = labelW;\n const gridY = marginTop + HEADER_H;\n const svgW = gridX + columns.length * (cellW + GAP) + marginRight;\n const svgH = gridY + rows.length * (cellH + GAP);\n const rowTotalMax = Math.max(1, ...totals.rows.map((t) => t ?? 0));\n const colTotalMax = Math.max(1, ...totals.columns.map((t) => t ?? 0));\n const showNumbers = cellW >= 28;\n // 7 px a character at 12 px text, scaled to the Display size.\n const labelChars = Math.floor(labelW / (7 * textScale));\n\n const cellValue = (r: number, c: number): number | null => {\n const v = values[r]?.[c];\n return v === undefined || v === null || !Number.isFinite(v) ? null : v;\n };\n const fraction = (v: number): number => (totals.max > 0 ? v / totals.max : 0);\n const fill = (v: number | null): string => (v === null ? `url(#${hatchId})` : v <= 0 ? heatColor(0) : quantityColor(fraction(v)));\n // A true zero sits on the faint heat-0 cell, the palest ground there is.\n const cellInk = (v: number): string => (v <= 0 ? quantityInk(0) : quantityInk(fraction(v)));\n const describe = (r: number, c: number): string => {\n const v = cellValue(r, c);\n return `${rows[r]!.label} × ${columns[c]!.label}: ${v === null ? 'not measured' : `${formatValue(v)}${unitText}`}`;\n };\n\n function onKey(e: KeyboardEvent<HTMLDivElement>): void {\n if (rows.length === 0 || columns.length === 0) return;\n const cur = focus ?? { r: 0, c: 0 };\n let next: { r: number; c: number } | null = null;\n if (e.key === 'ArrowRight') next = { r: cur.r, c: cur.c + 1 };\n else if (e.key === 'ArrowLeft') next = { r: cur.r, c: cur.c - 1 };\n else if (e.key === 'ArrowDown') next = { r: cur.r + 1, c: cur.c };\n else if (e.key === 'ArrowUp') next = { r: cur.r - 1, c: cur.c };\n else if (e.key === 'Home') next = { r: cur.r, c: 0 };\n else if (e.key === 'End') next = { r: cur.r, c: columns.length - 1 };\n if (!next) return;\n e.preventDefault();\n setFocus({ r: Math.max(0, Math.min(rows.length - 1, next.r)), c: Math.max(0, Math.min(columns.length - 1, next.c)) });\n }\n\n let peak: { r: number; c: number; v: number } | null = null;\n for (let r = 0; r < rows.length; r++) for (let c = 0; c < columns.length; c++) {\n const v = cellValue(r, c);\n if (v !== null && (!peak || v > peak.v)) peak = { r, c, v };\n }\n const unknownCells = rows.length * columns.length - values.flat().filter((v) => v !== null && v !== undefined).length;\n const summary = ariaLabel ?? `${title}: ${rows.length} × ${columns.length} grid, ${totals.grand === null ? 'nothing measured' : `${formatValue(totals.grand)}${unitText} in total`}` +\n (peak && peak.v > 0 ? `; most in ${rows[peak.r]!.label} × ${columns[peak.c]!.label} (${formatValue(peak.v)})` : '') +\n (unknownCells > 0 ? `; ${unknownCells} cell${unknownCells === 1 ? '' : 's'} not measured` : '') + '.';\n\n interface TableRow { id: string; label: string; index: number }\n const tableRows: TableRow[] = rows.map((r, index) => ({ id: r.id, label: r.label, index }));\n const tableColumns: TableColumn<TableRow>[] = [\n { key: '__row', label: '', render: (r) => r.label },\n ...columns.map((c, ci) => ({\n key: c.id,\n label: c.label,\n numeric: true,\n render: (r: TableRow) => {\n const v = cellValue(r.index, ci);\n return v === null ? '—' : formatValue(v);\n },\n })),\n { key: '__total', label: 'Total', numeric: true, render: (r) => (totals.rows[r.index] === null ? '—' : formatValue(totals.rows[r.index]!)) },\n ];\n\n const focusCell = focus;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={resolvedStatus}\n skeleton=\"heat\"\n defaultView={defaultView}\n actions={actions}\n table={<TableView caption={title} columns={tableColumns} rows={tableRows} rowKey={(r) => r.id} />}\n footer={\n <div className={plot.legend} aria-hidden=\"true\">\n <span className={plot.legendItem}>0</span>\n {[0, 1, 2, 3, 4].map((i) => (\n <span key={i} className={plot.swatch} style={{ background: i === 0 ? heatColor(0) : quantityColor(i / 4) }} />\n ))}\n <span className={plot.legendItem}>{totals.max > 0 ? formatValue(totals.max) : 'more'}</span>\n {unknownCells > 0 ? (\n <span className={plot.legendItem}>\n <span className={plot.swatchHatch} />\n not measured\n </span>\n ) : null}\n </div>\n }\n >\n <div\n ref={wrapRef}\n className={`${plot.plotWrap} ${plot.focusable} ${styles.scroll}`}\n tabIndex={0}\n role=\"group\"\n aria-label={`${title}. Use the arrow keys to move between cells.`}\n aria-describedby={liveId}\n onFocus={() => setFocus((f) => f ?? { r: 0, c: 0 })}\n onBlur={() => setFocus(null)}\n onKeyDown={onKey}\n >\n <svg className={plot.svg} width={svgW} height={svgH} viewBox={`0 0 ${svgW} ${svgH}`} role=\"img\" aria-label={summary}>\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {/* Column totals (top margin) */}\n {showTotals\n ? columns.map((c, ci) => {\n const t = totals.columns[ci] ?? null;\n const h = t === null ? 0 : Math.max(t > 0 ? 2 : 0, (t / colTotalMax) * (marginTop - 4));\n const x = gridX + ci * (cellW + GAP);\n return (\n <g key={`ct-${c.id}`} data-col-total={c.id}>\n {t === null ? null : <rect x={x + cellW * 0.2} y={marginTop - h} width={cellW * 0.6} height={h} rx={2} fill={CHART_SEQUENTIAL_SOFT} />}\n </g>\n );\n })\n : null}\n {/* Column headers */}\n {columns.map((c, ci) => {\n const x = gridX + ci * (cellW + GAP);\n const chars = Math.max(2, Math.floor((cellW - (c.engine ? 22 : 0)) / 7));\n return (\n <g key={`ch-${c.id}`}>\n {c.engine ? <EngineTick engine={c.engine} x={x + 2} y={marginTop + 5} height={HEADER_H - 12} /> : null}\n <text className={plot.label} x={x + (c.engine ? 24 : cellW / 2)} y={marginTop + HEADER_H / 2} dy=\"0.32em\" textAnchor={c.engine ? 'start' : 'middle'}>\n {c.label.length > chars ? `${c.label.slice(0, chars - 1)}…` : c.label}\n </text>\n </g>\n );\n })}\n {rows.map((row, ri) => {\n const y = gridY + ri * (cellH + GAP);\n const t = totals.rows[ri] ?? null;\n const barW = t === null ? 0 : Math.max(t > 0 ? 2 : 0, (t / rowTotalMax) * MARGIN_BAR);\n const barX = gridX + columns.length * (cellW + GAP) + 6;\n return (\n <g key={row.id} data-row={row.id}>\n <text className={plot.label} x={labelW - 8} y={y + cellH / 2} dy=\"0.32em\" textAnchor=\"end\">\n {row.label.length > labelChars ? `${row.label.slice(0, labelChars - 1)}…` : row.label}\n </text>\n {columns.map((col, ci) => {\n const v = cellValue(ri, ci);\n const x = gridX + ci * (cellW + GAP);\n const isFocus = focusCell?.r === ri && focusCell.c === ci;\n return (\n <g key={col.id}>\n <rect\n data-cell={`${row.id}:${col.id}`}\n data-value={v === null ? 'unknown' : v}\n className={`${v === null ? plot.unknownMark : ''} ${isFocus ? styles.focus : ''}`}\n x={v === null ? x + 0.5 : x}\n y={v === null ? y + 0.5 : y}\n width={v === null ? cellW - 1 : cellW}\n height={v === null ? cellH - 1 : cellH}\n rx={3}\n fill={fill(v)}\n onPointerEnter={() => setFocus({ r: ri, c: ci })}\n onPointerLeave={() => setFocus(null)}\n />\n {showNumbers && v !== null ? (\n // Plain fill picked by the cell's luminance (colors.ts\n // quantityInk) — no halo: a surface stroke around text\n // on a dark cell smeared \"1\" into a blob.\n <text data-cell-value={`${row.id}:${col.id}`} className={styles.num} x={x + cellW / 2} y={y + cellH / 2} dy=\"0.32em\" textAnchor=\"middle\" fill={cellInk(v)}>\n {formatValue(v)}\n </text>\n ) : null}\n </g>\n );\n })}\n {showTotals ? (\n <g data-row-total={row.id}>\n {t === null ? null : <rect x={barX} y={y + cellH * 0.25} width={barW} height={cellH * 0.5} rx={2} fill={CHART_SEQUENTIAL_SOFT} />}\n <text className={plot.tick} x={barX + barW + 4} y={y + cellH / 2} dy=\"0.32em\">\n {t === null ? '—' : formatValue(t)}\n </text>\n </g>\n ) : null}\n </g>\n );\n })}\n </svg>\n <span id={liveId} className={plot.srOnly} aria-live=\"polite\">\n {focusCell ? describe(focusCell.r, focusCell.c) : ''}\n </span>\n {focusCell ? (\n <ChartTooltip\n left={clampTooltipLeft(gridX + focusCell.c * (cellW + GAP) + cellW / 2, svgW, 80)}\n top={gridY + focusCell.r * (cellH + GAP)}\n title={`${rows[focusCell.r]!.label} × ${columns[focusCell.c]!.label}`}\n rows={[{ key: 'v', label: unit || 'Value', value: cellValue(focusCell.r, focusCell.c) === null ? null : formatValue(cellValue(focusCell.r, focusCell.c)!) }]}\n />\n ) : null}\n </div>\n </ChartFrame>\n );\n}\n"],"mappings":"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"}
|
package/dist/core/web/public/next/assets/{McpSection-nuXer4K-.js.map → McpSection-DGbRcyv8.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpSection-
|
|
1
|
+
{"version":3,"file":"McpSection-DGbRcyv8.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/sections/McpSection.tsx"],"sourcesContent":["/**\n * routes/verse/sections/McpSection.tsx — the legacy MCP entry point, folded\n * into Apps & Accounts (SPEC-310C §0.1 \"MCP moves into Apps\", §4).\n *\n * MCP is no longer a section of its own: its per-seat view, the standing\n * caveat (Claude and local seats load none), the drift alert and — new — the\n * Add flow all live in the MCP SERVERS group of the Apps page. This file stays\n * only so a shell that still routes `mcp` (a stored v2 `section: 'mcp'`, or\n * C1's `fallbackModules: ['McpSection']` while AppsSection is loading) lands\n * on that group instead of on a \"missing section\" notice. It renders the same\n * page — one implementation, never two MCP views that could drift.\n */\nimport { AppsSection } from './AppsSection.js';\n\nexport function McpSection() {\n return <AppsSection focusGroup=\"mcp-servers\" />;\n}\n"],"mappings":"0GAcA,SAAgB,GAAa,CAC3B,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAa,WAAW,aAAe,CAAA,CAChD"}
|
package/dist/core/web/public/next/assets/{MessageMarkdown-BCe4TsXk.js → MessageMarkdown-DFvk06qG.js}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MessageMarkdownRenderer-
|
|
2
|
-
import{a as e,c as t,n,t as r}from"./index-
|
|
3
|
-
//# sourceMappingURL=MessageMarkdown-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MessageMarkdownRenderer-BAv4oEUf.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e,c as t,n,t as r}from"./index-DZ-UQ7v8.js";var i=t(e(),1),a={transcriptWrap:`_transcriptWrap_5y127_12`,scrollArea:`_scrollArea_5y127_14`,transcript:`_transcript_5y127_12`,list:`_list_5y127_31`,item:`_item_5y127_41`,skeleton:`_skeleton_5y127_43`,skeletonUser:`_skeletonUser_5y127_55`,loadError:`_loadError_5y127_58`,empty:`_empty_5y127_85`,emptyTitle:`_emptyTitle_5y127_86`,emptyBody:`_emptyBody_5y127_95`,user:`_user_5y127_100`,userText:`_userText_5y127_101`,assistant:`_assistant_5y127_115`,markdown:`_markdown_5y127_48`,codeHead:`_codeHead_5y127_210`,codeLang:`_codeLang_5y127_227`,copy:`_copy_5y127_226`,streaming:`_streaming_5y127_253`,"verse-caret":`_verse-caret_5y127_1`,tool:`_tool_5y127_267`,toolRun:`_toolRun_5y127_268`,toolLine:`_toolLine_5y127_270`,toolArg:`_toolArg_5y127_288`,toolState:`_toolState_5y127_288`,toolGlyph:`_toolGlyph_5y127_301`,toolName:`_toolName_5y127_314`,toolFailed:`_toolFailed_5y127_338`,toolBody:`_toolBody_5y127_341`,toolRunBody:`_toolRunBody_5y127_342`,toolRunList:`_toolRunList_5y127_349`,toolLabel:`_toolLabel_5y127_351`,toolLabelPath:`_toolLabelPath_5y127_361`,toolPre:`_toolPre_5y127_362`,toolPending:`_toolPending_5y127_377`,note:`_note_5y127_380`,noteError:`_noteError_5y127_388`,noteRecovered:`_noteRecovered_5y127_389`,noteLead:`_noteLead_5y127_396`,noteHint:`_noteHint_5y127_399`,jump:`_jump_5y127_411`,jumpUnseen:`_jumpUnseen_5y127_434`,turn:`_turn_5y127_457`,turnSettled:`_turnSettled_5y127_479`,turnItems:`_turnItems_5y127_488`,turnFoot:`_turnFoot_5y127_507`,"verse-flash":`_verse-flash_5y127_1`,turnErrorJump:`_turnErrorJump_5y127_549`,toolDelta:`_toolDelta_5y127_569`,toolAdd:`_toolAdd_5y127_577`,toolDel:`_toolDel_5y127_569`,toolNote:`_toolNote_5y127_580`,compaction:`_compaction_5y127_601`,compactionRule:`_compactionRule_5y127_606`,compactionText:`_compactionText_5y127_607`,compactionTitle:`_compactionTitle_5y127_615`,compactionNote:`_compactionNote_5y127_622`,continued:`_continued_5y127_625`,continuedLabel:`_continuedLabel_5y127_633`,continuedTitle:`_continuedTitle_5y127_634`,continuedLink:`_continuedLink_5y127_635`},o=n(),s=null,c=null;function l(){return c??=r(()=>import(`./MessageMarkdownRenderer-BAv4oEUf.js`).then(e=>s=e,e=>{throw c=null,e}),__vite__mapDeps([0])),c}typeof window<`u`&&l().catch(()=>void 0);function u(){let[e,t]=(0,i.useState)(s);return(0,i.useEffect)(()=>{if(e)return;let n=!0;return l().then(e=>{n&&t(e)},()=>void 0),()=>{n=!1}},[e]),e}function d({text:e}){return(0,o.jsx)(`div`,{className:a.markdown,"data-markdown-pending":``,children:(0,o.jsx)(`p`,{style:{whiteSpace:`pre-wrap`},children:e})})}var f=(0,i.memo)(function({text:e,streaming:t=!1}){let n=u();return n?(0,o.jsx)(n.RenderedMarkdown,{text:e,streaming:t}):(0,o.jsx)(d,{text:e})});export{a as n,f as t};
|
|
3
|
+
//# sourceMappingURL=MessageMarkdown-DFvk06qG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";gjEA2BI,EAAkC,KAClC,EAA0C,KAM9C,SAAgB,GAAgD,CAS9D,MARA,WAAY,OAAO,wCAA+B,CAAC,KAChD,GAAS,EAAW,EACpB,GAAiB,CAGhB,KADA,GAAU,KACJ,CACR,CACF,wBACO,CACT,CAGI,OAAO,OAAW,KAAa,EAA0B,CAAC,CAAC,UAAY,MAAS,EAEpF,SAAS,GAAqC,CAC5C,GAAM,CAAC,EAAK,MAAU,YAAgC,CAAQ,EAO9D,OANA,mBAAgB,CACd,GAAI,EAAK,OACT,IAAI,EAAO,GAEX,OADA,EAAqB,CAAC,CAAC,KAAM,GAAM,CAAM,GAAM,EAAO,CAAC,CAAG,MAAS,MAAS,MAC/D,CAAE,EAAO,EAAO,CAC/B,EAAG,CAAC,CAAG,CAAC,EACD,CACT,CAGA,SAAS,EAAa,CAAE,QAA0B,CAChD,OACE,SAAC,MAAD,CAAK,UAAW,EAAO,SAAU,wBAAsB,GACrD,mBAAC,IAAD,CAAG,MAAO,CAAE,WAAY,UAAW,EAAI,UAAQ,EAC5C,EAET,CAMA,IAAa,KAAkB,QAAK,SAAyB,CAAE,OAAM,YAAY,IAAgD,CAC/H,IAAM,EAAM,EAAY,EACxB,OAAO,GAAM,SAAC,EAAI,iBAAL,CAA4B,OAAiB,WAAY,IAAI,SAAC,EAAD,CAAoB,MAAO,EACvG,CAAC","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/MessageMarkdown.tsx"],"sourcesContent":["/**\n * routes/verse/MessageMarkdown.tsx — assistant text rendered as Markdown.\n *\n * This file is the light half. The renderer — marked + DOMPurify plus the\n * streaming block cache, ~70 KB minified — lives in MessageMarkdownRenderer\n * and loads as its own chunk (3.10 first paint, SPEC-310A §1: the chat's\n * critical JS was 658 KB against a 350 KB budget, and this was the largest\n * piece the transcript did not need in order to show text).\n *\n * Until the renderer is in, a message shows as PLAIN TEXT (React text, never\n * HTML — model output is untrusted, and nothing unsanitized can reach the\n * DOM on this path either). The download starts when this module evaluates,\n * so on a real load the renderer is usually in before the first message\n * mounts; once in, every mount renders Markdown synchronously. If the chunk\n * fails to load, the text stays plain (still complete and readable) and the\n * next mount asks again.\n *\n * The pure helpers (splitStreamingBlocks, appendInlineText, codeLanguage)\n * live in markdown-stream.ts and are re-exported here for existing importers.\n */\nimport { memo, useEffect, useState } from 'react';\nimport styles from './Transcript.module.css';\n\nexport { appendInlineText, codeLanguage, splitStreamingBlocks, type StreamingSplit } from './markdown-stream.js';\n\ntype RendererModule = typeof import('./MessageMarkdownRenderer.js');\n\nlet renderer: RendererModule | null = null;\nlet pending: Promise<RendererModule> | null = null;\n\n/**\n * Load (once) the Markdown renderer chunk. Exported so a caller that needs\n * Markdown synchronously — a test, a print path — can await it first.\n */\nexport function loadMarkdownRenderer(): Promise<RendererModule> {\n pending ??= import('./MessageMarkdownRenderer.js').then(\n (mod) => (renderer = mod),\n (err: unknown) => {\n // Not cached: a transient failure must not pin every message to plain text for the tab's life.\n pending = null;\n throw err;\n },\n );\n return pending;\n}\n\n// Start now, in parallel with whatever else the transcript is waiting on.\nif (typeof window !== 'undefined') void loadMarkdownRenderer().catch(() => undefined);\n\nfunction useRenderer(): RendererModule | null {\n const [mod, setMod] = useState<RendererModule | null>(renderer);\n useEffect(() => {\n if (mod) return undefined;\n let live = true;\n loadMarkdownRenderer().then((m) => { if (live) setMod(m); }, () => undefined);\n return () => { live = false; };\n }, [mod]);\n return mod;\n}\n\n/** The message before the renderer lands: all of it, as text, in the Markdown box's typography. */\nfunction PlainMessage({ text }: { text: string }) {\n return (\n <div className={styles.markdown} data-markdown-pending=\"\">\n <p style={{ whiteSpace: 'pre-wrap' }}>{text}</p>\n </div>\n );\n}\n\n/**\n * Memoized: a finished message re-renders only when its text changes, so a\n * token streaming into the NEXT reply never re-parses this one.\n */\nexport const MessageMarkdown = memo(function MessageMarkdown({ text, streaming = false }: { text: string; streaming?: boolean }) {\n const mod = useRenderer();\n return mod ? <mod.RenderedMarkdown text={text} streaming={streaming} /> : <PlainMessage text={text} />;\n});\n"],"file":"MessageMarkdown-
|
|
1
|
+
{"version":3,"mappings":";gjEA2BI,EAAkC,KAClC,EAA0C,KAM9C,SAAgB,GAAgD,CAS9D,MARA,WAAY,OAAO,wCAA+B,CAAC,KAChD,GAAS,EAAW,EACpB,GAAiB,CAGhB,KADA,GAAU,KACJ,CACR,CACF,wBACO,CACT,CAGI,OAAO,OAAW,KAAa,EAA0B,CAAC,CAAC,UAAY,MAAS,EAEpF,SAAS,GAAqC,CAC5C,GAAM,CAAC,EAAK,MAAU,YAAgC,CAAQ,EAO9D,OANA,mBAAgB,CACd,GAAI,EAAK,OACT,IAAI,EAAO,GAEX,OADA,EAAqB,CAAC,CAAC,KAAM,GAAM,CAAM,GAAM,EAAO,CAAC,CAAG,MAAS,MAAS,MAC/D,CAAE,EAAO,EAAO,CAC/B,EAAG,CAAC,CAAG,CAAC,EACD,CACT,CAGA,SAAS,EAAa,CAAE,QAA0B,CAChD,OACE,SAAC,MAAD,CAAK,UAAW,EAAO,SAAU,wBAAsB,GACrD,mBAAC,IAAD,CAAG,MAAO,CAAE,WAAY,UAAW,EAAI,UAAQ,EAC5C,EAET,CAMA,IAAa,KAAkB,QAAK,SAAyB,CAAE,OAAM,YAAY,IAAgD,CAC/H,IAAM,EAAM,EAAY,EACxB,OAAO,GAAM,SAAC,EAAI,iBAAL,CAA4B,OAAiB,WAAY,IAAI,SAAC,EAAD,CAAoB,MAAO,EACvG,CAAC","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/MessageMarkdown.tsx"],"sourcesContent":["/**\n * routes/verse/MessageMarkdown.tsx — assistant text rendered as Markdown.\n *\n * This file is the light half. The renderer — marked + DOMPurify plus the\n * streaming block cache, ~70 KB minified — lives in MessageMarkdownRenderer\n * and loads as its own chunk (3.10 first paint, SPEC-310A §1: the chat's\n * critical JS was 658 KB against a 350 KB budget, and this was the largest\n * piece the transcript did not need in order to show text).\n *\n * Until the renderer is in, a message shows as PLAIN TEXT (React text, never\n * HTML — model output is untrusted, and nothing unsanitized can reach the\n * DOM on this path either). The download starts when this module evaluates,\n * so on a real load the renderer is usually in before the first message\n * mounts; once in, every mount renders Markdown synchronously. If the chunk\n * fails to load, the text stays plain (still complete and readable) and the\n * next mount asks again.\n *\n * The pure helpers (splitStreamingBlocks, appendInlineText, codeLanguage)\n * live in markdown-stream.ts and are re-exported here for existing importers.\n */\nimport { memo, useEffect, useState } from 'react';\nimport styles from './Transcript.module.css';\n\nexport { appendInlineText, codeLanguage, splitStreamingBlocks, type StreamingSplit } from './markdown-stream.js';\n\ntype RendererModule = typeof import('./MessageMarkdownRenderer.js');\n\nlet renderer: RendererModule | null = null;\nlet pending: Promise<RendererModule> | null = null;\n\n/**\n * Load (once) the Markdown renderer chunk. Exported so a caller that needs\n * Markdown synchronously — a test, a print path — can await it first.\n */\nexport function loadMarkdownRenderer(): Promise<RendererModule> {\n pending ??= import('./MessageMarkdownRenderer.js').then(\n (mod) => (renderer = mod),\n (err: unknown) => {\n // Not cached: a transient failure must not pin every message to plain text for the tab's life.\n pending = null;\n throw err;\n },\n );\n return pending;\n}\n\n// Start now, in parallel with whatever else the transcript is waiting on.\nif (typeof window !== 'undefined') void loadMarkdownRenderer().catch(() => undefined);\n\nfunction useRenderer(): RendererModule | null {\n const [mod, setMod] = useState<RendererModule | null>(renderer);\n useEffect(() => {\n if (mod) return undefined;\n let live = true;\n loadMarkdownRenderer().then((m) => { if (live) setMod(m); }, () => undefined);\n return () => { live = false; };\n }, [mod]);\n return mod;\n}\n\n/** The message before the renderer lands: all of it, as text, in the Markdown box's typography. */\nfunction PlainMessage({ text }: { text: string }) {\n return (\n <div className={styles.markdown} data-markdown-pending=\"\">\n <p style={{ whiteSpace: 'pre-wrap' }}>{text}</p>\n </div>\n );\n}\n\n/**\n * Memoized: a finished message re-renders only when its text changes, so a\n * token streaming into the NEXT reply never re-parses this one.\n */\nexport const MessageMarkdown = memo(function MessageMarkdown({ text, streaming = false }: { text: string; streaming?: boolean }) {\n const mod = useRenderer();\n return mod ? <mod.RenderedMarkdown text={text} streaming={streaming} /> : <PlainMessage text={text} />;\n});\n"],"file":"MessageMarkdown-DFvk06qG.js"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,c as t,n}from"./index-
|
|
1
|
+
import{a as e,c as t,n}from"./index-DZ-UQ7v8.js";import{n as r}from"./MessageMarkdown-DFvk06qG.js";function i(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function a(e){if(Array.isArray(e))return e}function o(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function s(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function c(e,t){return a(e)||o(e,t)||l(e,t)||s()}function l(e,t){if(e){if(typeof e==`string`)return i(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}var u=Object.entries,d=Object.setPrototypeOf,f=Object.isFrozen,ee=Object.getPrototypeOf,p=Object.getOwnPropertyDescriptor,m=Object.freeze,h=Object.seal,te=Object.create,ne=typeof Reflect<`u`&&Reflect,re=ne.apply,g=ne.construct;m||=function(e){return e},h||=function(e){return e},re||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},g||=function(e){return new e(...[...arguments].slice(1))};var ie=x(Array.prototype.forEach),ae=x(Array.prototype.lastIndexOf),oe=x(Array.prototype.pop),se=x(Array.prototype.push),ce=x(Array.prototype.splice),le=Array.isArray,ue=x(String.prototype.toLowerCase),de=x(String.prototype.toString),fe=x(String.prototype.match),pe=x(String.prototype.replace),me=x(String.prototype.indexOf),he=x(String.prototype.trim),ge=x(Number.prototype.toString),_e=x(Boolean.prototype.toString),ve=typeof BigInt>`u`?null:x(BigInt.prototype.toString),_=typeof Symbol>`u`?null:x(Symbol.prototype.toString),v=x(Object.prototype.hasOwnProperty),y=x(Object.prototype.toString),b=x(RegExp.prototype.test),ye=be(TypeError);function x(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return re(e,t,n)}}function be(e){return function(){return g(e,[...arguments])}}function S(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ue;if(d&&d(e,null),!le(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(f(t)||(t[r]=e),i=e)}e[i]=!0}return e}function xe(e){for(let t=0;t<e.length;t++)v(e,t)||(e[t]=null);return e}function C(e){let t=te(null);for(let r of u(e)){var n=c(r,2);let i=n[0],a=n[1];v(e,i)&&(t[i]=le(a)?xe(a):a&&typeof a==`object`&&a.constructor===Object?C(a):a)}return t}function Se(e){switch(typeof e){case`string`:return e;case`number`:return ge(e);case`boolean`:return _e(e);case`bigint`:return ve?ve(e):`0`;case`symbol`:return _?_(e):`Symbol()`;case`undefined`:return y(e);case`function`:case`object`:{if(e===null)return y(e);let t=e,n=w(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:y(e)}return y(e)}default:return y(e)}}function w(e,t){for(;e!==null;){let n=p(e,t);if(n){if(n.get)return x(n.get);if(typeof n.value==`function`)return x(n.value)}e=ee(e)}function n(){return null}return n}function Ce(e){try{return b(e,``),!0}catch{return!1}}var we=m(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),Te=m(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),Ee=m([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),De=m([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),Oe=m(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),ke=m([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),Ae=m([`#text`]),je=m(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),Me=m(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dominant-baseline.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.pointer-events.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-orientation.text-rendering.textlength.type.u1.u2.unicode.values.vector-effect.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),Ne=m(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),Pe=m([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),Fe=h(/{{[\w\W]*|^[\w\W]*}}/g),Ie=h(/<%[\w\W]*|^[\w\W]*%>/g),Le=h(/\${[\w\W]*/g),Re=h(/^data-[\-\w.\u00B7-\uFFFF]+$/),ze=h(/^aria-[\-\w]+$/),Be=h(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Ve=h(/^(?:\w+script|data):/i),He=h(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ue=h(/^html$/i),We=h(/^[a-z][.\w]*(-[.\w]+)+$/i),Ge=h(/<[/\w!]/g),Ke=h(/<[/\w]/g),qe=h(/<\/no(script|embed|frames)/i),Je=h(/\/>/i),T={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},E=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`],Ye=m(S({},E)),Xe=function(){let e={};return ie(E,t=>{e[t]=h(RegExp(`</`+t+`(?=[\\t\\n\\f\\r />])`,`i`))}),m(e)}(),Ze=function(){return typeof window>`u`?null:window},Qe=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},$e=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},et=function(e,t,n,r){return v(e,t)&&le(e[t])?S(r.base?C(r.base):{},e[t],r.transform):n},tt=function(e,t,n){let r=v(e,t)?e[t]:void 0;return r&&typeof r==`object`?C(r):n()};function nt(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ze(),t=e=>nt(e);if(t.version=`3.4.15`,t.removed=[],!e||!e.document||e.document.nodeType!==T.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,d=e.trustedTypes,f=s.prototype,ee=w(f,`cloneNode`),p=w(f,`remove`),ne=w(f,`removeAttributeNode`),re=w(f,`nextSibling`),g=w(f,`childNodes`),ge=w(f,`parentNode`),_e=w(f,`shadowRoot`),ve=w(f,`attributes`),_=o&&o.prototype?w(o.prototype,`nodeType`):null,y=o&&o.prototype?w(o.prototype,`nodeName`):null,x=o&&o.prototype?w(o.prototype,`ownerDocument`):null,be=function(e){return _?_(e):e.nodeType},xe=function(e){return y?y(e):e.nodeName};if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let E,D=``,rt,it=!1,at=0,O=function(){if(at>0)throw ye(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},k=function(e){O(),at++;try{return E.createHTML(e)}finally{at--}},A=function(e){O(),at++;try{return E.createScriptURL(e)}finally{at--}},ot=function(){return it||=(rt=Qe(d,i),!0),rt},j=n,st=j.implementation,ct=j.createNodeIterator,lt=j.createDocumentFragment,ut=j.getElementsByTagName,dt=r.importNode,M=$e();t.isSupported=typeof u==`function`&&typeof ge==`function`&&st&&st.createHTMLDocument!==void 0;let ft=Fe,pt=Ie,mt=Le,ht=Re,gt=ze,_t=Ve,vt=He,yt=We,bt=Be,N=null,xt=S({},[...we,...Te,...Ee,...Oe,...Ae]),P=null,St=S({},[...je,...Me,...Ne,...Pe]),F=Object.seal(te(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),I=null,Ct=null,L=Object.seal(te(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),wt=!0,Tt=!0,Et=!1,Dt=!0,R=!1,z=!0,B=!1,Ot=!1,kt=null,At=null,jt=!1,Mt=!1,Nt=!1,Pt=!1,Ft=!0,It=!1,Lt=`user-content-`,Rt=!0,zt=!1,Bt={},Vt=null,Ht=S({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),Ut=null,Wt=S({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Gt=null,Kt=S({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),qt=`http://www.w3.org/1998/Math/MathML`,Jt=`http://www.w3.org/2000/svg`,V=`http://www.w3.org/1999/xhtml`,Yt=V,Xt=!1,Zt=null,Qt=S({},[qt,Jt,V],de),$t=m([`mi`,`mo`,`mn`,`ms`,`mtext`]),en=S({},$t),tn=m([`annotation-xml`]),nn=S({},tn),rn=S({},[`title`,`style`,`font`,`a`,`script`]),H=null,an=[`application/xhtml+xml`,`text/html`],U=null,W=null,on=n.createElement(`form`),sn=function(e){return e instanceof RegExp||e instanceof Function},G=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(W&&W===e)return;(!e||typeof e!=`object`)&&(e={}),e=C(e),H=an.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,U=H===`application/xhtml+xml`?de:ue,N=et(e,`ALLOWED_TAGS`,xt,{transform:U}),P=et(e,`ALLOWED_ATTR`,St,{transform:U}),Zt=et(e,`ALLOWED_NAMESPACES`,Qt,{transform:de}),Gt=et(e,`ADD_URI_SAFE_ATTR`,Kt,{transform:U,base:Kt}),Ut=et(e,`ADD_DATA_URI_TAGS`,Wt,{transform:U,base:Wt}),Vt=et(e,`FORBID_CONTENTS`,Ht,{transform:U}),I=et(e,`FORBID_TAGS`,C({}),{transform:U}),Ct=et(e,`FORBID_ATTR`,C({}),{transform:U}),Bt=v(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?C(e.USE_PROFILES):e.USE_PROFILES:!1,wt=e.ALLOW_ARIA_ATTR!==!1,Tt=e.ALLOW_DATA_ATTR!==!1,Et=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Dt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,R=e.SAFE_FOR_TEMPLATES||!1,z=e.SAFE_FOR_XML!==!1,B=e.WHOLE_DOCUMENT||!1,Mt=e.RETURN_DOM||!1,Nt=e.RETURN_DOM_FRAGMENT||!1,Pt=e.RETURN_TRUSTED_TYPE||!1,jt=e.FORCE_BODY||!1,Ft=e.SANITIZE_DOM!==!1,It=e.SANITIZE_NAMED_PROPS||!1,Rt=e.KEEP_CONTENT!==!1,zt=e.IN_PLACE||!1,bt=Ce(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Be,Yt=typeof e.NAMESPACE==`string`?e.NAMESPACE:V,en=tt(e,`MATHML_TEXT_INTEGRATION_POINTS`,()=>S({},$t)),nn=tt(e,`HTML_INTEGRATION_POINTS`,()=>S({},tn));let t=tt(e,`CUSTOM_ELEMENT_HANDLING`,()=>te(null));if(F=te(null),v(t,`tagNameCheck`)&&sn(t.tagNameCheck)&&(F.tagNameCheck=t.tagNameCheck),v(t,`attributeNameCheck`)&&sn(t.attributeNameCheck)&&(F.attributeNameCheck=t.attributeNameCheck),v(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(F.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),h(F),R&&(Tt=!1),Nt&&(Mt=!0),Bt&&(N=S({},Ae),P=te(null),Bt.html===!0&&(S(N,we),S(P,je)),Bt.svg===!0&&(S(N,Te),S(P,Me),S(P,Pe)),Bt.svgFilters===!0&&(S(N,Ee),S(P,Me),S(P,Pe)),Bt.mathMl===!0&&(S(N,Oe),S(P,Ne),S(P,Pe))),L.tagCheck=null,L.attributeCheck=null,v(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?L.tagCheck=e.ADD_TAGS:le(e.ADD_TAGS)&&(N===xt&&(N=C(N)),S(N,e.ADD_TAGS,U))),v(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?L.attributeCheck=e.ADD_ATTR:le(e.ADD_ATTR)&&(P===St&&(P=C(P)),S(P,e.ADD_ATTR,U))),v(e,`ADD_FORBID_CONTENTS`)&&le(e.ADD_FORBID_CONTENTS)&&(Vt===Ht&&(Vt=C(Vt)),S(Vt,e.ADD_FORBID_CONTENTS,U)),Rt&&(N[`#text`]=!0),B&&S(N,[`html`,`head`,`body`]),N.table&&(S(N,[`tbody`]),delete I.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw ye(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw ye(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=E;E=e.TRUSTED_TYPES_POLICY;try{D=k(``)}catch(e){throw E=t,e}}else e.TRUSTED_TYPES_POLICY===null?(E=void 0,D=``):(E===void 0&&(E=ot()),E&&typeof D==`string`&&(D=k(``)));m&&m(e),W=e},cn=S({},[...Te,...Ee,...De]),ln=S({},[...Oe,...ke]),K=function(e,t,n){return t.namespaceURI===V?e===`svg`:t.namespaceURI===qt?e===`svg`&&(n===`annotation-xml`||en[n]):!!cn[e]},un=function(e,t,n){return t.namespaceURI===V?e===`math`:t.namespaceURI===Jt?e===`math`&&nn[n]:!!ln[e]},dn=function(e,t,n){return t.namespaceURI===Jt&&!nn[n]||t.namespaceURI===qt&&!en[n]?!1:!ln[e]&&(rn[e]||!cn[e])},fn=function(e){let t=ge(e);(!t||!t.tagName)&&(t={namespaceURI:Yt,tagName:`template`});let n=ue(e.tagName),r=ue(t.tagName);return Zt[e.namespaceURI]?e.namespaceURI===Jt?K(n,t,r):e.namespaceURI===qt?un(n,t,r):e.namespaceURI===V?dn(n,t,r):!!(H===`application/xhtml+xml`&&Zt[e.namespaceURI]):!1},q=function(e){se(t.removed,{element:e});try{ge(e).removeChild(e)}catch{if(p(e),!ge(e))throw ye(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},pn=function(e,t,n){try{ne(e,t)}catch{try{e.removeAttribute(n)}catch{}}},mn=function(e){gn(e);let t=g(e);if(t){let e=[];ie(t,t=>{se(e,t)}),ie(e,e=>{try{p(e)}catch{}})}let n=ve(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;typeof i==`string`&&pn(e,r,i)}},J=function(e,n,r){if(!r)try{r=n.getAttributeNode(e)}catch{r=null}se(t.removed,{attribute:r||null,from:n});try{r?ne(n,r):n.removeAttribute(e)}catch{try{n.removeAttribute(e)}catch{}}if(e===`is`){if(Mt||Nt)try{q(n)}catch{}else try{n.setAttribute(e,``)}catch{}}},hn=function(e){let t=ve(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;typeof i!=`string`||P[U(i)]||pn(e,r,i)}},gn=function(e){let t=[e];for(;t.length>0;){let e=t.pop();be(e)===T.element&&hn(e);let n=g(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},Y=function(e,t){return z?e===`patchsrc`||e===`for`&&t!==`label`&&t!==`output`:!1},_n=function(e){if(!z)return;let t=[e];for(;t.length>0;){let e=t.pop(),n=be(e);if(n===T.processingInstruction||n===T.comment&&b(Ke,e.data)){try{p(e)}catch{}continue}if(n===T.element){let t=e,n=U(xe(e));try{t.hasAttribute&&t.hasAttribute(`patchsrc`)&&t.removeAttribute(`patchsrc`),t.hasAttribute&&t.hasAttribute(`for`)&&Y(`for`,n)&&t.removeAttribute(`for`)}catch{}}let r=g(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}},X=function(e){let t=null,r=null;if(jt)e=`<remove></remove>`+e;else{let t=fe(e,/^[\r\n\t ]+/);r=t&&t[0]}H===`application/xhtml+xml`&&Yt===V&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=E?k(e):e;if(Yt===V)try{t=new l().parseFromString(i,H)}catch{}if(!t||!t.documentElement){t=st.createDocument(Yt,`template`,null);try{t.documentElement.innerHTML=Xt?D:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),Yt===V?ut.call(t,B?`html`:`body`)[0]:B?t.documentElement:a},Z=function(e){let t=x?x(e):e.ownerDocument;return ct.call(t||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},vn=function(e){return e=pe(e,ft,` `),e=pe(e,pt,` `),e=pe(e,mt,` `),e},Q=function(e){e.normalize();let t=x?x(e):e.ownerDocument,n=ct.call(t||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),r=n.nextNode();for(;r;)r.data=vn(r.data),r=n.nextNode();let i=e.querySelectorAll?.call(e,`template`);i&&ie(i,e=>{bn(e.content)&&Q(e.content)})},yn=function(e){let t=y?y(e):null;return typeof t!=`string`||U(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==ve(e)||typeof e.removeAttribute!=`function`||typeof e.removeAttributeNode!=`function`||typeof e.getAttributeNode!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==_(e)||e.childNodes!==g(e)},bn=function(e){if(!_||typeof e!=`object`||!e)return!1;try{return _(e)===T.documentFragment}catch{return!1}},xn=function(e){if(!_||typeof e!=`object`||!e)return!1;try{return typeof _(e)==`number`}catch{return!1}};function $(e,n,r){e.length!==0&&ie(e,e=>{e.call(t,n,r,W)})}let Sn=function(e,t){return!!(z&&e.hasChildNodes()&&!xn(e.firstElementChild)&&b(Ge,e.textContent)&&b(Ge,e.innerHTML)||z&&e.namespaceURI===V&&Ye[t]&&(xn(e.firstElementChild)||typeof e.textContent==`string`&&b(Xe[t],e.textContent))||e.nodeType===T.processingInstruction||z&&e.nodeType===T.comment&&b(Ke,e.data))},Cn=function(e,t){return e instanceof RegExp?b(e,t):e instanceof Function&&!!e(t,...[...arguments].slice(2))},wn=function(e,t,n){if(!I[t]&&An(t)&&Cn(F.tagNameCheck,t))return!1;if(Rt&&!Vt[t]){let t=ge(e),r=g(e);if(r&&t){let i=r.length;for(let a=i-1;a>=0;--a){let i=e===n?ee(r[a],!0):r[a];t.insertBefore(i,re(e))}}}return q(e),!0},Tn=function(e,t,n,r){return e.length===0?t:t===n||t===r?C(t):t},En=function(e,t){return e===t||ge(e)!==null?!1:(zt&&gn(e),!0)},Dn=function(e,n){if($(M.beforeSanitizeElements,e,null),En(e,n))return!0;if(yn(e))return q(e),!0;let r=U(xe(e));if(N=Tn(M.uponSanitizeElement,N,xt,kt),$(M.uponSanitizeElement,e,{tagName:r,allowedTags:N}),En(e,n))return!0;if(Sn(e,r))return q(e),!0;if(I[r]||!(L.tagCheck instanceof Function&&L.tagCheck(r))&&!N[r]){let t=wn(e,r,n);return t===!1&&$(M.afterSanitizeElements,e,null),t}if(be(e)===T.element&&!fn(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&b(qe,e.innerHTML))return q(e),!0;if(R&&e.nodeType===T.text){let n=vn(e.textContent);e.textContent!==n&&(se(t.removed,{element:e.cloneNode()}),e.textContent=n)}return $(M.afterSanitizeElements,e,null),!1},On=function(e,t,r){if(Ct[t]||Y(t,e)||Ft&&(t===`id`||t===`name`)&&(r in n||r in on))return!1;let i=P[t]||L.attributeCheck instanceof Function&&L.attributeCheck(t,e);return Tt&&b(ht,t)||wt&&b(gt,t)?!0:i?Gt[t]||b(bt,pe(r,vt,``))||(t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&me(r,`data:`)===0&&Ut[e]||Et&&!b(_t,pe(r,vt,``))?!0:!r:An(e)&&Cn(F.tagNameCheck,e)&&Cn(F.attributeNameCheck,t,e)||t===`is`&&F.allowCustomizedBuiltInElements&&Cn(F.tagNameCheck,r)},kn=S({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),An=function(e){return!kn[ue(e)]&&b(yt,e)},jn=function(e,t,n,r){if(E&&typeof d==`object`&&typeof d.getAttributeType==`function`&&!n)switch(d.getAttributeType(e,t)){case`TrustedHTML`:return k(r);case`TrustedScriptURL`:return A(r)}return r},Mn=function(e,t,n,r){try{return n?e.setAttributeNS(n,t,r):e.setAttribute(t,r),!yn(e)||(q(e),!1)}catch{return J(t,e),!1}},Nn=function(e){$(M.beforeSanitizeAttributes,e,null);let n=e.attributes;if(!n||yn(e))return;P=Tn(M.uponSanitizeAttribute,P,St,At);let r={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:P,forceKeepAttr:void 0},i=n.length,a=U(e.nodeName);for(;i--;){let o=n[i],s=o.name,c=o.namespaceURI,l=o.value,u=U(s),d=l,f=s===`value`?d:he(d),ee=!1;if(r.attrName=u,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,$(M.uponSanitizeAttribute,e,r),f=r.attrValue,It&&(u===`id`||u===`name`)&&me(f,Lt)!==0&&(J(s,e,o),f=Lt+f,ee=!0),z&&b(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)){J(s,e,o);continue}if(u===`attributename`&&fe(f,`href`)){J(s,e,o);continue}if(!r.forceKeepAttr){if(!r.keepAttr){J(s,e,o);continue}if(!Dt&&b(Je,f)){J(s,e,o);continue}if(R&&(f=vn(f)),!On(a,u,f)){J(s,e,o);continue}f=jn(a,u,c,f),f!==d&&Mn(e,s,c,f)&&ee&&oe(t.removed)}}$(M.afterSanitizeAttributes,e,null)},Pn=function(e){let t=null,n=Z(e);for($(M.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if($(M.uponSanitizeShadowNode,t,null),Dn(t,e),Nn(t),bn(t.content)&&Pn(t.content),be(t)===T.element){let e=_e(t);bn(e)&&(Fn(e),Pn(e))}$(M.afterSanitizeShadowDOM,e,null)},Fn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){Pn(e.shadow);continue}let n=e.node,r=be(n)===T.element,i=g(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=y?y(n):null;if(typeof e==`string`&&U(e)===`template`){let e=n.content;bn(e)&&t.push({node:e,shadow:null})}}if(r){let e=_e(n);bn(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(Xt=!e,Xt&&(e=`<!-->`),typeof e!=`string`&&!xn(e)&&(e=Se(e),typeof e!=`string`))throw ye(`dirty is not a string, aborting`);if(!t.isSupported)return e;Ot?(N=kt,P=At):G(n),(M.uponSanitizeElement.length>0||M.uponSanitizeAttribute.length>0)&&(N=C(N)),M.uponSanitizeAttribute.length>0&&(P=C(P)),t.removed=[];let c=zt&&typeof e!=`string`&&xn(e);if(c){_n(e);let t=xe(e);if(typeof t==`string`){let n=U(t);if(!N[n]||I[n])throw mn(e),ye(`root node is forbidden and cannot be sanitized in-place`)}if(yn(e))throw mn(e),ye(`root node is clobbered and cannot be sanitized in-place`);try{Fn(e)}catch(t){throw mn(e),t}}else if(xn(e))i=X(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===T.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),Fn(i);else{if(!Mt&&!R&&!B&&e.indexOf(`<`)===-1)return E&&Pt?k(e):e;if(i=X(e),!i)return Mt?null:Pt?D:``}i&&jt&&q(i.firstChild);let l=c?e:i;try{let e=Z(l);for(;o=e.nextNode();)Dn(o,l),Nn(o),bn(o.content)&&Pn(o.content)}catch(n){throw c&&(mn(e),ie(t.removed,e=>{e.element&&gn(e.element)})),n}if(c)return ie(t.removed,e=>{e.element&&gn(e.element)}),R&&Q(e),e;if(Mt){if(R&&Q(i),Nt)for(s=lt.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(P.shadowroot||P.shadowrootmode)&&(s=dt.call(r,s,!0)),s}let u=B?i.outerHTML:i.innerHTML;return B&&N[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&b(Ue,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
3
3
|
`+u),R&&(u=vn(u)),E&&Pt?k(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};G(e),Ot=!0,kt=N,At=P},t.clearConfig=function(){W=null,Ot=!1,kt=null,At=null,E=rt,D=``},t.isValidAttribute=function(e,t,n){W||G({});let r=U(e),i=U(t);return On(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&v(M,e)&&se(M[e],t)},t.removeHook=function(e,t){if(v(M,e)){if(t!==void 0){let n=ae(M[e],t);return n===-1?void 0:ce(M[e],n,1)[0]}return oe(M[e])}},t.removeHooks=function(e){v(M,e)&&(M[e]=[])},t.removeAllHooks=function(){M=$e()},t}var D=nt();function rt(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var it=rt();function at(e){it=e}var O={exec:()=>null};function k(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function A(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(j.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var ot=((e=``)=>{try{return!!RegExp(`(?<=1)(?<!1)`+e)}catch{return!1}})(),j={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:k(e=>RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:k(e=>RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:k(e=>RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:k(e=>RegExp(`^ {0,${e}}#`)),htmlBeginRegex:k(e=>RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,`i`)),blockquoteBeginRegex:k(e=>RegExp(`^ {0,${e}}>`))},st=/^(?:[ \t]*(?:\n|$))+/,ct=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,lt=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ut=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,dt=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,M=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,ft=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,pt=A(ft).replace(/bull/g,M).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),mt=A(ft).replace(/bull/g,M).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ht=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,gt=/^[^\n]+/,_t=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,vt=A(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,_t).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),yt=A(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,M).getRegex(),bt=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,N=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,xt=A(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,N).replace(`tag`,bt).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),P=e=>A(ht).replace(`hr`,ut).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,e).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,bt).getRegex(),St=P(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),F=P(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),I={blockquote:A(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,F).getRegex(),code:ct,def:vt,fences:lt,heading:dt,hr:ut,html:xt,lheading:pt,list:yt,newline:st,paragraph:St,table:O,text:gt},Ct=A(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,ut).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,bt).getRegex(),L={...I,lheading:mt,table:Ct,paragraph:A(ht).replace(`hr`,ut).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,Ct).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,bt).getRegex()},wt={...I,html:A(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,N).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:O,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:A(ht).replace(`hr`,ut).replace(`heading`,` *#{1,6} *[^
|
|
4
4
|
]`).replace(`lheading`,pt).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},Tt=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Et=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Dt=/^( {2,}|\\)\n(?!\s*$)/,R=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,z=/[\p{P}\p{S}]/u,B=/[\s\p{P}\p{S}]/u,Ot=/[^\s\p{P}\p{S}]/u,kt=A(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,B).getRegex(),At=/[\p{Pi}\p{Ps}"']/u,jt=/(?!~)[\p{P}\p{S}]/u,Mt=/(?!~)[\s\p{P}\p{S}]/u,Nt=/(?:[^\s\p{P}\p{S}]|~)/u,Pt=A(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,ot?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),Ft=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,It=A(Ft,`u`).replace(/punct/g,z).getRegex(),Lt=A(Ft,`u`).replace(/punct/g,jt).getRegex(),Rt=A(/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,`u`).replace(/openQuote/g,At).replace(/punct/g,z).getRegex(),zt=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Bt=A(zt,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Vt=A(zt,`gu`).replace(/notPunctSpace/g,Nt).replace(/punctSpace/g,Mt).replace(/punct/g,jt).getRegex(),Ht=A(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Ut=A(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Wt=A(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Gt=A(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,z).getRegex(),Kt=A(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),qt=A(/\\(punct)/,`gu`).replace(/punct/g,z).getRegex(),Jt=A(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),V=A(N).replace(`(?:-->|$)`,`-->`).getRegex(),Yt=A(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,V).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Xt=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Zt=A(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,Xt).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Qt=A(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Xt).replace(`ref`,_t).getRegex(),$t=A(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,_t).getRegex(),en=A(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,Qt).replace(`nolink`,$t).getRegex(),tn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,nn={_backpedal:O,anyPunctuation:qt,autolink:Jt,blockSkip:Pt,br:Dt,code:Et,del:O,delLDelim:O,delRDelim:O,emStrongLDelim:It,emStrongRDelimAst:Bt,emStrongRDelimUnd:Ut,escape:Tt,link:Zt,nolink:$t,punctuation:kt,reflink:Qt,reflinkSearch:en,tag:Yt,text:R,url:O},rn={...nn,emStrongLDelim:Rt,emStrongRDelimAst:Ht,emStrongRDelimUnd:Wt,link:A(/^!?\[(label)\]\((.*?)\)/).replace(`label`,Xt).getRegex(),reflink:A(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,Xt).getRegex()},H={...nn,emStrongRDelimAst:Vt,emStrongLDelim:Lt,delLDelim:Gt,delRDelim:Kt,url:A(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,tn).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:A(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,tn).getRegex()},an={...H,br:A(Dt).replace(`{2,}`,`*`).getRegex(),text:A(H.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},U={normal:I,gfm:L,pedantic:wt},W={normal:nn,gfm:H,breaks:an,pedantic:rn},on={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},sn=e=>on[e];function G(e,t){if(t){if(j.escapeTest.test(e))return e.replace(j.escapeReplace,sn)}else if(j.escapeTestNoEncode.test(e))return e.replace(j.escapeReplaceNoEncode,sn);return e}function cn(e){try{e=encodeURI(e).replace(j.percentDecode,`%`)}catch{return null}return e}function ln(e,t){let n=e.replace(j.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(j.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t){if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``)}for(;r<n.length;r++)n[r]=n[r].trim().replace(j.slashPipe,`|`);return n}function K(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function un(e){let t=e.split(`
|
|
@@ -69,4 +69,4 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
69
69
|
`)),r=[];continue}r.push(a)}return{done:t,tail:r.join(`
|
|
70
70
|
`),tailInFence:i!==null}}var $=/(`+)([^`]+?)\1|\*\*(?=\S)([^*\n]+?)(?<=\S)\*\*|__(?=\S)([^_\n]+?)(?<=\S)__|(?<![\w*])\*(?=\S)([^*\n]+?)(?<=\S)\*(?![\w*])|(?<![\w_])_(?=\S)([^_\n]+?)(?<=\S)_(?![\w_])/g;function Sn(e,t){let n=e.ownerDocument,r=0;$.lastIndex=0;for(let i=$.exec(t);i!==null;i=$.exec(t)){i.index>r&&e.append(n.createTextNode(t.slice(r,i.index)));let a,o;i[2]===void 0?i[3]===void 0?i[4]===void 0?i[5]===void 0?(a=`em`,o=i[6]??``):(a=`em`,o=i[5]):(a=`strong`,o=i[4]):(a=`strong`,o=i[3]):(a=`code`,o=i[2]);let s=n.createElement(a);s.textContent=o,e.append(s),r=i.index+i[0].length}r<t.length&&e.append(n.createTextNode(t.slice(r)))}var Cn=n(),wn=!1;function Tn(){wn||(wn=!0,D.addHook(`afterSanitizeAttributes`,e=>{e.tagName===`A`&&(e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`))}))}var En={USE_PROFILES:{html:!0},ADD_ATTR:[`target`],FORBID_TAGS:[`style`,`form`,`input`,`button`,`iframe`,`object`,`embed`]};function Dn(e){Tn();let t=Z.parse(e,{async:!1,gfm:!0,breaks:!1});return D.sanitize(t,En)}var On=`Copy`,kn=`Copied`;function An(e){for(let t of e.querySelectorAll(`pre`)){if(t.querySelector(`[data-code-head]`)||t.hasAttribute(`data-stream-tail`))continue;let e=document.createElement(`div`);e.className=r.codeHead??``,e.setAttribute(`data-code-head`,``);let n=yn(t.querySelector(`code`)),i=document.createElement(`span`);i.className=r.codeLang??``,i.textContent=n,e.append(i);let a=document.createElement(`button`);a.type=`button`,a.className=r.copy??``,a.setAttribute(`data-copy`,``),a.setAttribute(`aria-label`,`Copy code`),a.textContent=On,e.append(a),t.prepend(e)}}function jn(e){let t=e.target?.closest(`[data-copy]`);if(!t)return;e.preventDefault();let n=t.closest(`pre`),r=n?.querySelector(`code`),i=n?.querySelector(`[data-code-head]`);In(r?r.textContent??``:Array.from(n?.childNodes??[]).filter(e=>e!==i).map(e=>e.textContent??``).join(``)).then(e=>{t.textContent=e?kn:`Copy failed`,setTimeout(()=>{t.textContent=On},1500)})}var Mn=400;function Nn({text:e}){let t=(0,Q.useRef)(null),n=(0,Q.useRef)(new Map),i=(0,Q.useRef)(null),a=(0,Q.useMemo)(()=>xn(e),[e]),o=a.done.length===0?``:`${a.done.length}:${a.done[a.done.length-1].length}`,s=(0,Q.useMemo)(()=>{let e=n.current;return a.done.map(t=>{let n=e.get(t);return n===void 0&&(n=Dn(t),e.size>=Mn&&e.clear(),e.set(t,n)),n}).join(``)},[o]);return(0,Q.useEffect)(()=>{let e=t.current;e&&(e.innerHTML=s,An(e),i.current=null)},[s]),(0,Q.useEffect)(()=>{let e=t.current;if(!e)return;let n=a.tailInFence,r=i.current;if((!r||r.parentNode!==e||r.tagName===`PRE`!==n)&&(r?.remove(),r=document.createElement(n?`pre`:`p`),r.setAttribute(`data-stream-tail`,``),e.append(r),i.current=r),r.replaceChildren(),n){let e=document.createElement(`code`),t=a.tail.indexOf(`
|
|
71
71
|
`);e.textContent=t===-1?``:a.tail.slice(t+1),r.append(e)}else r.style.whiteSpace=`pre-wrap`,Sn(r,a.tail)},[a,s]),(0,Cn.jsx)(`div`,{ref:t,className:`${r.markdown} ${r.streaming}`,onClick:jn,"data-markdown-streaming":``})}function Pn({text:e}){let t=(0,Q.useMemo)(()=>Dn(e),[e]),n=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=n.current;e&&An(e)},[t]),(0,Cn.jsx)(`div`,{ref:n,className:r.markdown,onClick:jn,dangerouslySetInnerHTML:{__html:t}})}function Fn({text:e,streaming:t}){return t?(0,Cn.jsx)(Nn,{text:e},`streaming`):(0,Cn.jsx)(Pn,{text:e},`final`)}async function In(e){try{if(navigator.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);return t.remove(),n}catch{return!1}}export{Fn as RenderedMarkdown,Dn as renderMarkdown};
|
|
72
|
-
//# sourceMappingURL=MessageMarkdownRenderer-
|
|
72
|
+
//# sourceMappingURL=MessageMarkdownRenderer-BAv4oEUf.js.map
|