@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/onboarding/onboarding-model.ts","../../../../../../src/web-ui/routes/verse/onboarding/OnboardingFlow.tsx"],"sourcesContent":["/**\n * routes/verse/onboarding/onboarding-model.ts — the first-run tour's facts,\n * derived from the same reads the Usage section uses, with the same honesty\n * rules (docs/VERSE-TELEMETRY-V2.md).\n *\n * Pure: no React, no I/O. Everything the tour asserts about the machine is\n * computed here so it can be tested without a DOM, and so the one rule that\n * matters is enforced in one place:\n *\n * AN ABSENT READ IS \"UNKNOWN\", NEVER \"FINE\" AND NEVER \"BROKEN\".\n *\n * A first-run screen is exactly where a confident lie does the most damage —\n * it is the operator's first and only calibration of how much this app's\n * claims can be trusted. So a route that 404s, a payload that does not\n * narrow, and a probe that could not reach a runtime each produce their own\n * sentence, and none of them produces a green check.\n *\n * The tour NEVER renders a command it invented: the seats step shows only\n * A2's own fix argv (through C6's capacity rows).\n */\nimport type { LocalModelsSnapshot } from '../usage/usage-contract.js';\n\n// ---------------------------------------------------------------------------\n// Steps\n// ---------------------------------------------------------------------------\n\nexport type OnboardingStepId = 'welcome' | 'accounts' | 'local' | 'autonomy' | 'stops' | 'finish';\n\nexport interface OnboardingStepMeta {\n id: OnboardingStepId;\n /** Shown as the card's heading. */\n title: string;\n /** One line under the heading. */\n subtitle: string;\n}\n\nexport const ONBOARDING_STEPS: readonly OnboardingStepMeta[] = [\n {\n id: 'welcome',\n title: 'Welcome to Verse',\n subtitle: 'Five sections, one rail.',\n },\n {\n id: 'accounts',\n title: 'Your seats',\n subtitle: 'Which provider accounts this machine can actually dispatch to right now.',\n },\n {\n id: 'local',\n title: 'Local runtime',\n subtitle: 'Whether there is a model on this machine, and what that changes.',\n },\n {\n id: 'autonomy',\n title: 'Turn on autonomy',\n subtitle: 'It stays off until you set it up. Turning it down is always one click.',\n },\n {\n id: 'stops',\n title: 'Three ways to stop',\n subtitle: 'They do not have the same blast radius. This is the one screen that says so.',\n },\n {\n id: 'finish',\n title: 'Make it yours',\n subtitle: 'Theme, accent, density and font live in Settings. Then start a chat.',\n },\n];\n\nexport function clampStep(step: number): number {\n if (!Number.isFinite(step)) return 0;\n return Math.min(ONBOARDING_STEPS.length - 1, Math.max(0, Math.trunc(step)));\n}\n\n// ---------------------------------------------------------------------------\n// Tone\n// ---------------------------------------------------------------------------\n\n/**\n * Step 2 (seats) is C6's shared LiveCapacityStrip since 3.10 — the tour no\n * longer narrows the accounts route itself, so the seats can never read\n * differently here than in Apps & Accounts. The tone below serves the local\n * runtime and the stops.\n */\nexport type FindingTone = 'ok' | 'attention' | 'unknown';\n\n// ---------------------------------------------------------------------------\n// Local runtime\n// ---------------------------------------------------------------------------\n\nexport interface LocalFinding {\n tone: FindingTone;\n state: string;\n summary: string;\n /** What having (or not having) a local runtime means for the operator. */\n meaning: string;\n /** Present only when there is something to do about it. */\n fix: string | null;\n modelCount: number;\n toolCapableCount: number;\n /** True when this reading was retained from an earlier probe. */\n stale: boolean;\n}\n\nexport interface LocalInput {\n snapshot: LocalModelsSnapshot | null;\n loading: boolean;\n unavailableReason: string | null;\n}\n\nconst LOCAL_MEANING_AVAILABLE =\n 'Local seats cost nothing and consume no provider quota, so the autonomous loop can keep working after a cloud window is used up.';\nconst LOCAL_MEANING_ABSENT =\n 'Without one, every turn and every autonomous tick spends a provider account, and a used-up window stops the work.';\n\nexport function buildLocalFinding(input: LocalInput): LocalFinding {\n if (input.loading) {\n return {\n tone: 'unknown',\n state: 'checking',\n summary: 'Probing the local runtimes on this machine…',\n meaning: LOCAL_MEANING_AVAILABLE,\n fix: null,\n modelCount: 0,\n toolCapableCount: 0,\n stale: false,\n };\n }\n\n if (!input.snapshot) {\n return {\n tone: 'unknown',\n state: 'not reported',\n summary: 'This server does not report local runtimes, so Verse cannot say whether one is available here.',\n meaning: LOCAL_MEANING_ABSENT,\n fix: input.unavailableReason,\n modelCount: 0,\n toolCapableCount: 0,\n stale: false,\n };\n }\n\n const models = input.snapshot.models;\n const toolCapable = models.filter((m) => m.supportsTools === true).length;\n const stale = input.snapshot.runtimes.some((r) => r.stale);\n\n if (!input.snapshot.reachable) {\n return {\n tone: 'attention',\n state: 'unreachable',\n // \"Not reachable\" and \"not installed\" are different facts and the probe\n // cannot tell them apart — so this does not claim either one.\n summary:\n 'No local runtime answered. Verse cannot tell whether one is not running or not installed — the probe only knows it got no answer.',\n meaning: LOCAL_MEANING_ABSENT,\n fix: 'Start Ollama (or LM Studio) and press Refresh in Usage. If neither is installed, everything still works — it all runs on the cloud seats.',\n modelCount: 0,\n toolCapableCount: 0,\n stale,\n };\n }\n\n if (models.length === 0) {\n return {\n tone: 'attention',\n state: 'no models',\n summary: 'A local runtime answered, but it has no models installed.',\n meaning: LOCAL_MEANING_ABSENT,\n fix: 'Pull a model into the runtime, then press Refresh in Usage.',\n modelCount: 0,\n toolCapableCount: 0,\n stale,\n };\n }\n\n return {\n tone: 'ok',\n state: stale ? 'available (retained reading)' : 'available',\n summary:\n `${models.length} local ${models.length === 1 ? 'model' : 'models'} available` +\n (toolCapable > 0 ? `, ${toolCapable} of them tool-capable.` : ', none of them tool-capable.') +\n (stale ? ' Last known reading.' : ''),\n meaning: toolCapable > 0\n ? LOCAL_MEANING_AVAILABLE\n : `${LOCAL_MEANING_AVAILABLE} A model that cannot call tools can answer, but cannot run an agentic turn.`,\n fix: null,\n modelCount: models.length,\n toolCapableCount: toolCapable,\n stale,\n };\n}\n\n// ---------------------------------------------------------------------------\n// The three stops\n// ---------------------------------------------------------------------------\n\nexport interface StopControl {\n name: string;\n /** What it halts. */\n scope: string;\n /** What it does NOT halt — the half people get wrong. */\n limit: string;\n reversible: string;\n tone: FindingTone;\n}\n\n/**\n * Verbatim against docs/VERSE-CONTRACT-V2.md's two footguns and the V2.1\n * amendment. The kill switch is never called a pause, and \"Stop loop\" is\n * stated as engaging the same global sentinel as the emergency control,\n * because it does (`stopDaemon()` is `setKill(true)`).\n */\nexport const STOP_CONTROLS: readonly StopControl[] = [\n {\n name: 'Pause',\n scope: 'Halts autonomous dispatch only. A running loop parks instead of exiting.',\n limit: 'Your own chats and the agent’s write tools keep working.',\n reversible: 'Reversible in one click, with no restart and no confirmation.',\n tone: 'ok',\n },\n {\n name: 'Stop loop',\n scope: 'Stops the daemon — and engages the GLOBAL kill switch while doing it.',\n limit: 'That means it also refuses the agent’s own write tools, exactly like the emergency control.',\n reversible: 'Reversible, but confirm-guarded. For an ordinary halt, use Pause.',\n tone: 'attention',\n },\n {\n name: 'Emergency stop',\n scope: 'Engages the global kill switch (~/.ashlr/KILL) directly.',\n limit: 'Every mutating path refuses: the loop, dispatch, and the agent’s own write tools.',\n reversible: 'Reversible, confirm-guarded, and deliberately separated from the other two.',\n tone: 'attention',\n },\n];\n","/**\n * routes/verse/onboarding/OnboardingFlow.tsx — the first-run tour.\n *\n * A first-time operator opens Verse to five unlabelled rail icons and no\n * guidance. This is six short steps that answer the questions that actually\n * block someone on day one: which of my accounts can this thing use, is\n * there anything local, how do I turn autonomy on, what do the three stop\n * buttons really do, where do I change how it looks, and how do I start.\n *\n * THREE RULES IT IS BUILT AROUND:\n *\n * 1. It never blocks the app. This is NOT a modal — no backdrop, no focus\n * trap, no `aria-modal`. It first appears as a one-line chip\n * (\"Getting started 1/6 →\") in the corner; only a click opens the card,\n * and every rail button, shortcut and section behind either stays\n * clickable. The card's minimise button and Escape fold it back to the\n * chip without answering it; Skip, or the chip's ×, silences it for good.\n *\n * 2. It never asserts more than it read. Step 2 is C6's shared capacity\n * strip (no reading is \"no reading\", never zero); step 3 reads the same\n * local-models route Usage reads, through the same narrower — an\n * unanswered probe is \"no answer\", never a green check (logic in\n * ./onboarding-model.ts, tested without a DOM); step 4 reads the same\n * authority entry Command's switch reads.\n *\n * 3. It costs no extra requests on the common path. The chip reads nothing.\n * Each data step mounts its own query only when the operator reaches it,\n * and those queries are the Usage / Command sections' own cache entries —\n * so a first-run user who walks the tour and then opens either finds the\n * reads already in cache and within the freshness window\n * (data/hooks.ts DEFAULT_QUERY_FRESH_MS).\n */\nimport { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport { Button } from '../../../components/primitives/index.js';\nimport {\n IconAlert,\n IconCheckCircle,\n IconChat,\n IconChevronDown,\n IconChevronRight,\n IconCopy,\n IconCpu,\n IconInfo,\n IconLock,\n IconSliders,\n IconX,\n} from '../../../components/primitives/icons.js';\nimport { useQuery } from '../../../data/hooks.js';\nimport { SECTION_ICON } from '../verse-icons.js';\nimport { RAIL_SECTIONS, requestVerseCommand, setVerseSection } from '../verse-ui-store.js';\nimport { LiveCapacityStrip } from '../usage/CapacityStrip.js';\nimport { tidyProse } from '../autonomy/format.js';\nimport { verseLocalModelsQuery } from '../usage/usage-queries.js';\nimport { projectLocalModels } from '../usage/usage-contract.js';\nimport { authorityQuery } from '../command/surface-data.js';\nimport { grantChip, modeWord, type ChipTone } from '../command/authority-model.js';\nimport { useSetupChecklist } from '../autonomy/AutonomyOffState.js';\nimport { nextCommand } from '../autonomy/setup-checklist-model.js';\nimport { AUTONOMY_SETUP_COMMAND } from '../shell/command-catalog.js';\nimport { copyAutonomySetupCommand } from '../shell/copy-setup.js';\nimport { executeCatalogCommand } from '../shell/run-command.js';\nimport {\n ONBOARDING_STEPS,\n STOP_CONTROLS,\n buildLocalFinding,\n clampStep,\n type FindingTone,\n} from './onboarding-model.js';\nimport {\n collapseOnboarding,\n completeOnboarding,\n dismissOnboarding,\n expandOnboarding,\n setOnboardingStep,\n} from './onboarding-store.js';\nimport { useOnboarding } from './useOnboarding.js';\nimport styles from './onboarding.module.css';\n\n// The setup checklist is its own chunk (shared with the \"Autonomy is off\" state).\nconst SetupChecklist = lazy(() => import('../autonomy/SetupChecklist.js'));\n\n/**\n * Tone is paired with a glyph everywhere it appears, never carried by colour\n * alone (DESIGN-V2 §6).\n */\nfunction ToneMark({ tone, label }: { tone: FindingTone; label: string }) {\n const Glyph = tone === 'ok' ? IconCheckCircle : tone === 'attention' ? IconAlert : IconInfo;\n return (\n <span className={styles.tone} data-tone={tone}>\n <Glyph size={13} aria-hidden=\"true\" focusable=\"false\" />\n <span className={styles.toneLabel}>{label}</span>\n </span>\n );\n}\n\nfunction StepBody({ children }: { children: ReactNode }) {\n return <div className={styles.body}>{children}</div>;\n}\n\n// ---------------------------------------------------------------------------\n// Step 1 — what the rail is\n// ---------------------------------------------------------------------------\n\nfunction WelcomeStep() {\n return (\n <StepBody>\n <p className={styles.lead}>Verse runs your chats and this machine’s agent fleet from one local server.</p>\n {/*\n The five rail surfaces, in ⌘1–⌘5 order, with the same one-line blurbs\n the palette uses (VERSE_SECTIONS) — one description per surface, not\n a second copy that drifts. Settings, Apps and Usage live in the gear.\n */}\n <ul className={styles.sections}>\n {RAIL_SECTIONS.map((entry, index) => {\n const Icon = SECTION_ICON[entry.id];\n return (\n <li key={entry.id} className={styles.sectionRow}>\n <span className={styles.sectionIcon} aria-hidden=\"true\">\n <Icon />\n </span>\n <span className={styles.sectionText}>\n <span className={styles.sectionName}>\n {entry.label} <kbd className={styles.kbd}>⌘{index + 1}</kbd>\n </span>\n <span className={styles.sectionBlurb}>{entry.blurb}</span>\n </span>\n </li>\n );\n })}\n </ul>\n <p className={styles.sectionBlurb}>\n <kbd className={styles.kbd}>⌘K</kbd> runs anything by name · <kbd className={styles.kbd}>⌘J</kbd> is everything\n waiting on you · Settings, Apps & Accounts and Usage are under the gear.\n </p>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 2 — seats\n// ---------------------------------------------------------------------------\n\n/**\n * Step 2 mounts C6's shared LiveCapacityStrip — the SAME projection Apps &\n * Accounts, Usage, the new-chat dialog and the rail's capacity ring read — so\n * the tour can never describe a seat differently from the rest of the app\n * (3.9 had its own accounts narrower here, which drifted from Usage). A seat\n * that is signed out or out of usage shows the exact command that fixes it,\n * straight from A2's health report; nothing is run from the tour.\n */\nfunction AccountsStep() {\n return (\n <StepBody>\n <LiveCapacityStrip\n density=\"compact\"\n headline\n local=\"collapse\"\n // The step's own heading (\"Your seats\") names the strip: a second,\n // hidden heading with the same words is noise to a screen reader.\n labelledBy=\"verse-onboarding-title\"\n emptyText=\"No seats reported yet. Connect an account in Apps & Accounts, or start Ollama for local models.\"\n renderActions={(row) =>\n row.connection?.fixCommand ? (\n <p className={styles.findingFix}>\n <span className={styles.fixLabel}>Fix</span>\n <code className={styles.code}>{row.connection.fixCommand.join(' ')}</code>\n </p>\n ) : null\n }\n />\n <p className={styles.aside}>\n Every window, reset and reserve lives in Apps & Accounts, under the gear.\n </p>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 3 — local runtime\n// ---------------------------------------------------------------------------\n\nfunction LocalStep() {\n const read = useQuery(verseLocalModelsQuery);\n const finding = useMemo(() => {\n // The server's sentence, with any ISO instant in it read as local time.\n const reason = read.data?.reason ?? read.error?.message ?? null;\n return buildLocalFinding({\n snapshot: read.data?.available ? projectLocalModels(read.data.raw) : null,\n loading: read.data === undefined && read.status !== 'error',\n unavailableReason: reason === null ? null : tidyProse(reason),\n });\n }, [read.data, read.status, read.error]);\n\n return (\n <StepBody>\n <div className={styles.findingHead}>\n <span className={styles.localIcon} aria-hidden=\"true\">\n <IconCpu size={15} />\n </span>\n <ToneMark tone={finding.tone} label={finding.state} />\n </div>\n <p className={styles.lead}>{finding.summary}</p>\n <p className={styles.findingDetail}>{finding.meaning}</p>\n {finding.fix ? (\n <p className={styles.findingFix}>\n <span className={styles.fixLabel}>Fix</span>\n <span className={styles.fixText}>{finding.fix}</span>\n </p>\n ) : null}\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 4 — autonomy\n// ---------------------------------------------------------------------------\n\n/** The Command bar's chip tones, in the tour's three (glyph + word, never colour alone). */\nfunction findingTone(tone: ChipTone | undefined): FindingTone {\n if (tone === 'success') return 'ok';\n if (tone === 'warning' || tone === 'danger') return 'attention';\n return 'unknown';\n}\n\n/**\n * Reads the SAME authority entry Command's bar reads (surface-data\n * authorityQuery), so \"Right now\" can never disagree with the switch — and\n * never claims a state it did not read: no answer is \"not reported\", with\n * the server's own reason.\n *\n * The next step is the one Command's \"Autonomy is off\" state names, decided\n * the same way (autonomy-off-model): with no grant, the live setup checklist\n * (every step, unfolded) and the command for its next open step while one\n * before the grant is open (or we cannot tell); once only the grant is left,\n * \"Approve grant…\" — the same ⌘K command, which opens the Touch ID sheet on\n * Command (the only place a grant is drafted). With a grant, the chip decides\n * (re-approve / renew), else Command itself.\n */\nfunction AutonomyStep() {\n const read = useQuery(authorityQuery);\n const [copied, setCopied] = useState<boolean | null>(null);\n const status = read.data?.value ?? null;\n const loading = read.data === undefined && read.status !== 'error';\n const mode = modeWord(status);\n const chip = grantChip(status, Date.now());\n const setup = useSetupChecklist(status?.grant.state === 'none');\n const needsSetup = !status || (status.grant.state === 'none' && setup.readiness !== 'ready');\n const command = nextCommand(setup.report) ?? AUTONOMY_SETUP_COMMAND;\n const fix = (\n <div className={styles.findingFix}>\n <span className={styles.fixLabel}>{command === AUTONOMY_SETUP_COMMAND ? 'Set up' : 'Next'}</span>\n <code className={styles.code}>{command}</code>\n <Button\n variant=\"subtle\"\n size=\"sm\"\n icon={<IconCopy size={13} />}\n onClick={() => {\n void copyAutonomySetupCommand(command).then(setCopied);\n }}\n >\n {copied ? 'Copied' : 'Copy'}\n </Button>\n </div>\n );\n const detail = loading\n ? 'Reading the autonomy state…'\n : status\n ? chip.detail\n : (read.data?.reason ?? read.error?.message ?? 'The autonomy state could not be read.');\n\n return (\n <StepBody>\n <div className={styles.findingHead}>\n <span className={styles.stopName}>Right now</span>\n <ToneMark tone={loading ? 'unknown' : findingTone(mode.tone)} label={loading ? 'checking' : status ? mode.text : 'not reported'} />\n </div>\n <p className={styles.findingDetail}>{detail}</p>\n <p className={styles.lead}>\n The switch on Command <kbd className={styles.kbd}>⌘1</kbd> — Off, Propose, Autonomous — decides what the fleet\n may do on its own. Raising it past your grant asks for Touch ID; lowering it never does.\n </p>\n {needsSetup ? (\n <>\n {setup.report ? (\n <Suspense fallback={fix}>\n <SetupChecklist report={setup.report} action={fix} open />\n </Suspense>\n ) : fix}\n <p className={styles.aside} role={copied === false ? 'alert' : undefined}>\n {copied === false\n ? 'The clipboard is not available here — select the command and copy it by hand.'\n : 'Run it in a terminal. It stops for what only you can do — sudo, Touch ID, GitHub — and --dry-run prints every step first.'}\n </p>\n </>\n ) : chip.action ? (\n <Button variant=\"subtle\" icon={<IconLock size={14} />} onClick={() => executeCatalogCommand('autonomy.grant', { via: 'button' })}>\n {chip.action === 're-approve' ? 'Re-approve grant…' : 'Approve grant…'}\n </Button>\n ) : (\n <Button variant=\"subtle\" icon={<IconLock size={14} />} onClick={() => setVerseSection('command')}>\n Open Command\n </Button>\n )}\n <p className={styles.aside}>\n <kbd className={styles.kbd}>⌘K</kbd> “Autonomy: …” and “Approve grant…” work from any surface.\n </p>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 5 — the three stops\n// ---------------------------------------------------------------------------\n\nfunction StopsStep() {\n return (\n <StepBody>\n <p className={styles.lead}>\n Fleet <kbd className={styles.kbd}>⌘2</kbd> has three stop controls. They are not interchangeable, and the\n difference is the most important thing on this screen.\n </p>\n <ul className={styles.findings}>\n {STOP_CONTROLS.map((control) => (\n <li key={control.name} className={styles.finding}>\n <div className={styles.findingHead}>\n <span className={styles.stopName}>{control.name}</span>\n <ToneMark tone={control.tone} label={control.tone === 'ok' ? 'narrow' : 'global'} />\n </div>\n <p className={styles.findingDetail}>{control.scope}</p>\n <p className={styles.findingDetail}>{control.limit}</p>\n <p className={styles.findingNote}>{control.reversible}</p>\n </li>\n ))}\n </ul>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 6 — appearance, then go\n// ---------------------------------------------------------------------------\n\nfunction FinishStep() {\n return (\n <StepBody>\n <p className={styles.lead}>\n Settings <kbd className={styles.kbd}>⌘,</kbd> carries theme, accent hue, density, display font, corner radius\n and reduced motion. Every change applies as you make it — there is no save button.\n </p>\n <Button\n variant=\"subtle\"\n icon={<IconSliders size={14} />}\n onClick={() => setVerseSection('settings')}\n >\n Open Settings\n </Button>\n <p className={styles.aside}>\n You can replay this tour any time from Settings → Onboarding.\n </p>\n </StepBody>\n );\n}\n\n/** In ONBOARDING_STEPS order (the model test pins the ids; the flow test walks them). */\nconst STEP_COMPONENTS = [WelcomeStep, AccountsStep, LocalStep, AutonomyStep, StopsStep, FinishStep] as const;\n\n// ---------------------------------------------------------------------------\n// The chip and the card\n// ---------------------------------------------------------------------------\n\nexport function OnboardingFlow() {\n const { open, expanded, step } = useOnboarding();\n const index = clampStep(step);\n const meta = ONBOARDING_STEPS[index]!;\n const Step = STEP_COMPONENTS[index]!;\n const last = index === ONBOARDING_STEPS.length - 1;\n const total = ONBOARDING_STEPS.length;\n\n const dismiss = useCallback(() => dismissOnboarding(), []);\n const cardRef = useRef<HTMLElement>(null);\n const chipRef = useRef<HTMLButtonElement>(null);\n // Focus follows a fold / unfold the operator asked for — never a mount:\n // the chip appearing on first launch must not steal focus from the composer.\n const moveFocus = useRef(false);\n\n const expand = useCallback(() => {\n moveFocus.current = true;\n expandOnboarding();\n }, []);\n const collapse = useCallback(() => {\n moveFocus.current = true;\n collapseOnboarding();\n }, []);\n\n useEffect(() => {\n if (!moveFocus.current) return;\n moveFocus.current = false;\n if (expanded) cardRef.current?.focus();\n else chipRef.current?.focus();\n }, [expanded]);\n\n // Escape folds the card back to the chip — but ONLY when the focus is\n // inside the card.\n //\n // This card is deliberately not a modal (rule 1 above): the operator works\n // behind it, and every Escape they press for something else — closing the\n // command palette, backing out of a seat menu, stopping dictation — used to\n // land here too and permanently dismiss the tour. Scoped to the card, and\n // folding rather than answering, an Escape can never cost the operator the\n // tour; Skip and the chip's × are the only ways to silence it.\n useEffect(() => {\n if (!open || !expanded) return undefined;\n function onKey(event: globalThis.KeyboardEvent) {\n if (event.key !== 'Escape') return;\n const card = cardRef.current;\n if (!card || !(event.target instanceof Node) || !card.contains(event.target)) return;\n event.preventDefault();\n collapse();\n }\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, expanded, collapse]);\n\n if (!open) return null;\n\n if (!expanded) {\n return (\n <div className={styles.chip} role=\"region\" aria-label=\"Getting started\">\n <button\n ref={chipRef}\n type=\"button\"\n className={styles.chipOpen}\n aria-expanded=\"false\"\n title={`Getting started: ${meta.title}`}\n onClick={expand}\n >\n <span className={styles.chipLabel}>Getting started</span>\n <span className={styles.chipCount}>\n {index + 1}/{total}\n </span>\n <IconChevronRight size={13} aria-hidden=\"true\" focusable=\"false\" />\n </button>\n <button\n type=\"button\"\n className={styles.chipDismiss}\n aria-label=\"Dismiss getting started\"\n title=\"Dismiss getting started — replay it any time from Settings\"\n onClick={dismiss}\n >\n <IconX size={12} aria-hidden=\"true\" focusable=\"false\" />\n </button>\n </div>\n );\n }\n\n return (\n <aside ref={cardRef} tabIndex={-1} className={styles.card} aria-labelledby=\"verse-onboarding-title\" role=\"region\">\n <header className={styles.head}>\n <div className={styles.headText}>\n <p className={styles.eyebrow}>\n Getting started · {index + 1} of {total}\n </p>\n <h2 id=\"verse-onboarding-title\" className={styles.title}>\n {meta.title}\n </h2>\n <p className={styles.subtitle}>{meta.subtitle}</p>\n </div>\n <Button\n iconOnly\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Minimize getting started\"\n title=\"Minimize getting started\"\n aria-expanded=\"true\"\n icon={<IconChevronDown size={14} />}\n onClick={collapse}\n />\n </header>\n\n <Step />\n\n <footer className={styles.foot}>\n <ol className={styles.pips} aria-hidden=\"true\">\n {ONBOARDING_STEPS.map((s, i) => (\n <li key={s.id} className={styles.pip} data-state={i === index ? 'current' : i < index ? 'done' : 'todo'} />\n ))}\n </ol>\n <div className={styles.actions}>\n <Button variant=\"ghost\" size=\"sm\" onClick={dismiss}>\n Skip setup\n </Button>\n {index > 0 ? (\n <Button variant=\"subtle\" size=\"sm\" onClick={() => setOnboardingStep(index - 1)}>\n Back\n </Button>\n ) : null}\n {last ? (\n <Button\n variant=\"primary\"\n size=\"sm\"\n icon={<IconChat size={14} />}\n onClick={() => {\n completeOnboarding();\n // Switches to Chat and raises the one-shot ⌘N command the\n // chat section consumes by nonce (verse-ui-store.ts).\n requestVerseCommand('new-chat');\n }}\n >\n Start a first chat\n </Button>\n ) : (\n <Button variant=\"primary\" size=\"sm\" onClick={() => setOnboardingStep(index + 1)}>\n Next\n </Button>\n )}\n </div>\n </footer>\n </aside>\n );\n}\n"],"file":"OnboardingFlow-DcDsguAM.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/onboarding/onboarding-model.ts","../../../../../../src/web-ui/routes/verse/onboarding/OnboardingFlow.tsx"],"sourcesContent":["/**\n * routes/verse/onboarding/onboarding-model.ts — the first-run tour's facts,\n * derived from the same reads the Usage section uses, with the same honesty\n * rules (docs/VERSE-TELEMETRY-V2.md).\n *\n * Pure: no React, no I/O. Everything the tour asserts about the machine is\n * computed here so it can be tested without a DOM, and so the one rule that\n * matters is enforced in one place:\n *\n * AN ABSENT READ IS \"UNKNOWN\", NEVER \"FINE\" AND NEVER \"BROKEN\".\n *\n * A first-run screen is exactly where a confident lie does the most damage —\n * it is the operator's first and only calibration of how much this app's\n * claims can be trusted. So a route that 404s, a payload that does not\n * narrow, and a probe that could not reach a runtime each produce their own\n * sentence, and none of them produces a green check.\n *\n * The tour NEVER renders a command it invented: the seats step shows only\n * A2's own fix argv (through C6's capacity rows).\n */\nimport type { LocalModelsSnapshot } from '../usage/usage-contract.js';\n\n// ---------------------------------------------------------------------------\n// Steps\n// ---------------------------------------------------------------------------\n\nexport type OnboardingStepId = 'welcome' | 'accounts' | 'local' | 'autonomy' | 'stops' | 'finish';\n\nexport interface OnboardingStepMeta {\n id: OnboardingStepId;\n /** Shown as the card's heading. */\n title: string;\n /** One line under the heading. */\n subtitle: string;\n}\n\nexport const ONBOARDING_STEPS: readonly OnboardingStepMeta[] = [\n {\n id: 'welcome',\n title: 'Welcome to Verse',\n subtitle: 'Five sections, one rail.',\n },\n {\n id: 'accounts',\n title: 'Your seats',\n subtitle: 'Which provider accounts this machine can actually dispatch to right now.',\n },\n {\n id: 'local',\n title: 'Local runtime',\n subtitle: 'Whether there is a model on this machine, and what that changes.',\n },\n {\n id: 'autonomy',\n title: 'Turn on autonomy',\n subtitle: 'It stays off until you set it up. Turning it down is always one click.',\n },\n {\n id: 'stops',\n title: 'Three ways to stop',\n subtitle: 'They do not have the same blast radius. This is the one screen that says so.',\n },\n {\n id: 'finish',\n title: 'Make it yours',\n subtitle: 'Theme, accent, density and font live in Settings. Then start a chat.',\n },\n];\n\nexport function clampStep(step: number): number {\n if (!Number.isFinite(step)) return 0;\n return Math.min(ONBOARDING_STEPS.length - 1, Math.max(0, Math.trunc(step)));\n}\n\n// ---------------------------------------------------------------------------\n// Tone\n// ---------------------------------------------------------------------------\n\n/**\n * Step 2 (seats) is C6's shared LiveCapacityStrip since 3.10 — the tour no\n * longer narrows the accounts route itself, so the seats can never read\n * differently here than in Apps & Accounts. The tone below serves the local\n * runtime and the stops.\n */\nexport type FindingTone = 'ok' | 'attention' | 'unknown';\n\n// ---------------------------------------------------------------------------\n// Local runtime\n// ---------------------------------------------------------------------------\n\nexport interface LocalFinding {\n tone: FindingTone;\n state: string;\n summary: string;\n /** What having (or not having) a local runtime means for the operator. */\n meaning: string;\n /** Present only when there is something to do about it. */\n fix: string | null;\n modelCount: number;\n toolCapableCount: number;\n /** True when this reading was retained from an earlier probe. */\n stale: boolean;\n}\n\nexport interface LocalInput {\n snapshot: LocalModelsSnapshot | null;\n loading: boolean;\n unavailableReason: string | null;\n}\n\nconst LOCAL_MEANING_AVAILABLE =\n 'Local seats cost nothing and consume no provider quota, so the autonomous loop can keep working after a cloud window is used up.';\nconst LOCAL_MEANING_ABSENT =\n 'Without one, every turn and every autonomous tick spends a provider account, and a used-up window stops the work.';\n\nexport function buildLocalFinding(input: LocalInput): LocalFinding {\n if (input.loading) {\n return {\n tone: 'unknown',\n state: 'checking',\n summary: 'Probing the local runtimes on this machine…',\n meaning: LOCAL_MEANING_AVAILABLE,\n fix: null,\n modelCount: 0,\n toolCapableCount: 0,\n stale: false,\n };\n }\n\n if (!input.snapshot) {\n return {\n tone: 'unknown',\n state: 'not reported',\n summary: 'This server does not report local runtimes, so Verse cannot say whether one is available here.',\n meaning: LOCAL_MEANING_ABSENT,\n fix: input.unavailableReason,\n modelCount: 0,\n toolCapableCount: 0,\n stale: false,\n };\n }\n\n const models = input.snapshot.models;\n const toolCapable = models.filter((m) => m.supportsTools === true).length;\n const stale = input.snapshot.runtimes.some((r) => r.stale);\n\n if (!input.snapshot.reachable) {\n return {\n tone: 'attention',\n state: 'unreachable',\n // \"Not reachable\" and \"not installed\" are different facts and the probe\n // cannot tell them apart — so this does not claim either one.\n summary:\n 'No local runtime answered. Verse cannot tell whether one is not running or not installed — the probe only knows it got no answer.',\n meaning: LOCAL_MEANING_ABSENT,\n fix: 'Start Ollama (or LM Studio) and press Refresh in Usage. If neither is installed, everything still works — it all runs on the cloud seats.',\n modelCount: 0,\n toolCapableCount: 0,\n stale,\n };\n }\n\n if (models.length === 0) {\n return {\n tone: 'attention',\n state: 'no models',\n summary: 'A local runtime answered, but it has no models installed.',\n meaning: LOCAL_MEANING_ABSENT,\n fix: 'Pull a model into the runtime, then press Refresh in Usage.',\n modelCount: 0,\n toolCapableCount: 0,\n stale,\n };\n }\n\n return {\n tone: 'ok',\n state: stale ? 'available (retained reading)' : 'available',\n summary:\n `${models.length} local ${models.length === 1 ? 'model' : 'models'} available` +\n (toolCapable > 0 ? `, ${toolCapable} of them tool-capable.` : ', none of them tool-capable.') +\n (stale ? ' Last known reading.' : ''),\n meaning: toolCapable > 0\n ? LOCAL_MEANING_AVAILABLE\n : `${LOCAL_MEANING_AVAILABLE} A model that cannot call tools can answer, but cannot run an agentic turn.`,\n fix: null,\n modelCount: models.length,\n toolCapableCount: toolCapable,\n stale,\n };\n}\n\n// ---------------------------------------------------------------------------\n// The three stops\n// ---------------------------------------------------------------------------\n\nexport interface StopControl {\n name: string;\n /** What it halts. */\n scope: string;\n /** What it does NOT halt — the half people get wrong. */\n limit: string;\n reversible: string;\n tone: FindingTone;\n}\n\n/**\n * Verbatim against docs/VERSE-CONTRACT-V2.md's two footguns and the V2.1\n * amendment. The kill switch is never called a pause, and \"Stop loop\" is\n * stated as engaging the same global sentinel as the emergency control,\n * because it does (`stopDaemon()` is `setKill(true)`).\n */\nexport const STOP_CONTROLS: readonly StopControl[] = [\n {\n name: 'Pause',\n scope: 'Halts autonomous dispatch only. A running loop parks instead of exiting.',\n limit: 'Your own chats and the agent’s write tools keep working.',\n reversible: 'Reversible in one click, with no restart and no confirmation.',\n tone: 'ok',\n },\n {\n name: 'Stop loop',\n scope: 'Stops the daemon — and engages the GLOBAL kill switch while doing it.',\n limit: 'That means it also refuses the agent’s own write tools, exactly like the emergency control.',\n reversible: 'Reversible, but confirm-guarded. For an ordinary halt, use Pause.',\n tone: 'attention',\n },\n {\n name: 'Emergency stop',\n scope: 'Engages the global kill switch (~/.ashlr/KILL) directly.',\n limit: 'Every mutating path refuses: the loop, dispatch, and the agent’s own write tools.',\n reversible: 'Reversible, confirm-guarded, and deliberately separated from the other two.',\n tone: 'attention',\n },\n];\n","/**\n * routes/verse/onboarding/OnboardingFlow.tsx — the first-run tour.\n *\n * A first-time operator opens Verse to five unlabelled rail icons and no\n * guidance. This is six short steps that answer the questions that actually\n * block someone on day one: which of my accounts can this thing use, is\n * there anything local, how do I turn autonomy on, what do the three stop\n * buttons really do, where do I change how it looks, and how do I start.\n *\n * THREE RULES IT IS BUILT AROUND:\n *\n * 1. It never blocks the app. This is NOT a modal — no backdrop, no focus\n * trap, no `aria-modal`. It first appears as a one-line chip\n * (\"Getting started 1/6 →\") in the corner; only a click opens the card,\n * and every rail button, shortcut and section behind either stays\n * clickable. The card's minimise button and Escape fold it back to the\n * chip without answering it; Skip, or the chip's ×, silences it for good.\n *\n * 2. It never asserts more than it read. Step 2 is C6's shared capacity\n * strip (no reading is \"no reading\", never zero); step 3 reads the same\n * local-models route Usage reads, through the same narrower — an\n * unanswered probe is \"no answer\", never a green check (logic in\n * ./onboarding-model.ts, tested without a DOM); step 4 reads the same\n * authority entry Command's switch reads.\n *\n * 3. It costs no extra requests on the common path. The chip reads nothing.\n * Each data step mounts its own query only when the operator reaches it,\n * and those queries are the Usage / Command sections' own cache entries —\n * so a first-run user who walks the tour and then opens either finds the\n * reads already in cache and within the freshness window\n * (data/hooks.ts DEFAULT_QUERY_FRESH_MS).\n */\nimport { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport { Button } from '../../../components/primitives/index.js';\nimport {\n IconAlert,\n IconCheckCircle,\n IconChat,\n IconChevronDown,\n IconChevronRight,\n IconCopy,\n IconCpu,\n IconInfo,\n IconLock,\n IconSliders,\n IconX,\n} from '../../../components/primitives/icons.js';\nimport { useQuery } from '../../../data/hooks.js';\nimport { SECTION_ICON } from '../verse-icons.js';\nimport { RAIL_SECTIONS, requestVerseCommand, setVerseSection } from '../verse-ui-store.js';\nimport { LiveCapacityStrip } from '../usage/CapacityStrip.js';\nimport { tidyProse } from '../autonomy/format.js';\nimport { verseLocalModelsQuery } from '../usage/usage-queries.js';\nimport { projectLocalModels } from '../usage/usage-contract.js';\nimport { authorityQuery } from '../command/surface-data.js';\nimport { grantChip, modeWord, type ChipTone } from '../command/authority-model.js';\nimport { useSetupChecklist } from '../autonomy/AutonomyOffState.js';\nimport { nextCommand } from '../autonomy/setup-checklist-model.js';\nimport { AUTONOMY_SETUP_COMMAND } from '../shell/command-catalog.js';\nimport { copyAutonomySetupCommand } from '../shell/copy-setup.js';\nimport { executeCatalogCommand } from '../shell/run-command.js';\nimport {\n ONBOARDING_STEPS,\n STOP_CONTROLS,\n buildLocalFinding,\n clampStep,\n type FindingTone,\n} from './onboarding-model.js';\nimport {\n collapseOnboarding,\n completeOnboarding,\n dismissOnboarding,\n expandOnboarding,\n setOnboardingStep,\n} from './onboarding-store.js';\nimport { useOnboarding } from './useOnboarding.js';\nimport styles from './onboarding.module.css';\n\n// The setup checklist is its own chunk (shared with the \"Autonomy is off\" state).\nconst SetupChecklist = lazy(() => import('../autonomy/SetupChecklist.js'));\n\n/**\n * Tone is paired with a glyph everywhere it appears, never carried by colour\n * alone (DESIGN-V2 §6).\n */\nfunction ToneMark({ tone, label }: { tone: FindingTone; label: string }) {\n const Glyph = tone === 'ok' ? IconCheckCircle : tone === 'attention' ? IconAlert : IconInfo;\n return (\n <span className={styles.tone} data-tone={tone}>\n <Glyph size={13} aria-hidden=\"true\" focusable=\"false\" />\n <span className={styles.toneLabel}>{label}</span>\n </span>\n );\n}\n\nfunction StepBody({ children }: { children: ReactNode }) {\n return <div className={styles.body}>{children}</div>;\n}\n\n// ---------------------------------------------------------------------------\n// Step 1 — what the rail is\n// ---------------------------------------------------------------------------\n\nfunction WelcomeStep() {\n return (\n <StepBody>\n <p className={styles.lead}>Verse runs your chats and this machine’s agent fleet from one local server.</p>\n {/*\n The five rail surfaces, in ⌘1–⌘5 order, with the same one-line blurbs\n the palette uses (VERSE_SECTIONS) — one description per surface, not\n a second copy that drifts. Settings, Apps and Usage live in the gear.\n */}\n <ul className={styles.sections}>\n {RAIL_SECTIONS.map((entry, index) => {\n const Icon = SECTION_ICON[entry.id];\n return (\n <li key={entry.id} className={styles.sectionRow}>\n <span className={styles.sectionIcon} aria-hidden=\"true\">\n <Icon />\n </span>\n <span className={styles.sectionText}>\n <span className={styles.sectionName}>\n {entry.label} <kbd className={styles.kbd}>⌘{index + 1}</kbd>\n </span>\n <span className={styles.sectionBlurb}>{entry.blurb}</span>\n </span>\n </li>\n );\n })}\n </ul>\n <p className={styles.sectionBlurb}>\n <kbd className={styles.kbd}>⌘K</kbd> runs anything by name · <kbd className={styles.kbd}>⌘J</kbd> is everything\n waiting on you · Settings, Apps & Accounts and Usage are under the gear.\n </p>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 2 — seats\n// ---------------------------------------------------------------------------\n\n/**\n * Step 2 mounts C6's shared LiveCapacityStrip — the SAME projection Apps &\n * Accounts, Usage, the new-chat dialog and the rail's capacity ring read — so\n * the tour can never describe a seat differently from the rest of the app\n * (3.9 had its own accounts narrower here, which drifted from Usage). A seat\n * that is signed out or out of usage shows the exact command that fixes it,\n * straight from A2's health report; nothing is run from the tour.\n */\nfunction AccountsStep() {\n return (\n <StepBody>\n <LiveCapacityStrip\n density=\"compact\"\n headline\n local=\"collapse\"\n // The step's own heading (\"Your seats\") names the strip: a second,\n // hidden heading with the same words is noise to a screen reader.\n labelledBy=\"verse-onboarding-title\"\n emptyText=\"No seats reported yet. Connect an account in Apps & Accounts, or start Ollama for local models.\"\n renderActions={(row) =>\n row.connection?.fixCommand ? (\n <p className={styles.findingFix}>\n <span className={styles.fixLabel}>Fix</span>\n <code className={styles.code}>{row.connection.fixCommand.join(' ')}</code>\n </p>\n ) : null\n }\n />\n <p className={styles.aside}>\n Every window, reset and reserve lives in Apps & Accounts, under the gear.\n </p>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 3 — local runtime\n// ---------------------------------------------------------------------------\n\nfunction LocalStep() {\n const read = useQuery(verseLocalModelsQuery);\n const finding = useMemo(() => {\n // The server's sentence, with any ISO instant in it read as local time.\n const reason = read.data?.reason ?? read.error?.message ?? null;\n return buildLocalFinding({\n snapshot: read.data?.available ? projectLocalModels(read.data.raw) : null,\n loading: read.data === undefined && read.status !== 'error',\n unavailableReason: reason === null ? null : tidyProse(reason),\n });\n }, [read.data, read.status, read.error]);\n\n return (\n <StepBody>\n <div className={styles.findingHead}>\n <span className={styles.localIcon} aria-hidden=\"true\">\n <IconCpu size={15} />\n </span>\n <ToneMark tone={finding.tone} label={finding.state} />\n </div>\n <p className={styles.lead}>{finding.summary}</p>\n <p className={styles.findingDetail}>{finding.meaning}</p>\n {finding.fix ? (\n <p className={styles.findingFix}>\n <span className={styles.fixLabel}>Fix</span>\n <span className={styles.fixText}>{finding.fix}</span>\n </p>\n ) : null}\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 4 — autonomy\n// ---------------------------------------------------------------------------\n\n/** The Command bar's chip tones, in the tour's three (glyph + word, never colour alone). */\nfunction findingTone(tone: ChipTone | undefined): FindingTone {\n if (tone === 'success') return 'ok';\n if (tone === 'warning' || tone === 'danger') return 'attention';\n return 'unknown';\n}\n\n/**\n * Reads the SAME authority entry Command's bar reads (surface-data\n * authorityQuery), so \"Right now\" can never disagree with the switch — and\n * never claims a state it did not read: no answer is \"not reported\", with\n * the server's own reason.\n *\n * The next step is the one Command's \"Autonomy is off\" state names, decided\n * the same way (autonomy-off-model): with no grant, the live setup checklist\n * (every step, unfolded) and the command for its next open step while one\n * before the grant is open (or we cannot tell); once only the grant is left,\n * \"Approve grant…\" — the same ⌘K command, which opens the Touch ID sheet on\n * Command (the only place a grant is drafted). With a grant, the chip decides\n * (re-approve / renew), else Command itself.\n */\nfunction AutonomyStep() {\n const read = useQuery(authorityQuery);\n const [copied, setCopied] = useState<boolean | null>(null);\n const status = read.data?.value ?? null;\n const loading = read.data === undefined && read.status !== 'error';\n const mode = modeWord(status);\n const chip = grantChip(status, Date.now());\n const setup = useSetupChecklist(status?.grant.state === 'none');\n const needsSetup = !status || (status.grant.state === 'none' && setup.readiness !== 'ready');\n const command = nextCommand(setup.report) ?? AUTONOMY_SETUP_COMMAND;\n const fix = (\n <div className={styles.findingFix}>\n <span className={styles.fixLabel}>{command === AUTONOMY_SETUP_COMMAND ? 'Set up' : 'Next'}</span>\n <code className={styles.code}>{command}</code>\n <Button\n variant=\"subtle\"\n size=\"sm\"\n icon={<IconCopy size={13} />}\n onClick={() => {\n void copyAutonomySetupCommand(command).then(setCopied);\n }}\n >\n {copied ? 'Copied' : 'Copy'}\n </Button>\n </div>\n );\n const detail = loading\n ? 'Reading the autonomy state…'\n : status\n ? chip.detail\n : (read.data?.reason ?? read.error?.message ?? 'The autonomy state could not be read.');\n\n return (\n <StepBody>\n <div className={styles.findingHead}>\n <span className={styles.stopName}>Right now</span>\n <ToneMark tone={loading ? 'unknown' : findingTone(mode.tone)} label={loading ? 'checking' : status ? mode.text : 'not reported'} />\n </div>\n <p className={styles.findingDetail}>{detail}</p>\n <p className={styles.lead}>\n The switch on Command <kbd className={styles.kbd}>⌘1</kbd> — Off, Propose, Autonomous — decides what the fleet\n may do on its own. Raising it past your grant asks for Touch ID; lowering it never does.\n </p>\n {needsSetup ? (\n <>\n {setup.report ? (\n <Suspense fallback={fix}>\n <SetupChecklist report={setup.report} action={fix} open />\n </Suspense>\n ) : fix}\n <p className={styles.aside} role={copied === false ? 'alert' : undefined}>\n {copied === false\n ? 'The clipboard is not available here — select the command and copy it by hand.'\n : 'Run it in a terminal. It stops for what only you can do — sudo, Touch ID, GitHub — and --dry-run prints every step first.'}\n </p>\n </>\n ) : chip.action ? (\n <Button variant=\"subtle\" icon={<IconLock size={14} />} onClick={() => executeCatalogCommand('autonomy.grant', { via: 'button' })}>\n {chip.action === 're-approve' ? 'Re-approve grant…' : 'Approve grant…'}\n </Button>\n ) : (\n <Button variant=\"subtle\" icon={<IconLock size={14} />} onClick={() => setVerseSection('command')}>\n Open Command\n </Button>\n )}\n <p className={styles.aside}>\n <kbd className={styles.kbd}>⌘K</kbd> “Autonomy: …” and “Approve grant…” work from any surface.\n </p>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 5 — the three stops\n// ---------------------------------------------------------------------------\n\nfunction StopsStep() {\n return (\n <StepBody>\n <p className={styles.lead}>\n Fleet <kbd className={styles.kbd}>⌘2</kbd> has three stop controls. They are not interchangeable, and the\n difference is the most important thing on this screen.\n </p>\n <ul className={styles.findings}>\n {STOP_CONTROLS.map((control) => (\n <li key={control.name} className={styles.finding}>\n <div className={styles.findingHead}>\n <span className={styles.stopName}>{control.name}</span>\n <ToneMark tone={control.tone} label={control.tone === 'ok' ? 'narrow' : 'global'} />\n </div>\n <p className={styles.findingDetail}>{control.scope}</p>\n <p className={styles.findingDetail}>{control.limit}</p>\n <p className={styles.findingNote}>{control.reversible}</p>\n </li>\n ))}\n </ul>\n </StepBody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Step 6 — appearance, then go\n// ---------------------------------------------------------------------------\n\nfunction FinishStep() {\n return (\n <StepBody>\n <p className={styles.lead}>\n Settings <kbd className={styles.kbd}>⌘,</kbd> carries theme, accent hue, density, display font, corner radius\n and reduced motion. Every change applies as you make it — there is no save button.\n </p>\n <Button\n variant=\"subtle\"\n icon={<IconSliders size={14} />}\n onClick={() => setVerseSection('settings')}\n >\n Open Settings\n </Button>\n <p className={styles.aside}>\n You can replay this tour any time from Settings → Onboarding.\n </p>\n </StepBody>\n );\n}\n\n/** In ONBOARDING_STEPS order (the model test pins the ids; the flow test walks them). */\nconst STEP_COMPONENTS = [WelcomeStep, AccountsStep, LocalStep, AutonomyStep, StopsStep, FinishStep] as const;\n\n// ---------------------------------------------------------------------------\n// The chip and the card\n// ---------------------------------------------------------------------------\n\nexport function OnboardingFlow() {\n const { open, expanded, step } = useOnboarding();\n const index = clampStep(step);\n const meta = ONBOARDING_STEPS[index]!;\n const Step = STEP_COMPONENTS[index]!;\n const last = index === ONBOARDING_STEPS.length - 1;\n const total = ONBOARDING_STEPS.length;\n\n const dismiss = useCallback(() => dismissOnboarding(), []);\n const cardRef = useRef<HTMLElement>(null);\n const chipRef = useRef<HTMLButtonElement>(null);\n // Focus follows a fold / unfold the operator asked for — never a mount:\n // the chip appearing on first launch must not steal focus from the composer.\n const moveFocus = useRef(false);\n\n const expand = useCallback(() => {\n moveFocus.current = true;\n expandOnboarding();\n }, []);\n const collapse = useCallback(() => {\n moveFocus.current = true;\n collapseOnboarding();\n }, []);\n\n useEffect(() => {\n if (!moveFocus.current) return;\n moveFocus.current = false;\n if (expanded) cardRef.current?.focus();\n else chipRef.current?.focus();\n }, [expanded]);\n\n // Escape folds the card back to the chip — but ONLY when the focus is\n // inside the card.\n //\n // This card is deliberately not a modal (rule 1 above): the operator works\n // behind it, and every Escape they press for something else — closing the\n // command palette, backing out of a seat menu, stopping dictation — used to\n // land here too and permanently dismiss the tour. Scoped to the card, and\n // folding rather than answering, an Escape can never cost the operator the\n // tour; Skip and the chip's × are the only ways to silence it.\n useEffect(() => {\n if (!open || !expanded) return undefined;\n function onKey(event: globalThis.KeyboardEvent) {\n if (event.key !== 'Escape') return;\n const card = cardRef.current;\n if (!card || !(event.target instanceof Node) || !card.contains(event.target)) return;\n event.preventDefault();\n collapse();\n }\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, expanded, collapse]);\n\n if (!open) return null;\n\n if (!expanded) {\n return (\n <div className={styles.chip} role=\"region\" aria-label=\"Getting started\">\n <button\n ref={chipRef}\n type=\"button\"\n className={styles.chipOpen}\n aria-expanded=\"false\"\n title={`Getting started: ${meta.title}`}\n onClick={expand}\n >\n <span className={styles.chipLabel}>Getting started</span>\n <span className={styles.chipCount}>\n {index + 1}/{total}\n </span>\n <IconChevronRight size={13} aria-hidden=\"true\" focusable=\"false\" />\n </button>\n <button\n type=\"button\"\n className={styles.chipDismiss}\n aria-label=\"Dismiss getting started\"\n title=\"Dismiss getting started — replay it any time from Settings\"\n onClick={dismiss}\n >\n <IconX size={12} aria-hidden=\"true\" focusable=\"false\" />\n </button>\n </div>\n );\n }\n\n return (\n <aside ref={cardRef} tabIndex={-1} className={styles.card} aria-labelledby=\"verse-onboarding-title\" role=\"region\">\n <header className={styles.head}>\n <div className={styles.headText}>\n <p className={styles.eyebrow}>\n Getting started · {index + 1} of {total}\n </p>\n <h2 id=\"verse-onboarding-title\" className={styles.title}>\n {meta.title}\n </h2>\n <p className={styles.subtitle}>{meta.subtitle}</p>\n </div>\n <Button\n iconOnly\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Minimize getting started\"\n title=\"Minimize getting started\"\n aria-expanded=\"true\"\n icon={<IconChevronDown size={14} />}\n onClick={collapse}\n />\n </header>\n\n <Step />\n\n <footer className={styles.foot}>\n <ol className={styles.pips} aria-hidden=\"true\">\n {ONBOARDING_STEPS.map((s, i) => (\n <li key={s.id} className={styles.pip} data-state={i === index ? 'current' : i < index ? 'done' : 'todo'} />\n ))}\n </ol>\n <div className={styles.actions}>\n <Button variant=\"ghost\" size=\"sm\" onClick={dismiss}>\n Skip setup\n </Button>\n {index > 0 ? (\n <Button variant=\"subtle\" size=\"sm\" onClick={() => setOnboardingStep(index - 1)}>\n Back\n </Button>\n ) : null}\n {last ? (\n <Button\n variant=\"primary\"\n size=\"sm\"\n icon={<IconChat size={14} />}\n onClick={() => {\n completeOnboarding();\n // Switches to Chat and raises the one-shot ⌘N command the\n // chat section consumes by nonce (verse-ui-store.ts).\n requestVerseCommand('new-chat');\n }}\n >\n Start a first chat\n </Button>\n ) : (\n <Button variant=\"primary\" size=\"sm\" onClick={() => setOnboardingStep(index + 1)}>\n Next\n </Button>\n )}\n </div>\n </footer>\n </aside>\n );\n}\n"],"file":"OnboardingFlow-Cy9BA9eR.js"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OnboardingFlow-Cy9BA9eR.js","assets/global-CMNW_dqn.js","assets/VerseConsoleApp-CWU6R3By.js","assets/RouteErrorBoundary-SkNhhUbt.js","assets/format-CH4g_sl1.js","assets/format-D7nBg2bn.js","assets/verse-model-DAVevkNe.js","assets/compaction-point-VL9oegWS.js","assets/CapacityStrip-qKDBC65C.js","assets/ProviderLogo-Cq-CYIwT.js","assets/Tag-DscCRFcN.js","assets/budget-queries-D8QV5XtH.js","assets/capacity-strip-model-BwZ1ZbkU.js","assets/seat-subscription-C5uPHBsN.js","assets/context-model-CokrgEUq.js","assets/transient-events-nTLhMBND.js","assets/useSeatsRefresh-Co1CnxLc.js","assets/Button-D90dzI_o.js","assets/icons-D1sYbCTQ.js","assets/verse-icons-S56hIiXS.js","assets/command-catalog-BIntSa9l.js","assets/AutonomyOffState-CEPSZToP.js","assets/surface-data-Dj71tdD-.js","assets/control-queries-B9K-wmcB.js","assets/mutations-DQPbFdRJ.js","assets/nav-0dOYe2rJ.js","assets/clipboard-DkZdqlxf.js","assets/authority-model-79SeuKlJ.js","assets/primitives-2A5Eq8FQ.js","assets/focus-trap-CtI1SlMX.js","assets/Dialog-D3msQlCj.js","assets/Epistemic-DMr18muX.js","assets/StatusBadge-CXsYqmdU.js","assets/RefreshIndicator-DO9ibnSq.js","assets/Segmented-CGh_-tBb.js","assets/EmptyState-D2IRy3Cg.js","assets/Meter-CMj-VafN.js","assets/Slider-KVoJLDD6.js","assets/Switch-9NtO_6Lj.js","assets/Sheet-BZ2AG4Eo.js","assets/Select-CWnmUzs3.js","assets/Input-D_KRJA9V.js","assets/usage-queries-AdjEyEtn.js","assets/copy-setup-XMgCC5f8.js","assets/global-BlI2BYa1.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/VerseConsoleApp-Cxqr-3qc.css","assets/Tag-D0rAEciH.css","assets/CapacityStrip-Cc28CyWk.css","assets/Button-DrnKsvnQ.css","assets/AutonomyOffState-CmSSTHVe.css","assets/Dialog-tQ8kFulD.css","assets/Epistemic-OaGnEJkn.css","assets/StatusBadge-BVi0IBb9.css","assets/RefreshIndicator-CVv22U_j.css","assets/Segmented-BnjHbKzH.css","assets/EmptyState-B3YUPGaa.css","assets/Meter-CYt9KpM0.css","assets/Slider-AgAdMFpo.css","assets/Switch-CU044EaE.css","assets/Sheet-ChxlNivX.css","assets/Select-DSu5ghId.css","assets/Input-BQ3PR065.css","assets/OnboardingFlow-HUNQGQuU.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e,c as t,n,t as r}from"./index-DZ-UQ7v8.js";import{t as i}from"./useOnboarding-C_Fpe_sH.js";var a=t(e(),1),o=n(),s=(0,a.lazy)(()=>r(()=>import(`./OnboardingFlow-Cy9BA9eR.js`).then(e=>({default:e.OnboardingFlow})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63])));function c(){return i().open?(0,o.jsx)(s,{}):null}export{c as OnboardingGate};
|
|
3
|
+
//# sourceMappingURL=OnboardingGate-BXpNFoLt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";6HAcM,KAAiB,kBAAW,OAAO,+BAAsB,CAAC,KAAM,IAAO,CAAE,QAAS,EAAE,cAAe,EAAE,2MAAC,EAE5G,SAAgB,GAAiB,CAE/B,OADmB,EACZ,EAAW,MAAO,SAAC,EAAD,CAAiB,GAAI,IAChD","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/onboarding/OnboardingGate.tsx"],"sourcesContent":["/**\n * routes/verse/onboarding/OnboardingGate.tsx — whether the first-run tour is\n * on screen, and its chunk while it is.\n *\n * The shell mounts this lazily (VerseApp), so neither the tour's store nor\n * the tour itself is chat first-paint critical JS: the chip is a docked\n * corner affordance that asks for nothing, drawn a beat after the shell\n * (exactly as before, when the flow's own chunk already arrived after first\n * paint). Settings ▸ Replay reopens it through the same store, which this\n * gate is subscribed to for the life of the shell.\n */\nimport { lazy } from 'react';\nimport { useOnboarding } from './useOnboarding.js';\n\nconst OnboardingFlow = lazy(() => import('./OnboardingFlow.js').then((m) => ({ default: m.OnboardingFlow })));\n\nexport function OnboardingGate() {\n const onboarding = useOnboarding();\n return onboarding.open ? <OnboardingFlow /> : null;\n}\n"],"file":"OnboardingGate-
|
|
1
|
+
{"version":3,"mappings":";6HAcM,KAAiB,kBAAW,OAAO,+BAAsB,CAAC,KAAM,IAAO,CAAE,QAAS,EAAE,cAAe,EAAE,2MAAC,EAE5G,SAAgB,GAAiB,CAE/B,OADmB,EACZ,EAAW,MAAO,SAAC,EAAD,CAAiB,GAAI,IAChD","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/onboarding/OnboardingGate.tsx"],"sourcesContent":["/**\n * routes/verse/onboarding/OnboardingGate.tsx — whether the first-run tour is\n * on screen, and its chunk while it is.\n *\n * The shell mounts this lazily (VerseApp), so neither the tour's store nor\n * the tour itself is chat first-paint critical JS: the chip is a docked\n * corner affordance that asks for nothing, drawn a beat after the shell\n * (exactly as before, when the flow's own chunk already arrived after first\n * paint). Settings ▸ Replay reopens it through the same store, which this\n * gate is subscribed to for the life of the shell.\n */\nimport { lazy } from 'react';\nimport { useOnboarding } from './useOnboarding.js';\n\nconst OnboardingFlow = lazy(() => import('./OnboardingFlow.js').then((m) => ({ default: m.OnboardingFlow })));\n\nexport function OnboardingGate() {\n const onboarding = useOnboarding();\n return onboarding.open ? <OnboardingFlow /> : null;\n}\n"],"file":"OnboardingGate-BXpNFoLt.js"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,c as t,n}from"./index-DZ-UQ7v8.js";import{N as r,i,k as a,l as o,o as s}from"./global-CMNW_dqn.js";import{L as c,R as l,Xt as ee,Yt as u,kt as te,nn as d}from"./VerseConsoleApp-CWU6R3By.js";import{t as f}from"./MessageMarkdown-DFvk06qG.js";import{t as ne}from"./Segmented-CGh_-tBb.js";import{n as p,t as m}from"./Button-D90dzI_o.js";import{C as h,c as re,g as ie}from"./icons-D1sYbCTQ.js";import{t as g}from"./EmptyState-D2IRy3Cg.js";import{a as ae,c as oe,d as se,i as ce,l as le,n as ue,o as de,s as _,t as fe}from"./terminal-icons-CoRZq9iO.js";import{t as pe}from"./pane-chrome.module-D7o-fVd0.js";var v=t(e(),1),y=`/api/verse/preview/ticket`;function b(e){return new URLSearchParams(e).toString()}var x={targets:(e,t)=>o(`${ee}?${b({sessionId:e})}`,t),ticket:(e,t)=>o(`${y}?${b({sessionId:e,path:t})}`),text:async(e,t)=>{let n=`${u}?${b({sessionId:e,path:t})}`,i=await fetch(n,{credentials:`same-origin`,headers:{"x-ashlr-read-client":a()}});if(i.status===401)throw r(),new s(`Read session expired.`,401,n);if(!i.ok)throw new s(`GET ${n} failed (HTTP ${i.status}).`,i.status,n);return i.text()}};function S(e){return e.port||(e.protocol===`https:`?`443`:`80`)}function C(e,t){let n=e.trim();if(n.length===0||n.length>2048||/\s/.test(n))return{kind:`invalid`};let r=n;if(/^:?\d{2,5}$/.test(n))r=`http://localhost:${n.replace(`:`,``)}/`;else if(/^(?:localhost|127\.0\.0\.1)(?::\d{1,5})?(?:[/?#].*)?$/i.test(n))r=`http://${n}`;else if(!/^[a-z][a-z0-9+.-]*:/i.test(n)){if(!/^[\w-]+(?:\.[\w-]+)+(?::\d{1,5})?(?:[/?#].*)?$/.test(n))return{kind:`invalid`};r=`https://${n}`}let i;try{i=new URL(r)}catch{return{kind:`invalid`}}if(i.protocol!==`http:`&&i.protocol!==`https:`)return{kind:`invalid`};if(d(i.href)){let e=null;try{e=new URL(t)}catch{e=null}return e&&(e.hostname===`localhost`||e.hostname===`127.0.0.1`)&&S(e)===S(i)?{kind:`self`,url:i.href}:{kind:`loopback`,url:i.href}}return i.username||i.password?{kind:`invalid`}:{kind:`external`,url:i.href}}function w(e){try{let t=new URL(e),n=t.pathname===`/`?``:t.pathname;return`${t.host}${n}${t.search}`}catch{return e}}function T(e){return!Number.isFinite(e)||e<0?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(+(e<10240))} KB`:`${(e/1048576).toFixed(1)} MB`}var E={pane:`_pane_k6hui_8`,strip:`_strip_k6hui_19`,tabs:`_tabs_k6hui_28`,tab:`_tab_k6hui_28`,tabButton:`_tabButton_k6hui_60`,tabClose:`_tabClose_k6hui_78`,noticeClose:`_noticeClose_k6hui_79`,external:`_external_k6hui_80`,tabTitle:`_tabTitle_k6hui_85`,newTab:`_newTab_k6hui_118`,toolbar:`_toolbar_k6hui_126`,nav:`_nav_k6hui_128`,addressForm:`_addressForm_k6hui_134`,address:`_address_k6hui_134`,addressNote:`_addressNote_k6hui_177`,notice:`_notice_k6hui_79`,waiting:`_waiting_k6hui_179`,waitingText:`_waitingText_k6hui_201`,pulse:`_pulse_k6hui_208`,body:`_body_k6hui_234`,loading:`_loading_k6hui_243`,stage:`_stage_k6hui_250`,frame:`_frame_k6hui_262`,frameHint:`_frameHint_k6hui_278`,imageStage:`_imageStage_k6hui_291`,image:`_image_k6hui_291`,markdown:`_markdown_k6hui_308`,launcher:`_launcher_k6hui_316`,section:`_section_k6hui_322`,sectionTitle:`_sectionTitle_k6hui_328`,muted:`_muted_k6hui_339`,rows:`_rows_k6hui_347`,row:`_row_k6hui_347`,dot:`_dot_k6hui_364`,fileIcon:`_fileIcon_k6hui_376`,rowMain:`_rowMain_k6hui_378`,rowTitle:`_rowTitle_k6hui_385`,rowMeta:`_rowMeta_k6hui_395`,rowCommand:`_rowCommand_k6hui_405`},D=n(),me={api:x,origin:()=>window.location.origin,now:()=>Date.now()},he=12e4,ge=2e3,_e=5e3,O=`ashlr.verse.preview.v1:`,k={"launch-json":`launch.json`,"package-json":`package.json`,listening:`running`},ve={html:`HTML`,md:`Markdown`,svg:`SVG`,image:`Image`,pdf:`PDF`},A=0,j=0,M=()=>`p${++j}`;function N(){A=0,j=0}function P(e){let t=e.toLowerCase().slice(e.lastIndexOf(`.`));return t===`.html`||t===`.htm`?`html`:t===`.md`||t===`.markdown`?`md`:t===`.svg`?`svg`:t===`.pdf`?`pdf`:[`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.avif`,`.bmp`,`.ico`].includes(t)?`image`:null}function F(e){return e.slice(e.lastIndexOf(`/`)+1)||e}function ye(e){return e.kind===`launcher`?`New tab`:e.kind===`url`?w(e.history[e.index]??``):F(e.path)}function be(e){return e?.kind===`url`?e.history[e.index]??null:null}function xe(e,t){try{let n=localStorage.getItem(`${O}${e}`);if(!n)return null;let r=JSON.parse(n),i=[],a=null;return Array.isArray(r.tabs)&&r.tabs.slice(0,12).forEach((e,n)=>{if(!e||typeof e!=`object`)return;let o=e,s=M();if(o.url&&typeof o.url==`string`&&C(o.url,t).kind===`loopback`)i.push({id:s,kind:`url`,history:[o.url],index:0,reloadKey:0});else if(typeof o.path==`string`){let e=P(o.path);if(e)i.push({id:s,kind:`artifact`,path:o.path,artifactKind:e,reloadKey:0});else return}else return;r.active===n&&(a=s)}),{tabs:i,activeId:a??i.at(-1)?.id??null,device:r.device===`phone`?`phone`:`desktop`}}catch{return null}}function Se(e,t,n,r){try{let i=t.filter(e=>e.kind!==`launcher`);localStorage.setItem(`${O}${e}`,JSON.stringify({tabs:i.map(e=>e.kind===`url`?{url:e.history[e.index]}:e.kind===`artifact`?{path:e.path}:{}),active:i.findIndex(e=>e.id===n),device:r}))}catch{}}function I({sessionId:e,roots:t,request:n,onOpenTerminal:r,visible:i,deps:a}){let o=(0,v.useMemo)(()=>({...me,...a}),[a]),ee=l(),u=i&&ee,d=te().compact,[f]=(0,v.useState)(()=>xe(e,o.origin())),[g,_]=(0,v.useState)(()=>f?.tabs??[]),[y,b]=(0,v.useState)(()=>f?.activeId??null),[x,S]=(0,v.useState)(()=>f?.device??`desktop`),[T,he]=(0,v.useState)(e),[O,k]=(0,v.useState)(null),[ve,j]=(0,v.useState)(null),[N,F]=(0,v.useState)(``),[I,L]=(0,v.useState)(null),[R,z]=(0,v.useState)(null),[Ee,B]=(0,v.useState)(null),[V,H]=(0,v.useState)(()=>new Map),[De,Oe]=(0,v.useState)(()=>o.now()),U=(0,v.useRef)(!0),W=(0,v.useRef)(new Map),ke=(0,v.useRef)(null);if(T!==e){let t=xe(e,o.origin());he(e),_(t?.tabs??[]),b(t?.activeId??null),k(null),z(null),B(null)}let G=g.find(e=>e.id===y)??null,K=be(G),q=!G||G.kind===`launcher`;(0,v.useEffect)(()=>(U.current=!0,()=>{U.current=!1}),[]),(0,v.useEffect)(()=>{T===e&&Se(e,g,y,x)},[T,e,g,y,x]),(0,v.useEffect)(()=>{F(G?.kind===`url`?G.history[G.index]??``:G?.kind===`artifact`?G.path:``),L(null)},[G]);let J=(0,v.useCallback)(async()=>{try{let t=await o.api.targets(e);return U.current?(k(t),j(null),t):null}catch(e){return U.current&&j(e instanceof s&&e.detail?e.detail:`Dev servers and files could not be listed.`),null}},[o.api,e]),Ae=(0,v.useRef)(null);(0,v.useEffect)(()=>{u&&Ae.current!==e&&(Ae.current=e,J())},[u,e,J]),c(()=>{J()},R?ge:_e,{enabled:i&&(R!==null||q)});let Y=(0,v.useCallback)((e,t={})=>{B(null);let n=g.find(e=>e.id===y);if(!t.newTab&&n?.kind===`launcher`){_(g.map(t=>t.id===n.id?{id:t.id,kind:`url`,history:[e],index:0,reloadKey:0}:t));return}let r=g.find(t=>t.kind===`url`&&t.history[t.index]===e);if(r&&!t.newTab){b(r.id);return}let i=M();_([...g,{id:i,kind:`url`,history:[e],index:0,reloadKey:0}]),b(i)},[g,y]),je=(0,v.useCallback)(e=>{if(!G||G.kind!==`url`){Y(e);return}_(t=>t.map(t=>{if(t.id!==G.id||t.kind!==`url`)return t;let n=[...t.history.slice(0,t.index+1),e].slice(-50);return{...t,history:n,index:n.length-1}}))},[G,Y]),X=(0,v.useCallback)((e,t)=>{B(null);let n=g.find(t=>t.kind===`artifact`&&t.path===e);if(n){b(n.id);return}let r=g.find(e=>e.id===y);if(r?.kind===`launcher`){_(g.map(n=>n.id===r.id?{id:n.id,kind:`artifact`,path:e,artifactKind:t,reloadKey:0}:n));return}let i=M();_([...g,{id:i,kind:`artifact`,path:e,artifactKind:t,reloadKey:0}]),b(i)},[g,y]),Me=()=>{let e=g.find(e=>e.kind===`launcher`);if(e)b(e.id);else{let e=M();_(t=>[...t,{id:e,kind:`launcher`}]),b(e)}J()},Ne=e=>{let t=g.findIndex(t=>t.id===e.id),n=g.filter(t=>t.id!==e.id);_(n),H(t=>{let n=new Map(t);for(let r of t.keys())r.startsWith(`${e.id}:`)&&n.delete(r);return n}),y===e.id&&b((n[t]??n[t-1]??null)?.id??null)},Pe=(e,t)=>{let n=-1;if(e.key===`ArrowRight`?n=(t+1)%g.length:e.key===`ArrowLeft`?n=(t-1+g.length)%g.length:e.key===`Home`?n=0:e.key===`End`&&(n=g.length-1),n<0)return;e.preventDefault();let r=g[n];b(r.id),W.current.get(r.id)?.focus()},Fe=(0,v.useCallback)(e=>{B(null),r({root:e.root,devServerId:e.id}),z({server:e,since:o.now()})},[o,r]),Z=(0,v.useCallback)(e=>{e.running?Y(e.url):Fe(e)},[Y,Fe]);(0,v.useEffect)(()=>{if(R&&O){if(O.devServers.find(e=>e.running&&(e.id===R.server.id||e.port===R.server.port))){z(null),Y(R.server.url);return}o.now()-R.since>12e4&&(z(null),B(`Nothing answered on port ${R.server.port} within 2 minutes. Check the terminal for errors.`))}},[O,R,Y,o,De]),(0,v.useEffect)(()=>{if(!R)return;let e=setInterval(()=>Oe(o.now()),1e3);return()=>clearInterval(e)},[R,o]);let Q=(0,v.useCallback)(async e=>{if(e.url){let t=C(e.url,o.origin());t.kind===`loopback`?Y(t.url):L(t);return}if(e.artifactPath){let t=O?.artifacts.find(t=>t.path===e.artifactPath)?.kind??P(e.artifactPath);t?X(e.artifactPath,t):B(`That file cannot be previewed.`);return}if(e.devServerId){let t=(await J()??O)?.devServers.find(t=>t.id===e.devServerId);t?Z(t):B(`That dev server is no longer listed for this chat.`)}},[o,X,Z,Y,J,O]);(0,v.useEffect)(()=>{!n||n.nonce<=A||(A=n.nonce,Q(n))},[n,Q]);let $=G?.kind===`artifact`?`${G.id}:${G.reloadKey}`:null;(0,v.useEffect)(()=>{if(!u||!G||G.kind!==`artifact`||!$||V.has($))return;let t=G,n=$;H(e=>new Map(e).set(n,{status:`loading`})),(t.artifactKind===`md`?o.api.text(e,t.path).then(e=>({status:`text`,text:e})):o.api.ticket(e,t.path).then(e=>({status:`frame`,src:e.url}))).then(e=>{U.current&&H(t=>new Map(t).set(n,e))},e=>{let t=e instanceof s&&e.status===404?`This file is no longer in the chat's folder.`:e instanceof s&&e.status===413?`This file is larger than 5 MB, too large to preview.`:`This file could not be loaded.`;U.current&&H(e=>new Map(e).set(n,{status:`error`,message:t}))})},[u,G,$,V,o.api,e]);let Ie=e=>{G&&G.kind===`url`&&_(t=>t.map(t=>t.id===G.id&&t.kind===`url`?{...t,index:Math.min(t.history.length-1,Math.max(0,t.index+e))}:t))},Le=()=>{if(G){if(G.kind===`launcher`){J();return}_(e=>e.map(e=>e.id===G.id&&e.kind!==`launcher`?{...e,reloadKey:e.reloadKey+1}:e))}},Re=e=>{e.preventDefault();let t=C(N,o.origin());if(t.kind===`loopback`){L(null),G?.kind===`url`?je(t.url):Y(t.url);return}L(t)},ze=e=>{e.key===`Escape`&&(e.preventDefault(),F(K??(G?.kind===`artifact`?G.path:``)),L(null),e.currentTarget.blur())},Be=G?.kind===`url`&&G.index>0,Ve=G?.kind===`url`&&G.index<G.history.length-1;return(0,D.jsxs)(`div`,{className:E.pane,"data-compact":d||void 0,children:[(0,D.jsxs)(`div`,{className:E.strip,children:[(0,D.jsx)(`div`,{className:E.tabs,role:`tablist`,"aria-label":`Previews`,children:g.map((e,t)=>{let n=e.id===y,r=ye(e);return(0,D.jsxs)(`div`,{className:E.tab,"data-selected":n||void 0,role:`presentation`,children:[(0,D.jsxs)(`button`,{ref:t=>{t?W.current.set(e.id,t):W.current.delete(e.id)},type:`button`,role:`tab`,id:`preview-tab-${e.id}`,"aria-selected":n,"aria-controls":`preview-panel`,tabIndex:n?0:-1,className:E.tabButton,title:e.kind===`url`?e.history[e.index]:e.kind===`artifact`?e.path:`Choose what to preview`,onClick:()=>b(e.id),onKeyDown:e=>Pe(e,t),children:[e.kind===`artifact`?(0,D.jsx)(ae,{size:12}):e.kind===`url`?(0,D.jsx)(se,{size:12}):(0,D.jsx)(oe,{size:12}),(0,D.jsx)(`span`,{className:E.tabTitle,children:r})]}),(0,D.jsx)(`button`,{type:`button`,className:E.tabClose,"aria-label":`Close preview ${r}`,title:`Close`,onClick:()=>Ne(e),children:(0,D.jsx)(h,{size:12})})]},e.id)})}),(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(ie,{}),"aria-label":`New preview tab`,title:`New preview tab`,className:E.newTab,onClick:Me})]}),(0,D.jsxs)(`div`,{className:`${pe.header} ${E.toolbar}`,children:[(0,D.jsxs)(`div`,{className:E.nav,children:[(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(fe,{}),"aria-label":`Back`,title:`Back`,disabled:!Be,onClick:()=>Ie(-1)}),(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(ue,{}),"aria-label":`Forward`,title:`Forward`,disabled:!Ve,onClick:()=>Ie(1)}),(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(le,{}),"aria-label":q?`Refresh the list`:`Reload`,title:q?`Refresh the list`:`Reload`,disabled:!G&&q&&O===null,onClick:Le})]}),(0,D.jsx)(`form`,{className:E.addressForm,onSubmit:Re,role:`search`,"aria-label":`Preview address`,children:(0,D.jsx)(`input`,{ref:ke,className:E.address,value:N,onChange:e=>F(e.target.value),onKeyDown:ze,onFocus:e=>e.currentTarget.select(),placeholder:`localhost:5173`,"aria-label":`Address`,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,inputMode:`url`,readOnly:G?.kind===`artifact`})}),(0,D.jsxs)(`div`,{className:pe.actions,children:[d?null:(0,D.jsx)(ne,{"aria-label":`Frame width`,size:`sm`,value:x,onChange:S,options:[{value:`desktop`,label:(0,D.jsx)(ce,{size:14}),ariaLabel:`Desktop width`},{value:`phone`,label:(0,D.jsx)(de,{size:14}),ariaLabel:`375 px width`}]}),K?(0,D.jsx)(`a`,{className:E.external,href:K,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open in browser`,title:`Open in browser`,children:(0,D.jsx)(re,{})}):(0,D.jsx)(`span`,{className:E.external,"data-placeholder":`true`,"aria-hidden":`true`})]})]}),I?(0,D.jsx)(Ce,{note:I,onDismiss:()=>L(null)}):null,R?(0,D.jsxs)(`div`,{className:E.waiting,role:`status`,children:[(0,D.jsx)(`span`,{className:E.pulse,"aria-hidden":`true`}),(0,D.jsxs)(`span`,{className:E.waitingText,children:[`Starting `,(0,D.jsx)(`code`,{children:R.server.command??R.server.label}),` — waiting for `,w(R.server.url),` · `,Math.max(0,Math.round((De-R.since)/1e3)),`s`]}),(0,D.jsx)(m,{size:`sm`,variant:`ghost`,onClick:()=>z(null),children:`Stop waiting`})]}):null,Ee?(0,D.jsxs)(`div`,{className:E.notice,role:`alert`,children:[(0,D.jsx)(`span`,{children:Ee}),(0,D.jsx)(`button`,{type:`button`,className:E.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:()=>B(null),children:(0,D.jsx)(h,{size:12})})]}):null,(0,D.jsx)(`div`,{className:E.body,id:`preview-panel`,role:`tabpanel`,"aria-labelledby":G?`preview-tab-${G.id}`:void 0,children:q?(0,D.jsx)(Te,{targets:O,error:ve,roots:t,onOpenServer:Z,onOpenArtifact:e=>X(e.path,e.kind),onRetry:()=>void J(),onOpenTerminal:()=>r(t[0]?{root:t[0]}:{}),waitingId:R?.server.id??null}):G?.kind===`url`?(0,D.jsxs)(`div`,{className:E.stage,"data-device":x,children:[(0,D.jsx)(`iframe`,{className:E.frame,src:G.history[G.index],title:`Preview of ${ye(G)}`,sandbox:`allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-downloads`,referrerPolicy:`no-referrer`},`${G.id}:${G.index}:${G.reloadKey}`),(0,D.jsxs)(`p`,{className:E.frameHint,children:[`Blank page? Some servers refuse to be framed.`,` `,(0,D.jsx)(`a`,{href:G.history[G.index],target:`_blank`,rel:`noopener noreferrer`,children:`Open in browser ↗`})]})]}):G?.kind===`artifact`?(0,D.jsx)(we,{tab:G,content:$?V.get($)??{status:`loading`}:{status:`loading`},device:x,onRetry:Le}):null})]})}function Ce({note:e,onDismiss:t}){return(0,D.jsxs)(`div`,{className:E.addressNote,role:`status`,children:[e.kind===`external`?(0,D.jsxs)(`span`,{children:[`Only local dev servers open here.`,` `,(0,D.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:`Open in browser ↗`})]}):e.kind===`self`?(0,D.jsx)(`span`,{children:`That address is Verse itself.`}):(0,D.jsxs)(`span`,{children:[`Enter a local address, like `,(0,D.jsx)(`code`,{children:`localhost:5173`}),`.`]}),(0,D.jsx)(`button`,{type:`button`,className:E.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:t,children:(0,D.jsx)(h,{size:12})})]})}function we({tab:e,content:t,device:n,onRetry:r}){return t.status===`loading`?(0,D.jsxs)(`div`,{className:E.loading,"aria-busy":`true`,children:[(0,D.jsx)(i,{width:`50%`}),(0,D.jsx)(i,{width:`80%`})]}):t.status===`error`?(0,D.jsx)(g,{compact:!0,tone:`error`,title:`Preview unavailable`,body:t.message,action:(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:r,children:`Try again`})}):t.status===`text`?(0,D.jsx)(`article`,{className:E.markdown,"aria-label":e.path,children:(0,D.jsx)(f,{text:t.text})}):e.artifactKind===`image`?(0,D.jsx)(`div`,{className:E.imageStage,children:(0,D.jsx)(`img`,{className:E.image,src:t.src,alt:F(e.path)})}):(0,D.jsx)(`div`,{className:E.stage,"data-device":e.artifactKind===`pdf`?`desktop`:n,children:(0,D.jsx)(`iframe`,{className:E.frame,src:t.src,title:`Preview of ${e.path}`,...e.artifactKind===`pdf`?{}:{sandbox:`allow-scripts`},referrerPolicy:`no-referrer`},t.src)})}function Te({targets:e,error:t,roots:n,onOpenServer:r,onOpenArtifact:a,onRetry:o,onOpenTerminal:s,waitingId:c}){if(!e)return t?(0,D.jsx)(g,{compact:!0,tone:`error`,title:`Could not list what to preview`,body:t,action:(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:o,children:`Try again`})}):(0,D.jsxs)(`div`,{className:E.loading,"aria-busy":`true`,children:[(0,D.jsx)(i,{width:`35%`}),(0,D.jsx)(i,{width:`70%`}),(0,D.jsx)(i,{width:`60%`})]});let l=n.length>1;return e.devServers.length===0&&e.artifacts.length===0?(0,D.jsx)(g,{compact:!0,icon:(0,D.jsx)(oe,{size:20}),title:`Nothing to preview yet`,body:`Start a dev server in the terminal, or ask for an HTML report. Local servers and the files this chat writes show up here.`,action:(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:s,children:`Open a terminal`})}):(0,D.jsxs)(`div`,{className:E.launcher,children:[(0,D.jsxs)(`section`,{className:E.section,"aria-labelledby":`preview-servers-title`,children:[(0,D.jsx)(`h3`,{className:E.sectionTitle,id:`preview-servers-title`,children:`Dev servers`}),e.devServers.length===0?(0,D.jsxs)(`p`,{className:E.muted,children:[`No dev server found in this chat's folders. Add one to `,(0,D.jsx)(`code`,{children:`.claude/launch.json`}),`, or start it in the terminal.`]}):(0,D.jsx)(`ul`,{className:E.rows,children:e.devServers.map(e=>(0,D.jsxs)(`li`,{className:E.row,children:[(0,D.jsx)(`span`,{className:E.dot,"data-running":e.running||void 0,"aria-hidden":`true`}),(0,D.jsxs)(`span`,{className:E.rowMain,children:[(0,D.jsx)(`span`,{className:E.rowTitle,title:e.label,children:e.label}),(0,D.jsxs)(`span`,{className:E.rowMeta,title:`${w(e.url)} · ${e.running?`running`:`stopped`} · ${k[e.source]}${l?` · ${e.root}`:``}`,children:[w(e.url),` · `,e.running?`running`:`stopped`,` · `,k[e.source],l?` · ${F(e.root)}`:``]}),!e.running&&e.command&&e.command!==e.label?(0,D.jsx)(`code`,{className:E.rowCommand,title:e.command,children:e.command}):null]}),e.running?(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:()=>r(e),"aria-label":`Open ${e.label}`,children:`Open`}):(0,D.jsx)(m,{size:`sm`,variant:`subtle`,icon:(0,D.jsx)(_,{size:12}),busy:c===e.id,onClick:()=>r(e),"aria-label":`Start ${e.label}`,title:`Runs ${e.command??e.label} in a terminal tab`,children:`Start`})]},e.id))})]}),(0,D.jsxs)(`section`,{className:E.section,"aria-labelledby":`preview-files-title`,children:[(0,D.jsx)(`h3`,{className:E.sectionTitle,id:`preview-files-title`,children:`This chat's files`}),e.artifacts.length===0?(0,D.jsx)(`p`,{className:E.muted,children:`Ask the chat for a report or a page: HTML, Markdown, SVG, images and PDFs it writes appear here.`}):(0,D.jsx)(`ul`,{className:E.rows,children:e.artifacts.map(e=>{let t=e.bytes>5242880;return(0,D.jsxs)(`li`,{className:E.row,children:[(0,D.jsx)(ae,{size:14,className:E.fileIcon}),(0,D.jsxs)(`span`,{className:E.rowMain,children:[(0,D.jsx)(`span`,{className:E.rowTitle,title:e.path,children:e.path}),(0,D.jsxs)(`span`,{className:E.rowMeta,children:[ve[e.kind],` · `,T(e.bytes)]})]}),(0,D.jsx)(m,{size:`sm`,variant:`subtle`,disabled:t,title:t?`Larger than 5 MB`:void 0,onClick:()=>a(e),"aria-label":`Open ${e.path}`,children:`Open`})]},e.path)})})]})]})}export{he as PREVIEW_START_TIMEOUT_MS,I as PreviewPane,N as resetPreviewPaneForTest};
|
|
2
|
+
//# sourceMappingURL=PreviewPane-COid5A0f.js.map
|