@ashlr/hub 3.10.0 → 3.11.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 +156 -0
- package/README.md +343 -82
- package/dist/authority-surface.json +109 -29
- package/dist/build-identity.json +2 -2
- package/dist/cli/cloud.d.ts +39 -0
- package/dist/cli/cloud.js +448 -0
- package/dist/cli/cloud.js.map +1 -0
- package/dist/cli/completions.js +4 -0
- package/dist/cli/completions.js.map +1 -1
- package/dist/cli/help.js +2 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/cloud/backlog.d.ts +17 -0
- package/dist/core/cloud/backlog.js +177 -0
- package/dist/core/cloud/backlog.js.map +1 -0
- package/dist/core/cloud/budget.d.ts +19 -0
- package/dist/core/cloud/budget.js +99 -0
- package/dist/core/cloud/budget.js.map +1 -0
- package/dist/core/cloud/checkout.d.ts +41 -0
- package/dist/core/cloud/checkout.js +168 -0
- package/dist/core/cloud/checkout.js.map +1 -0
- package/dist/core/cloud/cloud-api.d.ts +86 -0
- package/dist/core/cloud/cloud-api.js +599 -0
- package/dist/core/cloud/cloud-api.js.map +1 -0
- package/dist/core/cloud/delivery-contract.d.ts +25 -0
- package/dist/core/cloud/delivery-contract.js +138 -0
- package/dist/core/cloud/delivery-contract.js.map +1 -0
- package/dist/core/cloud/improvement-backlog.d.ts +11 -0
- package/dist/core/cloud/improvement-backlog.js +26 -0
- package/dist/core/cloud/improvement-backlog.js.map +1 -0
- package/dist/core/cloud/launcher.d.ts +68 -0
- package/dist/core/cloud/launcher.js +312 -0
- package/dist/core/cloud/launcher.js.map +1 -0
- package/dist/core/cloud/service.d.ts +51 -0
- package/dist/core/cloud/service.js +215 -0
- package/dist/core/cloud/service.js.map +1 -0
- package/dist/core/cloud/store.d.ts +41 -0
- package/dist/core/cloud/store.js +278 -0
- package/dist/core/cloud/store.js.map +1 -0
- package/dist/core/cloud/tracker.d.ts +30 -0
- package/dist/core/cloud/tracker.js +152 -0
- package/dist/core/cloud/tracker.js.map +1 -0
- package/dist/core/cloud/types.d.ts +233 -0
- package/dist/core/cloud/types.js +73 -0
- package/dist/core/cloud/types.js.map +1 -0
- package/dist/core/daemon/capacity-publisher.d.ts +19 -0
- package/dist/core/daemon/capacity-publisher.js +49 -2
- package/dist/core/daemon/capacity-publisher.js.map +1 -1
- package/dist/core/daemon/overnight-status.d.ts +13 -0
- package/dist/core/daemon/overnight-status.js +93 -8
- package/dist/core/daemon/overnight-status.js.map +1 -1
- package/dist/core/fleet/dispatch-router.js +26 -9
- package/dist/core/fleet/dispatch-router.js.map +1 -1
- package/dist/core/fleet/fleet-runtime-journal.js +12 -5
- package/dist/core/fleet/fleet-runtime-journal.js.map +1 -1
- package/dist/core/fleet/fleet-types.d.ts +13 -0
- package/dist/core/routing/budget-store.js +11 -5
- package/dist/core/routing/budget-store.js.map +1 -1
- package/dist/core/routing/capacity-history-api.d.ts +30 -0
- package/dist/core/routing/capacity-history-api.js +147 -0
- package/dist/core/routing/capacity-history-api.js.map +1 -0
- package/dist/core/routing/capacity-history-types.d.ts +63 -0
- package/dist/core/routing/capacity-history-types.js +18 -0
- package/dist/core/routing/capacity-history-types.js.map +1 -0
- package/dist/core/routing/capacity-history.d.ts +130 -0
- package/dist/core/routing/capacity-history.js +654 -0
- package/dist/core/routing/capacity-history.js.map +1 -0
- package/dist/core/routing/headroom.d.ts +5 -1
- package/dist/core/routing/headroom.js +82 -41
- package/dist/core/routing/headroom.js.map +1 -1
- package/dist/core/routing/router.d.ts +8 -1
- package/dist/core/routing/router.js +49 -16
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/routing/seat-reasons.d.ts +35 -0
- package/dist/core/routing/seat-reasons.js +48 -0
- package/dist/core/routing/seat-reasons.js.map +1 -0
- package/dist/core/routing/types.d.ts +37 -0
- package/dist/core/routing/types.js.map +1 -1
- package/dist/core/verse/activity-api.d.ts +3 -1
- package/dist/core/verse/activity-api.js +16 -1
- package/dist/core/verse/activity-api.js.map +1 -1
- package/dist/core/verse/activity.d.ts +7 -0
- package/dist/core/verse/activity.js +23 -0
- package/dist/core/verse/activity.js.map +1 -1
- package/dist/core/verse/fleet-history-types.d.ts +12 -4
- package/dist/core/verse/fleet-history-types.js +4 -2
- package/dist/core/verse/fleet-history-types.js.map +1 -1
- package/dist/core/verse/fleet-live-api.d.ts +14 -1
- package/dist/core/verse/fleet-live-api.js +31 -11
- package/dist/core/verse/fleet-live-api.js.map +1 -1
- package/dist/core/verse/preferences.d.ts +3 -1
- package/dist/core/verse/preferences.js +5 -2
- package/dist/core/verse/preferences.js.map +1 -1
- package/dist/core/verse/types.d.ts +5 -1
- package/dist/core/verse/types.js.map +1 -1
- package/dist/core/verse/verse-api.d.ts +1 -1
- package/dist/core/verse/verse-api.js +4 -1
- package/dist/core/verse/verse-api.js.map +1 -1
- package/dist/core/vision/leader-cloud.d.ts +63 -0
- package/dist/core/vision/leader-cloud.js +134 -0
- package/dist/core/vision/leader-cloud.js.map +1 -0
- package/dist/core/vision/leader.d.ts +6 -0
- package/dist/core/vision/leader.js +12 -1
- package/dist/core/vision/leader.js.map +1 -1
- package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js → ActionMenu-CQvNJvHY.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js.map → ActionMenu-CQvNJvHY.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-Bywv_iYR.css +1 -0
- package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js.map +1 -0
- package/dist/core/web/public/next/assets/{App-DyBg1v_q.js → App-CimXmK0L.js} +5 -5
- package/dist/core/web/public/next/assets/{App-DyBg1v_q.js.map → App-CimXmK0L.js.map} +1 -1
- package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js.map +1 -0
- package/dist/core/web/public/next/assets/AreaTrend-LD9lCPkT.js +2 -0
- package/dist/core/web/public/next/assets/AreaTrend-LD9lCPkT.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-3V9pUyxm.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-CoMngwNB.js.map → AutonomySection-3V9pUyxm.js.map} +1 -1
- package/dist/core/web/public/next/assets/BranchBar-BZNQ50YE.css +1 -0
- package/dist/core/web/public/next/assets/BranchBar-U8UdpfEB.js +2 -0
- package/dist/core/web/public/next/assets/BranchBar-U8UdpfEB.js.map +1 -0
- package/dist/core/web/public/next/assets/BudgetControl-DOTlMSmW.js +2 -0
- package/dist/core/web/public/next/assets/BudgetControl-DOTlMSmW.js.map +1 -0
- package/dist/core/web/public/next/assets/BurnDown-x4PWH9JF.js +2 -0
- package/dist/core/web/public/next/assets/BurnDown-x4PWH9JF.js.map +1 -0
- package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js → Button-DYv_KKxr.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js.map → Button-DYv_KKxr.js.map} +1 -1
- package/dist/core/web/public/next/assets/CapacityStrip-C667yQe8.js +2 -0
- package/dist/core/web/public/next/assets/CapacityStrip-C667yQe8.js.map +1 -0
- package/dist/core/web/public/next/assets/CapacityStrip-Cc28CyWk.css +1 -0
- package/dist/core/web/public/next/assets/ChatSection-CCcIPpOq.js +3 -0
- package/dist/core/web/public/next/assets/{ChatSection-B9cdRKUh.js.map → ChatSection-CCcIPpOq.js.map} +1 -1
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js.map +1 -0
- package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js → CommandPalette-FiD4N8XD.js} +2 -2
- package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js.map → CommandPalette-FiD4N8XD.js.map} +1 -1
- package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js +2 -0
- package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js.map +1 -0
- package/dist/core/web/public/next/assets/Composer-ByzxOJK6.css +1 -0
- package/dist/core/web/public/next/assets/Composer.module-C8U73KdQ.js +2 -0
- package/dist/core/web/public/next/assets/{Composer.module-DJMdrqNt.js.map → Composer.module-C8U73KdQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/DiffPane-BAvvbBsf.css +1 -0
- package/dist/core/web/public/next/assets/DiffPane-DLJ3gGGK.js +2 -0
- package/dist/core/web/public/next/assets/DiffPane-DLJ3gGGK.js.map +1 -0
- package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js → DiffViewer-B7NWPjIO.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js.map → DiffViewer-B7NWPjIO.js.map} +1 -1
- package/dist/core/web/public/next/assets/DockHost-B4RaYOET.css +1 -0
- package/dist/core/web/public/next/assets/DockHost-DvR-hPhZ.js +2 -0
- package/dist/core/web/public/next/assets/DockHost-DvR-hPhZ.js.map +1 -0
- package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js → EmptyState-DhNgDDrF.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js.map → EmptyState-DhNgDDrF.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js → Epistemic-uARPnx9x.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js.map → Epistemic-uARPnx9x.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-CFiWeOEs.css +1 -0
- package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js +3 -0
- package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-CL8uHONq.js +2 -0
- package/dist/core/web/public/next/assets/Funnel-CL8uHONq.js.map +1 -0
- package/dist/core/web/public/next/assets/GearTray-C7k4l_BW.js +2 -0
- package/dist/core/web/public/next/assets/GearTray-C7k4l_BW.js.map +1 -0
- package/dist/core/web/public/next/assets/GrowthSection-DwdNSGj8.js +2 -0
- package/dist/core/web/public/next/assets/GrowthSection-DwdNSGj8.js.map +1 -0
- package/dist/core/web/public/next/assets/HandoffDialog-FPVOqOMN.js +2 -0
- package/dist/core/web/public/next/assets/HandoffDialog-FPVOqOMN.js.map +1 -0
- package/dist/core/web/public/next/assets/{Input-CTu0CycC.js → Input-B9-VLcHS.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-CTu0CycC.js.map → Input-B9-VLcHS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js → LeaderCard-4R0BhDzT.js} +2 -2
- package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js.map → LeaderCard-4R0BhDzT.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MatrixHeatmap-9dKgJ_pT.css → MatrixHeatmap-Bmnvo1l1.css} +1 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-DiuushcS.js +2 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-DiuushcS.js.map +1 -0
- package/dist/core/web/public/next/assets/McpSection-CJ__OJKl.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-1UncWBpW.js.map → McpSection-CJ__OJKl.js.map} +1 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-Cgh5f1-Q.css +1 -0
- package/dist/core/web/public/next/assets/MessageMarkdown-qWKyJvAQ.js +3 -0
- package/dist/core/web/public/next/assets/{MessageMarkdown-C4pl9LI5.js.map → MessageMarkdown-qWKyJvAQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js → MessageMarkdownRenderer-x05TrsrW.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js.map → MessageMarkdownRenderer-x05TrsrW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js → Meter-D-hncpkO.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js.map → Meter-D-hncpkO.js.map} +1 -1
- package/dist/core/web/public/next/assets/MindSection-BjXHkQPS.js +2 -0
- package/dist/core/web/public/next/assets/MindSection-BjXHkQPS.js.map +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-SkRxqV_I.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-SkRxqV_I.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BpvidnM2.css +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-rSd1ZHAR.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-rSd1ZHAR.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CG-nB1tr.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CG-nB1tr.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CruOt4JT.css +1 -0
- package/dist/core/web/public/next/assets/NewChatDialog-BeDQ1eW3.js +3 -0
- package/dist/core/web/public/next/assets/{NewChatDialog-B_BsS9pr.js.map → NewChatDialog-BeDQ1eW3.js.map} +1 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-CkTZtt-m.js +2 -0
- package/dist/core/web/public/next/assets/{OnboardingFlow-CtCPpgoX.js.map → OnboardingFlow-CkTZtt-m.js.map} +1 -1
- package/dist/core/web/public/next/assets/PreviewPane-DoMsJSG3.css +1 -0
- package/dist/core/web/public/next/assets/PreviewPane-kzbbSK4u.js +2 -0
- package/dist/core/web/public/next/assets/PreviewPane-kzbbSK4u.js.map +1 -0
- package/dist/core/web/public/next/assets/RailStatus-D-t2gPae.js +2 -0
- package/dist/core/web/public/next/assets/RailStatus-D-t2gPae.js.map +1 -0
- package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js → RefreshIndicator-BLnr9IOM.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js.map → RefreshIndicator-BLnr9IOM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js → ResourcePoolConsoleApp-BeG0gBif.js} +4 -4
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js.map → ResourcePoolConsoleApp-BeG0gBif.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-B3Z3O98t.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js +2 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js.map +1 -0
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js → RouteErrorBoundary-C5SxA2Dg.js} +2 -2
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js.map → RouteErrorBoundary-C5SxA2Dg.js.map} +1 -1
- package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js +2 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js.map +1 -0
- package/dist/core/web/public/next/assets/SeatSelector-DpvvbjNm.js +3 -0
- package/dist/core/web/public/next/assets/{SeatSelector-DaUO-zoK.js.map → SeatSelector-DpvvbjNm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js → Segmented-BL40udoO.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js.map → Segmented-BL40udoO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js → Select-FWLnAw_j.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js.map → Select-FWLnAw_j.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js → SessionInsightChip-CWye87Ju.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js.map → SessionInsightChip-CWye87Ju.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionSearch-YvCHFUuN.js +2 -0
- package/dist/core/web/public/next/assets/{SessionSearch-B5aQ0BCM.js.map → SessionSearch-YvCHFUuN.js.map} +1 -1
- package/dist/core/web/public/next/assets/SettingsSection-Dr18upeE.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-Dr18upeE.js.map +1 -0
- package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js → Sheet-DZKcQXQg.js} +2 -2
- package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js.map → Sheet-DZKcQXQg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js → ShortcutsOverlay-BpDimdPq.js} +2 -2
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js.map → ShortcutsOverlay-BpDimdPq.js.map} +1 -1
- package/dist/core/web/public/next/assets/Sidebar-BRc1vGDF.css +1 -0
- package/dist/core/web/public/next/assets/Sidebar-BoBzBEFX.js +3 -0
- package/dist/core/web/public/next/assets/Sidebar-BoBzBEFX.js.map +1 -0
- package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js → Slider-DUMo9HDD.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js.map → Slider-DUMo9HDD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js → StatusBadge-BwnBNFQr.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js.map → StatusBadge-BwnBNFQr.js.map} +1 -1
- package/dist/core/web/public/next/assets/StepBand-PDXMIlRk.js +2 -0
- package/dist/core/web/public/next/assets/StepBand-PDXMIlRk.js.map +1 -0
- package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js → Surface-B3TZVoER.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js.map → Surface-B3TZVoER.js.map} +1 -1
- package/dist/core/web/public/next/assets/Swimlane-DR4OgON_.js +2 -0
- package/dist/core/web/public/next/assets/Swimlane-DR4OgON_.js.map +1 -0
- package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js → Switch-CcR5Llk5.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js.map → Switch-CcR5Llk5.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js → Tag-_-K1h7Hk.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js.map → Tag-_-K1h7Hk.js.map} +1 -1
- package/dist/core/web/public/next/assets/TerminalPane-BwfMbnJz.css +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-_1aH4ndN.js +7 -0
- package/dist/core/web/public/next/assets/TerminalPane-_1aH4ndN.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BUsq-inZ.js +2 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-DKqAf-eD.js.map → UniverseConsoleApp-BUsq-inZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js → UniverseView-Dogy_dsB.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js.map → UniverseView-Dogy_dsB.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js +2 -0
- package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-DsB-Jqyl.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cxqr-3qc.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-BYW9dm90.css +1 -0
- package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js +10 -0
- package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-Ddfg2iLl.css +1 -0
- package/dist/core/web/public/next/assets/actions-s2lfm_5k.js +2 -0
- package/dist/core/web/public/next/assets/actions-s2lfm_5k.js.map +1 -0
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +1 -0
- package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js → budget-queries-wUshcovN.js} +2 -2
- package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js.map → budget-queries-wUshcovN.js.map} +1 -1
- package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js +2 -0
- package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js.map +1 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-Bj_9ztzs.js +2 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-Bj_9ztzs.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-CMSgAUKn.js +2 -0
- package/dist/core/web/public/next/assets/charts-CMSgAUKn.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js +2 -0
- package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js.map +1 -0
- package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js +2 -0
- package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js.map +1 -0
- package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js → command-bus-DqimKCUY.js} +2 -2
- package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js.map → command-bus-DqimKCUY.js.map} +1 -1
- package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js.map +1 -0
- package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js → composer-keys-DBRymxQn.js} +2 -2
- package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js.map → composer-keys-DBRymxQn.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-model-Dwd49-dp.js +2 -0
- package/dist/core/web/public/next/assets/context-model-Dwd49-dp.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-MT17V86_.js +2 -0
- package/dist/core/web/public/next/assets/context-model-MT17V86_.js.map +1 -0
- package/dist/core/web/public/next/assets/context-queries-xVKIeynP.js +2 -0
- package/dist/core/web/public/next/assets/context-queries-xVKIeynP.js.map +1 -0
- package/dist/core/web/public/next/assets/context.module-BijAfoJw.js +2 -0
- package/dist/core/web/public/next/assets/context.module-BijAfoJw.js.map +1 -0
- package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js → control-queries-DOZR-D8G.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js.map → control-queries-DOZR-D8G.js.map} +1 -1
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js +2 -0
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-icons-8EtARwUm.js +2 -0
- package/dist/core/web/public/next/assets/dock-icons-8EtARwUm.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-panes-UKS-mXhr.js +2 -0
- package/dist/core/web/public/next/assets/{dock-panes-BNTLvX7G.js.map → dock-panes-UKS-mXhr.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js → dock-store-BA1cHOYA.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js.map → dock-store-BA1cHOYA.js.map} +1 -1
- package/dist/core/web/public/next/assets/fleet-model-CNe8Wh-s.js +2 -0
- package/dist/core/web/public/next/assets/fleet-model-CNe8Wh-s.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js.map +1 -0
- package/dist/core/web/public/next/assets/format-B8DAVcn2.js +2 -0
- package/dist/core/web/public/next/assets/format-B8DAVcn2.js.map +1 -0
- package/dist/core/web/public/next/assets/format-DKrNjdwD.js +2 -0
- package/dist/core/web/public/next/assets/format-DKrNjdwD.js.map +1 -0
- package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js → git-model-CivuBY_D.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js.map → git-model-CivuBY_D.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-Di2PUgj4.js +2 -0
- package/dist/core/web/public/next/assets/global-Di2PUgj4.js.map +1 -0
- package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js → guarded-action-CvOHcqyH.js} +2 -2
- package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js.map → guarded-action-CvOHcqyH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{icons-DWb24OA6.js → icons-B_yuAgdN.js} +2 -2
- package/dist/core/web/public/next/assets/{icons-DWb24OA6.js.map → icons-B_yuAgdN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{index-afDA8cwW.js → index-oAAq8XJa.js} +3 -3
- package/dist/core/web/public/next/assets/{index-afDA8cwW.js.map → index-oAAq8XJa.js.map} +1 -1
- package/dist/core/web/public/next/assets/live-model-DCw_IFRI.js +2 -0
- package/dist/core/web/public/next/assets/live-model-DCw_IFRI.js.map +1 -0
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +2 -0
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +1 -0
- package/dist/core/web/public/next/assets/mind-B9PzLcl0.css +1 -0
- package/dist/core/web/public/next/assets/mind.module-vnuJcwvD.js +2 -0
- package/dist/core/web/public/next/assets/mind.module-vnuJcwvD.js.map +1 -0
- package/dist/core/web/public/next/assets/mutations-Dpsql5t7.js +2 -0
- package/dist/core/web/public/next/assets/{mutations-C6E10SPX.js.map → mutations-Dpsql5t7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js → overnight-queries-X-44Gsw5.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js.map → overnight-queries-X-44Gsw5.js.map} +1 -1
- package/dist/core/web/public/next/assets/pane-chrome-8JmEhHVD.css +1 -0
- package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js +2 -0
- package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js.map +1 -0
- package/dist/core/web/public/next/assets/primitives-BDIcUvob.js +1 -0
- package/dist/core/web/public/next/assets/{queries-BuYIEHst.js → queries-BA4rNGD-.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-BuYIEHst.js.map → queries-BA4rNGD-.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js → reasoning-pref-B9-DJUXP.js} +2 -2
- package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js.map → reasoning-pref-B9-DJUXP.js.map} +1 -1
- package/dist/core/web/public/next/assets/seat-subscription-CH6fW4fJ.js +2 -0
- package/dist/core/web/public/next/assets/seat-subscription-CH6fW4fJ.js.map +1 -0
- package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js → section-visibility-qFqc_d4Z.js} +2 -2
- package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js.map → section-visibility-qFqc_d4Z.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js → sidebar-model-M1GaQU5l.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js.map → sidebar-model-M1GaQU5l.js.map} +1 -1
- package/dist/core/web/public/next/assets/slots-Ds9ZIqUL.js +3 -0
- package/dist/core/web/public/next/assets/{slots-W8gkmdfE.js.map → slots-Ds9ZIqUL.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-data-J52iIGMD.js +2 -0
- package/dist/core/web/public/next/assets/surface-data-J52iIGMD.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js.map +1 -0
- package/dist/core/web/public/next/assets/tasks-model-ent8f0jZ.js +2 -0
- package/dist/core/web/public/next/assets/{tasks-model-CnYQzgxk.js.map → tasks-model-ent8f0jZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js → terminal-icons-DJTK7QpR.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js.map → terminal-icons-DJTK7QpR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js → tool-semantics-GX8ScuSH.js} +2 -2
- package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js.map → tool-semantics-GX8ScuSH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js → turn-files-BPHQzYuH.js} +2 -2
- package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js.map → turn-files-BPHQzYuH.js.map} +1 -1
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js +2 -0
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -0
- package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js → usage-queries-Bn8ccqyN.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js.map → usage-queries-Bn8ccqyN.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-guarded-action-C2HlSzkz.js +2 -0
- package/dist/core/web/public/next/assets/use-guarded-action-C2HlSzkz.js.map +1 -0
- package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js → use-ticker-BNc1H4ZC.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js.map → use-ticker-BNc1H4ZC.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-token-gate-B3IJL6bf.js +2 -0
- package/dist/core/web/public/next/assets/use-token-gate-B3IJL6bf.js.map +1 -0
- package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js → useActivity-Bk3XgXjL.js} +2 -2
- package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js.map → useActivity-Bk3XgXjL.js.map} +1 -1
- package/dist/core/web/public/next/assets/useChartWidth-BAtVgn2n.css +1 -0
- package/dist/core/web/public/next/assets/useChartWidth-lZ9PrQn0.js +2 -0
- package/dist/core/web/public/next/assets/useChartWidth-lZ9PrQn0.js.map +1 -0
- package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js → useSeatsRefresh-CG4jczeL.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js.map → useSeatsRefresh-CG4jczeL.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-model-D7NZQFAR.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-D7NZQFAR.js.map +1 -0
- package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js → verse-queries-DvIJcn6Z.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js.map → verse-queries-DvIJcn6Z.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-store-DjBWj04q.js +3 -0
- package/dist/core/web/public/next/assets/verse-store-DjBWj04q.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-ui-store-zafyzXKD.js +3 -0
- package/dist/core/web/public/next/assets/{verse-ui-store-KTTKfv-T.js.map → verse-ui-store-zafyzXKD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js → viewport-BEqGUoTA.js} +2 -2
- package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js.map → viewport-BEqGUoTA.js.map} +1 -1
- package/dist/core/web/public/next/assets/warmup-BR6pxAKs.js +3 -0
- package/dist/core/web/public/next/assets/warmup-BR6pxAKs.js.map +1 -0
- package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js → workspace-model-D_tWD5Wt.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js.map → workspace-model-D_tWD5Wt.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/Advanced-CHjxJt2z.css +0 -1
- package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js.map +0 -1
- package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js +0 -2
- package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-CoMngwNB.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js.map +0 -1
- package/dist/core/web/public/next/assets/BranchBar-C9BpPVLr.css +0 -1
- package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js +0 -2
- package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js.map +0 -1
- package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js +0 -2
- package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-wgFP9MUA.css +0 -1
- package/dist/core/web/public/next/assets/ChatSection-B9cdRKUh.js +0 -3
- package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js.map +0 -1
- package/dist/core/web/public/next/assets/Composer-CkcwbQhG.css +0 -1
- package/dist/core/web/public/next/assets/Composer.module-DJMdrqNt.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffPane-Csboxnn0.css +0 -1
- package/dist/core/web/public/next/assets/DockHost-BGnTgdIb.css +0 -1
- package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js +0 -3
- package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-w9AjqfTR.css +0 -1
- package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js +0 -2
- package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js.map +0 -1
- package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js +0 -2
- package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js.map +0 -1
- package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js +0 -2
- package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js.map +0 -1
- package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js +0 -2
- package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js.map +0 -1
- package/dist/core/web/public/next/assets/McpSection-1UncWBpW.js +0 -2
- package/dist/core/web/public/next/assets/MessageMarkdown-C4pl9LI5.js +0 -3
- package/dist/core/web/public/next/assets/MessageMarkdown-Czcl3L_Q.css +0 -1
- package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-SkhvvdLb.css +0 -1
- package/dist/core/web/public/next/assets/NewChatDialog-B_BsS9pr.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingFlow-CtCPpgoX.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js.map +0 -1
- package/dist/core/web/public/next/assets/PreviewPane-WQJFjSXe.css +0 -1
- package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js.map +0 -1
- package/dist/core/web/public/next/assets/SeatSelector-DaUO-zoK.js +0 -3
- package/dist/core/web/public/next/assets/SessionSearch-B5aQ0BCM.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js.map +0 -1
- package/dist/core/web/public/next/assets/Sidebar-DfD8MNZt.css +0 -1
- package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js +0 -3
- package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js.map +0 -1
- package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js.map +0 -1
- package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js +0 -2
- package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js +0 -7
- package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-CmE2QL-Q.css +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-DKqAf-eD.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js.map +0 -1
- package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-C0V221WL.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-DQXMVDf7.css +0 -1
- package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js +0 -10
- package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-Bszsdpms.js +0 -2
- package/dist/core/web/public/next/assets/actions-Bszsdpms.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-Dug8YIf0.css +0 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js +0 -2
- package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-D4NaLaXA.js +0 -2
- package/dist/core/web/public/next/assets/charts-D4NaLaXA.js.map +0 -1
- package/dist/core/web/public/next/assets/colors-B-vHsX1S.js +0 -2
- package/dist/core/web/public/next/assets/colors-B-vHsX1S.js.map +0 -1
- package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js +0 -2
- package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js.map +0 -1
- package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js +0 -2
- package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js.map +0 -1
- package/dist/core/web/public/next/assets/context.module-B_k02HNU.js +0 -2
- package/dist/core/web/public/next/assets/context.module-B_k02HNU.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js +0 -2
- package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-panes-BNTLvX7G.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +0 -1
- package/dist/core/web/public/next/assets/format-BNYWGJat.js +0 -2
- package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +0 -1
- package/dist/core/web/public/next/assets/global-DVgMguLr.js +0 -2
- package/dist/core/web/public/next/assets/global-DVgMguLr.js.map +0 -1
- package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js +0 -2
- package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js.map +0 -1
- package/dist/core/web/public/next/assets/mind-B-lYfSUJ.css +0 -1
- package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js +0 -2
- package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js.map +0 -1
- package/dist/core/web/public/next/assets/mutations-C6E10SPX.js +0 -2
- package/dist/core/web/public/next/assets/primitives-DQvYikjm.js +0 -1
- package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js +0 -2
- package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js.map +0 -1
- package/dist/core/web/public/next/assets/slots-W8gkmdfE.js +0 -3
- package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js +0 -2
- package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js.map +0 -1
- package/dist/core/web/public/next/assets/tasks-model-CnYQzgxk.js +0 -2
- package/dist/core/web/public/next/assets/types-Dypu22dp.js +0 -3
- package/dist/core/web/public/next/assets/types-Dypu22dp.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js.map +0 -1
- package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js +0 -2
- package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js.map +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-B8E5mJgM.css +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js +0 -2
- package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-E98kXngO.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-E98kXngO.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js +0 -2
- package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-ui-store-KTTKfv-T.js +0 -3
package/dist/core/web/public/next/assets/{tasks-model-CnYQzgxk.js.map → tasks-model-ent8f0jZ.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-model-
|
|
1
|
+
{"version":3,"file":"tasks-model-ent8f0jZ.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/chat/tasks-model.ts"],"sourcesContent":["/**\n * routes/verse/chat/tasks-model.ts — what is running right now, for the\n * \"◌ 3 running tasks\" chip and the dock's Tasks pane (SPEC-310C §2–§3, C2).\n *\n * Two kinds of task, because the operator is waiting on both:\n * - THIS TURN: the open chat's tool calls and subagents since its last ask\n * (a running `Task` is a subagent; everything else is a tool);\n * - OTHER CHATS: every other chat with a turn in flight, from activity\n * (C1) when it answers, else from the session list's `status`.\n *\n * Pure over transcript items and the session / activity lists.\n */\nimport type { VerseEngine, VerseSession } from '../../../data/api-types.js';\nimport type { VerseActivityResponse } from '../../../../core/verse/workbench-types.js';\nimport type { TranscriptItem } from '../verse-store.js';\nimport { summarizeToolInput } from '../verse-model.js';\nimport { liveLine } from './sidebar-model.js';\nimport { actionForName } from './tool-semantics.js';\n\nexport type TurnTaskStatus = 'running' | 'done' | 'failed';\n\nexport interface TurnTask {\n toolUseId: string;\n kind: 'subagent' | 'tool';\n /** Tool name as the CLI spelled it. */\n name: string;\n /** What it is doing: the command, the path, the subagent's description. */\n detail: string;\n /** ISO time the call started. */\n startedAt: string;\n status: TurnTaskStatus;\n durationMs: number | null;\n}\n\nexport interface ChatTask {\n sessionId: string;\n title: string;\n engine: VerseEngine;\n /** ISO start of the running turn when activity knows it; null = unknown. */\n startedAt: string | null;\n /** The muted \"what it is doing\" line; null when unknown. */\n live: string | null;\n}\n\n/** The last turn's tool calls, running first (in start order), then finished (newest first). */\nexport function currentTurnTasks(items: readonly TranscriptItem[]): TurnTask[] {\n let start = 0;\n for (let i = items.length - 1; i >= 0; i -= 1) {\n if (items[i]!.kind === 'user') {\n start = i;\n break;\n }\n }\n const running: TurnTask[] = [];\n const finished: TurnTask[] = [];\n for (let i = start; i < items.length; i += 1) {\n const item = items[i]!;\n if (item.kind !== 'tool') continue;\n const task: TurnTask = {\n toolUseId: item.toolUseId,\n kind: actionForName(item.name) === 'task' ? 'subagent' : 'tool',\n name: item.name,\n detail: summarizeToolInput(item.input) || item.name,\n startedAt: item.at,\n status: item.result === null ? 'running' : item.result.isError ? 'failed' : 'done',\n durationMs: item.durationMs,\n };\n (task.status === 'running' ? running : finished).push(task);\n }\n return [...running, ...finished.reverse()];\n}\n\nexport function otherRunningChats(\n sessions: readonly VerseSession[],\n activity: VerseActivityResponse | null,\n currentId: string | null,\n): ChatTask[] {\n const out = new Map<string, ChatTask>();\n for (const row of activity?.running ?? []) {\n if (row.sessionId === currentId) continue;\n out.set(row.sessionId, {\n sessionId: row.sessionId,\n title: row.title,\n engine: row.engine,\n startedAt: row.startedAt,\n live: liveLine(row.live),\n });\n }\n // The session list can know about a run activity has not reported (a\n // server without C1's route, or the few seconds between polls).\n for (const session of sessions) {\n if (session.id === currentId || session.status !== 'running' || out.has(session.id)) continue;\n out.set(session.id, { sessionId: session.id, title: session.title, engine: session.engine, startedAt: null, live: null });\n }\n return [...out.values()];\n}\n\nexport interface TaskCounts {\n /** Running calls in this turn. */\n turn: number;\n /** Of which subagents. */\n subagents: number;\n /** Other chats running. */\n chats: number;\n total: number;\n}\n\nexport function countTasks(turn: readonly TurnTask[], chats: readonly ChatTask[]): TaskCounts {\n const running = turn.filter((t) => t.status === 'running');\n return {\n turn: running.length,\n subagents: running.filter((t) => t.kind === 'subagent').length,\n chats: chats.length,\n total: running.length + chats.length,\n };\n}\n\n/** \"3 running tasks\" — and what they are, for the chip's accessible name. */\nexport function describeTaskCounts(counts: TaskCounts): string {\n const head = `${counts.total} running task${counts.total === 1 ? '' : 's'}`;\n const parts: string[] = [];\n if (counts.turn > 0) parts.push(`${counts.turn} in this chat`);\n if (counts.chats > 0) parts.push(`${counts.chats} other chat${counts.chats === 1 ? '' : 's'}`);\n return parts.length > 0 ? `${head}: ${parts.join(', ')}` : head;\n}\n"],"mappings":"+IA6CA,SAAgB,EAAiB,EAA8C,CAC7E,IAAI,EAAQ,EACZ,IAAK,IAAI,EAAI,EAAM,OAAS,EAAG,GAAK,EAAG,IACrC,GAAI,EAAM,EAAE,CAAE,OAAS,OAAQ,CAC7B,EAAQ,EACR,KACF,CAEF,IAAM,EAAsB,CAAC,EACvB,EAAuB,CAAC,EAC9B,IAAK,IAAI,EAAI,EAAO,EAAI,EAAM,OAAQ,GAAK,EAAG,CAC5C,IAAM,EAAO,EAAM,GACnB,GAAI,EAAK,OAAS,OAAQ,SAC1B,IAAM,EAAiB,CACrB,UAAW,EAAK,UAChB,KAAM,EAAc,EAAK,IAAI,IAAM,OAAS,WAAa,OACzD,KAAM,EAAK,KACX,OAAQ,EAAmB,EAAK,KAAK,GAAK,EAAK,KAC/C,UAAW,EAAK,GAChB,OAAQ,EAAK,SAAW,KAAO,UAAY,EAAK,OAAO,QAAU,SAAW,OAC5E,WAAY,EAAK,UACnB,GACC,EAAK,SAAW,UAAY,EAAU,EAAA,CAAU,KAAK,CAAI,CAC5D,CACA,MAAO,CAAC,GAAG,EAAS,GAAG,EAAS,QAAQ,CAAC,CAC3C,CAEA,SAAgB,EACd,EACA,EACA,EACY,CACZ,IAAM,EAAM,IAAI,IAChB,IAAK,IAAM,KAAO,GAAU,SAAW,CAAC,EAClC,EAAI,YAAc,GACtB,EAAI,IAAI,EAAI,UAAW,CACrB,UAAW,EAAI,UACf,MAAO,EAAI,MACX,OAAQ,EAAI,OACZ,UAAW,EAAI,UACf,KAAM,EAAS,EAAI,IAAI,CACzB,CAAC,EAIH,IAAK,IAAM,KAAW,EAChB,EAAQ,KAAO,GAAa,EAAQ,SAAW,WAAa,EAAI,IAAI,EAAQ,EAAE,GAClF,EAAI,IAAI,EAAQ,GAAI,CAAE,UAAW,EAAQ,GAAI,MAAO,EAAQ,MAAO,OAAQ,EAAQ,OAAQ,UAAW,KAAM,KAAM,IAAK,CAAC,EAE1H,MAAO,CAAC,GAAG,EAAI,OAAO,CAAC,CACzB,CAYA,SAAgB,EAAW,EAA2B,EAAwC,CAC5F,IAAM,EAAU,EAAK,OAAQ,GAAM,EAAE,SAAW,SAAS,EACzD,MAAO,CACL,KAAM,EAAQ,OACd,UAAW,EAAQ,OAAQ,GAAM,EAAE,OAAS,UAAU,CAAC,CAAC,OACxD,MAAO,EAAM,OACb,MAAO,EAAQ,OAAS,EAAM,MAChC,CACF,CAGA,SAAgB,EAAmB,EAA4B,CAC7D,IAAM,EAAO,GAAG,EAAO,MAAM,eAAe,EAAO,QAAU,EAAI,GAAK,MAChE,EAAkB,CAAC,EAGzB,OAFI,EAAO,KAAO,GAAG,EAAM,KAAK,GAAG,EAAO,KAAK,cAAc,EACzD,EAAO,MAAQ,GAAG,EAAM,KAAK,GAAG,EAAO,MAAM,aAAa,EAAO,QAAU,EAAI,GAAK,KAAK,EACtF,EAAM,OAAS,EAAI,GAAG,EAAK,IAAI,EAAM,KAAK,IAAI,IAAM,CAC7D"}
|
package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js → terminal-icons-DJTK7QpR.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=terminal-icons-
|
|
1
|
+
import{n as e}from"./index-oAAq8XJa.js";var t=e();function n({size:e=16,children:n,...r}){return(0,t.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,...r,children:n})}function r(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`rect`,{x:`1.75`,y:`2.75`,width:`12.5`,height:`10.5`,rx:`1.5`}),(0,t.jsx)(`path`,{d:`m4.5 6.25 2 1.75-2 1.75M8.25 10h3`})]})}function i(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`rect`,{x:`1.75`,y:`2.75`,width:`12.5`,height:`10.5`,rx:`1.5`}),(0,t.jsx)(`path`,{d:`M1.75 5.75h12.5M4 4.25h.01M5.75 4.25h.01`})]})}function a(e){return(0,t.jsx)(n,{...e,children:(0,t.jsx)(`path`,{d:`m4.5 6.5 3.5 3.5 3.5-3.5`})})}function o(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`path`,{d:`M2.5 6v4h2.5l3.5 3V3L5 6H2.5Z`}),(0,t.jsx)(`path`,{d:`M11 5.5a3.5 3.5 0 0 1 0 5M12.75 3.75a6 6 0 0 1 0 8.5`})]})}function s(e){return(0,t.jsx)(n,{...e,children:(0,t.jsx)(`path`,{d:`M13 8H3.5M7.5 4 3.5 8l4 4`})})}function c(e){return(0,t.jsx)(n,{...e,children:(0,t.jsx)(`path`,{d:`M3 8h9.5M8.5 4l4 4-4 4`})})}function l(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`path`,{d:`M13 8a5 5 0 1 1-1.46-3.54`}),(0,t.jsx)(`path`,{d:`M13 2.75v2.5h-2.5`})]})}function u(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`rect`,{x:`1.75`,y:`2.75`,width:`12.5`,height:`8.5`,rx:`1.25`}),(0,t.jsx)(`path`,{d:`M6 13.75h4M8 11.25v2.5`})]})}function d(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`rect`,{x:`4.75`,y:`1.75`,width:`6.5`,height:`12.5`,rx:`1.5`}),(0,t.jsx)(`path`,{d:`M7.25 12h1.5`})]})}function f(e){return(0,t.jsx)(n,{...e,children:(0,t.jsx)(`path`,{d:`M5 3.5v9l7-4.5-7-4.5Z`})})}function p(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`path`,{d:`M9 1.75H4.25a1 1 0 0 0-1 1v10.5a1 1 0 0 0 1 1h7.5a1 1 0 0 0 1-1V5.5L9 1.75Z`}),(0,t.jsx)(`path`,{d:`M9 1.75V5.5h3.75`})]})}function m(e){return(0,t.jsxs)(n,{...e,children:[(0,t.jsx)(`rect`,{x:`2.25`,y:`2.25`,width:`11.5`,height:`4.5`,rx:`1`}),(0,t.jsx)(`rect`,{x:`2.25`,y:`9.25`,width:`11.5`,height:`4.5`,rx:`1`}),(0,t.jsx)(`path`,{d:`M4.75 4.5h.01M4.75 11.5h.01`})]})}export{p as a,i as c,m as d,r as f,u as i,l,c as n,d as o,a as r,f as s,s as t,o as u};
|
|
2
|
+
//# sourceMappingURL=terminal-icons-DJTK7QpR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-icons-
|
|
1
|
+
{"version":3,"file":"terminal-icons-DJTK7QpR.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/dock/terminal/terminal-icons.tsx"],"sourcesContent":["/**\n * dock/terminal/terminal-icons.tsx — the Terminal / Preview panes' own 16px\n * glyphs (unit C4). Same grammar as components/primitives/icons.tsx (16-unit\n * box, 1.5 stroke, round caps, currentColor, decorative) so they sit beside\n * the shared set; kept here because the shared set is not this unit's file.\n */\nimport type { ReactNode, SVGProps } from 'react';\n\nexport interface GlyphProps extends Omit<SVGProps<SVGSVGElement>, 'children' | 'viewBox'> {\n size?: number;\n}\n\nfunction Glyph({ size = 16, children, ...rest }: GlyphProps & { children: ReactNode }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}\n strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\" focusable=\"false\" {...rest}>\n {children}\n </svg>\n );\n}\n\nexport function TerminalGlyph(p: GlyphProps) {\n return <Glyph {...p}><rect x=\"1.75\" y=\"2.75\" width=\"12.5\" height=\"10.5\" rx=\"1.5\" /><path d=\"m4.5 6.25 2 1.75-2 1.75M8.25 10h3\" /></Glyph>;\n}\n\nexport function PreviewGlyph(p: GlyphProps) {\n return <Glyph {...p}><rect x=\"1.75\" y=\"2.75\" width=\"12.5\" height=\"10.5\" rx=\"1.5\" /><path d=\"M1.75 5.75h12.5M4 4.25h.01M5.75 4.25h.01\" /></Glyph>;\n}\n\nexport function ChevronDownGlyph(p: GlyphProps) {\n return <Glyph {...p}><path d=\"m4.5 6.5 3.5 3.5 3.5-3.5\" /></Glyph>;\n}\n\n/** Screen-reader mode: a speaker with sound lines. */\nexport function ScreenReaderGlyph(p: GlyphProps) {\n return <Glyph {...p}><path d=\"M2.5 6v4h2.5l3.5 3V3L5 6H2.5Z\" /><path d=\"M11 5.5a3.5 3.5 0 0 1 0 5M12.75 3.75a6 6 0 0 1 0 8.5\" /></Glyph>;\n}\n\nexport function ArrowLeftGlyph(p: GlyphProps) {\n return <Glyph {...p}><path d=\"M13 8H3.5M7.5 4 3.5 8l4 4\" /></Glyph>;\n}\n\nexport function ArrowRightGlyph(p: GlyphProps) {\n return <Glyph {...p}><path d=\"M3 8h9.5M8.5 4l4 4-4 4\" /></Glyph>;\n}\n\nexport function ReloadGlyph(p: GlyphProps) {\n return <Glyph {...p}><path d=\"M13 8a5 5 0 1 1-1.46-3.54\" /><path d=\"M13 2.75v2.5h-2.5\" /></Glyph>;\n}\n\nexport function DesktopGlyph(p: GlyphProps) {\n return <Glyph {...p}><rect x=\"1.75\" y=\"2.75\" width=\"12.5\" height=\"8.5\" rx=\"1.25\" /><path d=\"M6 13.75h4M8 11.25v2.5\" /></Glyph>;\n}\n\nexport function PhoneGlyph(p: GlyphProps) {\n return <Glyph {...p}><rect x=\"4.75\" y=\"1.75\" width=\"6.5\" height=\"12.5\" rx=\"1.5\" /><path d=\"M7.25 12h1.5\" /></Glyph>;\n}\n\nexport function PlayGlyph(p: GlyphProps) {\n return <Glyph {...p}><path d=\"M5 3.5v9l7-4.5-7-4.5Z\" /></Glyph>;\n}\n\nexport function FileGlyph(p: GlyphProps) {\n return <Glyph {...p}><path d=\"M9 1.75H4.25a1 1 0 0 0-1 1v10.5a1 1 0 0 0 1 1h7.5a1 1 0 0 0 1-1V5.5L9 1.75Z\" /><path d=\"M9 1.75V5.5h3.75\" /></Glyph>;\n}\n\nexport function ServerGlyph(p: GlyphProps) {\n return <Glyph {...p}><rect x=\"2.25\" y=\"2.25\" width=\"11.5\" height=\"4.5\" rx=\"1\" /><rect x=\"2.25\" y=\"9.25\" width=\"11.5\" height=\"4.5\" rx=\"1\" /><path d=\"M4.75 4.5h.01M4.75 11.5h.01\" /></Glyph>;\n}\n"],"mappings":"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"}
|
package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js → tool-semantics-GX8ScuSH.js}
RENAMED
|
@@ -2,5 +2,5 @@ import{n as e,r as t}from"./line-diff-B5Eonif2.js";var n=[`edit`,`create`,`delet
|
|
|
2
2
|
`).slice(2).join(`
|
|
3
3
|
`))}),i.length===0?``:[`--- a/${n}`,`+++ b/${n}`,...i].join(`
|
|
4
4
|
`)}function C(t,n){let r=e(n);return r.length===0?``:[`--- /dev/null`,`+++ b/${t}`,`@@ -0,0 +1,${r.length} @@`,...r.map(e=>`+${e}`)].join(`
|
|
5
|
-
`)}var w=2e5;function T(e){return e.length<=2e5?e:`${e.slice(0,w)}\n… (${e.length-w} more characters not shown)`}var E=/\bhas been updated\b|\bsuccessfully (?:over)?written\b|\bupdated successfully\b/i,D=/\b(?:file )?created successfully\b|\bnew file created\b/i;function O({name:e,input:t,result:n}){let r=i(e),c=a(e),u=o(t),d=n?.output??``,p=n===null;c===`create`&&n&&E.test(d)&&!D.test(d)&&(c=`edit`);let h=l(t),g=h[0]??null,_=null;if(u)for(let e of f){let t=s(u[e]);if(t){_={command:t,exitCode:n?m(d):null},c===`other`&&(c=`command`);break}}let v=null,w=null;if(n&&y(d)&&(v={text:T(d),anchored:!0,multiFile:b(d)>1,origin:`output`}),!v&&u){let e=s(u.patch)??s(u.diff);e&&y(e)&&(v={text:T(e),anchored:!0,multiFile:b(e)>1,origin:`payload`})}if(!v&&u&&g){let e=x(u),t=u.edits??u.replacements??u.changes,n=Array.isArray(t)?t.map(x).filter(e=>e!==null):[],r=n.length>0?n:e?[e]:[];if(r.length>0){let e=S(g,r);e&&(v={text:T(e),anchored:!1,multiFile:!1,origin:`payload`}),c===`other`&&(c=`edit`)}}if(!v&&u&&g){let e=typeof u.content==`string`?u.content:typeof u.contents==`string`?u.contents:typeof u.text==`string`&&(c===`create`||c===`edit`)?u.text:null;if(e!==null){if(c===`create`){let t=C(g,e);t&&(v={text:T(t),anchored:!0,multiFile:!1,origin:`payload`})}else w={path:g,text:T(e)}}}let O=n!==null&&(n.isError||(_?.exitCode??0)>0);return{base:r,action:c,paths:h,command:_,diff:v,written:w,failed:O,pending:p}}function k(e){return`verse-tool-${e.replace(/[^A-Za-z0-9_-]/g,``)}`}export{
|
|
6
|
-
//# sourceMappingURL=tool-semantics-
|
|
5
|
+
`)}var w=2e5;function T(e){return e.length<=2e5?e:`${e.slice(0,w)}\n… (${e.length-w} more characters not shown)`}var E=/\bhas been updated\b|\bsuccessfully (?:over)?written\b|\bupdated successfully\b/i,D=/\b(?:file )?created successfully\b|\bnew file created\b/i;function O({name:e,input:t,result:n}){let r=i(e),c=a(e),u=o(t),d=n?.output??``,p=n===null;c===`create`&&n&&E.test(d)&&!D.test(d)&&(c=`edit`);let h=l(t),g=h[0]??null,_=null;if(u)for(let e of f){let t=s(u[e]);if(t){_={command:t,exitCode:n?m(d):null},c===`other`&&(c=`command`);break}}let v=null,w=null;if(n&&y(d)&&(v={text:T(d),anchored:!0,multiFile:b(d)>1,origin:`output`}),!v&&u){let e=s(u.patch)??s(u.diff);e&&y(e)&&(v={text:T(e),anchored:!0,multiFile:b(e)>1,origin:`payload`})}if(!v&&u&&g){let e=x(u),t=u.edits??u.replacements??u.changes,n=Array.isArray(t)?t.map(x).filter(e=>e!==null):[],r=n.length>0?n:e?[e]:[];if(r.length>0){let e=S(g,r);e&&(v={text:T(e),anchored:!1,multiFile:!1,origin:`payload`}),c===`other`&&(c=`edit`)}}if(!v&&u&&g){let e=typeof u.content==`string`?u.content:typeof u.contents==`string`?u.contents:typeof u.text==`string`&&(c===`create`||c===`edit`)?u.text:null;if(e!==null){if(c===`create`){let t=C(g,e);t&&(v={text:T(t),anchored:!0,multiFile:!1,origin:`payload`})}else w={path:g,text:T(e)}}}let O=n!==null&&(n.isError||(_?.exitCode??0)>0);return{base:r,action:c,paths:h,command:_,diff:v,written:w,failed:O,pending:p}}function k(e){return`verse-tool-${e.replace(/[^A-Za-z0-9_-]/g,``)}`}export{l as a,d as i,a as n,O as o,u as r,k as s,n as t};
|
|
6
|
+
//# sourceMappingURL=tool-semantics-GX8ScuSH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-semantics-CTRuLF5j.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/chat/tool-semantics.ts"],"sourcesContent":["/**\n * routes/verse/chat/tool-semantics.ts — what a tool call actually DID.\n *\n * An agentic session is mostly tool work, and `{name, input, result}` is too\n * raw to read: the transcript can tell you `Edit` ran with some JSON, not\n * that `src/core/api.ts` gained four lines. Everything downstream — the\n * per-turn file-activity summary, the diff rendering, the command block, the\n * error affordances — needs the same derived facts, so they are derived ONCE\n * here, as pure functions over the event payload.\n *\n * Deliberately conservative. A fact that cannot be read out of the payload\n * (an exit code the tool never printed, the file offset an `Edit` payload\n * does not carry) is reported as unknown rather than guessed — DESIGN §6,\n * and the same discipline VERSE-TELEMETRY-V2 imposes on provider data.\n */\nimport { splitLines, unifiedDiffFor } from './line-diff.js';\n\nexport type ToolAction =\n | 'read'\n | 'edit'\n | 'create'\n | 'delete'\n | 'command'\n | 'search'\n | 'task'\n | 'web'\n | 'other';\n\n/** Actions that change the working tree — the blast radius of a turn. */\nexport const MUTATING_ACTIONS: readonly ToolAction[] = ['edit', 'create', 'delete'];\n\nexport interface ToolDiff {\n /** Unified-diff text, ready for `routes/inbox/diff-parser.ts`. */\n text: string;\n /**\n * False when the line numbers are synthetic. An `Edit` payload says what\n * was replaced, never where it sat, so the viewer hides the gutter rather\n * than printing numbers that are not the file's.\n */\n anchored: boolean;\n /** More than one file — the inbox `DiffViewer` file tree earns its place. */\n multiFile: boolean;\n /** Where the diff came from, for the block's caption. */\n origin: 'payload' | 'output';\n}\n\nexport interface CommandFacts {\n command: string;\n /** Only when the result states one in so many words; otherwise unknown. */\n exitCode: number | null;\n}\n\nexport interface WrittenContent {\n path: string;\n text: string;\n}\n\nexport interface ToolFacts {\n /** Normalized name with any MCP prefix removed (`ashlr__edit` → `edit`). */\n base: string;\n action: ToolAction;\n /** Files this call touched, most significant first; may be empty. */\n paths: string[];\n command: CommandFacts | null;\n diff: ToolDiff | null;\n /** A whole file written whose previous contents were never in the payload. */\n written: WrittenContent | null;\n /** The tool reported failure, or stated a non-zero exit. */\n failed: boolean;\n /** Still waiting for its result. */\n pending: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Name → action\n// ---------------------------------------------------------------------------\n\nconst ACTION_BY_NAME = new Map<string, ToolAction>([\n ['read', 'read'], ['readfile', 'read'], ['read_file', 'read'], ['view', 'read'],\n ['notebookread', 'read'], ['notebook_read', 'read'], ['cat', 'read'], ['open', 'read'],\n ['edit', 'edit'], ['multiedit', 'edit'], ['multi_edit', 'edit'], ['notebookedit', 'edit'],\n ['notebook_edit', 'edit'], ['str_replace', 'edit'], ['str_replace_editor', 'edit'],\n ['str_replace_based_edit_tool', 'edit'], ['apply_patch', 'edit'], ['patch', 'edit'],\n ['edit_structural', 'edit'], ['search_replace_regex', 'edit'], ['rename_file', 'edit'],\n ['update', 'edit'], ['applydiff', 'edit'], ['apply_diff', 'edit'],\n ['write', 'create'], ['create', 'create'], ['create_file', 'create'], ['writefile', 'create'],\n ['write_file', 'create'], ['new_file', 'create'],\n ['delete', 'delete'], ['delete_file', 'delete'], ['remove_file', 'delete'], ['rm', 'delete'],\n ['bash', 'command'], ['shell', 'command'], ['exec', 'command'], ['run', 'command'],\n ['run_command', 'command'], ['runcommand', 'command'], ['run_terminal_cmd', 'command'],\n ['bash_start', 'command'], ['bash_tail', 'command'], ['terminal', 'command'], ['test', 'command'],\n ['grep', 'search'], ['glob', 'search'], ['search', 'search'], ['find', 'search'],\n ['codebase_search', 'search'], ['ls', 'search'], ['tree', 'search'], ['list_dir', 'search'],\n ['task', 'task'], ['agent', 'task'], ['dispatch_agent', 'task'], ['subagent', 'task'],\n ['webfetch', 'web'], ['websearch', 'web'], ['fetch', 'web'], ['http', 'web'], ['browser', 'web'],\n]);\n\n/**\n * Strip transport prefixes so an MCP-routed edit reads as an edit:\n * `mcp__plugin_ashlr_ashlr__ashlr__edit` → `edit`.\n */\nexport function baseToolName(name: string): string {\n const parts = name.split('__').filter(Boolean);\n return (parts[parts.length - 1] ?? name).trim().toLowerCase();\n}\n\nexport function actionForName(name: string): ToolAction {\n return ACTION_BY_NAME.get(baseToolName(name)) ?? 'other';\n}\n\n/** Short verb for a file-activity row; also the a11y wording. */\nexport const ACTION_LABEL: Record<ToolAction, string> = {\n read: 'read',\n edit: 'edited',\n create: 'created',\n delete: 'deleted',\n command: 'ran',\n search: 'searched',\n task: 'delegated',\n web: 'fetched',\n other: 'used',\n};\n\n// ---------------------------------------------------------------------------\n// Payload readers\n// ---------------------------------------------------------------------------\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction str(value: unknown): string | null {\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nconst PATH_KEYS = [\n 'file_path', 'filePath', 'notebook_path', 'notebookPath', 'target_file',\n 'path', 'file', 'filename', 'fileName', 'relative_workspace_path',\n];\n\n/** Every path-ish string in the payload, first-seen order, de-duplicated. */\nexport function pathsIn(input: unknown): string[] {\n const rec = record(input);\n if (!rec) return [];\n const out: string[] = [];\n const push = (value: unknown) => {\n const s = str(value);\n if (s && !out.includes(s)) out.push(s);\n };\n for (const key of PATH_KEYS) push(rec[key]);\n const list = rec.paths ?? rec.file_paths ?? rec.files;\n if (Array.isArray(list)) for (const item of list) push(typeof item === 'string' ? item : record(item)?.path);\n return out;\n}\n\n/** `src/web-ui/App.tsx` → `App.tsx`. Never the whole path in a dense row. */\nexport function fileBasename(path: string): string {\n const parts = path.split(/[\\\\/]/).filter(Boolean);\n return parts[parts.length - 1] ?? path;\n}\n\n/** The directory part, for the second line of a file-activity row. */\nexport function fileDirname(path: string): string {\n const parts = path.split(/[\\\\/]/);\n parts.pop();\n return parts.join('/');\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\nconst COMMAND_KEYS = ['command', 'cmd', 'script', 'shell_command', 'commandLine'];\n\n/**\n * A line that is nothing but a stated exit status. Deliberately anchored to\n * the whole line: `exit 1` appearing inside a shell script in the output is\n * not the command's exit code, and reporting it as one would be a lie in the\n * place the operator is most likely to trust.\n */\nconst EXIT_LINE = /^[ \\t]*(?:exit(?:ed)?[ \\t]+(?:with[ \\t]+)?(?:code|status)|exit[ \\t]*code|exit[ \\t]*status|command[ \\t]+exited[ \\t]+with[ \\t]+code)[ \\t]*[:=]?[ \\t]*(\\d{1,3})[ \\t]*\\.?$/im;\n\n/** The exit code the output states, or null when it states none. */\nexport function statedExitCode(output: string): number | null {\n const match = EXIT_LINE.exec(output);\n if (!match) return null;\n const code = Number(match[1]);\n return Number.isInteger(code) && code >= 0 && code <= 255 ? code : null;\n}\n\n// ---------------------------------------------------------------------------\n// Diffs\n// ---------------------------------------------------------------------------\n\nconst GIT_HEADER = /^diff --git /m;\nconst OLD_HEADER = /^--- (?:a\\/|\\/dev\\/null|[^\\n]*\\t)/m;\nconst NEW_HEADER = /^\\+\\+\\+ (?:b\\/|\\/dev\\/null|[^\\n]*\\t)/m;\nconst HUNK_HEADER = /^@@ -\\d+(?:,\\d+)? \\+\\d+(?:,\\d+)? @@/m;\n\n/**\n * True when this text is itself a unified diff we can hand to the parser.\n *\n * A `@@` hunk is sufficient but NOT necessary. `git diff`/`git show` output\n * consisting only of renames, only of mode changes, or only of\n * \"Binary files … differ\" carries no hunk header at all; requiring one sent\n * that output down the raw-terminal path, where a rename reads as noise. The\n * parser already degrades a hunkless entry into `unparsedNotice` and a\n * `renamed`/`added`/`deleted` status, both of which `DiffBlock` renders — so a\n * `diff --git` header on its own is enough to treat the text as a diff.\n */\nexport function looksLikeUnifiedDiff(text: string): boolean {\n if (!text) return false;\n if (GIT_HEADER.test(text)) return true;\n // Without the git header the `---`/`+++` pair is only conclusive alongside a\n // hunk; plain prose can contain a line of dashes.\n return HUNK_HEADER.test(text) && OLD_HEADER.test(text) && NEW_HEADER.test(text);\n}\n\nfunction fileCount(diff: string): number {\n const git = diff.match(/^diff --git /gm);\n if (git) return git.length;\n return (diff.match(/^--- /gm) ?? []).length;\n}\n\ninterface EditPair { old: string; next: string }\n\n/** `{old_string, new_string}` under any of the spellings the tools use. */\nfunction editPair(value: unknown): EditPair | null {\n const rec = record(value);\n if (!rec) return null;\n const old = rec.old_string ?? rec.oldString ?? rec.old_str ?? rec.old ?? rec.search ?? rec.find;\n const next = rec.new_string ?? rec.newString ?? rec.new_str ?? rec.new ?? rec.replace ?? rec.replacement;\n if (typeof old !== 'string' || typeof next !== 'string') return null;\n return { old, next };\n}\n\n/**\n * One file header followed by every edit's hunks. Each edit gets its own\n * synthetic offset so the hunks stay distinct for the parser; the numbers\n * are not the file's, which is why the result is `anchored: false`.\n */\nfunction diffForEdits(path: string, edits: readonly EditPair[]): string {\n const bodies: string[] = [];\n let offset = 1;\n edits.forEach((edit, index) => {\n const text = unifiedDiffFor(edit.old, edit.next, {\n path,\n oldStart: offset,\n newStart: offset,\n section: edits.length > 1 ? `edit ${index + 1} of ${edits.length}` : undefined,\n });\n offset += Math.max(splitLines(edit.old).length, splitLines(edit.next).length) + 8;\n if (text) bodies.push(text.split('\\n').slice(2).join('\\n'));\n });\n if (bodies.length === 0) return '';\n return [`--- a/${path}`, `+++ b/${path}`, ...bodies].join('\\n');\n}\n\n/** A brand-new file as an all-additions diff; its new-side numbers are real. */\nfunction diffForCreate(path: string, content: string): string {\n const lines = splitLines(content);\n if (lines.length === 0) return '';\n return [\n `--- /dev/null`,\n `+++ b/${path}`,\n `@@ -0,0 +1,${lines.length} @@`,\n ...lines.map((line) => `+${line}`),\n ].join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// The one entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Ceiling on any agent-supplied text this module carries into a `ToolFacts`.\n *\n * `ToolUseCard` caps the raw output it renders, but the diff and written-file\n * paths bypass that cap entirely: they read `result.output` / `input.content`\n * straight off the payload. A `git diff` over a large tree, or a `Write` of a\n * generated file, then gets fully parsed by `DiffBlock` and fully materialised\n * into the DOM — and `buildTurns` re-parses it for every tool call on every\n * transcript rebuild. This is agent-controlled content with no upstream bound,\n * so the bound belongs here, where the text is first captured.\n *\n * Matches `CommandOutput`'s own ceiling so the two paths truncate alike.\n */\nexport const MAX_FACT_TEXT_CHARS = 200_000;\n\n/** Truncate with the same sentence `CommandOutput` uses, so the UI reads as one. */\nexport function capFactText(text: string): string {\n if (text.length <= MAX_FACT_TEXT_CHARS) return text;\n return `${text.slice(0, MAX_FACT_TEXT_CHARS)}\\n… (${text.length - MAX_FACT_TEXT_CHARS} more characters not shown)`;\n}\n\nexport interface ToolCallInput {\n name: string;\n input: unknown;\n result: { output: string; isError: boolean } | null;\n}\n\n/** Claude Code's Write says which of the two it did; nothing else does. */\nconst WROTE_EXISTING = /\\bhas been updated\\b|\\bsuccessfully (?:over)?written\\b|\\bupdated successfully\\b/i;\nconst WROTE_NEW = /\\b(?:file )?created successfully\\b|\\bnew file created\\b/i;\n\nexport function readToolFacts({ name, input, result }: ToolCallInput): ToolFacts {\n const base = baseToolName(name);\n let action = actionForName(name);\n const rec = record(input);\n const output = result?.output ?? '';\n const pending = result === null;\n\n // Write is create-or-overwrite and only the RESULT knows which.\n if (action === 'create' && result && WROTE_EXISTING.test(output) && !WROTE_NEW.test(output)) action = 'edit';\n\n const paths = pathsIn(input);\n const primary = paths[0] ?? null;\n\n let command: CommandFacts | null = null;\n if (rec) {\n for (const key of COMMAND_KEYS) {\n const value = str(rec[key]);\n if (value) {\n command = { command: value, exitCode: result ? statedExitCode(output) : null };\n if (action === 'other') action = 'command';\n break;\n }\n }\n }\n\n let diff: ToolDiff | null = null;\n let written: WrittenContent | null = null;\n\n // 1. The result is itself a diff (`git diff`, a patch tool echoing back).\n if (result && looksLikeUnifiedDiff(output)) {\n diff = { text: capFactText(output), anchored: true, multiFile: fileCount(output) > 1, origin: 'output' };\n }\n\n // 2. The INPUT is a diff (apply_patch / a patch argument).\n if (!diff && rec) {\n const patch = str(rec.patch) ?? str(rec.diff);\n if (patch && looksLikeUnifiedDiff(patch)) {\n diff = { text: capFactText(patch), anchored: true, multiFile: fileCount(patch) > 1, origin: 'payload' };\n }\n }\n\n // 3. Edit-shaped payloads: one pair, or MultiEdit's `edits` array.\n if (!diff && rec && primary) {\n const single = editPair(rec);\n const listValue = rec.edits ?? rec.replacements ?? rec.changes;\n const many = Array.isArray(listValue)\n ? listValue.map(editPair).filter((e): e is EditPair => e !== null)\n : [];\n const pairs = many.length > 0 ? many : single ? [single] : [];\n if (pairs.length > 0) {\n const text = diffForEdits(primary, pairs);\n if (text) diff = { text: capFactText(text), anchored: false, multiFile: false, origin: 'payload' };\n if (action === 'other') action = 'edit';\n }\n }\n\n // 4. A whole file written. A create's line numbers are real; an overwrite's\n // old side was never in the payload, so it is shown as content, not as a\n // diff claiming the file had nothing in it before.\n if (!diff && rec && primary) {\n const content = typeof rec.content === 'string' ? rec.content\n : typeof rec.contents === 'string' ? rec.contents\n : typeof rec.text === 'string' && (action === 'create' || action === 'edit') ? rec.text\n : null;\n if (content !== null) {\n if (action === 'create') {\n const text = diffForCreate(primary, content);\n if (text) diff = { text: capFactText(text), anchored: true, multiFile: false, origin: 'payload' };\n } else {\n written = { path: primary, text: capFactText(content) };\n }\n }\n }\n\n const failed = result !== null && (result.isError || (command?.exitCode ?? 0) > 0);\n\n return { base, action, paths, command, diff, written, failed, pending };\n}\n\n/** DOM id a file-activity row scrolls to. One per tool call. */\nexport function toolAnchorId(toolUseId: string): string {\n return `verse-tool-${toolUseId.replace(/[^A-Za-z0-9_-]/g, '')}`;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool-semantics-GX8ScuSH.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/chat/tool-semantics.ts"],"sourcesContent":["/**\n * routes/verse/chat/tool-semantics.ts — what a tool call actually DID.\n *\n * An agentic session is mostly tool work, and `{name, input, result}` is too\n * raw to read: the transcript can tell you `Edit` ran with some JSON, not\n * that `src/core/api.ts` gained four lines. Everything downstream — the\n * per-turn file-activity summary, the diff rendering, the command block, the\n * error affordances — needs the same derived facts, so they are derived ONCE\n * here, as pure functions over the event payload.\n *\n * Deliberately conservative. A fact that cannot be read out of the payload\n * (an exit code the tool never printed, the file offset an `Edit` payload\n * does not carry) is reported as unknown rather than guessed — DESIGN §6,\n * and the same discipline VERSE-TELEMETRY-V2 imposes on provider data.\n */\nimport { splitLines, unifiedDiffFor } from './line-diff.js';\n\nexport type ToolAction =\n | 'read'\n | 'edit'\n | 'create'\n | 'delete'\n | 'command'\n | 'search'\n | 'task'\n | 'web'\n | 'other';\n\n/** Actions that change the working tree — the blast radius of a turn. */\nexport const MUTATING_ACTIONS: readonly ToolAction[] = ['edit', 'create', 'delete'];\n\nexport interface ToolDiff {\n /** Unified-diff text, ready for `routes/inbox/diff-parser.ts`. */\n text: string;\n /**\n * False when the line numbers are synthetic. An `Edit` payload says what\n * was replaced, never where it sat, so the viewer hides the gutter rather\n * than printing numbers that are not the file's.\n */\n anchored: boolean;\n /** More than one file — the inbox `DiffViewer` file tree earns its place. */\n multiFile: boolean;\n /** Where the diff came from, for the block's caption. */\n origin: 'payload' | 'output';\n}\n\nexport interface CommandFacts {\n command: string;\n /** Only when the result states one in so many words; otherwise unknown. */\n exitCode: number | null;\n}\n\nexport interface WrittenContent {\n path: string;\n text: string;\n}\n\nexport interface ToolFacts {\n /** Normalized name with any MCP prefix removed (`ashlr__edit` → `edit`). */\n base: string;\n action: ToolAction;\n /** Files this call touched, most significant first; may be empty. */\n paths: string[];\n command: CommandFacts | null;\n diff: ToolDiff | null;\n /** A whole file written whose previous contents were never in the payload. */\n written: WrittenContent | null;\n /** The tool reported failure, or stated a non-zero exit. */\n failed: boolean;\n /** Still waiting for its result. */\n pending: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Name → action\n// ---------------------------------------------------------------------------\n\nconst ACTION_BY_NAME = new Map<string, ToolAction>([\n ['read', 'read'], ['readfile', 'read'], ['read_file', 'read'], ['view', 'read'],\n ['notebookread', 'read'], ['notebook_read', 'read'], ['cat', 'read'], ['open', 'read'],\n ['edit', 'edit'], ['multiedit', 'edit'], ['multi_edit', 'edit'], ['notebookedit', 'edit'],\n ['notebook_edit', 'edit'], ['str_replace', 'edit'], ['str_replace_editor', 'edit'],\n ['str_replace_based_edit_tool', 'edit'], ['apply_patch', 'edit'], ['patch', 'edit'],\n ['edit_structural', 'edit'], ['search_replace_regex', 'edit'], ['rename_file', 'edit'],\n ['update', 'edit'], ['applydiff', 'edit'], ['apply_diff', 'edit'],\n ['write', 'create'], ['create', 'create'], ['create_file', 'create'], ['writefile', 'create'],\n ['write_file', 'create'], ['new_file', 'create'],\n ['delete', 'delete'], ['delete_file', 'delete'], ['remove_file', 'delete'], ['rm', 'delete'],\n ['bash', 'command'], ['shell', 'command'], ['exec', 'command'], ['run', 'command'],\n ['run_command', 'command'], ['runcommand', 'command'], ['run_terminal_cmd', 'command'],\n ['bash_start', 'command'], ['bash_tail', 'command'], ['terminal', 'command'], ['test', 'command'],\n ['grep', 'search'], ['glob', 'search'], ['search', 'search'], ['find', 'search'],\n ['codebase_search', 'search'], ['ls', 'search'], ['tree', 'search'], ['list_dir', 'search'],\n ['task', 'task'], ['agent', 'task'], ['dispatch_agent', 'task'], ['subagent', 'task'],\n ['webfetch', 'web'], ['websearch', 'web'], ['fetch', 'web'], ['http', 'web'], ['browser', 'web'],\n]);\n\n/**\n * Strip transport prefixes so an MCP-routed edit reads as an edit:\n * `mcp__plugin_ashlr_ashlr__ashlr__edit` → `edit`.\n */\nexport function baseToolName(name: string): string {\n const parts = name.split('__').filter(Boolean);\n return (parts[parts.length - 1] ?? name).trim().toLowerCase();\n}\n\nexport function actionForName(name: string): ToolAction {\n return ACTION_BY_NAME.get(baseToolName(name)) ?? 'other';\n}\n\n/** Short verb for a file-activity row; also the a11y wording. */\nexport const ACTION_LABEL: Record<ToolAction, string> = {\n read: 'read',\n edit: 'edited',\n create: 'created',\n delete: 'deleted',\n command: 'ran',\n search: 'searched',\n task: 'delegated',\n web: 'fetched',\n other: 'used',\n};\n\n// ---------------------------------------------------------------------------\n// Payload readers\n// ---------------------------------------------------------------------------\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction str(value: unknown): string | null {\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nconst PATH_KEYS = [\n 'file_path', 'filePath', 'notebook_path', 'notebookPath', 'target_file',\n 'path', 'file', 'filename', 'fileName', 'relative_workspace_path',\n];\n\n/** Every path-ish string in the payload, first-seen order, de-duplicated. */\nexport function pathsIn(input: unknown): string[] {\n const rec = record(input);\n if (!rec) return [];\n const out: string[] = [];\n const push = (value: unknown) => {\n const s = str(value);\n if (s && !out.includes(s)) out.push(s);\n };\n for (const key of PATH_KEYS) push(rec[key]);\n const list = rec.paths ?? rec.file_paths ?? rec.files;\n if (Array.isArray(list)) for (const item of list) push(typeof item === 'string' ? item : record(item)?.path);\n return out;\n}\n\n/** `src/web-ui/App.tsx` → `App.tsx`. Never the whole path in a dense row. */\nexport function fileBasename(path: string): string {\n const parts = path.split(/[\\\\/]/).filter(Boolean);\n return parts[parts.length - 1] ?? path;\n}\n\n/** The directory part, for the second line of a file-activity row. */\nexport function fileDirname(path: string): string {\n const parts = path.split(/[\\\\/]/);\n parts.pop();\n return parts.join('/');\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\nconst COMMAND_KEYS = ['command', 'cmd', 'script', 'shell_command', 'commandLine'];\n\n/**\n * A line that is nothing but a stated exit status. Deliberately anchored to\n * the whole line: `exit 1` appearing inside a shell script in the output is\n * not the command's exit code, and reporting it as one would be a lie in the\n * place the operator is most likely to trust.\n */\nconst EXIT_LINE = /^[ \\t]*(?:exit(?:ed)?[ \\t]+(?:with[ \\t]+)?(?:code|status)|exit[ \\t]*code|exit[ \\t]*status|command[ \\t]+exited[ \\t]+with[ \\t]+code)[ \\t]*[:=]?[ \\t]*(\\d{1,3})[ \\t]*\\.?$/im;\n\n/** The exit code the output states, or null when it states none. */\nexport function statedExitCode(output: string): number | null {\n const match = EXIT_LINE.exec(output);\n if (!match) return null;\n const code = Number(match[1]);\n return Number.isInteger(code) && code >= 0 && code <= 255 ? code : null;\n}\n\n// ---------------------------------------------------------------------------\n// Diffs\n// ---------------------------------------------------------------------------\n\nconst GIT_HEADER = /^diff --git /m;\nconst OLD_HEADER = /^--- (?:a\\/|\\/dev\\/null|[^\\n]*\\t)/m;\nconst NEW_HEADER = /^\\+\\+\\+ (?:b\\/|\\/dev\\/null|[^\\n]*\\t)/m;\nconst HUNK_HEADER = /^@@ -\\d+(?:,\\d+)? \\+\\d+(?:,\\d+)? @@/m;\n\n/**\n * True when this text is itself a unified diff we can hand to the parser.\n *\n * A `@@` hunk is sufficient but NOT necessary. `git diff`/`git show` output\n * consisting only of renames, only of mode changes, or only of\n * \"Binary files … differ\" carries no hunk header at all; requiring one sent\n * that output down the raw-terminal path, where a rename reads as noise. The\n * parser already degrades a hunkless entry into `unparsedNotice` and a\n * `renamed`/`added`/`deleted` status, both of which `DiffBlock` renders — so a\n * `diff --git` header on its own is enough to treat the text as a diff.\n */\nexport function looksLikeUnifiedDiff(text: string): boolean {\n if (!text) return false;\n if (GIT_HEADER.test(text)) return true;\n // Without the git header the `---`/`+++` pair is only conclusive alongside a\n // hunk; plain prose can contain a line of dashes.\n return HUNK_HEADER.test(text) && OLD_HEADER.test(text) && NEW_HEADER.test(text);\n}\n\nfunction fileCount(diff: string): number {\n const git = diff.match(/^diff --git /gm);\n if (git) return git.length;\n return (diff.match(/^--- /gm) ?? []).length;\n}\n\ninterface EditPair { old: string; next: string }\n\n/** `{old_string, new_string}` under any of the spellings the tools use. */\nfunction editPair(value: unknown): EditPair | null {\n const rec = record(value);\n if (!rec) return null;\n const old = rec.old_string ?? rec.oldString ?? rec.old_str ?? rec.old ?? rec.search ?? rec.find;\n const next = rec.new_string ?? rec.newString ?? rec.new_str ?? rec.new ?? rec.replace ?? rec.replacement;\n if (typeof old !== 'string' || typeof next !== 'string') return null;\n return { old, next };\n}\n\n/**\n * One file header followed by every edit's hunks. Each edit gets its own\n * synthetic offset so the hunks stay distinct for the parser; the numbers\n * are not the file's, which is why the result is `anchored: false`.\n */\nfunction diffForEdits(path: string, edits: readonly EditPair[]): string {\n const bodies: string[] = [];\n let offset = 1;\n edits.forEach((edit, index) => {\n const text = unifiedDiffFor(edit.old, edit.next, {\n path,\n oldStart: offset,\n newStart: offset,\n section: edits.length > 1 ? `edit ${index + 1} of ${edits.length}` : undefined,\n });\n offset += Math.max(splitLines(edit.old).length, splitLines(edit.next).length) + 8;\n if (text) bodies.push(text.split('\\n').slice(2).join('\\n'));\n });\n if (bodies.length === 0) return '';\n return [`--- a/${path}`, `+++ b/${path}`, ...bodies].join('\\n');\n}\n\n/** A brand-new file as an all-additions diff; its new-side numbers are real. */\nfunction diffForCreate(path: string, content: string): string {\n const lines = splitLines(content);\n if (lines.length === 0) return '';\n return [\n `--- /dev/null`,\n `+++ b/${path}`,\n `@@ -0,0 +1,${lines.length} @@`,\n ...lines.map((line) => `+${line}`),\n ].join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// The one entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Ceiling on any agent-supplied text this module carries into a `ToolFacts`.\n *\n * `ToolUseCard` caps the raw output it renders, but the diff and written-file\n * paths bypass that cap entirely: they read `result.output` / `input.content`\n * straight off the payload. A `git diff` over a large tree, or a `Write` of a\n * generated file, then gets fully parsed by `DiffBlock` and fully materialised\n * into the DOM — and `buildTurns` re-parses it for every tool call on every\n * transcript rebuild. This is agent-controlled content with no upstream bound,\n * so the bound belongs here, where the text is first captured.\n *\n * Matches `CommandOutput`'s own ceiling so the two paths truncate alike.\n */\nexport const MAX_FACT_TEXT_CHARS = 200_000;\n\n/** Truncate with the same sentence `CommandOutput` uses, so the UI reads as one. */\nexport function capFactText(text: string): string {\n if (text.length <= MAX_FACT_TEXT_CHARS) return text;\n return `${text.slice(0, MAX_FACT_TEXT_CHARS)}\\n… (${text.length - MAX_FACT_TEXT_CHARS} more characters not shown)`;\n}\n\nexport interface ToolCallInput {\n name: string;\n input: unknown;\n result: { output: string; isError: boolean } | null;\n}\n\n/** Claude Code's Write says which of the two it did; nothing else does. */\nconst WROTE_EXISTING = /\\bhas been updated\\b|\\bsuccessfully (?:over)?written\\b|\\bupdated successfully\\b/i;\nconst WROTE_NEW = /\\b(?:file )?created successfully\\b|\\bnew file created\\b/i;\n\nexport function readToolFacts({ name, input, result }: ToolCallInput): ToolFacts {\n const base = baseToolName(name);\n let action = actionForName(name);\n const rec = record(input);\n const output = result?.output ?? '';\n const pending = result === null;\n\n // Write is create-or-overwrite and only the RESULT knows which.\n if (action === 'create' && result && WROTE_EXISTING.test(output) && !WROTE_NEW.test(output)) action = 'edit';\n\n const paths = pathsIn(input);\n const primary = paths[0] ?? null;\n\n let command: CommandFacts | null = null;\n if (rec) {\n for (const key of COMMAND_KEYS) {\n const value = str(rec[key]);\n if (value) {\n command = { command: value, exitCode: result ? statedExitCode(output) : null };\n if (action === 'other') action = 'command';\n break;\n }\n }\n }\n\n let diff: ToolDiff | null = null;\n let written: WrittenContent | null = null;\n\n // 1. The result is itself a diff (`git diff`, a patch tool echoing back).\n if (result && looksLikeUnifiedDiff(output)) {\n diff = { text: capFactText(output), anchored: true, multiFile: fileCount(output) > 1, origin: 'output' };\n }\n\n // 2. The INPUT is a diff (apply_patch / a patch argument).\n if (!diff && rec) {\n const patch = str(rec.patch) ?? str(rec.diff);\n if (patch && looksLikeUnifiedDiff(patch)) {\n diff = { text: capFactText(patch), anchored: true, multiFile: fileCount(patch) > 1, origin: 'payload' };\n }\n }\n\n // 3. Edit-shaped payloads: one pair, or MultiEdit's `edits` array.\n if (!diff && rec && primary) {\n const single = editPair(rec);\n const listValue = rec.edits ?? rec.replacements ?? rec.changes;\n const many = Array.isArray(listValue)\n ? listValue.map(editPair).filter((e): e is EditPair => e !== null)\n : [];\n const pairs = many.length > 0 ? many : single ? [single] : [];\n if (pairs.length > 0) {\n const text = diffForEdits(primary, pairs);\n if (text) diff = { text: capFactText(text), anchored: false, multiFile: false, origin: 'payload' };\n if (action === 'other') action = 'edit';\n }\n }\n\n // 4. A whole file written. A create's line numbers are real; an overwrite's\n // old side was never in the payload, so it is shown as content, not as a\n // diff claiming the file had nothing in it before.\n if (!diff && rec && primary) {\n const content = typeof rec.content === 'string' ? rec.content\n : typeof rec.contents === 'string' ? rec.contents\n : typeof rec.text === 'string' && (action === 'create' || action === 'edit') ? rec.text\n : null;\n if (content !== null) {\n if (action === 'create') {\n const text = diffForCreate(primary, content);\n if (text) diff = { text: capFactText(text), anchored: true, multiFile: false, origin: 'payload' };\n } else {\n written = { path: primary, text: capFactText(content) };\n }\n }\n }\n\n const failed = result !== null && (result.isError || (command?.exitCode ?? 0) > 0);\n\n return { base, action, paths, command, diff, written, failed, pending };\n}\n\n/** DOM id a file-activity row scrolls to. One per tool call. */\nexport function toolAnchorId(toolUseId: string): string {\n return `verse-tool-${toolUseId.replace(/[^A-Za-z0-9_-]/g, '')}`;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=turn-files-
|
|
1
|
+
import{o as e,t}from"./tool-semantics-GX8ScuSH.js";function n(e,t){let n=[...t].sort((e,t)=>t.length-e.length);for(let t of n){let n=t.endsWith(`/`)?t:`${t}/`;if(e.startsWith(n))return{root:t,path:e.slice(n.length)}}return!e.startsWith(`/`)&&t[0]?{root:t[0],path:e.replace(/^\.\//,``)}:null}function r(r,i){if(i.length===0)return[];let a=0;for(let e=r.length-1;e>=0;--e)if(r[e].type===`user-message`){a=e;break}let o=new Map;for(let e=a;e<r.length;e+=1){let t=r[e];t.type===`tool-result`&&o.set(t.toolUseId,{output:t.output,isError:t.isError})}let s=new Set,c=[];for(let l=a;l<r.length;l+=1){let a=r[l];if(a.type!==`tool-use`)continue;let u=o.get(a.toolUseId);if(!u||u.isError)continue;let d=e({name:a.name,input:a.input,result:u});if(t.includes(d.action)&&!d.failed)for(let e of d.paths){let t=n(e,i);if(!t)continue;let r=`${t.root}\u0000${t.path}`;s.has(r)||(s.add(r),c.push(t))}}return c}export{r as lastTurnFiles};
|
|
2
|
+
//# sourceMappingURL=turn-files-BPHQzYuH.js.map
|
package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js.map → turn-files-BPHQzYuH.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-files-
|
|
1
|
+
{"version":3,"file":"turn-files-BPHQzYuH.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/chat/turn-files.ts"],"sourcesContent":["/**\n * routes/verse/chat/turn-files.ts — the files the latest turn changed, for\n * the Review pane's \"This turn\" scope (slots.tsx `TurnFileChange`, unit C2).\n *\n * Read from the session's event log (the head's structural events — tool\n * calls and results, never streamed tokens), so it is recomputed when a\n * call lands, not per token. A call counts when it MUTATES the tree (edit,\n * create, delete — tool-semantics MUTATING_ACTIONS) and its result was not\n * an error. Paths are made relative to the root that contains them; a path\n * under none of the chat's roots is left out rather than guessed at.\n */\nimport type { VerseEvent } from '../../../data/api-types.js';\nimport type { TurnFileChange } from '../shell/slots.js';\nimport { MUTATING_ACTIONS, readToolFacts } from './tool-semantics.js';\n\nfunction relativeTo(path: string, roots: readonly string[]): TurnFileChange | null {\n // The longest root wins: a worktree nested inside its repo is its own root.\n const sorted = [...roots].sort((a, b) => b.length - a.length);\n for (const root of sorted) {\n const prefix = root.endsWith('/') ? root : `${root}/`;\n if (path.startsWith(prefix)) return { root, path: path.slice(prefix.length) };\n }\n // A relative path is relative to the primary root (the CLI's cwd).\n if (!path.startsWith('/') && roots[0]) return { root: roots[0], path: path.replace(/^\\.\\//, '') };\n return null;\n}\n\nexport function lastTurnFiles(events: readonly VerseEvent[], roots: readonly string[]): TurnFileChange[] {\n if (roots.length === 0) return [];\n let start = 0;\n for (let i = events.length - 1; i >= 0; i -= 1) {\n if (events[i]!.type === 'user-message') {\n start = i;\n break;\n }\n }\n const results = new Map<string, { output: string; isError: boolean }>();\n for (let i = start; i < events.length; i += 1) {\n const e = events[i]!;\n if (e.type === 'tool-result') results.set(e.toolUseId, { output: e.output, isError: e.isError });\n }\n const seen = new Set<string>();\n const out: TurnFileChange[] = [];\n for (let i = start; i < events.length; i += 1) {\n const e = events[i]!;\n if (e.type !== 'tool-use') continue;\n const result = results.get(e.toolUseId);\n if (!result || result.isError) continue;\n const facts = readToolFacts({ name: e.name, input: e.input, result });\n if (!MUTATING_ACTIONS.includes(facts.action) || facts.failed) continue;\n for (const path of facts.paths) {\n const change = relativeTo(path, roots);\n if (!change) continue;\n const key = `${change.root}\\u0000${change.path}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(change);\n }\n }\n return out;\n}\n"],"mappings":"mDAeA,SAAS,EAAW,EAAc,EAAiD,CAEjF,IAAM,EAAS,CAAC,GAAG,CAAK,CAAC,CAAC,MAAM,EAAG,IAAM,EAAE,OAAS,EAAE,MAAM,EAC5D,IAAK,IAAM,KAAQ,EAAQ,CACzB,IAAM,EAAS,EAAK,SAAS,GAAG,EAAI,EAAO,GAAG,EAAK,GACnD,GAAI,EAAK,WAAW,CAAM,EAAG,MAAO,CAAE,OAAM,KAAM,EAAK,MAAM,EAAO,MAAM,CAAE,CAC9E,CAGA,MADI,CAAC,EAAK,WAAW,GAAG,GAAK,EAAM,GAAW,CAAE,KAAM,EAAM,GAAI,KAAM,EAAK,QAAQ,QAAS,EAAE,CAAE,EACzF,IACT,CAEA,SAAgB,EAAc,EAA+B,EAA4C,CACvG,GAAI,EAAM,SAAW,EAAG,MAAO,CAAC,EAChC,IAAI,EAAQ,EACZ,IAAK,IAAI,EAAI,EAAO,OAAS,EAAG,GAAK,EAAG,IACtC,GAAI,EAAO,EAAE,CAAE,OAAS,eAAgB,CACtC,EAAQ,EACR,KACF,CAEF,IAAM,EAAU,IAAI,IACpB,IAAK,IAAI,EAAI,EAAO,EAAI,EAAO,OAAQ,GAAK,EAAG,CAC7C,IAAM,EAAI,EAAO,GACb,EAAE,OAAS,eAAe,EAAQ,IAAI,EAAE,UAAW,CAAE,OAAQ,EAAE,OAAQ,QAAS,EAAE,OAAQ,CAAC,CACjG,CACA,IAAM,EAAO,IAAI,IACX,EAAwB,CAAC,EAC/B,IAAK,IAAI,EAAI,EAAO,EAAI,EAAO,OAAQ,GAAK,EAAG,CAC7C,IAAM,EAAI,EAAO,GACjB,GAAI,EAAE,OAAS,WAAY,SAC3B,IAAM,EAAS,EAAQ,IAAI,EAAE,SAAS,EACtC,GAAI,CAAC,GAAU,EAAO,QAAS,SAC/B,IAAM,EAAQ,EAAc,CAAE,KAAM,EAAE,KAAM,MAAO,EAAE,MAAO,QAAO,CAAC,EAChE,GAAC,EAAiB,SAAS,EAAM,MAAM,GAAK,GAAM,OACtD,IAAK,IAAM,KAAQ,EAAM,MAAO,CAC9B,IAAM,EAAS,EAAW,EAAM,CAAK,EACrC,GAAI,CAAC,EAAQ,SACb,IAAM,EAAM,GAAG,EAAO,KAAK,QAAQ,EAAO,OACtC,EAAK,IAAI,CAAG,IAChB,EAAK,IAAI,CAAG,EACZ,EAAI,KAAK,CAAM,EACjB,CACF,CACA,OAAO,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=`https://claude.ai/settings/usage`,t=2e4,n=/^ct_\d{8}T\d{4}_[a-z0-9]{6}$/,r=[`merged`,`closed`,`failed`,`expired`],i=Object.freeze({v:1,creditsTotalUsd:250,creditsSpentAdjustmentUsd:0,estimatedCostPerSessionUsd:3,maxConcurrent:4,maxSessionsPerDay:20,selfImprove:Object.freeze({enabled:!0,repo:`ashlrai/ashlr-hub`,maxPerDay:4,reserveUsd:40})}),a=`/api/verse/cloud`,o=`/api/verse/cloud/launch`,s=`/api/verse/cloud/budget`,c=`/api/verse/cloud/refresh`,l=`/api/verse/cloud/improve`,u=`/api/verse/cloud/tasks`;export{i as a,o as c,u as d,r as i,a as l,t as n,s as o,n as r,l as s,e as t,c as u};
|
|
2
|
+
//# sourceMappingURL=types-D5XOdyw8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-D5XOdyw8.js","names":[],"sources":["../../../../../../src/core/cloud/types.ts"],"sourcesContent":["/**\n * Cloud lane (3.11) — FROZEN CONTRACTS.\n *\n * Ashlr Verse launches Claude Code cloud sessions (claude.ai/code) that run on\n * the operator's Claude account — including its cloud / usage credits once\n * the subscription window is spent — and tracks what they deliver.\n *\n * How a launch works (verified 2026-09-24 against Claude Code 2.1.280):\n * - A NEW cloud session can only be created by the interactive CLI:\n * `claude --cloud \"<task>\"` (with `-p` it is refused). Run under a\n * pseudo-terminal it prints, then exits 0:\n * Created cloud session: <title>\n * View: https://claude.ai/code/session_<id>?from=cli&m=0\n * Resume with: claude --teleport session_<id>\n * - It must run as the `claude-a` seat's native-profile launcher, which is\n * signed in with a claude.ai account; API-key auth is refused (\"cloud\n * sessions require authentication with a Claude.ai account\").\n * - The session clones the cwd's `origin` GitHub repo at the cwd's CURRENT\n * branch, which must be pushed. The Claude GitHub app already has access\n * to ashlrai/*.\n * - Attaching to / reading an existing session from the CLI is NOT enabled\n * for this account, so Verse never reads a session back. Every task is\n * told to DELIVER to GitHub instead (see delivery-contract.ts): push\n * branch `ashlr-cloud/<taskId>` and open a DRAFT PR whose body carries a\n * fenced `ashlr-cloud-report` JSON block. Verse tracks tasks with `gh`.\n * - The credit balance is not readable (neither `/usage` nor the CLI show\n * it), so spend is an ESTIMATE the operator can calibrate; the UI always\n * says so and links to https://claude.ai/settings/usage.\n *\n * Nothing here merges. A cloud PR is judged and merged by the existing merge\n * gates (custody) or by Mason — never by the cloud lane.\n */\n\nexport const CLOUD_TASK_SCHEMA_VERSION = 1 as const;\nexport const CLOUD_BUDGET_SCHEMA_VERSION = 1 as const;\n\n/** Branch every cloud task delivers to: `ashlr-cloud/<taskId>`. */\nexport const CLOUD_BRANCH_PREFIX = 'ashlr-cloud/' as const;\n/** Fenced block language tag carrying the task report in the PR body. */\nexport const CLOUD_REPORT_FENCE = 'ashlr-cloud-report' as const;\n/** Draft PR title prefix, so tasks are recognisable in GitHub lists. */\nexport const CLOUD_PR_TITLE_PREFIX = '[ashlr-cloud]' as const;\n/** Where the real credit balance lives (not readable programmatically). */\nexport const CLOUD_BALANCE_URL = 'https://claude.ai/settings/usage' as const;\n/** The seat whose claude.ai login launches cloud sessions. */\nexport const CLOUD_SEAT_ID = 'claude-a' as const;\n/** A task with no PR after this long is marked `expired` (still linkable). */\nexport const CLOUD_TASK_EXPIRY_MS = 6 * 60 * 60 * 1000;\n/** Max prompt length accepted from any entry point (chars). */\nexport const CLOUD_PROMPT_MAX_CHARS = 20_000;\n/** Launch timeout for the PTY-wrapped CLI (creation took < 10 s in testing). */\nexport const CLOUD_LAUNCH_TIMEOUT_MS = 90_000;\n\n/** Task ids look like `ct_20260924T2331_k3f9q2` (sortable, branch-safe). */\nexport const CLOUD_TASK_ID_PATTERN = /^ct_\\d{8}T\\d{4}_[a-z0-9]{6}$/;\n\nexport type CloudTaskOrigin = 'chat' | 'operator' | 'leader' | 'self-improve' | 'cli';\n\n/**\n * queued accepted, waiting for its repo's launch slot (launches are\n * serialised per checkout folder — two concurrent `--cloud` runs\n * in one folder conflict).\n * launching PTY launch in flight.\n * running session created; no PR yet.\n * pr-open draft/ready PR exists on `ashlr-cloud/<id>`.\n * merged PR merged (by gates or Mason).\n * closed PR closed without merge (or dismissed by the operator).\n * failed launch failed (see stateReason / failure code).\n * expired no PR after CLOUD_TASK_EXPIRY_MS — the session link still works.\n */\nexport type CloudTaskState = 'queued' | 'launching' | 'running' | 'pr-open' | 'merged' | 'closed' | 'failed' | 'expired';\n\nexport const CLOUD_TERMINAL_STATES: readonly CloudTaskState[] = ['merged', 'closed', 'failed', 'expired'];\n\nexport type CloudLaunchFailureCode =\n | 'seat-unavailable' // claude-a launcher missing / not a native profile\n | 'auth' // not signed in with a claude.ai account\n | 'not-enabled' // cloud sessions not enabled for the account\n | 'rate-limited' // provider refused (no credits left / limit)\n | 'no-remote' // checkout has no GitHub origin / branch not pushed\n | 'checkout-failed' // could not prepare the isolated checkout\n | 'budget' // refused by the cloud budget before launching\n | 'timeout' // CLI produced no session within CLOUD_LAUNCH_TIMEOUT_MS\n | 'unparsed' // CLI exited but printed no recognisable session\n | 'unknown';\n\nexport interface CloudTaskReport {\n status: 'done' | 'partial' | 'blocked' | 'no-change';\n summary: string;\n testsRun: string[];\n risks: string[];\n filesChanged?: number;\n}\n\nexport interface CloudTaskPr {\n number: number;\n url: string;\n state: 'open' | 'closed' | 'merged';\n draft: boolean;\n title: string;\n}\n\nexport interface CloudTaskV1 {\n v: typeof CLOUD_TASK_SCHEMA_VERSION;\n id: string;\n /** GitHub `owner/name`. */\n repo: string;\n /** Branch the session starts from (must exist on origin). */\n baseBranch: string;\n /** Always `${CLOUD_BRANCH_PREFIX}${id}`. */\n branch: string;\n /** Short human title (≤ 80 chars). */\n title: string;\n /** The operator's / Leader's task text — WITHOUT the delivery contract. */\n prompt: string;\n origin: CloudTaskOrigin;\n requestedBy: 'mason' | 'leader' | 'self-improve';\n seat: string;\n sessionId: string | null;\n sessionUrl: string | null;\n state: CloudTaskState;\n /** Plain-language reason for the current state (never raw ISO / paths). */\n stateReason: string | null;\n failure: CloudLaunchFailureCode | null;\n createdAt: string;\n launchedAt: string | null;\n updatedAt: string;\n pr: CloudTaskPr | null;\n report: CloudTaskReport | null;\n /** Budget accounting — an ESTIMATE fixed at launch. */\n estimatedCostUsd: number;\n /** Backlog item this task came from (self-improvement), if any. */\n backlogItemId: string | null;\n /** Needs-you item created for approval (Leader-suggested tasks), if any. */\n needsYouId: string | null;\n}\n\nexport interface CloudBudgetV1 {\n v: typeof CLOUD_BUDGET_SCHEMA_VERSION;\n /** Credits the operator says the account has (default 250). */\n creditsTotalUsd: number;\n /**\n * Operator calibration: credits already spent BEFORE the tasks Verse\n * tracks (or a correction after checking claude.ai). Added to the estimate.\n */\n creditsSpentAdjustmentUsd: number;\n /** Flat per-session estimate used for accounting (default 3). */\n estimatedCostPerSessionUsd: number;\n /** Max sessions in `launching|running` at once (all origins). */\n maxConcurrent: number;\n /** Max sessions per local day from ANY origin. */\n maxSessionsPerDay: number;\n selfImprove: {\n /** Verse may launch its own self-improvement tasks without a click. */\n enabled: boolean;\n /** Repo self-improvement targets (default ashlrai/ashlr-hub). */\n repo: string;\n /** Max self-improvement launches per local day. */\n maxPerDay: number;\n /** Stop self-improvement when estimated remaining credits fall below this. */\n reserveUsd: number;\n };\n updatedAt: string;\n}\n\nexport const DEFAULT_CLOUD_BUDGET: Omit<CloudBudgetV1, 'updatedAt'> = Object.freeze({\n v: CLOUD_BUDGET_SCHEMA_VERSION,\n creditsTotalUsd: 250,\n creditsSpentAdjustmentUsd: 0,\n estimatedCostPerSessionUsd: 3,\n maxConcurrent: 4,\n maxSessionsPerDay: 20,\n selfImprove: Object.freeze({ enabled: true, repo: 'ashlrai/ashlr-hub', maxPerDay: 4, reserveUsd: 40 }),\n}) as Omit<CloudBudgetV1, 'updatedAt'>;\n\nexport interface CloudGate {\n ok: boolean;\n /** Plain sentence when !ok (\"4 of 4 self-improvement launches used today.\"). */\n reason: string | null;\n}\n\nexport interface CloudBudgetView {\n creditsTotalUsd: number;\n estimatedSpentUsd: number;\n estimatedRemainingUsd: number;\n sessionsToday: number;\n selfImproveToday: number;\n running: number;\n canLaunch: CloudGate;\n canSelfImprove: CloudGate;\n /** Always shown next to spend: why this is an estimate. */\n estimateNote: string;\n balanceUrl: typeof CLOUD_BALANCE_URL;\n budget: CloudBudgetV1;\n}\n\nexport interface CloudSeatStatus {\n id: string;\n ready: boolean;\n /** Plain sentence when not ready. */\n reason: string | null;\n}\n\n/** One self-improvement item: built in (improvement-backlog.ts) or added by the operator/Leader (<cloudHome>/backlog.json). */\nexport interface CloudBacklogItem {\n id: string;\n title: string;\n /** Full task prompt handed to the cloud session. */\n prompt: string;\n area: string;\n priority: 1 | 2 | 3;\n /** Repo the item targets (default: budget.selfImprove.repo). */\n repo?: string;\n}\n\nexport interface CloudBacklogView {\n items: Array<CloudBacklogItem & { claimedBy: string | null; lastState: CloudTaskState | null }>;\n nextUp: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// HTTP contract — mounted as the 'cloud' module (verse-api.ts)\n// ---------------------------------------------------------------------------\n\nexport const VERSE_CLOUD_PATH = '/api/verse/cloud' as const;\nexport const VERSE_CLOUD_LAUNCH_PATH = '/api/verse/cloud/launch' as const;\nexport const VERSE_CLOUD_BUDGET_PATH = '/api/verse/cloud/budget' as const;\nexport const VERSE_CLOUD_REFRESH_PATH = '/api/verse/cloud/refresh' as const;\nexport const VERSE_CLOUD_IMPROVE_PATH = '/api/verse/cloud/improve' as const;\n/** POST `${VERSE_CLOUD_TASKS_PATH}/<id>/dismiss` */\nexport const VERSE_CLOUD_TASKS_PATH = '/api/verse/cloud/tasks' as const;\n\n/** GET /api/verse/cloud */\nexport interface CloudOverviewResponse {\n generatedAt: string;\n seat: CloudSeatStatus;\n budget: CloudBudgetView;\n /** Newest first, at most 100. */\n tasks: CloudTaskV1[];\n backlog: CloudBacklogView;\n}\n\n/** POST /api/verse/cloud/launch (write token + read session) */\nexport interface CloudLaunchRequest {\n repo: string;\n baseBranch?: string;\n title?: string;\n prompt: string;\n origin: Extract<CloudTaskOrigin, 'chat' | 'operator' | 'cli'>;\n}\n\nexport interface CloudLaunchResponse {\n ok: boolean;\n task: CloudTaskV1 | null;\n /** Plain sentence on refusal/failure. */\n error: string | null;\n failure: CloudLaunchFailureCode | null;\n}\n\n/** POST /api/verse/cloud/budget — any subset; validated and clamped. */\nexport type CloudBudgetUpdate = Partial<Pick<CloudBudgetV1,\n 'creditsTotalUsd' | 'creditsSpentAdjustmentUsd' | 'estimatedCostPerSessionUsd' | 'maxConcurrent' | 'maxSessionsPerDay'>> & {\n selfImprove?: Partial<CloudBudgetV1['selfImprove']>;\n};\n\n/** POST /api/verse/cloud/improve — launch up to `count` backlog items now. */\nexport interface CloudImproveRequest {\n count?: number;\n}\n\nexport interface CloudImproveResponse {\n launched: CloudTaskV1[];\n skipped: Array<{ itemId: string; reason: string }>;\n}\n"],"mappings":"AA2CA,IAAa,EAAoB,mCAMpB,EAAyB,IAKzB,EAAwB,+BAkBxB,EAAmD,CAAC,SAAU,SAAU,SAAU,SAAS,EA6F3F,EAAyD,OAAO,OAAO,CAClF,EAAA,EACA,gBAAiB,IACjB,0BAA2B,EAC3B,2BAA4B,EAC5B,cAAe,EACf,kBAAmB,GACnB,YAAa,OAAO,OAAO,CAAE,QAAS,GAAM,KAAM,oBAAqB,UAAW,EAAG,WAAY,EAAG,CAAC,CACvG,CAAC,EAmDY,EAAmB,mBACnB,EAA0B,0BAC1B,EAA0B,0BAC1B,EAA2B,2BAC3B,EAA2B,2BAE3B,EAAyB"}
|
package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js → usage-queries-Bn8ccqyN.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{l as e,s as t}from"./global-
|
|
2
|
-
//# sourceMappingURL=usage-queries-
|
|
1
|
+
import{l as e,s as t}from"./global-Di2PUgj4.js";var n=`2.1.280`;function r(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function i(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:null}function a(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:null}function o(e,t,n=!1){let r=e[t];return typeof r==`boolean`?r:n}function s(e){return Array.isArray(e)?e:[]}var c=/(launcher\.mjs|native-profiles|account-connections|console-startup|\/\.ashlr\b|Bearer\s|--token\b)/i;function l(e){if(typeof e!=`string`)return null;let t=e.trim();return t.length===0||t.length>200||c.test(t)||/[\r\n]/.test(t)?null:t}function u(e){return e===null?null:Math.max(0,Math.min(100,e))}function d(e){let t=r(e);if(!t)return null;let n=i(t,`id`)??i(t,`label`);if(n===null)return null;let s=r(t.nativeReport),c=o(t,`limitReached`)||o(t,`rateLimitReached`),l=t.measured;return{id:n,label:i(t,`label`),usedPercent:u(a(t,`usedPercent`)??a(t,`used_percent`)),resetsAt:i(t,`resetsAt`)??i(t,`resets_at`),resetDescription:(s?i(s,`resetDescription`):null)??i(t,`resetDescription`),limitReached:c,measured:typeof l==`boolean`?l:!c}}function f(e){let t=r(e);if(!t)return null;let n=i(t,`balance`),s=n===null?a(t,`balance`):Number.parseFloat(n);return{hasCredits:o(t,`hasCredits`)||o(t,`has_credits`),unlimited:o(t,`unlimited`),balance:n,balanceValue:typeof s==`number`&&Number.isFinite(s)?s:null}}var p=[`claude`,`codex`,`grok`];function m(e){let t=r(e);if(!t)return null;let n=i(t,`id`),a=i(t,`provider`);if(n===null||a===null||!p.includes(a))return null;let o=s(t.windows).map(d).filter(e=>e!==null),c=i(t,`state`),u=i(t,`authentication`),m=r(t.unsupported);return{id:n,label:i(t,`label`)??n,provider:a,state:c===`checking`||c===`observed`||c===`signed-out`||c===`unavailable`?c:`unavailable`,authentication:u===`signed-in`||u===`signed-out`?u:`unknown`,health:i(t,`health`),planType:i(t,`planType`)??i(t,`plan_type`),observedAt:i(t,`observedAt`),windows:o,binding:d(t.binding),credits:f(t.credits),reason:i(t,`reason`),unsupported:h(t,m),reconnectCommand:l(t.reconnectCommand),notes:s(t.notes).filter(e=>typeof e==`string`)}}function h(e,t){if(t)return{code:i(t,`code`)??`usage-version-unsupported`,pinnedVersion:i(t,`pinnedVersion`)??i(t,`version`)};let r=i(e,`reason`);return r===`usage-version-unsupported`?{code:r,pinnedVersion:n}:null}function g(e){let t=i(e,`collectorNote`);if(t)return t;let n=r(e.collector);return!n||i(n,`owner`)!==`another-collector`?null:i(n,`note`)??`Another collector process owns the quota-refresh lease, so these readings are read-only and may be staler than this server’s poll interval.`}function _(e){let t=r(e);if(!t)return null;let n=Array.isArray(t.accounts)?t.accounts:Array.isArray(e)?e:null;return n===null?null:{sampledAt:i(t,`sampledAt`),refreshing:o(t,`refreshing`),accounts:n.map(m).filter(e=>e!==null),collectorNote:g(t)}}function v(e){let t=r(e);if(!t)return null;let n=i(t,`day`);return n===null||!/^\d{4}-\d{2}-\d{2}$/.test(n)?null:{day:n,tokensIn:a(t,`tokensIn`)??0,tokensOut:a(t,`tokensOut`)??0,estCostUsd:a(t,`estCostUsd`)??0,sessions:a(t,`sessions`)??0,cacheRead:a(t,`cacheRead`),cacheWrite:a(t,`cacheWrite`),cacheHitRate:a(t,`cacheHitRate`)}}function y(e,t){let n=r(e),a=n?Array.isArray(n.byDay)?n.byDay:Array.isArray(n.days)?n.days:null:Array.isArray(e)?e:null;if(a===null)return null;let c=n?i(n,`window`):null;return{window:c===`7d`||c===`30d`?c:t,days:a.map(v).filter(e=>e!==null).sort((e,t)=>e.day.localeCompare(t.day)),generatedAt:n?i(n,`generatedAt`):null,estimated:!n||o(n,`estimated`,!0),caveats:n?s(n.caveats).filter(e=>typeof e==`string`):[]}}function b(e,t){let n=r(e);if(!n)return null;let s=i(n,`label`)??i(n,`id`)??i(n,`name`)??i(n,`model`);if(s===null)return null;let c=n.capabilities,l=i(n,`state`),d=n.supportsTools,f=a(n,`nativeContextLength`)??a(n,`nativeContext`),p=a(n,`contextLength`)??a(n,`configuredContext`),m=i(n,`placement`);return{name:s,runtime:t,loaded:l===null?o(n,`loaded`)||o(n,`resident`):l===`loaded`,sizeBytes:a(n,`sizeBytes`)??a(n,`size`),sizeVramBytes:a(n,`sizeVramBytes`)??a(n,`size_vram`),placement:m===`gpu`||m===`cpu`||m===`split`?m:`unknown`,gpuPercent:u(a(n,`gpuPercent`)),memoryPercent:u(a(n,`memoryPercent`)),family:i(n,`family`),arch:i(n,`arch`),expiresAt:i(n,`expiresAt`)??i(n,`expires_at`),parameterSize:i(n,`parameterSize`)??i(n,`parameter_size`),quantization:i(n,`quantization`)??i(n,`quantization_level`),nativeContext:f,configuredContext:p!==null&&f!==null&&p===f?null:p,capabilities:Array.isArray(c)?c.filter(e=>typeof e==`string`):null,supportsTools:typeof d==`boolean`?d:null}}function x(e,t){let n=r(e);if(!n)return null;let s=Array.isArray(n.models)?n.models:null;if(s===null)return null;let c=s.map(e=>b(e,t)).filter(e=>e!==null),l=o(n,`stale`);return{models:c,status:{runtime:t,reachable:o(n,`reachable`),reason:i(n,`reason`),stale:l,staleForMs:l?a(n,`staleForMs`):null,modelCount:c.length}}}function S(e){let t=r(e);if(!t)return null;let n=x(t.ollama,`ollama`),c=x(t.lmStudio??t.lmstudio,`lmstudio`);if(n!==null||c!==null){let e=[n,c].filter(e=>e!==null),o=e.some(e=>e.status.reachable),l=r(t.machine);return{reachable:o,models:e.flatMap(e=>e.models),memoryBudgetBytes:(l?a(l,`totalMemoryBytes`):null)??a(t,`memoryBudgetBytes`)??a(t,`memoryBudget`),freeMemoryBytes:l?a(l,`freeMemoryBytes`):null,reason:o?null:e.map(e=>e.status.reason).find(e=>e!==null)??null,runtimes:e.map(e=>e.status),notes:s(t.notes).filter(e=>typeof e==`string`),sampledAt:i(t,`sampledAt`)}}let l=Array.isArray(t.models)?t.models:null;return l===null?null:{reachable:o(t,`reachable`,!0),models:l.map(e=>b(e,null)).filter(e=>e!==null),memoryBudgetBytes:a(t,`memoryBudgetBytes`)??a(t,`memoryBudget`),freeMemoryBytes:a(t,`freeMemoryBytes`),reason:i(t,`reason`),runtimes:[],notes:s(t.notes).filter(e=>typeof e==`string`),sampledAt:i(t,`sampledAt`)}}var C=`verse-usage-frontier`,w=`verse-usage-control`,T={key:C,fetch:t=>e(`/api/usage`,t)};function E(e){return e instanceof t?e.status===404?`This server does not expose /api/verse/control, so configured caps and today’s spend are unavailable here.`:`Configured caps unavailable (HTTP ${e.status}).`:`Configured caps unavailable: the request failed.`}var D={key:w,fetch:async n=>{try{return{raw:await e(`/api/verse/control`,n),available:!0,reason:null}}catch(e){if(e instanceof t&&e.status===401||e instanceof DOMException&&e.name===`AbortError`)throw e;return{raw:null,available:!1,reason:E(e)}}}},O=`verse-usage-accounts`,k=`verse-usage-local-models`,A=`verse-usage-series`;function j(e,n){return n instanceof t?n.status===404?`This server does not expose ${e} yet, so this panel has no source.`:`${e} answered HTTP ${n.status}.`:`${e} could not be reached.`}function M(n){return async r=>{try{return{raw:await e(n,r),available:!0,reason:null}}catch(e){if(e instanceof t&&e.status===401||e instanceof DOMException&&e.name===`AbortError`)throw e;return{raw:null,available:!1,reason:j(n,e)}}}}var N={key:O,fetch:M(`/api/verse/accounts`)},P=[350,1200],F=M(`/api/verse/local-models`);function I(e){if(!e.available)return!1;let t=S(e.raw);return t!==null&&!t.reachable}function L(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new DOMException(`Aborted`,`AbortError`));return}let i=()=>{clearTimeout(a),r(new DOMException(`Aborted`,`AbortError`))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})}var R={key:k,fetch:async e=>{let t=await F(e);for(let n of P){if(!I(t))return t;await L(n,e),t=await F(e)}return t}},z={"7d":{key:`${A}:7d`,fetch:M(`/api/verse/usage-series?window=7d`)},"30d":{key:`${A}:30d`,fetch:M(`/api/verse/usage-series?window=30d`)}};function B(e){return z[e]}export{R as a,y as c,D as i,B as n,_ as o,N as r,S as s,T as t};
|
|
2
|
+
//# sourceMappingURL=usage-queries-Bn8ccqyN.js.map
|