@ashlr/hub 3.13.0 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/authority-surface.json +204 -124
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/authority.js +112 -18
  5. package/dist/cli/authority.js.map +1 -1
  6. package/dist/cli/comms.d.ts +33 -19
  7. package/dist/cli/comms.js +128 -151
  8. package/dist/cli/comms.js.map +1 -1
  9. package/dist/cli/completions.js +1 -1
  10. package/dist/cli/completions.js.map +1 -1
  11. package/dist/cli/daemon.js +29 -0
  12. package/dist/cli/daemon.js.map +1 -1
  13. package/dist/cli/director.d.ts +8 -12
  14. package/dist/cli/director.js +17 -52
  15. package/dist/cli/director.js.map +1 -1
  16. package/dist/cli/fleet.js +4 -1
  17. package/dist/cli/fleet.js.map +1 -1
  18. package/dist/cli/help.js +1 -0
  19. package/dist/cli/help.js.map +1 -1
  20. package/dist/cli/leader.d.ts +27 -3
  21. package/dist/cli/leader.js +253 -4
  22. package/dist/cli/leader.js.map +1 -1
  23. package/dist/core/authority/server-enforcement.d.ts +110 -0
  24. package/dist/core/authority/server-enforcement.js +260 -0
  25. package/dist/core/authority/server-enforcement.js.map +1 -0
  26. package/dist/core/authority/standing-grant.d.ts +24 -4
  27. package/dist/core/authority/standing-grant.js +19 -3
  28. package/dist/core/authority/standing-grant.js.map +1 -1
  29. package/dist/core/cloud/timeline.js +13 -7
  30. package/dist/core/cloud/timeline.js.map +1 -1
  31. package/dist/core/comms/change-digest.d.ts +130 -0
  32. package/dist/core/comms/change-digest.js +451 -0
  33. package/dist/core/comms/change-digest.js.map +1 -0
  34. package/dist/core/comms/director-prompt.d.ts +4 -5
  35. package/dist/core/comms/director-prompt.js +4 -71
  36. package/dist/core/comms/director-prompt.js.map +1 -1
  37. package/dist/core/comms/director.d.ts +24 -61
  38. package/dist/core/comms/director.js +29 -382
  39. package/dist/core/comms/director.js.map +1 -1
  40. package/dist/core/comms/dispatch.d.ts +37 -12
  41. package/dist/core/comms/dispatch.js +244 -177
  42. package/dist/core/comms/dispatch.js.map +1 -1
  43. package/dist/core/comms/elon-dialogue.d.ts +23 -15
  44. package/dist/core/comms/elon-dialogue.js +36 -307
  45. package/dist/core/comms/elon-dialogue.js.map +1 -1
  46. package/dist/core/comms/fleet-pulse.js +4 -7
  47. package/dist/core/comms/fleet-pulse.js.map +1 -1
  48. package/dist/core/comms/handlers.d.ts +10 -6
  49. package/dist/core/comms/handlers.js +14 -48
  50. package/dist/core/comms/handlers.js.map +1 -1
  51. package/dist/core/comms/migrations.d.ts +47 -0
  52. package/dist/core/comms/migrations.js +125 -0
  53. package/dist/core/comms/migrations.js.map +1 -0
  54. package/dist/core/comms/requests.d.ts +32 -5
  55. package/dist/core/comms/requests.js +101 -5
  56. package/dist/core/comms/requests.js.map +1 -1
  57. package/dist/core/comms/telegram-channel.d.ts +104 -0
  58. package/dist/core/comms/telegram-channel.js +622 -0
  59. package/dist/core/comms/telegram-channel.js.map +1 -0
  60. package/dist/core/comms/telegram-thread-map.d.ts +56 -0
  61. package/dist/core/comms/telegram-thread-map.js +144 -0
  62. package/dist/core/comms/telegram-thread-map.js.map +1 -0
  63. package/dist/core/daemon/capacity-publisher.d.ts +8 -1
  64. package/dist/core/daemon/capacity-publisher.js +40 -2
  65. package/dist/core/daemon/capacity-publisher.js.map +1 -1
  66. package/dist/core/daemon/loop.js +18 -4
  67. package/dist/core/daemon/loop.js.map +1 -1
  68. package/dist/core/daemon/tick-deadline.d.ts +44 -0
  69. package/dist/core/daemon/tick-deadline.js +83 -0
  70. package/dist/core/daemon/tick-deadline.js.map +1 -0
  71. package/dist/core/daemon/tick-hooks.d.ts +7 -0
  72. package/dist/core/daemon/tick-hooks.js.map +1 -1
  73. package/dist/core/daemon/tick-progress.d.ts +39 -0
  74. package/dist/core/daemon/tick-progress.js +194 -0
  75. package/dist/core/daemon/tick-progress.js.map +1 -0
  76. package/dist/core/dashboard.js +3 -1
  77. package/dist/core/dashboard.js.map +1 -1
  78. package/dist/core/fleet/fleet-merge-state.d.ts +6 -0
  79. package/dist/core/fleet/fleet-merge-state.js.map +1 -1
  80. package/dist/core/fleet/host-merge.d.ts +9 -0
  81. package/dist/core/fleet/host-merge.js +13 -2
  82. package/dist/core/fleet/host-merge.js.map +1 -1
  83. package/dist/core/fleet/merge-gates.d.ts +13 -0
  84. package/dist/core/fleet/merge-gates.js +14 -0
  85. package/dist/core/fleet/merge-gates.js.map +1 -1
  86. package/dist/core/fleet/mirrors.d.ts +162 -6
  87. package/dist/core/fleet/mirrors.js +1051 -49
  88. package/dist/core/fleet/mirrors.js.map +1 -1
  89. package/dist/core/fleet/standing-merge-pass.d.ts +8 -0
  90. package/dist/core/fleet/standing-merge-pass.js +72 -1
  91. package/dist/core/fleet/standing-merge-pass.js.map +1 -1
  92. package/dist/core/fleet/status.d.ts +17 -0
  93. package/dist/core/fleet/status.js +22 -0
  94. package/dist/core/fleet/status.js.map +1 -1
  95. package/dist/core/fleet/tick-hooks-live.d.ts +1 -1
  96. package/dist/core/fleet/tick-hooks-live.js +13 -3
  97. package/dist/core/fleet/tick-hooks-live.js.map +1 -1
  98. package/dist/core/git.d.ts +17 -0
  99. package/dist/core/git.js +124 -25
  100. package/dist/core/git.js.map +1 -1
  101. package/dist/core/goals/open-goals.d.ts +47 -0
  102. package/dist/core/goals/open-goals.js +33 -0
  103. package/dist/core/goals/open-goals.js.map +1 -0
  104. package/dist/core/inbox/merge.d.ts +5 -0
  105. package/dist/core/inbox/merge.js +58 -2
  106. package/dist/core/inbox/merge.js.map +1 -1
  107. package/dist/core/integrations/locus.d.ts +28 -0
  108. package/dist/core/integrations/locus.js +155 -30
  109. package/dist/core/integrations/locus.js.map +1 -1
  110. package/dist/core/integrations/telegram-format.d.ts +40 -0
  111. package/dist/core/integrations/telegram-format.js +123 -0
  112. package/dist/core/integrations/telegram-format.js.map +1 -0
  113. package/dist/core/integrations/telegram.d.ts +60 -4
  114. package/dist/core/integrations/telegram.js +161 -28
  115. package/dist/core/integrations/telegram.js.map +1 -1
  116. package/dist/core/mcp-registry.d.ts +12 -0
  117. package/dist/core/mcp-registry.js +70 -0
  118. package/dist/core/mcp-registry.js.map +1 -1
  119. package/dist/core/observability/rollup.d.ts +12 -10
  120. package/dist/core/observability/rollup.js +44 -17
  121. package/dist/core/observability/rollup.js.map +1 -1
  122. package/dist/core/resources/connection-monitor.d.ts +9 -0
  123. package/dist/core/resources/connection-monitor.js +19 -9
  124. package/dist/core/resources/connection-monitor.js.map +1 -1
  125. package/dist/core/resources/quota-refresh-lease.d.ts +17 -0
  126. package/dist/core/resources/quota-refresh-lease.js +34 -1
  127. package/dist/core/resources/quota-refresh-lease.js.map +1 -1
  128. package/dist/core/routing/budget-api.d.ts +7 -1
  129. package/dist/core/routing/budget-api.js +56 -2
  130. package/dist/core/routing/budget-api.js.map +1 -1
  131. package/dist/core/routing/readiness-types.d.ts +82 -0
  132. package/dist/core/routing/readiness-types.js +23 -0
  133. package/dist/core/routing/readiness-types.js.map +1 -0
  134. package/dist/core/routing/readiness.d.ts +103 -0
  135. package/dist/core/routing/readiness.js +480 -0
  136. package/dist/core/routing/readiness.js.map +1 -0
  137. package/dist/core/sandbox/confine.js +22 -1
  138. package/dist/core/sandbox/confine.js.map +1 -1
  139. package/dist/core/sandbox/policy.d.ts +23 -0
  140. package/dist/core/sandbox/policy.js +100 -0
  141. package/dist/core/sandbox/policy.js.map +1 -1
  142. package/dist/core/types.d.ts +13 -0
  143. package/dist/core/types.js.map +1 -1
  144. package/dist/core/universe/builtins/preparation/manifest.json +1 -1
  145. package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +1204 -939
  146. package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +1319 -1054
  147. package/dist/core/usage/frontier-usage.d.ts +20 -2
  148. package/dist/core/usage/frontier-usage.js +75 -17
  149. package/dist/core/usage/frontier-usage.js.map +1 -1
  150. package/dist/core/verse/accounts.d.ts +45 -0
  151. package/dist/core/verse/accounts.js +246 -17
  152. package/dist/core/verse/accounts.js.map +1 -1
  153. package/dist/core/verse/apps-api.js +23 -11
  154. package/dist/core/verse/apps-api.js.map +1 -1
  155. package/dist/core/verse/apps.d.ts +11 -9
  156. package/dist/core/verse/apps.js +2 -2
  157. package/dist/core/verse/apps.js.map +1 -1
  158. package/dist/core/verse/authority-api.d.ts +8 -2
  159. package/dist/core/verse/authority-api.js +40 -5
  160. package/dist/core/verse/authority-api.js.map +1 -1
  161. package/dist/core/verse/autonomy-ladder.d.ts +172 -0
  162. package/dist/core/verse/autonomy-ladder.js +251 -0
  163. package/dist/core/verse/autonomy-ladder.js.map +1 -0
  164. package/dist/core/verse/context-fit.js +7 -5
  165. package/dist/core/verse/context-fit.js.map +1 -1
  166. package/dist/core/verse/control-api.d.ts +23 -1
  167. package/dist/core/verse/control-api.js +117 -10
  168. package/dist/core/verse/control-api.js.map +1 -1
  169. package/dist/core/verse/fleet-live-api.js +13 -5
  170. package/dist/core/verse/fleet-live-api.js.map +1 -1
  171. package/dist/core/verse/folder-io.d.ts +50 -0
  172. package/dist/core/verse/folder-io.js +142 -0
  173. package/dist/core/verse/folder-io.js.map +1 -0
  174. package/dist/core/verse/git-api.js +5 -4
  175. package/dist/core/verse/git-api.js.map +1 -1
  176. package/dist/core/verse/git-ops.d.ts +10 -1
  177. package/dist/core/verse/git-ops.js +18 -2
  178. package/dist/core/verse/git-ops.js.map +1 -1
  179. package/dist/core/verse/github-api.d.ts +1 -1
  180. package/dist/core/verse/github-api.js +5 -4
  181. package/dist/core/verse/github-api.js.map +1 -1
  182. package/dist/core/verse/github-repo.js +118 -14
  183. package/dist/core/verse/github-repo.js.map +1 -1
  184. package/dist/core/verse/leader-api.d.ts +5 -4
  185. package/dist/core/verse/leader-api.js +237 -10
  186. package/dist/core/verse/leader-api.js.map +1 -1
  187. package/dist/core/verse/local-models.d.ts +10 -0
  188. package/dist/core/verse/local-models.js +10 -1
  189. package/dist/core/verse/local-models.js.map +1 -1
  190. package/dist/core/verse/login-path.d.ts +73 -0
  191. package/dist/core/verse/login-path.js +123 -14
  192. package/dist/core/verse/login-path.js.map +1 -1
  193. package/dist/core/verse/mcp-control-api.js +4 -4
  194. package/dist/core/verse/mcp-control-api.js.map +1 -1
  195. package/dist/core/verse/mcp-scope.d.ts +22 -0
  196. package/dist/core/verse/mcp-scope.js +41 -1
  197. package/dist/core/verse/mcp-scope.js.map +1 -1
  198. package/dist/core/verse/mcp-seat-view.d.ts +10 -0
  199. package/dist/core/verse/mcp-seat-view.js +30 -4
  200. package/dist/core/verse/mcp-seat-view.js.map +1 -1
  201. package/dist/core/verse/overnight-api.js +20 -2
  202. package/dist/core/verse/overnight-api.js.map +1 -1
  203. package/dist/core/verse/path-guard.d.ts +24 -0
  204. package/dist/core/verse/path-guard.js +91 -22
  205. package/dist/core/verse/path-guard.js.map +1 -1
  206. package/dist/core/verse/preview-api.js +22 -0
  207. package/dist/core/verse/preview-api.js.map +1 -1
  208. package/dist/core/verse/projects.d.ts +21 -0
  209. package/dist/core/verse/projects.js +82 -0
  210. package/dist/core/verse/projects.js.map +1 -1
  211. package/dist/core/verse/session-controls-api.js +5 -3
  212. package/dist/core/verse/session-controls-api.js.map +1 -1
  213. package/dist/core/verse/session-handoff.d.ts +26 -0
  214. package/dist/core/verse/session-handoff.js +90 -12
  215. package/dist/core/verse/session-handoff.js.map +1 -1
  216. package/dist/core/verse/terminal-api.js +7 -4
  217. package/dist/core/verse/terminal-api.js.map +1 -1
  218. package/dist/core/verse/terminal.js +9 -5
  219. package/dist/core/verse/terminal.js.map +1 -1
  220. package/dist/core/verse/verse-api.js +81 -27
  221. package/dist/core/verse/verse-api.js.map +1 -1
  222. package/dist/core/verse/workspaces.d.ts +51 -0
  223. package/dist/core/verse/workspaces.js +177 -47
  224. package/dist/core/verse/workspaces.js.map +1 -1
  225. package/dist/core/vision/leader-apply.d.ts +40 -0
  226. package/dist/core/vision/leader-apply.js +101 -30
  227. package/dist/core/vision/leader-apply.js.map +1 -1
  228. package/dist/core/vision/leader-cadence.d.ts +114 -0
  229. package/dist/core/vision/leader-cadence.js +127 -0
  230. package/dist/core/vision/leader-cadence.js.map +1 -0
  231. package/dist/core/vision/leader-goal-evidence.d.ts +25 -0
  232. package/dist/core/vision/leader-goal-evidence.js +36 -0
  233. package/dist/core/vision/leader-goal-evidence.js.map +1 -0
  234. package/dist/core/vision/leader-health.d.ts +53 -0
  235. package/dist/core/vision/leader-health.js +92 -0
  236. package/dist/core/vision/leader-health.js.map +1 -0
  237. package/dist/core/vision/leader-operator.d.ts +176 -0
  238. package/dist/core/vision/leader-operator.js +355 -0
  239. package/dist/core/vision/leader-operator.js.map +1 -0
  240. package/dist/core/vision/leader-run-chain.d.ts +41 -0
  241. package/dist/core/vision/leader-run-chain.js +54 -0
  242. package/dist/core/vision/leader-run-chain.js.map +1 -0
  243. package/dist/core/vision/leader-seat-plan.d.ts +68 -0
  244. package/dist/core/vision/leader-seat-plan.js +93 -0
  245. package/dist/core/vision/leader-seat-plan.js.map +1 -0
  246. package/dist/core/vision/leader-seat.d.ts +71 -5
  247. package/dist/core/vision/leader-seat.js +235 -33
  248. package/dist/core/vision/leader-seat.js.map +1 -1
  249. package/dist/core/vision/leader-thread-types.d.ts +104 -0
  250. package/dist/core/vision/leader-thread-types.js +9 -0
  251. package/dist/core/vision/leader-thread-types.js.map +1 -0
  252. package/dist/core/vision/leader-thread.d.ts +138 -0
  253. package/dist/core/vision/leader-thread.js +926 -0
  254. package/dist/core/vision/leader-thread.js.map +1 -0
  255. package/dist/core/vision/leader-types.d.ts +75 -1
  256. package/dist/core/vision/leader.d.ts +88 -18
  257. package/dist/core/vision/leader.js +269 -69
  258. package/dist/core/vision/leader.js.map +1 -1
  259. package/dist/core/web/public/next/assets/{ActionMenu-Dwjk6rUQ.js → ActionMenu-CIiX2X8w.js} +2 -2
  260. package/dist/core/web/public/next/assets/{ActionMenu-Dwjk6rUQ.js.map → ActionMenu-CIiX2X8w.js.map} +1 -1
  261. package/dist/core/web/public/next/assets/Advanced-DHsysoIL.js +2 -0
  262. package/dist/core/web/public/next/assets/{Advanced-cVYTAsfB.js.map → Advanced-DHsysoIL.js.map} +1 -1
  263. package/dist/core/web/public/next/assets/{App-IsaWDsdF.js → App-CMeAocmW.js} +5 -5
  264. package/dist/core/web/public/next/assets/{App-IsaWDsdF.js.map → App-CMeAocmW.js.map} +1 -1
  265. package/dist/core/web/public/next/assets/AppsSection-DISYnMnc.js +2 -0
  266. package/dist/core/web/public/next/assets/{AppsSection-DDqeSrty.js.map → AppsSection-DISYnMnc.js.map} +1 -1
  267. package/dist/core/web/public/next/assets/AreaTrend-DK2Y2TbZ.js +2 -0
  268. package/dist/core/web/public/next/assets/AreaTrend-DK2Y2TbZ.js.map +1 -0
  269. package/dist/core/web/public/next/assets/{AutonomyOffState-CpFYS3tQ.js → AutonomyOffState-CEPSZToP.js} +3 -3
  270. package/dist/core/web/public/next/assets/{AutonomyOffState-CpFYS3tQ.js.map → AutonomyOffState-CEPSZToP.js.map} +1 -1
  271. package/dist/core/web/public/next/assets/AutonomySection-DWc3ciAD.js +2 -0
  272. package/dist/core/web/public/next/assets/{AutonomySection-Dwn8UtOy.js.map → AutonomySection-DWc3ciAD.js.map} +1 -1
  273. package/dist/core/web/public/next/assets/AutonomyStatus-CYaHjJ9U.js +2 -0
  274. package/dist/core/web/public/next/assets/AutonomyStatus-CYaHjJ9U.js.map +1 -0
  275. package/dist/core/web/public/next/assets/{BranchBar-ISZ7xUCj.js → BranchBar-BxhdiIpx.js} +2 -2
  276. package/dist/core/web/public/next/assets/{BranchBar-ISZ7xUCj.js.map → BranchBar-BxhdiIpx.js.map} +1 -1
  277. package/dist/core/web/public/next/assets/{BudgetControl-BARVp-En.js → BudgetControl-C-0KhjRS.js} +2 -2
  278. package/dist/core/web/public/next/assets/{BudgetControl-BARVp-En.js.map → BudgetControl-C-0KhjRS.js.map} +1 -1
  279. package/dist/core/web/public/next/assets/{Button-DtE0rlWD.js → Button-D90dzI_o.js} +2 -2
  280. package/dist/core/web/public/next/assets/{Button-DtE0rlWD.js.map → Button-D90dzI_o.js.map} +1 -1
  281. package/dist/core/web/public/next/assets/{CapacityStrip-DKbKA_Aa.js → CapacityStrip-qKDBC65C.js} +2 -2
  282. package/dist/core/web/public/next/assets/{CapacityStrip-DKbKA_Aa.js.map → CapacityStrip-qKDBC65C.js.map} +1 -1
  283. package/dist/core/web/public/next/assets/ChartFrame-DY-GVUb3.js +2 -0
  284. package/dist/core/web/public/next/assets/ChartFrame-DY-GVUb3.js.map +1 -0
  285. package/dist/core/web/public/next/assets/ChartFrame-DyjmyV8N.css +1 -0
  286. package/dist/core/web/public/next/assets/ChatSection-DlT4QU6a.js +3 -0
  287. package/dist/core/web/public/next/assets/{ChatSection-C9myY4ei.js.map → ChatSection-DlT4QU6a.js.map} +1 -1
  288. package/dist/core/web/public/next/assets/{CloudBudgetForm-CvjK4Oh6.js → CloudBudgetForm-BrNun_Yu.js} +2 -2
  289. package/dist/core/web/public/next/assets/{CloudBudgetForm-CvjK4Oh6.js.map → CloudBudgetForm-BrNun_Yu.js.map} +1 -1
  290. package/dist/core/web/public/next/assets/CommandPalette-C5lDDKN0.js +2 -0
  291. package/dist/core/web/public/next/assets/CommandPalette-C5lDDKN0.js.map +1 -0
  292. package/dist/core/web/public/next/assets/CommandSection-B0xuU-yZ.css +1 -0
  293. package/dist/core/web/public/next/assets/CommandSection-DXFvPgKp.js +3 -0
  294. package/dist/core/web/public/next/assets/CommandSection-DXFvPgKp.js.map +1 -0
  295. package/dist/core/web/public/next/assets/{ConfirmDialog-CLUhzaBj.js → ConfirmDialog-BR4nZQ2D.js} +2 -2
  296. package/dist/core/web/public/next/assets/{ConfirmDialog-CLUhzaBj.js.map → ConfirmDialog-BR4nZQ2D.js.map} +1 -1
  297. package/dist/core/web/public/next/assets/{DeleteChatDialog-C_eDhV8b.js → DeleteChatDialog-BCfP12GH.js} +2 -2
  298. package/dist/core/web/public/next/assets/{DeleteChatDialog-C_eDhV8b.js.map → DeleteChatDialog-BCfP12GH.js.map} +1 -1
  299. package/dist/core/web/public/next/assets/{Dialog-BRd_B9OE.js → Dialog-D3msQlCj.js} +2 -2
  300. package/dist/core/web/public/next/assets/{Dialog-BRd_B9OE.js.map → Dialog-D3msQlCj.js.map} +1 -1
  301. package/dist/core/web/public/next/assets/{DiffPane-Cpr9soB2.js → DiffPane-Ix6hvXlY.js} +2 -2
  302. package/dist/core/web/public/next/assets/{DiffPane-Cpr9soB2.js.map → DiffPane-Ix6hvXlY.js.map} +1 -1
  303. package/dist/core/web/public/next/assets/{DiffViewer-CNwd0W3Q.js → DiffViewer-C4WKsCIe.js} +2 -2
  304. package/dist/core/web/public/next/assets/{DiffViewer-CNwd0W3Q.js.map → DiffViewer-C4WKsCIe.js.map} +1 -1
  305. package/dist/core/web/public/next/assets/DockHost-aWP7liri.js +2 -0
  306. package/dist/core/web/public/next/assets/{DockHost-BcEq2qaS.js.map → DockHost-aWP7liri.js.map} +1 -1
  307. package/dist/core/web/public/next/assets/{EmptyState-DsN1H6MC.js → EmptyState-D2IRy3Cg.js} +2 -2
  308. package/dist/core/web/public/next/assets/{EmptyState-DsN1H6MC.js.map → EmptyState-D2IRy3Cg.js.map} +1 -1
  309. package/dist/core/web/public/next/assets/{Epistemic-fycQTBRO.js → Epistemic-DMr18muX.js} +2 -2
  310. package/dist/core/web/public/next/assets/{Epistemic-fycQTBRO.js.map → Epistemic-DMr18muX.js.map} +1 -1
  311. package/dist/core/web/public/next/assets/{EvidenceTimeline-sCCAdnBK.js → EvidenceTimeline-DXmmz6Fi.js} +2 -2
  312. package/dist/core/web/public/next/assets/{EvidenceTimeline-sCCAdnBK.js.map → EvidenceTimeline-DXmmz6Fi.js.map} +1 -1
  313. package/dist/core/web/public/next/assets/FleetSection-BfplcwFU.js +3 -0
  314. package/dist/core/web/public/next/assets/FleetSection-BfplcwFU.js.map +1 -0
  315. package/dist/core/web/public/next/assets/Funnel-Dh2yVHws.js +2 -0
  316. package/dist/core/web/public/next/assets/Funnel-Dh2yVHws.js.map +1 -0
  317. package/dist/core/web/public/next/assets/{GearTray-CpDt0xwj.js → GearTray-Dt-ee32-.js} +2 -2
  318. package/dist/core/web/public/next/assets/{GearTray-CpDt0xwj.js.map → GearTray-Dt-ee32-.js.map} +1 -1
  319. package/dist/core/web/public/next/assets/GrowthSection-P9EUfGeA.js +2 -0
  320. package/dist/core/web/public/next/assets/{GrowthSection-BvZezOsX.js.map → GrowthSection-P9EUfGeA.js.map} +1 -1
  321. package/dist/core/web/public/next/assets/{HandoffDialog-B1G6gQyk.js → HandoffDialog-CLJQLe7M.js} +2 -2
  322. package/dist/core/web/public/next/assets/{HandoffDialog-B1G6gQyk.js.map → HandoffDialog-CLJQLe7M.js.map} +1 -1
  323. package/dist/core/web/public/next/assets/{Input-CI0yBHmn.js → Input-D_KRJA9V.js} +2 -2
  324. package/dist/core/web/public/next/assets/{Input-CI0yBHmn.js.map → Input-D_KRJA9V.js.map} +1 -1
  325. package/dist/core/web/public/next/assets/LeaderCard-D-7DlJuR.js +2 -0
  326. package/dist/core/web/public/next/assets/LeaderCard-D-7DlJuR.js.map +1 -0
  327. package/dist/core/web/public/next/assets/LeaderCard-DNsbLwY3.css +1 -0
  328. package/dist/core/web/public/next/assets/LeaderConversation-DGZjWI-E.js +2 -0
  329. package/dist/core/web/public/next/assets/LeaderConversation-DGZjWI-E.js.map +1 -0
  330. package/dist/core/web/public/next/assets/LeaderConversation-DPHUTq6W.css +1 -0
  331. package/dist/core/web/public/next/assets/MatrixHeatmap-C7BCG2d7.js +2 -0
  332. package/dist/core/web/public/next/assets/MatrixHeatmap-C7BCG2d7.js.map +1 -0
  333. package/dist/core/web/public/next/assets/McpSection-DGbRcyv8.js +2 -0
  334. package/dist/core/web/public/next/assets/{McpSection-nuXer4K-.js.map → McpSection-DGbRcyv8.js.map} +1 -1
  335. package/dist/core/web/public/next/assets/{MessageMarkdown-BCe4TsXk.js → MessageMarkdown-DFvk06qG.js} +3 -3
  336. package/dist/core/web/public/next/assets/{MessageMarkdown-BCe4TsXk.js.map → MessageMarkdown-DFvk06qG.js.map} +1 -1
  337. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DL3LU5kL.js → MessageMarkdownRenderer-BAv4oEUf.js} +2 -2
  338. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DL3LU5kL.js.map → MessageMarkdownRenderer-BAv4oEUf.js.map} +1 -1
  339. package/dist/core/web/public/next/assets/{Meter-b69LM0mU.js → Meter-CMj-VafN.js} +2 -2
  340. package/dist/core/web/public/next/assets/{Meter-b69LM0mU.js.map → Meter-CMj-VafN.js.map} +1 -1
  341. package/dist/core/web/public/next/assets/MindSection-C6kLPIjt.js +3 -0
  342. package/dist/core/web/public/next/assets/MindSection-C6kLPIjt.js.map +1 -0
  343. package/dist/core/web/public/next/assets/{MutationTokenDialog-Bm34BNVV.js → MutationTokenDialog-DbnO8aYi.js} +2 -2
  344. package/dist/core/web/public/next/assets/{MutationTokenDialog-Bm34BNVV.js.map → MutationTokenDialog-DbnO8aYi.js.map} +1 -1
  345. package/dist/core/web/public/next/assets/NeedsYouDrawer-crsiX-Nc.js +3 -0
  346. package/dist/core/web/public/next/assets/NeedsYouDrawer-crsiX-Nc.js.map +1 -0
  347. package/dist/core/web/public/next/assets/{NeedsYouList-D5Kk549g.js → NeedsYouList-CCsijdWt.js} +2 -2
  348. package/dist/core/web/public/next/assets/{NeedsYouList-D5Kk549g.js.map → NeedsYouList-CCsijdWt.js.map} +1 -1
  349. package/dist/core/web/public/next/assets/NewChatDialog-BlCHtOIr.js +3 -0
  350. package/dist/core/web/public/next/assets/{NewChatDialog-BqFTWgHU.js.map → NewChatDialog-BlCHtOIr.js.map} +1 -1
  351. package/dist/core/web/public/next/assets/{OnboardingFlow-DcDsguAM.js → OnboardingFlow-Cy9BA9eR.js} +3 -3
  352. package/dist/core/web/public/next/assets/{OnboardingFlow-DcDsguAM.js.map → OnboardingFlow-Cy9BA9eR.js.map} +1 -1
  353. package/dist/core/web/public/next/assets/OnboardingGate-BXpNFoLt.js +3 -0
  354. package/dist/core/web/public/next/assets/{OnboardingGate-BZafM1Vf.js.map → OnboardingGate-BXpNFoLt.js.map} +1 -1
  355. package/dist/core/web/public/next/assets/PreviewPane-COid5A0f.js +2 -0
  356. package/dist/core/web/public/next/assets/{PreviewPane-zT3gK9TD.js.map → PreviewPane-COid5A0f.js.map} +1 -1
  357. package/dist/core/web/public/next/assets/{ProviderLogo-AwHn2sKm.js → ProviderLogo-Cq-CYIwT.js} +2 -2
  358. package/dist/core/web/public/next/assets/{ProviderLogo-AwHn2sKm.js.map → ProviderLogo-Cq-CYIwT.js.map} +1 -1
  359. package/dist/core/web/public/next/assets/{RailStatus-xHrovWvI.js → RailStatus-Co5UB6We.js} +2 -2
  360. package/dist/core/web/public/next/assets/{RailStatus-xHrovWvI.js.map → RailStatus-Co5UB6We.js.map} +1 -1
  361. package/dist/core/web/public/next/assets/{RefreshIndicator-SEFZlMB2.js → RefreshIndicator-DO9ibnSq.js} +2 -2
  362. package/dist/core/web/public/next/assets/{RefreshIndicator-SEFZlMB2.js.map → RefreshIndicator-DO9ibnSq.js.map} +1 -1
  363. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-Dr2WRgkq.js +7 -0
  364. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-CAxPQ4sZ.js.map → ResourcePoolConsoleApp-Dr2WRgkq.js.map} +1 -1
  365. package/dist/core/web/public/next/assets/ResourcesChrome-CwMnbqI1.js +3 -0
  366. package/dist/core/web/public/next/assets/ResourcesChrome-CwMnbqI1.js.map +1 -0
  367. package/dist/core/web/public/next/assets/ResourcesDrawer-B_Xp_JNc.js +2 -0
  368. package/dist/core/web/public/next/assets/ResourcesDrawer-B_Xp_JNc.js.map +1 -0
  369. package/dist/core/web/public/next/assets/ResourcesDrawer-DrGoO8KG.css +1 -0
  370. package/dist/core/web/public/next/assets/{RouteErrorBoundary-C8WGiixc.js → RouteErrorBoundary-SkNhhUbt.js} +2 -2
  371. package/dist/core/web/public/next/assets/{RouteErrorBoundary-C8WGiixc.js.map → RouteErrorBoundary-SkNhhUbt.js.map} +1 -1
  372. package/dist/core/web/public/next/assets/{RunInCloudAction-1-IPLYhf.js → RunInCloudAction-BXPlZwJQ.js} +2 -2
  373. package/dist/core/web/public/next/assets/{RunInCloudAction-1-IPLYhf.js.map → RunInCloudAction-BXPlZwJQ.js.map} +1 -1
  374. package/dist/core/web/public/next/assets/{SeatSelector-DpwNiX8F.js → SeatSelector-J5R3zDkB.js} +3 -3
  375. package/dist/core/web/public/next/assets/{SeatSelector-DpwNiX8F.js.map → SeatSelector-J5R3zDkB.js.map} +1 -1
  376. package/dist/core/web/public/next/assets/{Segmented-Wt1ATod9.js → Segmented-CGh_-tBb.js} +2 -2
  377. package/dist/core/web/public/next/assets/{Segmented-Wt1ATod9.js.map → Segmented-CGh_-tBb.js.map} +1 -1
  378. package/dist/core/web/public/next/assets/{Select-By-V9lMc.js → Select-CWnmUzs3.js} +2 -2
  379. package/dist/core/web/public/next/assets/{Select-By-V9lMc.js.map → Select-CWnmUzs3.js.map} +1 -1
  380. package/dist/core/web/public/next/assets/{SessionGate-WROS02tK.js → SessionGate-sp4KsnUo.js} +2 -2
  381. package/dist/core/web/public/next/assets/{SessionGate-WROS02tK.js.map → SessionGate-sp4KsnUo.js.map} +1 -1
  382. package/dist/core/web/public/next/assets/{SessionInsightChip-DNUcruwp.js → SessionInsightChip-DLFAzdbi.js} +2 -2
  383. package/dist/core/web/public/next/assets/{SessionInsightChip-DNUcruwp.js.map → SessionInsightChip-DLFAzdbi.js.map} +1 -1
  384. package/dist/core/web/public/next/assets/{SessionSearch-UHtt7a8f.js → SessionSearch-DbFjwR1h.js} +2 -2
  385. package/dist/core/web/public/next/assets/{SessionSearch-UHtt7a8f.js.map → SessionSearch-DbFjwR1h.js.map} +1 -1
  386. package/dist/core/web/public/next/assets/{SettingsSection-Bf74l0Gj.js → SettingsSection-Ch23msJ5.js} +2 -2
  387. package/dist/core/web/public/next/assets/SettingsSection-Ch23msJ5.js.map +1 -0
  388. package/dist/core/web/public/next/assets/{SetupChecklist-CzpEcfOl.js → SetupChecklist-Bd76MBAR.js} +2 -2
  389. package/dist/core/web/public/next/assets/{SetupChecklist-CzpEcfOl.js.map → SetupChecklist-Bd76MBAR.js.map} +1 -1
  390. package/dist/core/web/public/next/assets/ShadowDecisions-C5RAY91f.js +3 -0
  391. package/dist/core/web/public/next/assets/ShadowDecisions-C5RAY91f.js.map +1 -0
  392. package/dist/core/web/public/next/assets/{Sheet-HkBOBMTT.js → Sheet-BZ2AG4Eo.js} +2 -2
  393. package/dist/core/web/public/next/assets/{Sheet-HkBOBMTT.js.map → Sheet-BZ2AG4Eo.js.map} +1 -1
  394. package/dist/core/web/public/next/assets/{ShortcutsOverlay-DiigiT8H.js → ShortcutsOverlay-C8n8y3zf.js} +2 -2
  395. package/dist/core/web/public/next/assets/{ShortcutsOverlay-DiigiT8H.js.map → ShortcutsOverlay-C8n8y3zf.js.map} +1 -1
  396. package/dist/core/web/public/next/assets/Sidebar-DN--cPYN.js +3 -0
  397. package/dist/core/web/public/next/assets/{Sidebar-C9YtBYVZ.js.map → Sidebar-DN--cPYN.js.map} +1 -1
  398. package/dist/core/web/public/next/assets/{Slider-DaEDws-b.js → Slider-KVoJLDD6.js} +2 -2
  399. package/dist/core/web/public/next/assets/{Slider-DaEDws-b.js.map → Slider-KVoJLDD6.js.map} +1 -1
  400. package/dist/core/web/public/next/assets/StatTile-C4KgjltA.js +2 -0
  401. package/dist/core/web/public/next/assets/StatTile-C4KgjltA.js.map +1 -0
  402. package/dist/core/web/public/next/assets/StatTile-CNCqDoPO.css +1 -0
  403. package/dist/core/web/public/next/assets/{StatusBadge-CXG3iNL4.js → StatusBadge-CXsYqmdU.js} +2 -2
  404. package/dist/core/web/public/next/assets/{StatusBadge-CXG3iNL4.js.map → StatusBadge-CXsYqmdU.js.map} +1 -1
  405. package/dist/core/web/public/next/assets/StepBand-BMtVOFpK.js +2 -0
  406. package/dist/core/web/public/next/assets/StepBand-BMtVOFpK.js.map +1 -0
  407. package/dist/core/web/public/next/assets/{Surface-5bNA08tK.js → Surface-BfDmQcKe.js} +2 -2
  408. package/dist/core/web/public/next/assets/{Surface-5bNA08tK.js.map → Surface-BfDmQcKe.js.map} +1 -1
  409. package/dist/core/web/public/next/assets/Swimlane-B9Exxekk.js +2 -0
  410. package/dist/core/web/public/next/assets/Swimlane-B9Exxekk.js.map +1 -0
  411. package/dist/core/web/public/next/assets/Swimlane-Bf4Rjoy9.css +1 -0
  412. package/dist/core/web/public/next/assets/{Switch-BmCzfFnu.js → Switch-9NtO_6Lj.js} +2 -2
  413. package/dist/core/web/public/next/assets/{Switch-BmCzfFnu.js.map → Switch-9NtO_6Lj.js.map} +1 -1
  414. package/dist/core/web/public/next/assets/{Tag-WSUIaMVy.js → Tag-DscCRFcN.js} +2 -2
  415. package/dist/core/web/public/next/assets/{Tag-WSUIaMVy.js.map → Tag-DscCRFcN.js.map} +1 -1
  416. package/dist/core/web/public/next/assets/{TerminalPane-BVFgYX6K.js → TerminalPane-B668-DJW.js} +5 -5
  417. package/dist/core/web/public/next/assets/{TerminalPane-BVFgYX6K.js.map → TerminalPane-B668-DJW.js.map} +1 -1
  418. package/dist/core/web/public/next/assets/UniverseConsoleApp-BUV_brY7.js +2 -0
  419. package/dist/core/web/public/next/assets/{UniverseConsoleApp-BpphLqoz.js.map → UniverseConsoleApp-BUV_brY7.js.map} +1 -1
  420. package/dist/core/web/public/next/assets/{UniverseView-DbpbSMwO.js → UniverseView-DG70zH0W.js} +4 -4
  421. package/dist/core/web/public/next/assets/{UniverseView-DbpbSMwO.js.map → UniverseView-DG70zH0W.js.map} +1 -1
  422. package/dist/core/web/public/next/assets/UsageSection-DY7uOTm1.js +3 -0
  423. package/dist/core/web/public/next/assets/UsageSection-DY7uOTm1.js.map +1 -0
  424. package/dist/core/web/public/next/assets/VerseConsoleApp-CWU6R3By.js +3 -0
  425. package/dist/core/web/public/next/assets/VerseConsoleApp-CWU6R3By.js.map +1 -0
  426. package/dist/core/web/public/next/assets/Workspace-D1nP9BhD.js +10 -0
  427. package/dist/core/web/public/next/assets/{Workspace-RXy0pqp6.js.map → Workspace-D1nP9BhD.js.map} +1 -1
  428. package/dist/core/web/public/next/assets/actions-CY-PjpGc.js +2 -0
  429. package/dist/core/web/public/next/assets/{actions-BZTidCXZ.js.map → actions-CY-PjpGc.js.map} +1 -1
  430. package/dist/core/web/public/next/assets/actions-DkWhhWIg.css +1 -0
  431. package/dist/core/web/public/next/assets/{apps-model-CHO133qt.js → apps-model-Du02KhAf.js} +2 -2
  432. package/dist/core/web/public/next/assets/{apps-model-CHO133qt.js.map → apps-model-Du02KhAf.js.map} +1 -1
  433. package/dist/core/web/public/next/assets/{authority-model-8NeAEwAF.js → authority-model-79SeuKlJ.js} +2 -2
  434. package/dist/core/web/public/next/assets/{authority-model-8NeAEwAF.js.map → authority-model-79SeuKlJ.js.map} +1 -1
  435. package/dist/core/web/public/next/assets/autonomy-ladder-BGWmZzP7.css +1 -0
  436. package/dist/core/web/public/next/assets/autonomy-ladder.module-ArDv4bkr.js +2 -0
  437. package/dist/core/web/public/next/assets/autonomy-ladder.module-ArDv4bkr.js.map +1 -0
  438. package/dist/core/web/public/next/assets/budget-queries-D8QV5XtH.js +2 -0
  439. package/dist/core/web/public/next/assets/{budget-queries-DFF-3ICg.js.map → budget-queries-D8QV5XtH.js.map} +1 -1
  440. package/dist/core/web/public/next/assets/{capacity-strip-model-5ViUgUlP.js → capacity-strip-model-BwZ1ZbkU.js} +2 -2
  441. package/dist/core/web/public/next/assets/{capacity-strip-model-5ViUgUlP.js.map → capacity-strip-model-BwZ1ZbkU.js.map} +1 -1
  442. package/dist/core/web/public/next/assets/charts-BZ50mZD_.js +2 -0
  443. package/dist/core/web/public/next/assets/charts-BZ50mZD_.js.map +1 -0
  444. package/dist/core/web/public/next/assets/charts-ClCB18la.css +1 -0
  445. package/dist/core/web/public/next/assets/{cloud-model-CfRydq8N.js → cloud-model-BDivRMqv.js} +2 -2
  446. package/dist/core/web/public/next/assets/{cloud-model-CfRydq8N.js.map → cloud-model-BDivRMqv.js.map} +1 -1
  447. package/dist/core/web/public/next/assets/{cloud-queries-DmptbjS8.js → cloud-queries-BPQQ5_pJ.js} +2 -2
  448. package/dist/core/web/public/next/assets/{cloud-queries-DmptbjS8.js.map → cloud-queries-BPQQ5_pJ.js.map} +1 -1
  449. package/dist/core/web/public/next/assets/{colors-BZ3a9wFf.js → colors-DvK0wMHH.js} +2 -2
  450. package/dist/core/web/public/next/assets/{colors-BZ3a9wFf.js.map → colors-DvK0wMHH.js.map} +1 -1
  451. package/dist/core/web/public/next/assets/{command-catalog-ffCAijVY.js → command-catalog-BIntSa9l.js} +2 -2
  452. package/dist/core/web/public/next/assets/command-catalog-BIntSa9l.js.map +1 -0
  453. package/dist/core/web/public/next/assets/{context-model-CDeyP0cA.js → context-model-Br8t9jgG.js} +2 -2
  454. package/dist/core/web/public/next/assets/{context-model-CDeyP0cA.js.map → context-model-Br8t9jgG.js.map} +1 -1
  455. package/dist/core/web/public/next/assets/{context-model-Bb15chFt.js → context-model-CokrgEUq.js} +3 -3
  456. package/dist/core/web/public/next/assets/{context-model-Bb15chFt.js.map → context-model-CokrgEUq.js.map} +1 -1
  457. package/dist/core/web/public/next/assets/context-queries-eL3caKVG.js +2 -0
  458. package/dist/core/web/public/next/assets/{context-queries-_9bFWb9v.js.map → context-queries-eL3caKVG.js.map} +1 -1
  459. package/dist/core/web/public/next/assets/{control-queries-CXtmZZH6.js → control-queries-B9K-wmcB.js} +2 -2
  460. package/dist/core/web/public/next/assets/{control-queries-CXtmZZH6.js.map → control-queries-B9K-wmcB.js.map} +1 -1
  461. package/dist/core/web/public/next/assets/{copy-setup-BIp0iaiZ.js → copy-setup-XMgCC5f8.js} +2 -2
  462. package/dist/core/web/public/next/assets/{copy-setup-BIp0iaiZ.js.map → copy-setup-XMgCC5f8.js.map} +1 -1
  463. package/dist/core/web/public/next/assets/{dock-icons-Cc43W7r4.js → dock-icons-BJ6ZqB2t.js} +2 -2
  464. package/dist/core/web/public/next/assets/{dock-icons-Cc43W7r4.js.map → dock-icons-BJ6ZqB2t.js.map} +1 -1
  465. package/dist/core/web/public/next/assets/{fleet-model-DOK8ZtEt.js → fleet-model-BvDR3gjp.js} +2 -2
  466. package/dist/core/web/public/next/assets/{fleet-model-DOK8ZtEt.js.map → fleet-model-BvDR3gjp.js.map} +1 -1
  467. package/dist/core/web/public/next/assets/{fleet-queries-BeEAqD6y.js → fleet-queries-W2UFVMZJ.js} +2 -2
  468. package/dist/core/web/public/next/assets/{fleet-queries-BeEAqD6y.js.map → fleet-queries-W2UFVMZJ.js.map} +1 -1
  469. package/dist/core/web/public/next/assets/{focus-trap-ChZ5EFfM.js → focus-trap-CtI1SlMX.js} +2 -2
  470. package/dist/core/web/public/next/assets/{focus-trap-ChZ5EFfM.js.map → focus-trap-CtI1SlMX.js.map} +1 -1
  471. package/dist/core/web/public/next/assets/{format-BmH2yWL6.js → format-CH4g_sl1.js} +2 -2
  472. package/dist/core/web/public/next/assets/{format-BmH2yWL6.js.map → format-CH4g_sl1.js.map} +1 -1
  473. package/dist/core/web/public/next/assets/{format-DKrNjdwD.js → format-D7nBg2bn.js} +2 -2
  474. package/dist/core/web/public/next/assets/{format-DKrNjdwD.js.map → format-D7nBg2bn.js.map} +1 -1
  475. package/dist/core/web/public/next/assets/{git-model-BFwAVbxF.js → git-model-Dnkd1TnK.js} +2 -2
  476. package/dist/core/web/public/next/assets/{git-model-BFwAVbxF.js.map → git-model-Dnkd1TnK.js.map} +1 -1
  477. package/dist/core/web/public/next/assets/global-CMNW_dqn.js +2 -0
  478. package/dist/core/web/public/next/assets/{global-y_exIyAP.js.map → global-CMNW_dqn.js.map} +1 -1
  479. package/dist/core/web/public/next/assets/guarded-runners-YeAc9wLQ.js +2 -0
  480. package/dist/core/web/public/next/assets/{guarded-runners-Cd4POBtI.js.map → guarded-runners-YeAc9wLQ.js.map} +1 -1
  481. package/dist/core/web/public/next/assets/{icons-CygCEFWs.js → icons-D1sYbCTQ.js} +2 -2
  482. package/dist/core/web/public/next/assets/{icons-CygCEFWs.js.map → icons-D1sYbCTQ.js.map} +1 -1
  483. package/dist/core/web/public/next/assets/{index-CyK31YRm.js → index-DZ-UQ7v8.js} +3 -3
  484. package/dist/core/web/public/next/assets/{index-CyK31YRm.js.map → index-DZ-UQ7v8.js.map} +1 -1
  485. package/dist/core/web/public/next/assets/leader-focus-BjeJv7CW.js +2 -0
  486. package/dist/core/web/public/next/assets/leader-focus-BjeJv7CW.js.map +1 -0
  487. package/dist/core/web/public/next/assets/leader-thread-types-CDb-VPPO.js +2 -0
  488. package/dist/core/web/public/next/assets/leader-thread-types-CDb-VPPO.js.map +1 -0
  489. package/dist/core/web/public/next/assets/{live-model-D7hilYFk.js → live-model-D_32RAOR.js} +2 -2
  490. package/dist/core/web/public/next/assets/{live-model-D7hilYFk.js.map → live-model-D_32RAOR.js.map} +1 -1
  491. package/dist/core/web/public/next/assets/{mind.module-B15k0Y9q.js → mind.module-7hA92hRg.js} +2 -2
  492. package/dist/core/web/public/next/assets/{mind.module-B15k0Y9q.js.map → mind.module-7hA92hRg.js.map} +1 -1
  493. package/dist/core/web/public/next/assets/mutations-DQPbFdRJ.js +2 -0
  494. package/dist/core/web/public/next/assets/{mutations-CWlxEMEm.js.map → mutations-DQPbFdRJ.js.map} +1 -1
  495. package/dist/core/web/public/next/assets/{nav-mimleI0R.js → nav-0dOYe2rJ.js} +2 -2
  496. package/dist/core/web/public/next/assets/{nav-mimleI0R.js.map → nav-0dOYe2rJ.js.map} +1 -1
  497. package/dist/core/web/public/next/assets/{overnight-queries-DJ4mZKSj.js → overnight-queries-C4wOnFtE.js} +2 -2
  498. package/dist/core/web/public/next/assets/{overnight-queries-DJ4mZKSj.js.map → overnight-queries-C4wOnFtE.js.map} +1 -1
  499. package/dist/core/web/public/next/assets/primitives-2A5Eq8FQ.js +1 -0
  500. package/dist/core/web/public/next/assets/{queries-Bw1McHTj.js → queries-BTXWdZzU.js} +2 -2
  501. package/dist/core/web/public/next/assets/{queries-Bw1McHTj.js.map → queries-BTXWdZzU.js.map} +1 -1
  502. package/dist/core/web/public/next/assets/{reasoning-pref-KkhI_5-j.js → reasoning-pref-Ca6lN6x_.js} +2 -2
  503. package/dist/core/web/public/next/assets/{reasoning-pref-KkhI_5-j.js.map → reasoning-pref-Ca6lN6x_.js.map} +1 -1
  504. package/dist/core/web/public/next/assets/{reveal-anchor-CCCx_kfT.js → reveal-anchor-DfNLgK_I.js} +2 -2
  505. package/dist/core/web/public/next/assets/{reveal-anchor-CCCx_kfT.js.map → reveal-anchor-DfNLgK_I.js.map} +1 -1
  506. package/dist/core/web/public/next/assets/seat-subscription-C5uPHBsN.js +2 -0
  507. package/dist/core/web/public/next/assets/{seat-subscription-BhUUz7VL.js.map → seat-subscription-C5uPHBsN.js.map} +1 -1
  508. package/dist/core/web/public/next/assets/{sidebar-model-Dcd437cf.js → sidebar-model-CLCdqwkR.js} +2 -2
  509. package/dist/core/web/public/next/assets/{sidebar-model-Dcd437cf.js.map → sidebar-model-CLCdqwkR.js.map} +1 -1
  510. package/dist/core/web/public/next/assets/{slots-BL_J5mmV.js → slots-C-qBeu-8.js} +3 -3
  511. package/dist/core/web/public/next/assets/{slots-BL_J5mmV.js.map → slots-C-qBeu-8.js.map} +1 -1
  512. package/dist/core/web/public/next/assets/{surface-data-C3UAQ4QX.js → surface-data-Dj71tdD-.js} +2 -2
  513. package/dist/core/web/public/next/assets/{surface-data-C3UAQ4QX.js.map → surface-data-Dj71tdD-.js.map} +1 -1
  514. package/dist/core/web/public/next/assets/surface-prefetch-B0WdJOJG.js +2 -0
  515. package/dist/core/web/public/next/assets/surface-prefetch-B0WdJOJG.js.map +1 -0
  516. package/dist/core/web/public/next/assets/{tasks-model-CzHvclVm.js → tasks-model-O8yR5YXp.js} +2 -2
  517. package/dist/core/web/public/next/assets/{tasks-model-CzHvclVm.js.map → tasks-model-O8yR5YXp.js.map} +1 -1
  518. package/dist/core/web/public/next/assets/{terminal-icons-BwgQTQP0.js → terminal-icons-CoRZq9iO.js} +2 -2
  519. package/dist/core/web/public/next/assets/{terminal-icons-BwgQTQP0.js.map → terminal-icons-CoRZq9iO.js.map} +1 -1
  520. package/dist/core/web/public/next/assets/thread-data-DQB_g66d.js +2 -0
  521. package/dist/core/web/public/next/assets/thread-data-DQB_g66d.js.map +1 -0
  522. package/dist/core/web/public/next/assets/{usage-queries-pXxvy54x.js → usage-queries-AdjEyEtn.js} +2 -2
  523. package/dist/core/web/public/next/assets/{usage-queries-pXxvy54x.js.map → usage-queries-AdjEyEtn.js.map} +1 -1
  524. package/dist/core/web/public/next/assets/{use-guarded-action-EgVWjM5c.js → use-guarded-action-CuuMHeDX.js} +2 -2
  525. package/dist/core/web/public/next/assets/{use-guarded-action-EgVWjM5c.js.map → use-guarded-action-CuuMHeDX.js.map} +1 -1
  526. package/dist/core/web/public/next/assets/{use-ticker-BoqFxRFG.js → use-ticker-BBcp02SZ.js} +2 -2
  527. package/dist/core/web/public/next/assets/{use-ticker-BoqFxRFG.js.map → use-ticker-BBcp02SZ.js.map} +1 -1
  528. package/dist/core/web/public/next/assets/{use-token-gate-DSNIIpI6.js → use-token-gate-CbXVYQYI.js} +2 -2
  529. package/dist/core/web/public/next/assets/{use-token-gate-DSNIIpI6.js.map → use-token-gate-CbXVYQYI.js.map} +1 -1
  530. package/dist/core/web/public/next/assets/{useOnboarding-Bk0VnkxQ.js → useOnboarding-C_Fpe_sH.js} +2 -2
  531. package/dist/core/web/public/next/assets/{useOnboarding-Bk0VnkxQ.js.map → useOnboarding-C_Fpe_sH.js.map} +1 -1
  532. package/dist/core/web/public/next/assets/{useSeatsRefresh-q7Id9RcW.js → useSeatsRefresh-Co1CnxLc.js} +2 -2
  533. package/dist/core/web/public/next/assets/{useSeatsRefresh-q7Id9RcW.js.map → useSeatsRefresh-Co1CnxLc.js.map} +1 -1
  534. package/dist/core/web/public/next/assets/{useVerseTranscript-CqH51rt9.js → useVerseTranscript-DgbigUlV.js} +2 -2
  535. package/dist/core/web/public/next/assets/{useVerseTranscript-CqH51rt9.js.map → useVerseTranscript-DgbigUlV.js.map} +1 -1
  536. package/dist/core/web/public/next/assets/{verse-icons-DsG1dOQx.js → verse-icons-S56hIiXS.js} +2 -2
  537. package/dist/core/web/public/next/assets/{verse-icons-DsG1dOQx.js.map → verse-icons-S56hIiXS.js.map} +1 -1
  538. package/dist/core/web/public/next/assets/verse-model-DAVevkNe.js +2 -0
  539. package/dist/core/web/public/next/assets/{verse-model-JTuvRBVK.js.map → verse-model-DAVevkNe.js.map} +1 -1
  540. package/dist/core/web/public/next/assets/{warmup-Bv1RumVq.js → warmup-B_RAtNZ_.js} +3 -3
  541. package/dist/core/web/public/next/assets/{warmup-Bv1RumVq.js.map → warmup-B_RAtNZ_.js.map} +1 -1
  542. package/dist/core/web/public/next/assets/{why-seat-model-Cau8qG6O.js → why-seat-model-M_r0wX3b.js} +2 -2
  543. package/dist/core/web/public/next/assets/{why-seat-model-Cau8qG6O.js.map → why-seat-model-M_r0wX3b.js.map} +1 -1
  544. package/dist/core/web/public/next/assets/{workspace-model-D-SLfads.js → workspace-model-dji5-Al3.js} +2 -2
  545. package/dist/core/web/public/next/assets/{workspace-model-D-SLfads.js.map → workspace-model-dji5-Al3.js.map} +1 -1
  546. package/dist/core/web/public/next/index.html +1 -1
  547. package/dist/core/web/read-projection-worker.js +2 -1
  548. package/dist/core/web/read-projection-worker.js.map +1 -1
  549. package/dist/core/web/read-projections.d.ts +3 -0
  550. package/dist/core/web/read-projections.js +2 -2
  551. package/dist/core/web/read-projections.js.map +1 -1
  552. package/dist/core/web/visibility.js +3 -4
  553. package/dist/core/web/visibility.js.map +1 -1
  554. package/dist/release-dependency-inventory.json +1 -1
  555. package/package.json +3 -2
  556. package/dist/core/web/public/next/assets/Advanced-cVYTAsfB.js +0 -2
  557. package/dist/core/web/public/next/assets/AppsSection-DDqeSrty.js +0 -2
  558. package/dist/core/web/public/next/assets/AreaTrend-C32rUaxm.js +0 -2
  559. package/dist/core/web/public/next/assets/AreaTrend-C32rUaxm.js.map +0 -1
  560. package/dist/core/web/public/next/assets/AutonomySection-Dwn8UtOy.js +0 -2
  561. package/dist/core/web/public/next/assets/ChartFrame-BVuBe6RP.css +0 -1
  562. package/dist/core/web/public/next/assets/ChartFrame-DK_BDXCt.js +0 -2
  563. package/dist/core/web/public/next/assets/ChartFrame-DK_BDXCt.js.map +0 -1
  564. package/dist/core/web/public/next/assets/ChatSection-C9myY4ei.js +0 -3
  565. package/dist/core/web/public/next/assets/CommandPalette-DzPsth0u.js +0 -2
  566. package/dist/core/web/public/next/assets/CommandPalette-DzPsth0u.js.map +0 -1
  567. package/dist/core/web/public/next/assets/CommandSection-Brp73iox.js +0 -3
  568. package/dist/core/web/public/next/assets/CommandSection-Brp73iox.js.map +0 -1
  569. package/dist/core/web/public/next/assets/CommandSection-CvAVd1w4.css +0 -1
  570. package/dist/core/web/public/next/assets/DockHost-BcEq2qaS.js +0 -2
  571. package/dist/core/web/public/next/assets/FleetSection-BG8iGraG.js +0 -3
  572. package/dist/core/web/public/next/assets/FleetSection-BG8iGraG.js.map +0 -1
  573. package/dist/core/web/public/next/assets/Funnel-B88_wpA4.js +0 -2
  574. package/dist/core/web/public/next/assets/Funnel-B88_wpA4.js.map +0 -1
  575. package/dist/core/web/public/next/assets/GrowthSection-BvZezOsX.js +0 -2
  576. package/dist/core/web/public/next/assets/LeaderCard-BxxiEg4e.js +0 -2
  577. package/dist/core/web/public/next/assets/LeaderCard-BxxiEg4e.js.map +0 -1
  578. package/dist/core/web/public/next/assets/MatrixHeatmap-iPFEU2Tv.js +0 -2
  579. package/dist/core/web/public/next/assets/MatrixHeatmap-iPFEU2Tv.js.map +0 -1
  580. package/dist/core/web/public/next/assets/McpSection-nuXer4K-.js +0 -2
  581. package/dist/core/web/public/next/assets/MindSection-Dc5v5rH3.js +0 -2
  582. package/dist/core/web/public/next/assets/MindSection-Dc5v5rH3.js.map +0 -1
  583. package/dist/core/web/public/next/assets/NeedsYouDrawer-N1cWJjpz.js +0 -3
  584. package/dist/core/web/public/next/assets/NeedsYouDrawer-N1cWJjpz.js.map +0 -1
  585. package/dist/core/web/public/next/assets/NewChatDialog-BqFTWgHU.js +0 -3
  586. package/dist/core/web/public/next/assets/OnboardingGate-BZafM1Vf.js +0 -3
  587. package/dist/core/web/public/next/assets/PreviewPane-zT3gK9TD.js +0 -2
  588. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CAxPQ4sZ.js +0 -7
  589. package/dist/core/web/public/next/assets/ResourcesChrome-BnhnEdJe.js +0 -3
  590. package/dist/core/web/public/next/assets/ResourcesChrome-BnhnEdJe.js.map +0 -1
  591. package/dist/core/web/public/next/assets/ResourcesDrawer-BAFGodny.js +0 -2
  592. package/dist/core/web/public/next/assets/ResourcesDrawer-BAFGodny.js.map +0 -1
  593. package/dist/core/web/public/next/assets/ResourcesDrawer-BCFJ2Uq8.css +0 -1
  594. package/dist/core/web/public/next/assets/SettingsSection-Bf74l0Gj.js.map +0 -1
  595. package/dist/core/web/public/next/assets/Sidebar-C9YtBYVZ.js +0 -3
  596. package/dist/core/web/public/next/assets/StatTile-BuLMsJMx.css +0 -1
  597. package/dist/core/web/public/next/assets/StatTile-CTX41O6y.js +0 -2
  598. package/dist/core/web/public/next/assets/StatTile-CTX41O6y.js.map +0 -1
  599. package/dist/core/web/public/next/assets/StepBand-jJTqYIdX.js +0 -2
  600. package/dist/core/web/public/next/assets/StepBand-jJTqYIdX.js.map +0 -1
  601. package/dist/core/web/public/next/assets/Swimlane-LrslsGxw.js +0 -2
  602. package/dist/core/web/public/next/assets/Swimlane-LrslsGxw.js.map +0 -1
  603. package/dist/core/web/public/next/assets/Swimlane-o6_Zsrnr.css +0 -1
  604. package/dist/core/web/public/next/assets/UniverseConsoleApp-BpphLqoz.js +0 -2
  605. package/dist/core/web/public/next/assets/UsageSection-CUlaKtws.js +0 -3
  606. package/dist/core/web/public/next/assets/UsageSection-CUlaKtws.js.map +0 -1
  607. package/dist/core/web/public/next/assets/VerseConsoleApp-DXDv1aOi.js +0 -3
  608. package/dist/core/web/public/next/assets/VerseConsoleApp-DXDv1aOi.js.map +0 -1
  609. package/dist/core/web/public/next/assets/Workspace-RXy0pqp6.js +0 -10
  610. package/dist/core/web/public/next/assets/actions-BZTidCXZ.js +0 -2
  611. package/dist/core/web/public/next/assets/actions-BmIf9avl.css +0 -1
  612. package/dist/core/web/public/next/assets/budget-queries-DFF-3ICg.js +0 -2
  613. package/dist/core/web/public/next/assets/charts-CzxWrZn7.js +0 -2
  614. package/dist/core/web/public/next/assets/charts-CzxWrZn7.js.map +0 -1
  615. package/dist/core/web/public/next/assets/charts-DhKTrQLw.css +0 -1
  616. package/dist/core/web/public/next/assets/command-catalog-ffCAijVY.js.map +0 -1
  617. package/dist/core/web/public/next/assets/context-queries-_9bFWb9v.js +0 -2
  618. package/dist/core/web/public/next/assets/global-y_exIyAP.js +0 -2
  619. package/dist/core/web/public/next/assets/guarded-runners-Cd4POBtI.js +0 -2
  620. package/dist/core/web/public/next/assets/mutations-CWlxEMEm.js +0 -2
  621. package/dist/core/web/public/next/assets/primitives-DMijqcu0.js +0 -1
  622. package/dist/core/web/public/next/assets/seat-subscription-BhUUz7VL.js +0 -2
  623. package/dist/core/web/public/next/assets/surface-prefetch-BXKjPsV5.js +0 -2
  624. package/dist/core/web/public/next/assets/surface-prefetch-BXKjPsV5.js.map +0 -1
  625. package/dist/core/web/public/next/assets/verse-model-JTuvRBVK.js +0 -2
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EvidenceTimeline-sCCAdnBK.js","assets/context-model-Bb15chFt.js","assets/transient-events-nTLhMBND.js","assets/Sheet-HkBOBMTT.js","assets/cloud-model-CfRydq8N.js","assets/global-BlI2BYa1.css","assets/StatusBadge-BVi0IBb9.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/VerseConsoleApp-Cxqr-3qc.css","assets/Button-DrnKsvnQ.css","assets/Sheet-ChxlNivX.css","assets/EvidenceTimeline-PBDAiSuG.css"])))=>i.map(i=>d[i]);
2
- import{a as e,c as t,i as n,n as r,t as i}from"./index-CyK31YRm.js";import{D as a,F as o,U as s,W as c,a as l,c as u,h as d,i as f,k as p,l as m,m as ee,o as h,s as te}from"./global-y_exIyAP.js";import{t as g}from"./focus-trap-ChZ5EFfM.js";import{t as ne}from"./Epistemic-fycQTBRO.js";import{n as _}from"./StatusBadge-CXG3iNL4.js";import{h as re}from"./queries-Bw1McHTj.js";import{r as v,t as y}from"./mutations-CWlxEMEm.js";import{t as b}from"./MutationTokenDialog-Bm34BNVV.js";import{t as x}from"./ConfirmDialog-CLUhzaBj.js";import{r as ie}from"./RouteErrorBoundary-C8WGiixc.js";import{t as S}from"./RefreshIndicator-SEFZlMB2.js";import{t as C}from"./DiffViewer-CNwd0W3Q.js";import{At as w,F as T,I as ae,J as E,K as D,Mt as O,N as k,S as A,Ut as j,X as M,ct as N,jt as P,kt as F,lt as I,ot as L,rn as R,rt as oe}from"./VerseConsoleApp-DXDv1aOi.js";import{y as z}from"./format-BmH2yWL6.js";import{n as se,t as B}from"./Button-DtE0rlWD.js";import{C as ce,c as V}from"./icons-CygCEFWs.js";import{o as le}from"./verse-icons-DsG1dOQx.js";import{o as ue}from"./command-catalog-ffCAijVY.js";import{l as de}from"./types-IYKrYLku.js";import{C as fe,D as pe,E as me,O as H,S as U,T as W,_ as he,a as G,b as ge,c as K,d as _e,f as q,g as ve,h as ye,i as J,l as be,m as xe,n as Se,o as Ce,p as we,r as Te,s as Y,t as Ee,u as De,v as Oe,w as ke,x as Ae,y as je}from"./NeedsYouList-D5Kk549g.js";var X=t(e(),1),Me=t(n(),1),Z={layout:`_layout_141uy_8`,listPane:`_listPane_141uy_9`,detailPane:`_detailPane_141uy_10`,filters:`_filters_141uy_12`,filterField:`_filterField_141uy_13`,filterLabel:`_filterLabel_141uy_14`,filterSelect:`_filterSelect_141uy_31`,count:`_count_141uy_46`,rows:`_rows_141uy_48`,row:`_row_141uy_48`,rowActive:`_rowActive_141uy_63`,riskRule:`_riskRule_141uy_68`,rowTitle:`_rowTitle_141uy_72`,rowMeta:`_rowMeta_141uy_73`,rowMetaMono:`_rowMetaMono_141uy_82`,rowAge:`_rowAge_141uy_83`,riskWord:`_riskWord_141uy_84`,detail:`_detail_141uy_10`,detailHead:`_detailHead_141uy_91`,eyebrow:`_eyebrow_141uy_92`,detailTitle:`_detailTitle_141uy_95`,project:`_project_141uy_109`,runFacts:`_runFacts_141uy_110`,diffStats:`_diffStats_141uy_112`,runSource:`_runSource_141uy_113`,hint:`_hint_141uy_114`,detailMeta:`_detailMeta_141uy_115`,summary:`_summary_141uy_117`,block:`_block_141uy_119`,blockTitle:`_blockTitle_141uy_120`,defs:`_defs_141uy_129`,muted:`_muted_141uy_133`,failedChecks:`_failedChecks_141uy_134`,actions:`_actions_141uy_136`,actionNote:`_actionNote_141uy_137`,reject:`_reject_141uy_138`,approve:`_approve_141uy_139`,decided:`_decided_141uy_155`,empty:`_empty_141uy_157`,emptyStrong:`_emptyStrong_141uy_158`,error:`_error_141uy_159`,skeletons:`_skeletons_141uy_160`},Q=r(),Ne={"judge-ship-would-merge":{label:`Ship (would merge)`,tone:`success`},"judge-ship-review-required":{label:`Ship (review required)`,tone:`success`},"judge-review":{label:`Review`,tone:`warning`},"judge-noise":{label:`Noise`,tone:`neutral`},"judge-harmful":{label:`Harmful`,tone:`danger`},"judge-verdict-unrecognized":{label:`Unrecognized verdict`,tone:`unknown`},"judge-parse-failure":{label:`Judge parse failure — not a review`,tone:`unknown`},"judge-network-failure":{label:`Judge network failure — not a review`,tone:`unknown`}};function Pe(e){let t=e.filter(e=>e.action===`judged`&&e.judgeReasonCode);return t.length===0?null:t.reduce((e,t)=>Date.parse(t.ts)>Date.parse(e.ts)?t:e)}function Fe({id:e,dispatchEnabled:t,onDispatchDisabled:n,onDecided:r}){let i=ee(re(e)),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(!1),[d,m]=(0,X.useState)(!1),[h,g]=(0,X.useState)(null);function ie(e){g(null),o(e),u(!0)}function T(){c(!1),p()?(u(!0),E()):o(null)}function ae(){if(a){if(!p()){u(!1),c(!0);return}E()}}async function E(){if(a){m(!0),g(null);try{a===`approve`?await y(e):await v(e),u(!1),o(null),r()}catch(e){e instanceof te?(u(!1),o(null),n()):g(w(e))}finally{m(!1)}}}if(i.status===`loading`)return(0,Q.jsxs)(`div`,{className:Z.detail,children:[(0,Q.jsx)(f,{width:`55%`}),(0,Q.jsx)(f,{width:`30%`}),(0,Q.jsx)(f,{width:`88%`})]});if(i.status===`error`||!i.data)return(0,Q.jsx)(`p`,{className:Z.error,role:`alert`,children:i.error?.message??`Could not load this proposal.`});let D=i.data,O=D.decisionEvidence,k=Pe(O?.decisions??[]),A=k?.judgeReasonCode?Ne[k.judgeReasonCode]:null,j=D.status===`pending`&&t,M=ge(D),N=Oe(D.kind,D.repo),P=pe(D.title),F=H(D.repo),I=W(D.summary),L=I?I.rest:D.summary?z(D.summary):null;return(0,Q.jsxs)(`div`,{className:Z.detail,children:[(0,Q.jsxs)(`header`,{className:Z.detailHead,children:[(0,Q.jsxs)(`p`,{className:Z.eyebrow,children:[U(D.kind),P.eyebrow?` \u00b7 ${P.eyebrow}`:``]}),(0,Q.jsx)(`h3`,{className:Z.detailTitle,title:D.title,children:P.text}),(0,Q.jsxs)(`div`,{className:Z.detailMeta,children:[(0,Q.jsx)(_,{status:D.status}),F?(0,Q.jsx)(`span`,{className:Z.project,title:D.repo??void 0,children:F}):(0,Q.jsx)(`span`,{children:`no repository`}),(0,Q.jsx)(`span`,{children:D.riskClass?`${D.riskClass} risk`:`risk unstated`}),M?(0,Q.jsx)(`code`,{title:`The model that produced this change`,children:M}):null,(0,Q.jsxs)(`span`,{title:fe(D.createdAt),children:[`created `,ke(D.createdAt)]}),D.decidedAt?(0,Q.jsxs)(`span`,{title:fe(D.decidedAt),children:[`decided `,ke(D.decidedAt)]}):null,i.status===`refreshing`?(0,Q.jsx)(S,{}):null]}),I?(0,Q.jsxs)(`p`,{className:Z.runFacts,children:[(0,Q.jsx)(`span`,{className:Z.diffStats,"aria-hidden":`true`,children:Ae(I)}),(0,Q.jsx)(`span`,{className:`visually-hidden`,children:je(I)}),(0,Q.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Q.jsxs)(`span`,{className:Z.runSource,title:I.sourceHint??void 0,children:[I.partial?`Partial · `:``,I.sourceLabel]}),M===null?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Q.jsx)(`code`,{title:`The model that produced this change`,children:I.model})]}):null]}):null,L?(0,Q.jsx)(`p`,{className:Z.summary,children:L}):null]}),(0,Q.jsxs)(`section`,{className:Z.block,"aria-label":`Evidence`,children:[(0,Q.jsx)(`h4`,{className:Z.blockTitle,children:`Evidence`}),(0,Q.jsxs)(`dl`,{className:Z.defs,children:[(0,Q.jsx)(`dt`,{children:`Judge verdict`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(ne,{quality:O?.sourceQuality,label:`judge verdict`,children:A&&k?.judgeReasonCode?(0,Q.jsx)(_,{status:k.judgeReasonCode,tone:A.tone,children:A.label}):(0,Q.jsx)(`span`,{className:Z.muted,children:`not yet judged`})})}),(0,Q.jsx)(`dt`,{children:`Verification`}),(0,Q.jsx)(`dd`,{children:D.verifyResult?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(_,{status:D.verifyResult.passed?`success`:`failed`,children:D.verifyResult.passed?`passed`:`failed`}),D.verifyResult.ran&&D.verifyResult.ran.length>0?(0,Q.jsxs)(`span`,{className:Z.muted,children:[` · ran `,D.verifyResult.ran.map(e=>e.kind).join(`, `)]}):null,!D.verifyResult.passed&&D.verifyResult.failureCategory&&D.verifyResult.failureCategory!==`code`?(0,Q.jsxs)(`span`,{className:Z.muted,children:[` · `,D.verifyResult.failureCategory,` failure — the verifier itself, not the diff`]}):null,D.verifyResult.failed&&D.verifyResult.failed.length>0?(0,Q.jsxs)(`p`,{className:Z.failedChecks,children:[`failed: `,D.verifyResult.failed.join(`, `)]}):null]}):(0,Q.jsx)(`span`,{className:Z.muted,children:`not verified`})}),D.decisionReason?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Decision reason`}),(0,Q.jsx)(`dd`,{children:z(D.decisionReason)})]}):null,D.evidenceOutcome?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Gates`}),(0,Q.jsxs)(`dd`,{className:Z.muted,children:[D.evidenceOutcome.gateCount??0,` gate`,D.evidenceOutcome.gateCount===1?``:`s`,D.evidenceOutcome.policyAction?` · policy ${D.evidenceOutcome.policyAction}`:``,D.evidenceOutcome.trustBasis?` · trust ${D.evidenceOutcome.trustBasis}`:``]})]}):null,D.result?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Result`}),(0,Q.jsx)(`dd`,{children:z(D.result)})]}):null]})]}),(0,Q.jsxs)(`section`,{className:Z.block,"aria-label":`Provenance`,children:[(0,Q.jsx)(`h4`,{className:Z.blockTitle,children:`Provenance`}),(0,Q.jsxs)(`dl`,{className:Z.defs,children:[(0,Q.jsx)(`dt`,{children:`Produced by`}),(0,Q.jsx)(`dd`,{children:M?(0,Q.jsx)(`code`,{children:M}):(0,Q.jsx)(`span`,{className:Z.muted,children:`unknown engine`})}),(0,Q.jsx)(`dt`,{children:`Origin`}),(0,Q.jsx)(`dd`,{children:D.origin}),I?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`How it was made`}),(0,Q.jsxs)(`dd`,{children:[(0,Q.jsx)(`span`,{title:I.sourceHint??void 0,children:I.sourceLabel}),I.sourceHint?(0,Q.jsx)(`p`,{className:Z.hint,children:I.sourceHint}):null]})]}):null,D.repo?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Repository`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(`code`,{children:D.repo})})]}):null,D.workItemId?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Work item`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(`code`,{children:D.workItemId})})]}):null,D.runId?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Run`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(`code`,{children:D.runId})})]}):null,(0,Q.jsx)(`dt`,{children:`Attestation`}),(0,Q.jsxs)(`dd`,{className:Z.muted,children:[D.producerProvenanceSig?`signed by the sandboxed producer (v${D.producerProvenanceVersion??2})`:D.provenanceSig?`legacy signature present`:`unsigned — earns no positive routing credit`,D.diffHash?` · diff hashed at signing time`:``]})]})]}),(0,Q.jsxs)(`section`,{className:Z.block,"aria-label":`Diff`,children:[(0,Q.jsx)(`h4`,{className:Z.blockTitle,children:`Diff`}),(0,Q.jsx)(C,{diff:D.diff,proposalKind:D.kind})]}),D.status===`pending`?(0,Q.jsxs)(`footer`,{className:Z.actions,children:[(0,Q.jsx)(`p`,{className:Z.actionNote,children:t?N:`Read-only session — approve and reject are unavailable without dispatch.`}),h&&!l?(0,Q.jsx)(`p`,{className:Z.error,role:`alert`,children:h}):null,(0,Q.jsx)(`button`,{type:`button`,className:Z.reject,disabled:!j||d,onClick:()=>ie(`reject`),children:`Reject`}),(0,Q.jsx)(`button`,{type:`button`,className:Z.approve,disabled:!j||d,onClick:()=>ie(`approve`),children:`Approve…`})]}):(0,Q.jsxs)(`footer`,{className:Z.decided,children:[`This proposal is already `,(0,Q.jsx)(`strong`,{children:D.status}),` — no further action is available.`]}),(0,Q.jsx)(b,{open:s,onClose:T,reason:a===`approve`?`Approving a proposal writes to a real repository and requires the dispatch token.`:`Rejecting a proposal requires the dispatch token.`,tokenHelp:`the mutation token ashlr verse printed`}),(0,Q.jsx)(x,{open:l,onClose:()=>{u(!1),o(null),g(null)},title:a===`approve`?`Approve this ${D.kind} against ${F??`the repository`}?`:`Reject this proposal?`,body:a===`approve`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`strong`,{children:P.text}),(0,Q.jsx)(`br`,{}),U(D.kind),` · `,(0,Q.jsx)(`strong`,{children:F??`unknown repository`}),D.repo?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`br`,{}),(0,Q.jsx)(`code`,{children:D.repo})]}):null,(0,Q.jsx)(`br`,{}),(0,Q.jsx)(`br`,{}),N,me(D.kind)?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`br`,{}),(0,Q.jsx)(`br`,{}),`This one leaves your machine.`]}):null]}):(0,Q.jsxs)(Q.Fragment,{children:[`This rejects `,(0,Q.jsx)(`strong`,{children:P.text}),` and discards it. It stays in history as rejected and is never applied.`]}),confirmLabel:a===`approve`?`Approve and ${me(D.kind)?`open the pull request`:`apply`}`:`Reject`,destructive:a===`approve`,busy:d,error:h,onConfirm:ae})]})}var $=new Map,Ie=new Set;function Le(){for(let e of[...Ie])e()}function Re(e,t=Date.now()){$=new Map($).set(e,t),Le()}function ze(e,t=Date.now()){let n=!1,r=new Map($);for(let[i,a]of r)(!e.has(i)||t-a>6e4)&&(r.delete(i),n=!0);n&&($=r,Le())}function Be(){return(0,X.useSyncExternalStore)(e=>(Ie.add(e),()=>Ie.delete(e)),()=>$,()=>$)}function Ve(e){Re(e.id),e.source===`approvals`&&(s(`inbox`),s(`dashboard-snapshot`),c(`inbox-list:`),e.target.kind===`approval`&&s(`proposal-detail-${e.target.proposalId}`)),T()}function He(e,t,n){let r=t.request;if(!r){n.openTarget(e);return}if(!R(r.path)){n.toast(`That action points outside this app and was not sent.`,`danger`);return}let i=K(e,t),s=q(e).text,c=async()=>{let e=a();if(!e)throw new h(`Mutation token was rejected.`,401,r.path);await m(r.path,r.body,e),o()},l=G.has(t.kind)||i!==null;O({title:i?.title??t.label,body:i?.body??s,confirmLabel:i?.confirmLabel??t.label,destructive:t.destructive,token:!0,tokenReason:`${t.label} changes state on this machine and requires the dispatch token.`,skipConfirm:!l,run:c,onDone:()=>{Ve(e),n.toast(`${t.label}: ${s}`,`success`)},onError:l?void 0:e=>n.toast(e,`danger`)})}var Ue=`verse-cloud-previews`,We=`${de}/previews`,Ge=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Ke(e){return Ge(e)&&typeof e.id==`string`&&typeof e.ok==`boolean`&&typeof e.text==`string`}function qe(e){return Ge(e)&&typeof e.itemId==`string`&&typeof e.headSha==`string`&&typeof e.wouldAutoLand==`boolean`&&typeof e.reason==`string`&&Array.isArray(e.checks)&&e.checks.every(Ke)}function Je(e){let t=new Map,n=Ge(e)?e.previews:void 0;if(!Array.isArray(n))return t;for(let e of n)qe(e)&&t.set(e.itemId,e);return t}var Ye=new Map,Xe={key:Ue,fetch:async e=>{try{return Je(await u(We,e))}catch(e){if(e instanceof h&&e.status===401||e instanceof DOMException&&e.name===`AbortError`)throw e;return Ye}}};function Ze(e,t){return!t||!Qe(e,t)?null:t.wouldAutoLand?{tone:`clean`,label:`Clean`,why:null,title:t.reason}:{tone:`held`,label:`Held`,why:t.checks.find(e=>!e.ok)?.text??null,title:t.reason}}function Qe(e,t){let n=e.actions.find(e=>e.request!==null&&typeof e.request.body.headSha==`string`);return n?n.request.body.headSha===t.headSha:!1}function $e(e,t){return e.filter(e=>{let n=t.get(e.id);return n!==void 0&&n.wouldAutoLand&&Qe(e,n)&&Y(e,`approve`)!==null})}function et(e,t){let n=Y(t[0],e)?.label??e,r=t.length;return{title:`${n} ${r} ${t.every(e=>e.subject.pr!==null)?r===1?`pull request`:`pull requests`:r===1?`item`:`items`}?`,confirmLabel:`${n} ${r}`,verb:n}}function tt(e,t,n){let r=e.filter(e=>{let n=Y(e,t);return n?.request!=null&&R(n.request.path)});if(r.length===0)return n.toast(`None of the selected items can do that.`,`neutral`),!1;let i=et(t,r),s=r.slice(0,3).map(e=>e.subject.pr?`#${e.subject.pr}`:`“${q(e).text}”`),c=r.length>3?`${s.join(`, `)} and ${r.length-3} more`:s.join(`, `),l=r.some(e=>Y(e,t)?.destructive===!0),u=new Set,d=[];return O({title:i.title,body:`${c}. Each runs on the exact commit it was checked on; one that moved since is refused, not changed.`,confirmLabel:i.confirmLabel,destructive:l,token:!0,tokenReason:`${i.verb} changes pull requests on GitHub and requires the dispatch token.`,run:async()=>{let e=a();if(!e)throw new h(`Mutation token was rejected.`,401,We);d=[];for(let n of r){if(u.has(n.id))continue;let r=Y(n,t).request;try{await m(r.path,r.body,e),u.add(n.id),Re(n.id)}catch(e){if(e instanceof h&&e.status===401)throw e;d.push(`${n.subject.pr?`#${n.subject.pr}`:q(n).text}: ${w(e)}`)}}if(o(),u.size===0)throw Error(d.length===1?d[0]:`None went through. ${d[0]}`)},onDone:()=>{T(),n.onSettled?.([...u]);let e=`${i.verb}: ${u.size} of ${r.length} done.`;n.toast(d.length===0?e:`${e} ${d[0]}${d.length>1?` (+${d.length-1} more)`:``}`,d.length===0?`success`:`neutral`)}})}var nt=`fleet:owner-lane-pr:cloud-`,rt=/^(?:fleet:owner-lane-pr|chats:chat-failed):cloud-(ct_\d{8}T\d{4}_[a-z0-9]{6})$/,it=(0,X.lazy)(()=>i(()=>import(`./EvidenceTimeline-sCCAdnBK.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]))),at={"drawer.approve":`approve`,"drawer.reject":`reject`,"drawer.veto":`veto`,"drawer.done":`done`};function ot(e){return e instanceof HTMLElement?e.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(e.tagName):!1}function st(){let e=k(),t=ae(),n=ie(),r=ee(A),{compact:i}=F(),a=Be(),o=(0,X.useId)(),s=(0,X.useRef)(null),c=(0,X.useRef)(null),u=(0,X.useRef)(null),[f,p]=(0,X.useState)(null),[m,h]=(0,X.useState)(null),[te,ne]=(0,X.useState)(!1),[_,re]=(0,X.useState)(()=>Date.now()),[v,y]=(0,X.useState)(()=>new Set);(0,X.useEffect)(()=>{let e=setInterval(()=>re(Date.now()),15e3);return()=>clearInterval(e)},[]);let b=t.data,x=b?.needsYou;(0,X.useEffect)(()=>{x&&ze(new Set(x.map(e=>e.id)))},[x]);let S=(0,X.useMemo)(()=>(x??[]).filter(e=>!a.has(e.id)),[x,a]),C=e.needsYouSplit,w=(0,X.useMemo)(()=>De(S,C),[S,C]),E=(0,X.useMemo)(()=>ye(S),[S]),O=ve(b?.sources??null,C),j=(r.data?.dispatchEnabled??!0)&&!te,L=ee(Xe,{freshMs:15e3}),R=d(Xe),z=(0,X.useMemo)(()=>S.filter(e=>e.id.startsWith(nt)).map(e=>`${e.id}\u0000${e.detail??``}`).join(``),[S]),B=(0,X.useRef)(!0);(0,X.useEffect)(()=>{if(B.current){B.current=!1;return}z&&R()},[z,R]);let V=L.data??dt,de=(0,X.useMemo)(()=>{let e=new Map;for(let t of S){let n=Ze(t,V.get(t.id));n&&e.set(t.id,n)}return e},[S,V]),fe=(0,X.useMemo)(()=>$e(w,V),[w,V]);(0,X.useEffect)(()=>{y(e=>{if(e.size===0)return e;let t=new Set([...e].filter(e=>w.some(t=>t.id===e)));return t.size===e.size?e:t})},[w]);let pe=(0,X.useCallback)(e=>{y(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n})},[]),me=(0,X.useCallback)(()=>y(new Set),[]),H=e.needsYouFocus;(0,X.useEffect)(()=>{if(!H)return;let e=S.find(e=>e.id===H);e&&(p(e.id),h(e.id))},[H,S]),(0,X.useEffect)(()=>{if(w.length===0){f!==null&&p(null);return}(!f||!w.some(e=>e.id===f))&&p(w[0].id)},[w,f]);let U=m?S.find(e=>e.id===m)??null:null;(0,X.useEffect)(()=>{m&&!U&&h(null)},[m,U]);let W=(0,X.useCallback)(()=>h(null),[]),he=(0,X.useCallback)(()=>{P()||document.querySelector(`[aria-modal="true"]:not([data-verse-overlay])`)||(m?W():M())},[m,W]);g({open:!0,containerRef:s,onClose:he,initialFocusRef:c});let G=(0,X.useRef)(!1);(0,X.useEffect)(()=>{m?(G.current=!0,u.current?.focus({preventScroll:!0})):G.current&&(G.current=!1,c.current?.focus({preventScroll:!0}))},[m]);let ge=w.length>0;(0,X.useEffect)(()=>{if(!ge||m)return;let e=document.activeElement;(e===null||e===document.body||e===s.current)&&c.current?.focus({preventScroll:!0})},[ge,m]);let K=(0,X.useCallback)(e=>{let t=e.target;switch(t.kind){case`approval`:p(e.id),h(e.id);return;case`session`:M(),oe(t.sessionId);return;case`section`:M(),I(t.section,t.anchor);return;case`seat`:M(),I(`apps`,`seat:${t.seatId}`);return;case`url`:window.open(t.url,`_blank`,`noopener,noreferrer`);return;default:return}},[]),_e=(0,X.useCallback)((e,t)=>{let r=Y(e,t);if(!r){n.show(`Nothing to ${t} on this item.`,`neutral`);return}if(!j&&r.request){n.show("This server was started without dispatch — run `ashlr verse` to act.",`neutral`);return}He(e,r,{openTarget:K,toast:n.show})},[j,K,n]),q=(0,X.useCallback)((e,t)=>{if(!j){n.show("This server was started without dispatch — run `ashlr verse` to act.",`neutral`);return}tt(e,t,{toast:n.show,onSettled:e=>y(t=>new Set([...t].filter(t=>!e.includes(t))))})},[j,n]);function xe(e){if(w.length===0)return;let t=Math.max(0,w.findIndex(e=>e.id===f)),n=w[(t+e+w.length)%w.length];p(n.id),m&&h(n.id)}function Se(e){let t=D.indexOf(C),n=D[(t+e+D.length)%D.length];N(n),h(null),me()}function we(e){if(e.defaultPrevented||ot(e.target)||!(e.target instanceof Node)||!s.current?.contains(e.target))return;let t=ue(e.nativeEvent,[`drawer`]);if(!t||t.id===`drawer.open`&&e.target instanceof HTMLButtonElement)return;e.preventDefault(),e.stopPropagation();let n=w.find(e=>e.id===(m??f))??null;switch(t.id){case`drawer.next`:xe(1);return;case`drawer.prev`:xe(-1);return;case`drawer.split-next`:Se(1);return;case`drawer.split-prev`:Se(-1);return;case`drawer.open`:n&&h(n.id);return;case`drawer.select`:n&&!m&&pe(n.id);return;default:{let e=at[t.id];if(!e)return;let r=!m&&v.size>0?w.filter(e=>v.has(e.id)):[];r.length>0?q(r,e):n&&_e(n,e)}}}let Te=!b&&(t.status===`loading`||t.status===`idle`),Oe=!b&&t.status===`unavailable`;return(0,Me.createPortal)((0,Q.jsx)(`div`,{className:J.backdrop,onMouseDown:e=>e.target===e.currentTarget&&M(),children:(0,Q.jsxs)(`div`,{ref:s,role:`dialog`,"aria-modal":`true`,"aria-labelledby":o,className:J.panel,"data-presentation":i?`full`:`side`,"data-verse-overlay":`needs-you`,"data-scope":`drawer`,tabIndex:-1,onKeyDown:we,children:[(0,Q.jsxs)(`header`,{className:J.head,children:[(0,Q.jsxs)(`h2`,{id:o,className:J.title,children:[`Needs you`,b?(0,Q.jsx)(`span`,{className:J.titleCount,children:E.all}):null]}),(0,Q.jsx)(se,{variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(ce,{}),"aria-label":`Close Needs you`,onClick:M})]}),(0,Q.jsx)(`div`,{role:`tablist`,"aria-label":`Splits`,className:J.splits,onKeyDown:e=>{(e.key===`ArrowRight`||e.key===`ArrowLeft`)&&(e.preventDefault(),Se(e.key===`ArrowRight`?1:-1))},children:D.map(e=>(0,Q.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":e===C,tabIndex:e===C?0:-1,className:J.split,onClick:()=>{N(e),h(null)},children:[Ce[e],(0,Q.jsx)(`span`,{className:J.splitCount,"aria-label":`${E[e]} items`,children:E[e]})]},e))}),!U&&(v.size>0||fe.length>0)?(0,Q.jsx)(pt,{pickedItems:w.filter(e=>v.has(e.id)),landAll:fe,dispatchEnabled:j,onRun:q,onClear:me}):null,(0,Q.jsxs)(`div`,{className:J.body,children:[U?(0,Q.jsxs)(`div`,{ref:u,className:J.detail,tabIndex:-1,"aria-label":`Item detail`,children:[(0,Q.jsxs)(`button`,{type:`button`,className:J.back,onClick:W,children:[`‹ All `,Ce[C].toLowerCase()]}),U.target.kind===`approval`?(0,Q.jsx)(`div`,{className:J.approval,children:(0,Q.jsx)(Fe,{id:U.target.proposalId,dispatchEnabled:j,onDispatchDisabled:()=>ne(!0),onDecided:()=>{Re(U.id),T(),W()}},U.target.proposalId)}):(0,Q.jsx)(mt,{item:U,now:_,seats:r.data?.seats??ut,onAct:_e,onOpenTarget:K,dispatchEnabled:j,chip:de.get(U.id)??null,preview:de.has(U.id)?V.get(U.id)??null:null})]}):Te?(0,Q.jsxs)(`div`,{className:J.loading,role:`status`,"aria-label":`Loading`,children:[(0,Q.jsx)(l,{}),(0,Q.jsx)(l,{}),(0,Q.jsx)(l,{})]}):Oe?(0,Q.jsxs)(`div`,{className:J.empty,children:[(0,Q.jsx)(`p`,{className:J.emptyTitle,children:`Needs you isn't available on this server`}),(0,Q.jsx)(`p`,{className:J.emptyBody,children:`This build does not report activity yet, so nothing here can be vouched for. Approvals still work from the inbox.`})]}):w.length===0?(0,Q.jsx)(ct,{coverageText:be(O),vouched:O.vouched,autonomyLabel:b?.autonomy?.label??null,split:C}):(0,Q.jsx)(Ee,{ref:c,items:w,selectedId:f,onSelect:p,onOpen:e=>{p(e),h(e)},now:_,label:`${Ce[C]} needing you`,picked:v,onTogglePick:pe,chips:de}),w.length===0&&!U?(0,Q.jsx)(`div`,{ref:c,tabIndex:-1,className:J.focusSink,"aria-hidden":`true`}):null]}),i?null:(0,Q.jsxs)(`footer`,{className:J.foot,"aria-hidden":`true`,children:[(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:`J`}),(0,Q.jsx)(`kbd`,{className:J.key,children:`K`}),` move`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:(0,Q.jsx)(le,{})}),` open`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:`A`}),` approve`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:`R`}),` reject`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:`V`}),` veto`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:`E`}),` done`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:`X`}),` pick`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`kbd`,{className:J.key,children:`H`}),(0,Q.jsx)(`kbd`,{className:J.key,children:`L`}),` splits`]})]}),!O.vouched&&w.length>0?(0,Q.jsxs)(`p`,{className:J.caveat,role:`note`,children:[be(O),` — this list may be incomplete.`]}):null]})}),document.body)}function ct({vouched:e,coverageText:t,autonomyLabel:n,split:r}){return e?(0,Q.jsxs)(`div`,{className:J.empty,"data-state":`clear`,children:[(0,Q.jsx)(`span`,{className:J.clearMark,"aria-hidden":`true`}),(0,Q.jsx)(`p`,{className:J.emptyTitle,children:`All clear`}),(0,Q.jsx)(`p`,{className:J.emptyBody,children:n?`Fleet: ${n}.`:`Nothing is waiting on you.`})]}):(0,Q.jsxs)(`div`,{className:J.empty,"data-state":`unknown`,children:[(0,Q.jsxs)(`p`,{className:J.emptyTitle,children:[`Nothing to show`,r===`all`?``:` in ${Ce[r]}`,` — but it isn't an all-clear`]}),(0,Q.jsxs)(`p`,{className:J.emptyBody,children:[t,`.`]})]})}var lt=e=>{switch(e.target.kind){case`session`:return`Open chat`;case`section`:return`Open ${L(e.target.section).label}`;case`seat`:return`Open Apps & Accounts`;case`url`:return`Open on GitHub`;default:return null}},ut=[],dt=new Map;function ft(e){let t=new Map;for(let n of e)for(let e of n.actions){if(!e.request)continue;let n=t.get(e.kind);n?n.count+=1:t.set(e.kind,{label:e.label,destructive:e.destructive,count:1})}return[`approve`,`fix`,`reject`,`veto`,`resume`,`renew`,`done`].flatMap(e=>{let n=t.get(e);return n?[{kind:e,...n}]:[]})}function pt({pickedItems:e,landAll:t,dispatchEnabled:n,onRun:r,onClear:i}){if(e.length===0)return(0,Q.jsxs)(`div`,{className:J.batch,role:`toolbar`,"aria-label":`Cloud pull requests`,children:[(0,Q.jsxs)(`span`,{className:J.batchCount,children:[t.length,` clean cloud `,t.length===1?`PR`:`PRs`]}),(0,Q.jsx)(B,{size:`sm`,variant:`primary`,disabled:!n,onClick:()=>r(t,`approve`),children:`Land all clean`})]});let a=ft(e);return(0,Q.jsxs)(`div`,{className:J.batch,role:`toolbar`,"aria-label":`Picked items`,children:[(0,Q.jsxs)(`span`,{className:J.batchCount,children:[e.length,` picked`]}),a.map(t=>{let i=j[t.kind],a=t.count<e.length;return(0,Q.jsxs)(B,{size:`sm`,variant:t.destructive?`danger`:t.kind===`approve`?`primary`:`subtle`,disabled:!n,onClick:()=>r(e,t.kind),"aria-keyshortcuts":i,title:a?`${t.count} of ${e.length} picked can do this`:void 0,children:[t.label,a?` ${t.count}`:``,i?(0,Q.jsx)(`kbd`,{className:J.inlineKey,"aria-hidden":`true`,children:i}):null]},t.kind)}),(0,Q.jsx)(B,{size:`sm`,variant:`ghost`,onClick:i,children:`Clear`})]})}function mt({item:e,now:t,seats:n,onAct:r,onOpenTarget:i,dispatchEnabled:a,chip:o,preview:s}){let c=lt(e),l=rt.exec(e.id)?.[1]??null,[u,d]=(0,X.useState)(!1),f=_e(e,t),p=e.subject.seatId?xe(n,e.subject.seatId):null,m=f.run?we(n,f.run.model,e.subject.seatId):null;return(0,Q.jsxs)(`article`,{className:J.item,children:[(0,Q.jsxs)(`header`,{className:J.itemHead,children:[f.kindLabel?(0,Q.jsx)(`p`,{className:J.rowKind,children:f.kindLabel}):null,(0,Q.jsx)(`h3`,{className:J.itemTitle,title:f.fullTitle,children:f.title}),f.run?(0,Q.jsx)(Se,{run:f.run}):null]}),f.detail?(0,Q.jsx)(`p`,{className:J.itemDetail,children:f.detail}):null,o&&s?(0,Q.jsxs)(`section`,{className:J.verdict,"aria-label":`Gate preview`,children:[(0,Q.jsxs)(`p`,{className:J.verdictHead,children:[(0,Q.jsx)(Te,{chip:{...o,why:null}}),(0,Q.jsx)(`span`,{className:J.mono,title:s.headSha,children:s.headSha.slice(0,7)})]}),(0,Q.jsx)(`ul`,{className:J.checks,children:s.checks.map(e=>(0,Q.jsxs)(`li`,{"data-ok":e.ok?`true`:`false`,children:[(0,Q.jsx)(`span`,{className:J.checkMark,"aria-hidden":`true`,children:e.ok?`✓`:`×`}),(0,Q.jsx)(`span`,{className:`visually-hidden`,children:e.ok?`Passes: `:`Fails: `}),e.text]},e.id))})]}):null,(0,Q.jsxs)(`dl`,{className:J.defs,children:[f.repo?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Repo`}),(0,Q.jsx)(`dd`,{className:J.repo,title:f.repoFull,children:f.repo})]}):null,e.subject.pr?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Pull request`}),(0,Q.jsxs)(`dd`,{children:[`#`,e.subject.pr]})]}):null,p?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Seat`}),(0,Q.jsx)(`dd`,{className:p.raw?void 0:J.mono,title:p.raw,children:p.text})]}):null,m?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Model`}),(0,Q.jsx)(`dd`,{className:m.raw?void 0:J.mono,title:m.raw,children:m.text})]}):null,(0,Q.jsx)(`dt`,{children:`Raised`}),(0,Q.jsx)(`dd`,{title:f.ageStamp,children:f.age}),e.expiresAt?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dt`,{children:`Closes`}),(0,Q.jsx)(`dd`,{className:J.deadline,children:he(e.expiresAt,t)})]}):null]}),(0,Q.jsxs)(`div`,{className:J.itemActions,children:[c?(0,Q.jsx)(B,{variant:`subtle`,size:`sm`,onClick:()=>i(e),trailingIcon:e.target.kind===`url`?(0,Q.jsx)(V,{}):void 0,children:c}):null,l?(0,Q.jsx)(B,{variant:`subtle`,size:`sm`,"aria-haspopup":`dialog`,onClick:()=>d(!0),children:`Evidence`}):null,e.actions.map(t=>{let n=j[t.kind],i=t.request!==null;return(0,Q.jsxs)(B,{size:`sm`,variant:t.destructive?`danger`:t.kind===`approve`?`primary`:`subtle`,disabled:i&&!a,onClick:()=>r(e,t.kind),"aria-keyshortcuts":n,children:[t.label,n?(0,Q.jsx)(`kbd`,{className:J.inlineKey,"aria-hidden":`true`,children:n}):null]},t.kind)})]}),a?null:(0,Q.jsx)(`p`,{className:J.caveat,children:"Read-only session — actions need `ashlr verse`."}),u&&l?(0,Q.jsx)(X.Suspense,{fallback:null,children:(0,Q.jsx)(it,{taskId:l,title:f.title,open:!0,onClose:()=>d(!1),now:t})}):null]})}export{st as NeedsYouDrawer,E as VERSE_ANCHOR_EVENT};
3
- //# sourceMappingURL=NeedsYouDrawer-N1cWJjpz.js.map
@@ -1 +0,0 @@
1
- {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/approvals/ApprovalDetail.tsx","../../../../../../src/web-ui/routes/verse/shell/needs-you-actions.ts","../../../../../../src/web-ui/routes/verse/shell/cloud-triage.ts","../../../../../../src/web-ui/routes/verse/shell/NeedsYouDrawer.tsx"],"sourcesContent":["/**\n * routes/verse/approvals/ApprovalDetail.tsx — everything a human needs before\n * deciding, and an approve path that cannot fire on one click.\n *\n * Reuses the inbox review machinery verbatim (`DiffViewer` + `diff-parser.ts`\n * + `highlight.ts`, and `ConfirmDialog`) rather than growing a second diff\n * renderer, per docs/VERSE-CONTRACT-V2.md.\n *\n * Two rules enforced here:\n * - **Judge evidence is epistemic.** A `judge-parse-failure` /\n * `judge-network-failure` is an infra failure, never a considered verdict,\n * and a degraded decisions-ledger read renders \"unknown\" via <Epistemic/>\n * instead of letting an empty array read as \"never judged\".\n * - **Nothing signed is ever printed.** Provenance shows WHETHER a proposal\n * carries a producer attestation, never the HMAC itself — the same rule\n * that keeps launcher commands and tokens off every Verse payload.\n */\nimport { useState } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Epistemic } from '../../../components/primitives/Epistemic.js';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { SkeletonLine } from '../../../components/primitives/Skeleton.js';\nimport { StatusBadge, type Tone } from '../../../components/primitives/StatusBadge.js';\nimport type { DecisionEntry, JudgeDecisionReasonCode } from '../../../data/api-types.js';\nimport { hasMutationHold } from '../../../data/auth-store.js';\nimport { DispatchDisabledError } from '../../../data/client.js';\nimport { useQuery } from '../../../data/hooks.js';\nimport { approveProposal, rejectProposal } from '../../../data/mutations.js';\nimport { proposalDetailQuery } from '../../../data/queries.js';\nimport { ConfirmDialog } from '../../inbox/ConfirmDialog.js';\nimport { DiffViewer } from '../../inbox/DiffViewer.js';\n// Shell helpers, not autonomy/'s: 3.10 moves the Autonomy panels under Fleet\n// (C7), and the drawer that hosts this view must not break when they move.\nimport { describeActionError as describeControlError } from '../shell/guarded-action.js';\n// A pure text helper (no panel code): ISO instants → local time, \".;\" → \";\".\nimport { tidyProse } from '../autonomy/format.js';\nimport {\n describeApproveConsequence,\n describeDiffStats,\n engineOf,\n formatDiffStats,\n kindLabel,\n localStamp,\n longAgo,\n parseRunSummary,\n reachesRemote,\n readableTitle,\n repoName,\n} from './approvals-model.js';\nimport styles from './approvals.module.css';\n\nconst JUDGE_REASON_DISPLAY: Record<JudgeDecisionReasonCode, { label: string; tone: Tone }> = {\n 'judge-ship-would-merge': { label: 'Ship (would merge)', tone: 'success' },\n 'judge-ship-review-required': { label: 'Ship (review required)', tone: 'success' },\n 'judge-review': { label: 'Review', tone: 'warning' },\n 'judge-noise': { label: 'Noise', tone: 'neutral' },\n 'judge-harmful': { label: 'Harmful', tone: 'danger' },\n 'judge-verdict-unrecognized': { label: 'Unrecognized verdict', tone: 'unknown' },\n 'judge-parse-failure': { label: 'Judge parse failure — not a review', tone: 'unknown' },\n 'judge-network-failure': { label: 'Judge network failure — not a review', tone: 'unknown' },\n};\n\nfunction latestJudged(decisions: DecisionEntry[]): DecisionEntry | null {\n const judged = decisions.filter((d) => d.action === 'judged' && d.judgeReasonCode);\n if (judged.length === 0) return null;\n return judged.reduce((a, b) => (Date.parse(b.ts) > Date.parse(a.ts) ? b : a));\n}\n\ntype PendingAction = 'approve' | 'reject' | null;\n\nexport interface ApprovalDetailProps {\n id: string;\n dispatchEnabled: boolean;\n onDispatchDisabled: () => void;\n onDecided: () => void;\n}\n\nexport function ApprovalDetail({ id, dispatchEnabled, onDispatchDisabled, onDecided }: ApprovalDetailProps) {\n const query = useQuery(proposalDetailQuery(id));\n const [pendingAction, setPendingAction] = useState<PendingAction>(null);\n const [tokenPrompt, setTokenPrompt] = useState(false);\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [busy, setBusy] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n // Confirmation FIRST, then the token (SPEC-310C §1; the same order as the\n // Needs-you drawer's A / R keys — shell/guarded-action.tsx). An operator who\n // pressed Approve by mistake backs out at a prompt that says what is about\n // to happen, not at one asking for a secret.\n function requestAction(action: 'approve' | 'reject') {\n setActionError(null);\n setPendingAction(action);\n setConfirmOpen(true);\n }\n\n function closeTokenPrompt() {\n setTokenPrompt(false);\n // Live read — MutationTokenDialog closes synchronously after setToken().\n if (hasMutationHold()) {\n setConfirmOpen(true);\n void execute();\n } else {\n setPendingAction(null);\n }\n }\n\n function confirmAction() {\n if (!pendingAction) return;\n if (!hasMutationHold()) {\n setConfirmOpen(false);\n setTokenPrompt(true);\n return;\n }\n void execute();\n }\n\n async function execute() {\n if (!pendingAction) return;\n setBusy(true);\n setActionError(null);\n try {\n if (pendingAction === 'approve') await approveProposal(id);\n else await rejectProposal(id);\n setConfirmOpen(false);\n setPendingAction(null);\n onDecided();\n } catch (err) {\n if (err instanceof DispatchDisabledError) {\n setConfirmOpen(false);\n setPendingAction(null);\n onDispatchDisabled();\n } else {\n setActionError(describeControlError(err));\n }\n } finally {\n setBusy(false);\n }\n }\n\n if (query.status === 'loading') {\n return (\n <div className={styles.detail}>\n <SkeletonLine width=\"55%\" />\n <SkeletonLine width=\"30%\" />\n <SkeletonLine width=\"88%\" />\n </div>\n );\n }\n\n if (query.status === 'error' || !query.data) {\n return (\n <p className={styles.error} role=\"alert\">\n {query.error?.message ?? 'Could not load this proposal.'}\n </p>\n );\n }\n\n const p = query.data;\n const evidence = p.decisionEvidence;\n const judged = latestJudged(evidence?.decisions ?? []);\n const judgeDisplay = judged?.judgeReasonCode ? JUDGE_REASON_DISPLAY[judged.judgeReasonCode] : null;\n const canDecide = p.status === 'pending' && dispatchEnabled;\n const engine = engineOf(p);\n const consequence = describeApproveConsequence(p.kind, p.repo);\n const title = readableTitle(p.title);\n const project = repoName(p.repo);\n const facts = parseRunSummary(p.summary);\n // The run facts are shown as stats; only what the summary says beyond them stays a sentence.\n const summaryText = facts ? facts.rest : p.summary ? tidyProse(p.summary) : null;\n\n return (\n <div className={styles.detail}>\n <header className={styles.detailHead}>\n <p className={styles.eyebrow}>\n {kindLabel(p.kind)}\n {title.eyebrow ? ` \\u00b7 ${title.eyebrow}` : ''}\n </p>\n {/* Two lines at most; the whole title (as the server sent it) is the tooltip. */}\n <h3 className={styles.detailTitle} title={p.title}>{title.text}</h3>\n <div className={styles.detailMeta}>\n <StatusBadge status={p.status} />\n {project ? (\n <span className={styles.project} title={p.repo ?? undefined}>{project}</span>\n ) : (\n <span>no repository</span>\n )}\n <span>{p.riskClass ? `${p.riskClass} risk` : 'risk unstated'}</span>\n {engine ? <code title=\"The model that produced this change\">{engine}</code> : null}\n <span title={localStamp(p.createdAt)}>created {longAgo(p.createdAt)}</span>\n {p.decidedAt ? <span title={localStamp(p.decidedAt)}>decided {longAgo(p.decidedAt)}</span> : null}\n {query.status === 'refreshing' ? <RefreshIndicator /> : null}\n </div>\n {facts ? (\n <p className={styles.runFacts}>\n {/* aria-label on a plain span is ignored (a generic role cannot be\n named), so the glyphs are hidden and the sentence is real,\n visually-hidden text — NeedsYouRunFacts' pattern. */}\n <span className={styles.diffStats} aria-hidden=\"true\">\n {formatDiffStats(facts)}\n </span>\n <span className=\"visually-hidden\">{describeDiffStats(facts)}</span>\n <span aria-hidden=\"true\">·</span>\n <span className={styles.runSource} title={facts.sourceHint ?? undefined}>\n {facts.partial ? 'Partial \\u00b7 ' : ''}{facts.sourceLabel}\n </span>\n {engine === null ? (\n <>\n <span aria-hidden=\"true\">·</span>\n <code title=\"The model that produced this change\">{facts.model}</code>\n </>\n ) : null}\n </p>\n ) : null}\n {summaryText ? <p className={styles.summary}>{summaryText}</p> : null}\n </header>\n\n <section className={styles.block} aria-label=\"Evidence\">\n <h4 className={styles.blockTitle}>Evidence</h4>\n <dl className={styles.defs}>\n <dt>Judge verdict</dt>\n <dd>\n <Epistemic quality={evidence?.sourceQuality} label=\"judge verdict\">\n {judgeDisplay && judged?.judgeReasonCode ? (\n <StatusBadge status={judged.judgeReasonCode} tone={judgeDisplay.tone}>\n {judgeDisplay.label}\n </StatusBadge>\n ) : (\n <span className={styles.muted}>not yet judged</span>\n )}\n </Epistemic>\n </dd>\n\n <dt>Verification</dt>\n <dd>\n {p.verifyResult ? (\n <>\n <StatusBadge status={p.verifyResult.passed ? 'success' : 'failed'}>\n {p.verifyResult.passed ? 'passed' : 'failed'}\n </StatusBadge>\n {p.verifyResult.ran && p.verifyResult.ran.length > 0 ? (\n <span className={styles.muted}> · ran {p.verifyResult.ran.map((r) => r.kind).join(', ')}</span>\n ) : null}\n {!p.verifyResult.passed && p.verifyResult.failureCategory && p.verifyResult.failureCategory !== 'code' ? (\n <span className={styles.muted}> · {p.verifyResult.failureCategory} failure — the verifier itself, not the diff</span>\n ) : null}\n {p.verifyResult.failed && p.verifyResult.failed.length > 0 ? (\n <p className={styles.failedChecks}>failed: {p.verifyResult.failed.join(', ')}</p>\n ) : null}\n </>\n ) : (\n <span className={styles.muted}>not verified</span>\n )}\n </dd>\n\n {p.decisionReason ? (\n <>\n <dt>Decision reason</dt>\n <dd>{tidyProse(p.decisionReason)}</dd>\n </>\n ) : null}\n\n {p.evidenceOutcome ? (\n <>\n <dt>Gates</dt>\n <dd className={styles.muted}>\n {p.evidenceOutcome.gateCount ?? 0} gate{p.evidenceOutcome.gateCount === 1 ? '' : 's'}\n {p.evidenceOutcome.policyAction ? ` · policy ${p.evidenceOutcome.policyAction}` : ''}\n {p.evidenceOutcome.trustBasis ? ` · trust ${p.evidenceOutcome.trustBasis}` : ''}\n </dd>\n </>\n ) : null}\n\n {p.result ? (\n <>\n <dt>Result</dt>\n <dd>{tidyProse(p.result)}</dd>\n </>\n ) : null}\n </dl>\n </section>\n\n <section className={styles.block} aria-label=\"Provenance\">\n <h4 className={styles.blockTitle}>Provenance</h4>\n <dl className={styles.defs}>\n <dt>Produced by</dt>\n <dd>{engine ? <code>{engine}</code> : <span className={styles.muted}>unknown engine</span>}</dd>\n <dt>Origin</dt>\n <dd>{p.origin}</dd>\n {facts ? (\n <>\n <dt>How it was made</dt>\n <dd>\n <span title={facts.sourceHint ?? undefined}>{facts.sourceLabel}</span>\n {facts.sourceHint ? <p className={styles.hint}>{facts.sourceHint}</p> : null}\n </dd>\n </>\n ) : null}\n {p.repo ? (\n <>\n <dt>Repository</dt>\n <dd><code>{p.repo}</code></dd>\n </>\n ) : null}\n {p.workItemId ? (\n <>\n <dt>Work item</dt>\n <dd>\n <code>{p.workItemId}</code>\n </dd>\n </>\n ) : null}\n {p.runId ? (\n <>\n <dt>Run</dt>\n <dd>\n <code>{p.runId}</code>\n </dd>\n </>\n ) : null}\n <dt>Attestation</dt>\n <dd className={styles.muted}>\n {/* The signature itself is never rendered — only whether one exists. */}\n {p.producerProvenanceSig\n ? `signed by the sandboxed producer (v${p.producerProvenanceVersion ?? 2})`\n : p.provenanceSig\n ? 'legacy signature present'\n : 'unsigned — earns no positive routing credit'}\n {p.diffHash ? ' · diff hashed at signing time' : ''}\n </dd>\n </dl>\n </section>\n\n <section className={styles.block} aria-label=\"Diff\">\n <h4 className={styles.blockTitle}>Diff</h4>\n <DiffViewer diff={p.diff} proposalKind={p.kind} />\n </section>\n\n {p.status === 'pending' ? (\n <footer className={styles.actions}>\n <p className={styles.actionNote}>\n {dispatchEnabled ? consequence : 'Read-only session — approve and reject are unavailable without dispatch.'}\n </p>\n {actionError && !confirmOpen ? (\n <p className={styles.error} role=\"alert\">\n {actionError}\n </p>\n ) : null}\n <button type=\"button\" className={styles.reject} disabled={!canDecide || busy} onClick={() => requestAction('reject')}>\n Reject\n </button>\n <button type=\"button\" className={styles.approve} disabled={!canDecide || busy} onClick={() => requestAction('approve')}>\n Approve…\n </button>\n </footer>\n ) : (\n <footer className={styles.decided}>\n This proposal is already <strong>{p.status}</strong> — no further action is available.\n </footer>\n )}\n\n <MutationTokenDialog\n open={tokenPrompt}\n onClose={closeTokenPrompt}\n reason={\n pendingAction === 'approve'\n ? 'Approving a proposal writes to a real repository and requires the dispatch token.'\n : 'Rejecting a proposal requires the dispatch token.'\n }\n tokenHelp=\"the mutation token ashlr verse printed\"\n />\n\n <ConfirmDialog\n open={confirmOpen}\n onClose={() => {\n setConfirmOpen(false);\n setPendingAction(null);\n setActionError(null);\n }}\n title={\n pendingAction === 'approve'\n ? `Approve this ${p.kind} against ${project ?? 'the repository'}?`\n : 'Reject this proposal?'\n }\n body={\n pendingAction === 'approve' ? (\n <>\n <strong>{title.text}</strong>\n <br />\n {kindLabel(p.kind)} · <strong>{project ?? 'unknown repository'}</strong>\n {p.repo ? (\n <>\n <br />\n {/* The exact checkout the write lands in — the one place the full path belongs. */}\n <code>{p.repo}</code>\n </>\n ) : null}\n <br />\n <br />\n {consequence}\n {reachesRemote(p.kind) ? (\n <>\n <br />\n <br />\n This one leaves your machine.\n </>\n ) : null}\n </>\n ) : (\n <>\n This rejects <strong>{title.text}</strong> and discards it. It stays in history as rejected and is never\n applied.\n </>\n )\n }\n confirmLabel={pendingAction === 'approve' ? `Approve and ${reachesRemote(p.kind) ? 'open the pull request' : 'apply'}` : 'Reject'}\n // Approve is the irreversible one — a `pr` pushes a branch and opens a\n // real PR other people can see, a `patch` writes to disk now. Reject\n // only discards a proposal that stays in history. Putting the danger\n // styling on Reject trained the reflex that the red button is the safe\n // one; VERSE-CONTRACT-V2 calls Approve destructive explicitly.\n destructive={pendingAction === 'approve'}\n busy={busy}\n error={actionError}\n onConfirm={confirmAction}\n />\n </div>\n );\n}\n","/**\n * routes/verse/shell/needs-you-actions.ts — doing what a Needs-you item asks\n * (unit C1). One path for a drawer key (A / R / V / E), a drawer button and\n * the palette:\n *\n * 1. the action's route must be a same-origin `/api/` route\n * (isSafeApiRoute — checked again here, not only at the server's\n * producer boundary, because this is where the mutation token is sent);\n * 2. approve / reject / veto always confirm (the item's own copy, else a\n * generic one); other kinds only when the item carries copy;\n * 3. then the token, then the POST (guarded-action.tsx owns 2–3's order);\n * 4. on success the item is hidden at once (optimistic) and activity is\n * re-polled; it stays hidden until a poll no longer lists it, or 60 s.\n *\n * An action with no route (it needs Touch ID or a terminal) opens the item's\n * target instead — that is where the flow lives.\n */\nimport { useSyncExternalStore } from 'react';\nimport { isSafeApiRoute, type NeedsYouAction, type NeedsYouItem } from '../../../../core/verse/workbench-types.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { invalidate, invalidatePrefix } from '../../../data/cache.js';\nimport { ApiError, apiPost } from '../../../data/client.js';\nimport { requestGuarded } from './guarded-action.js';\nimport { ALWAYS_CONFIRM, confirmCopy, readableItemTitle } from './needs-you-model.js';\nimport { refreshActivity } from './useActivity.js';\n\n/** How long an acted-on item stays hidden while the server catches up. */\nexport const RESOLVED_HIDE_MS = 60_000;\n\nlet resolved = new Map<string, number>();\nconst listeners = new Set<() => void>();\n\nfunction emit(): void {\n for (const l of [...listeners]) l();\n}\n\nexport function markResolved(id: string, at: number = Date.now()): void {\n resolved = new Map(resolved).set(id, at);\n emit();\n}\n\n/** Drop marks the server has caught up with (the id is gone) or that are too old. */\nexport function pruneResolved(liveIds: ReadonlySet<string>, now: number = Date.now()): void {\n let changed = false;\n const next = new Map(resolved);\n for (const [id, at] of next) {\n if (!liveIds.has(id) || now - at > RESOLVED_HIDE_MS) {\n next.delete(id);\n changed = true;\n }\n }\n if (changed) {\n resolved = next;\n emit();\n }\n}\n\nexport function useResolvedIds(): ReadonlyMap<string, number> {\n return useSyncExternalStore(\n (l) => {\n listeners.add(l);\n return () => listeners.delete(l);\n },\n () => resolved,\n () => resolved,\n );\n}\n\nexport function resetResolvedForTest(): void {\n resolved = new Map();\n emit();\n}\n\nexport interface ActionContext {\n /** Open the item's target (for an action with no route). */\n openTarget: (item: NeedsYouItem) => void;\n toast: (message: string, tone?: 'neutral' | 'success' | 'danger') => void;\n}\n\nfunction afterSuccess(item: NeedsYouItem): void {\n markResolved(item.id);\n if (item.source === 'approvals') {\n // The approvals list, the inbox badge and the proposal detail all read\n // these keys (data/mutations.ts approveProposal does the same).\n invalidate('inbox');\n invalidate('dashboard-snapshot');\n invalidatePrefix('inbox-list:');\n if (item.target.kind === 'approval') invalidate(`proposal-detail-${item.target.proposalId}`);\n }\n void refreshActivity();\n}\n\n/** Run `action` on `item` through confirm → token → POST. */\nexport function runNeedsYouAction(item: NeedsYouItem, action: NeedsYouAction, ctx: ActionContext): void {\n const request = action.request;\n if (!request) {\n ctx.openTarget(item);\n return;\n }\n if (!isSafeApiRoute(request.path)) {\n ctx.toast('That action points outside this app and was not sent.', 'danger');\n return;\n }\n const copy = confirmCopy(item, action);\n // The operator-facing title (\"fix the flaky snapshot test\"), not the raw\n // producer string (\"PR: fix the flaky snapshot test\") — same text the row shows.\n const title = readableItemTitle(item).text;\n const run = async () => {\n const token = getMutationToken();\n if (!token) throw new ApiError('Mutation token was rejected.', 401, request.path);\n await apiPost<unknown>(request.path, request.body, token);\n touchMutationHold();\n };\n const mustConfirm = ALWAYS_CONFIRM.has(action.kind) || copy !== null;\n requestGuarded({\n title: copy?.title ?? action.label,\n body: copy?.body ?? title,\n confirmLabel: copy?.confirmLabel ?? action.label,\n destructive: action.destructive,\n token: true,\n tokenReason: `${action.label} changes state on this machine and requires the dispatch token.`,\n skipConfirm: !mustConfirm,\n run,\n onDone: () => {\n afterSuccess(item);\n ctx.toast(`${action.label}: ${title}`, 'success');\n },\n onError: mustConfirm ? undefined : (message) => ctx.toast(message, 'danger'),\n });\n}\n","/**\n * routes/verse/shell/cloud-triage.ts — the Needs-you drawer's cloud PR\n * triage (3.13): each cloud PR's gate preview (GET /api/verse/cloud/previews,\n * core/cloud/pr-preview.ts), the chip a row shows for it, and running one\n * action kind over several items at once (\"Land all clean\", or A / R / E on a\n * multi-selection).\n *\n * The actions themselves are the items' own (cloud-api.ts triageActions maps\n * Land / Close / Update branch onto approve / reject / fix), so nothing here\n * builds a route: a batch POSTs each item's own request, pinned by the server\n * to the head SHA its preview judged.\n *\n * Loads with the drawer (VerseApp imports the drawer with import()), never\n * at first paint; pr-preview.ts is imported for its TYPES only — its value\n * graph is the server's merge gates.\n */\nimport type { CloudPrCheck, CloudPrPreview, CloudPrPreviewsResponse } from '../../../../core/cloud/pr-preview.js';\nimport { VERSE_CLOUD_PATH } from '../../../../core/cloud/types.js';\nimport { isSafeApiRoute, type NeedsYouActionKind, type NeedsYouItem } from '../../../../core/verse/workbench-types.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { ApiError, apiGet, apiPost } from '../../../data/client.js';\nimport type { QueryDef } from '../../../data/queries.js';\nimport { requestGuarded, describeActionError } from './guarded-action.js';\nimport { markResolved } from './needs-you-actions.js';\nimport { actionOf, readableItemTitle } from './needs-you-model.js';\nimport { refreshActivity } from './useActivity.js';\n\nexport const CLOUD_PREVIEWS_KEY = 'verse-cloud-previews';\nconst PREVIEWS_PATH = `${VERSE_CLOUD_PATH}/previews`;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value);\n\nfunction isCheck(value: unknown): value is CloudPrCheck {\n return isRecord(value) && typeof value['id'] === 'string' && typeof value['ok'] === 'boolean' && typeof value['text'] === 'string';\n}\n\nfunction isPreview(value: unknown): value is CloudPrPreview {\n return isRecord(value)\n && typeof value['itemId'] === 'string'\n && typeof value['headSha'] === 'string'\n && typeof value['wouldAutoLand'] === 'boolean'\n && typeof value['reason'] === 'string'\n && Array.isArray(value['checks']) && value['checks'].every(isCheck);\n}\n\n/** Previews by Needs-you item id. A malformed entry is dropped, never guessed at. */\nexport function narrowPreviews(raw: unknown): ReadonlyMap<string, CloudPrPreview> {\n const out = new Map<string, CloudPrPreview>();\n const list = isRecord(raw) ? (raw as Partial<CloudPrPreviewsResponse>).previews : undefined;\n if (!Array.isArray(list)) return out;\n for (const entry of list) if (isPreview(entry)) out.set(entry.itemId, entry);\n return out;\n}\n\nconst NONE: ReadonlyMap<string, CloudPrPreview> = new Map();\n\n/**\n * Optional read: a server without the route (404) or a failed read shows no\n * chips — the items and their own actions still work. 401 propagates (the\n * whole app's read session expired).\n */\nexport const cloudPreviewsQuery: QueryDef<ReadonlyMap<string, CloudPrPreview>> = {\n key: CLOUD_PREVIEWS_KEY,\n fetch: async (signal) => {\n try {\n return narrowPreviews(await apiGet<unknown>(PREVIEWS_PATH, signal));\n } catch (err) {\n if (err instanceof ApiError && err.status === 401) throw err;\n if (err instanceof DOMException && err.name === 'AbortError') throw err;\n return NONE;\n }\n },\n};\n\n// ---------------------------------------------------------------------------\n// What a row shows\n// ---------------------------------------------------------------------------\n\nexport interface TriageChip {\n tone: 'clean' | 'held';\n /** \"Clean\" / \"Held\". */\n label: string;\n /** The first failing check, in its own words (\"2 commits behind\"); null when clean. */\n why: string | null;\n /** The whole verdict sentence, for a tooltip. */\n title: string;\n}\n\n/** The chip for an item's preview, when the preview is for the head its actions are pinned to. */\nexport function triageChip(item: NeedsYouItem, preview: CloudPrPreview | undefined): TriageChip | null {\n if (!preview || !previewMatchesItem(item, preview)) return null;\n if (preview.wouldAutoLand) return { tone: 'clean', label: 'Clean', why: null, title: preview.reason };\n const failing = preview.checks.find((c) => !c.ok);\n return { tone: 'held', label: 'Held', why: failing?.text ?? null, title: preview.reason };\n}\n\n/**\n * A preview only speaks for an item whose actions are pinned to the same\n * head. Between a push and the next rebuild the two can disagree; the chip\n * then waits rather than vouch for a commit the Land button will not merge.\n */\nexport function previewMatchesItem(item: NeedsYouItem, preview: CloudPrPreview): boolean {\n const pinned = item.actions.find((a) => a.request !== null && typeof a.request.body['headSha'] === 'string');\n return pinned ? pinned.request!.body['headSha'] === preview.headSha : false;\n}\n\n/** Items \"Land all clean\" would land: previewed clean, pinned to that head, and carrying a Land action. */\nexport function cleanLandable(items: readonly NeedsYouItem[], previews: ReadonlyMap<string, CloudPrPreview>): NeedsYouItem[] {\n return items.filter((item) => {\n const preview = previews.get(item.id);\n return preview !== undefined && preview.wouldAutoLand && previewMatchesItem(item, preview) && actionOf(item, 'approve') !== null;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Batches\n// ---------------------------------------------------------------------------\n\nexport interface BatchContext {\n toast: (message: string, tone?: 'neutral' | 'success' | 'danger') => void;\n /** Called with the ids that succeeded (the drawer clears them from its selection). */\n onSettled?: (succeeded: readonly string[]) => void;\n}\n\n/** The verb a batch dialog uses for `kind` over `n` items (\"Land 3 pull requests?\"). */\nfunction batchCopy(kind: NeedsYouActionKind, items: readonly NeedsYouItem[]): { title: string; confirmLabel: string; verb: string } {\n const label = actionOf(items[0]!, kind)?.label ?? kind;\n const n = items.length;\n const noun = items.every((i) => i.subject.pr !== null) ? (n === 1 ? 'pull request' : 'pull requests') : n === 1 ? 'item' : 'items';\n return { title: `${label} ${n} ${noun}?`, confirmLabel: `${label} ${n}`, verb: label };\n}\n\n/**\n * One confirmation, one token, then each item's own `kind` request in turn\n * (sequential: GitHub merges into one base branch, and a second merge must\n * see the first). A refusal does not stop the rest; the toast names what\n * landed and why anything did not. Items without that action are skipped.\n */\nexport function runBatch(items: readonly NeedsYouItem[], kind: NeedsYouActionKind, ctx: BatchContext): boolean {\n const eligible = items.filter((item) => {\n const action = actionOf(item, kind);\n return action?.request != null && isSafeApiRoute(action.request.path);\n });\n if (eligible.length === 0) {\n ctx.toast('None of the selected items can do that.', 'neutral');\n return false;\n }\n const copy = batchCopy(kind, eligible);\n const named = eligible.slice(0, 3).map((item) => (item.subject.pr ? `#${item.subject.pr}` : `“${readableItemTitle(item).text}”`));\n const list = eligible.length > 3 ? `${named.join(', ')} and ${eligible.length - 3} more` : named.join(', ');\n const destructive = eligible.some((item) => actionOf(item, kind)?.destructive === true);\n const succeeded = new Set<string>();\n let failures: string[] = [];\n return requestGuarded({\n title: copy.title,\n body: `${list}. Each runs on the exact commit it was checked on; one that moved since is refused, not changed.`,\n confirmLabel: copy.confirmLabel,\n destructive,\n token: true,\n tokenReason: `${copy.verb} changes pull requests on GitHub and requires the dispatch token.`,\n run: async () => {\n const token = getMutationToken();\n if (!token) throw new ApiError('Mutation token was rejected.', 401, PREVIEWS_PATH);\n // A retry from the dialog re-runs only what has not gone through yet.\n failures = [];\n for (const item of eligible) {\n if (succeeded.has(item.id)) continue;\n const request = actionOf(item, kind)!.request!;\n try {\n await apiPost<unknown>(request.path, request.body, token);\n succeeded.add(item.id);\n markResolved(item.id);\n } catch (err) {\n // A rejected token stops the batch: every later POST would fail the same way.\n if (err instanceof ApiError && err.status === 401) throw err;\n failures.push(`${item.subject.pr ? `#${item.subject.pr}` : readableItemTitle(item).text}: ${describeActionError(err)}`);\n }\n }\n touchMutationHold();\n if (succeeded.size === 0) throw new Error(failures.length === 1 ? failures[0]! : `None went through. ${failures[0]!}`);\n },\n onDone: () => {\n void refreshActivity();\n ctx.onSettled?.([...succeeded]);\n const done = `${copy.verb}: ${succeeded.size} of ${eligible.length} done.`;\n ctx.toast(\n failures.length === 0 ? done : `${done} ${failures[0]}${failures.length > 1 ? ` (+${failures.length - 1} more)` : ''}`,\n failures.length === 0 ? 'success' : 'neutral',\n );\n },\n });\n}\n","/**\n * routes/verse/shell/NeedsYouDrawer.tsx — ⌘J, the one inbox for everything\n * waiting on the operator (unit C1; SPEC-310C §1 \"Needs-you drawer\").\n *\n * splits All · Approvals · Fleet · Chats · Accounts (H / L)\n * list J / K move · ↩ open · A approve · R reject · V veto · E done\n * X (or Shift-click) picks rows; A / R / E then act on every pick\n * detail an approval reuses ApprovalDetail (diff, evidence, provenance);\n * anything else shows its argument, its deadline and its actions\n * cloud a cloud PR shows its gate verdict (Clean / Held · why) and, in\n * its detail, every check; \"Land all clean\" lands every Clean one\n * after one confirmation (cloud-triage.ts)\n *\n * Every A / R / V goes through confirmation and then the mutation token\n * (needs-you-actions.ts → guarded-action.tsx) — keyboard triage is fast, but\n * never one keystroke from a real pull request.\n *\n * \"All clear\" is a claim, so it is only made for a split whose every producer\n * answered (needs-you-model splitCoverage). Otherwise the empty state names\n * who is not reporting — an empty list from a silent source is not good news.\n *\n * A right-hand sheet on a desktop window; a full-screen sheet below 480px.\n */\nimport { lazy, Suspense, useCallback, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button, IconButton } from '../../../components/primitives/Button.js';\nimport { useFocusTrap } from '../../../components/primitives/focus-trap.js';\nimport { IconExternalLink, IconX } from '../../../components/primitives/icons.js';\nimport { SkeletonRow } from '../../../components/primitives/Skeleton.js';\nimport { useToast } from '../../../components/primitives/Toast.js';\nimport type { VerseSeat } from '../../../data/api-types.js';\nimport type { CloudPrPreview } from '../../../../core/cloud/pr-preview.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport {\n NEEDS_YOU_ACTION_KEYS,\n type NeedsYouActionKind,\n type NeedsYouItem,\n} from '../../../../core/verse/workbench-types.js';\nimport { ApprovalDetail } from '../approvals/ApprovalDetail.js';\nimport { useVerseUi } from '../useVerseUi.js';\nimport { ReturnKeyIcon } from '../verse-icons.js';\nimport { verseBootstrapQuery } from '../verse-queries.js';\nimport {\n closeVerseOverlay,\n NEEDS_YOU_SPLITS,\n openVerseSession,\n sectionEntry,\n setVerseNeedsYouSplit,\n setVerseSection,\n type NeedsYouSplit,\n} from '../verse-ui-store.js';\nimport { matchCommand } from './command-catalog.js';\nimport { isGuardOpen } from './guarded-action.js';\nimport { markResolved, pruneResolved, runNeedsYouAction, useResolvedIds } from './needs-you-actions.js';\nimport { cleanLandable, cloudPreviewsQuery, runBatch, triageChip, type TriageChip } from './cloud-triage.js';\nimport {\n actionOf,\n describeSilence,\n itemsForSplit,\n needsYouRowView,\n runModelDisplayName,\n seatDisplayName,\n SPLIT_LABEL,\n splitCounts,\n splitCoverage,\n until,\n} from './needs-you-model.js';\nimport { NeedsYouList, NeedsYouRunFacts, TriageChipView } from './NeedsYouList.js';\nimport { refreshActivity, useActivity } from './useActivity.js';\nimport { useViewport } from './viewport.js';\nimport styles from './NeedsYouDrawer.module.css';\n\n/** A section anchor for the surface an item points into (the shell reveals it: shell/reveal-anchor.ts). */\nexport { VERSE_ANCHOR_EVENT } from '../verse-ui-store.js';\n\n/** Cloud PR items (cloud-api.ts cloudNeedsYouItems) — the only rows with a gate preview. */\nconst CLOUD_PR_ITEM_PREFIX = 'fleet:owner-lane-pr:cloud-';\n/** Any cloud task's item (its PR, or its failed launch) → the task id, for its evidence. */\nconst CLOUD_ITEM_RE = /^(?:fleet:owner-lane-pr|chats:chat-failed):cloud-(ct_\\d{8}T\\d{4}_[a-z0-9]{6})$/;\n\n/** The task's evidence sheet (cloud/EvidenceTimeline.tsx): its own chunk, fetched the first time it opens. */\nconst EvidenceTimeline = lazy(() => import('../cloud/EvidenceTimeline.js'));\n\nconst DRAWER_ACTION: Readonly<Record<string, NeedsYouActionKind>> = {\n 'drawer.approve': 'approve',\n 'drawer.reject': 'reject',\n 'drawer.veto': 'veto',\n 'drawer.done': 'done',\n};\n\nfunction isTextTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return target.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(target.tagName);\n}\n\nexport function NeedsYouDrawer() {\n const ui = useVerseUi();\n const activity = useActivity();\n const toast = useToast();\n const bootstrap = useQuery(verseBootstrapQuery);\n const { compact } = useViewport();\n const resolved = useResolvedIds();\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const detailRef = useRef<HTMLDivElement>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [detailId, setDetailId] = useState<string | null>(null);\n const [dispatchDenied, setDispatchDenied] = useState(false);\n const [now, setNow] = useState(() => Date.now());\n const [picked, setPicked] = useState<ReadonlySet<string>>(() => new Set());\n\n // Countdowns (\"closes in 24m\") tick while the drawer is open; nothing else re-renders.\n useEffect(() => {\n const id = setInterval(() => setNow(Date.now()), 15_000);\n return () => clearInterval(id);\n }, []);\n\n const data = activity.data;\n const liveItems = data?.needsYou;\n useEffect(() => {\n if (liveItems) pruneResolved(new Set(liveItems.map((i) => i.id)));\n }, [liveItems]);\n\n const all = useMemo(() => (liveItems ?? []).filter((i) => !resolved.has(i.id)), [liveItems, resolved]);\n const split = ui.needsYouSplit;\n const items = useMemo(() => itemsForSplit(all, split), [all, split]);\n const counts = useMemo(() => splitCounts(all), [all]);\n const coverage = splitCoverage(data?.sources ?? null, split);\n const dispatchEnabled = (bootstrap.data?.dispatchEnabled ?? true) && !dispatchDenied;\n\n // Cloud PR verdicts: re-read whenever a cloud item's text changes (the\n // server rewrites its detail when a new preview lands).\n const previewsQuery = useQuery(cloudPreviewsQuery, { freshMs: 15_000 });\n const refetchPreviews = useRefetch(cloudPreviewsQuery);\n const cloudSignature = useMemo(\n () => all.filter((i) => i.id.startsWith(CLOUD_PR_ITEM_PREFIX)).map((i) => `${i.id}\\u0000${i.detail ?? ''}`).join('\\u0001'),\n [all],\n );\n const firstSignature = useRef(true);\n useEffect(() => {\n // The mount already fetched; only a CHANGE re-reads.\n if (firstSignature.current) {\n firstSignature.current = false;\n return;\n }\n if (cloudSignature) refetchPreviews();\n }, [cloudSignature, refetchPreviews]);\n const previews = previewsQuery.data ?? NO_PREVIEWS;\n const chips = useMemo(() => {\n const out = new Map<string, TriageChip>();\n for (const item of all) {\n const chip = triageChip(item, previews.get(item.id));\n if (chip) out.set(item.id, chip);\n }\n return out;\n }, [all, previews]);\n const landAll = useMemo(() => cleanLandable(items, previews), [items, previews]);\n\n // Picks only ever name rows this split shows.\n useEffect(() => {\n setPicked((prev) => {\n if (prev.size === 0) return prev;\n const next = new Set([...prev].filter((id) => items.some((i) => i.id === id)));\n return next.size === prev.size ? prev : next;\n });\n }, [items]);\n const togglePick = useCallback((id: string) => {\n setPicked((prev) => {\n const next = new Set(prev);\n if (!next.delete(id)) next.add(id);\n return next;\n });\n }, []);\n const clearPicks = useCallback(() => setPicked(new Set()), []);\n\n // Open on the item the palette / a notification asked for.\n const focusId = ui.needsYouFocus;\n useEffect(() => {\n if (!focusId) return;\n const item = all.find((i) => i.id === focusId);\n if (!item) return;\n setSelectedId(item.id);\n setDetailId(item.id);\n }, [focusId, all]);\n\n // Keep the selection on a real row as items come and go.\n useEffect(() => {\n if (items.length === 0) {\n if (selectedId !== null) setSelectedId(null);\n return;\n }\n if (!selectedId || !items.some((i) => i.id === selectedId)) setSelectedId(items[0]!.id);\n }, [items, selectedId]);\n\n const detailItem = detailId ? all.find((i) => i.id === detailId) ?? null : null;\n useEffect(() => {\n // The item was resolved (here or elsewhere) while open: back to the list.\n if (detailId && !detailItem) setDetailId(null);\n }, [detailId, detailItem]);\n\n const closeDetail = useCallback(() => setDetailId(null), []);\n\n const trapClose = useCallback(() => {\n // Esc in a dialog opened FROM the drawer (a confirmation, the token\n // prompt) belongs to that dialog: every trap hears Escape, and this one\n // registered first.\n if (isGuardOpen() || document.querySelector('[aria-modal=\"true\"]:not([data-verse-overlay])')) return;\n if (detailId) closeDetail();\n else closeVerseOverlay();\n }, [detailId, closeDetail]);\n useFocusTrap({ open: true, containerRef: panelRef, onClose: trapClose, initialFocusRef: listRef });\n\n // Focus follows the view: into the detail when it opens, back to the list\n // when it closes (not on first mount — the focus trap places that).\n const detailWasOpen = useRef(false);\n useEffect(() => {\n if (detailId) {\n detailWasOpen.current = true;\n detailRef.current?.focus({ preventScroll: true });\n } else if (detailWasOpen.current) {\n detailWasOpen.current = false;\n listRef.current?.focus({ preventScroll: true });\n }\n }, [detailId]);\n\n // The list usually arrives AFTER the drawer opened (the first poll): the\n // trap focused the placeholder, which is then removed and focus falls to\n // <body>. Hand it to the list — unless the operator has moved it anywhere\n // real (a dialog opened from the drawer lives outside this panel).\n const hasItems = items.length > 0;\n useEffect(() => {\n if (!hasItems || detailId) return;\n const active = document.activeElement;\n if (active === null || active === document.body || active === panelRef.current) listRef.current?.focus({ preventScroll: true });\n }, [hasItems, detailId]);\n\n const openTarget = useCallback((item: NeedsYouItem) => {\n const target = item.target;\n switch (target.kind) {\n case 'approval':\n setSelectedId(item.id);\n setDetailId(item.id);\n return;\n case 'session':\n closeVerseOverlay();\n openVerseSession(target.sessionId);\n return;\n case 'section':\n closeVerseOverlay();\n setVerseSection(target.section, target.anchor);\n return;\n case 'seat':\n closeVerseOverlay();\n setVerseSection('apps', `seat:${target.seatId}`);\n return;\n case 'url':\n // https only (isNeedsYouItem), a new browsing context with no opener.\n window.open(target.url, '_blank', 'noopener,noreferrer');\n return;\n default:\n return;\n }\n }, []);\n\n const act = useCallback((item: NeedsYouItem, kind: NeedsYouActionKind) => {\n const action = actionOf(item, kind);\n if (!action) {\n toast.show(`Nothing to ${kind} on this item.`, 'neutral');\n return;\n }\n if (!dispatchEnabled && action.request) {\n toast.show('This server was started without dispatch — run `ashlr verse` to act.', 'neutral');\n return;\n }\n runNeedsYouAction(item, action, { openTarget, toast: toast.show });\n }, [dispatchEnabled, openTarget, toast]);\n\n const actOnMany = useCallback((targets: readonly NeedsYouItem[], kind: NeedsYouActionKind) => {\n if (!dispatchEnabled) {\n toast.show('This server was started without dispatch — run `ashlr verse` to act.', 'neutral');\n return;\n }\n runBatch(targets, kind, {\n toast: toast.show,\n onSettled: (done) => setPicked((prev) => new Set([...prev].filter((id) => !done.includes(id)))),\n });\n }, [dispatchEnabled, toast]);\n\n function move(delta: 1 | -1) {\n if (items.length === 0) return;\n const at = Math.max(0, items.findIndex((i) => i.id === selectedId));\n const next = items[(at + delta + items.length) % items.length]!;\n setSelectedId(next.id);\n if (detailId) setDetailId(next.id);\n }\n\n function stepSplit(delta: 1 | -1) {\n const at = NEEDS_YOU_SPLITS.indexOf(split);\n const next = NEEDS_YOU_SPLITS[(at + delta + NEEDS_YOU_SPLITS.length) % NEEDS_YOU_SPLITS.length]!;\n setVerseNeedsYouSplit(next);\n setDetailId(null);\n clearPicks();\n }\n\n function onKeyDown(event: ReactKeyboardEvent<HTMLDivElement>) {\n if (event.defaultPrevented || isTextTarget(event.target)) return;\n // React bubbles through portals: a key typed in a dialog ApprovalDetail\n // opened (rendered outside this panel's DOM) is not a triage key.\n if (!(event.target instanceof Node) || !panelRef.current?.contains(event.target)) return;\n const command = matchCommand(event.nativeEvent, ['drawer']);\n if (!command) return;\n // A button inside the detail answers Enter itself; the drawer's Enter is\n // for the list.\n if (command.id === 'drawer.open' && event.target instanceof HTMLButtonElement) return;\n event.preventDefault();\n event.stopPropagation();\n const current = items.find((i) => i.id === (detailId ?? selectedId)) ?? null;\n switch (command.id) {\n case 'drawer.next':\n move(1);\n return;\n case 'drawer.prev':\n move(-1);\n return;\n case 'drawer.split-next':\n stepSplit(1);\n return;\n case 'drawer.split-prev':\n stepSplit(-1);\n return;\n case 'drawer.open':\n if (current) setDetailId(current.id);\n return;\n case 'drawer.select':\n if (current && !detailId) togglePick(current.id);\n return;\n default: {\n const kind = DRAWER_ACTION[command.id];\n if (!kind) return;\n // With rows picked (and the list showing), the key acts on every pick.\n const many = !detailId && picked.size > 0 ? items.filter((i) => picked.has(i.id)) : [];\n if (many.length > 0) actOnMany(many, kind);\n else if (current) act(current, kind);\n }\n }\n }\n\n const loading = !data && (activity.status === 'loading' || activity.status === 'idle');\n const unavailable = !data && activity.status === 'unavailable';\n\n return createPortal(\n <div className={styles.backdrop} onMouseDown={(e) => e.target === e.currentTarget && closeVerseOverlay()}>\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={styles.panel}\n data-presentation={compact ? 'full' : 'side'}\n data-verse-overlay=\"needs-you\"\n data-scope=\"drawer\"\n tabIndex={-1}\n onKeyDown={onKeyDown}\n >\n <header className={styles.head}>\n <h2 id={titleId} className={styles.title}>\n Needs you\n {data ? <span className={styles.titleCount}>{counts.all}</span> : null}\n </h2>\n <IconButton variant=\"ghost\" size=\"sm\" icon={<IconX />} aria-label=\"Close Needs you\" onClick={closeVerseOverlay} />\n </header>\n\n <div\n role=\"tablist\"\n aria-label=\"Splits\"\n className={styles.splits}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft') return;\n e.preventDefault();\n stepSplit(e.key === 'ArrowRight' ? 1 : -1);\n }}\n >\n {NEEDS_YOU_SPLITS.map((s: NeedsYouSplit) => (\n <button\n key={s}\n type=\"button\"\n role=\"tab\"\n aria-selected={s === split}\n tabIndex={s === split ? 0 : -1}\n className={styles.split}\n onClick={() => {\n setVerseNeedsYouSplit(s);\n setDetailId(null);\n }}\n >\n {SPLIT_LABEL[s]}\n <span className={styles.splitCount} aria-label={`${counts[s]} items`}>{counts[s]}</span>\n </button>\n ))}\n </div>\n\n {!detailItem && (picked.size > 0 || landAll.length > 0) ? (\n <BatchBar\n pickedItems={items.filter((i) => picked.has(i.id))}\n landAll={landAll}\n dispatchEnabled={dispatchEnabled}\n onRun={actOnMany}\n onClear={clearPicks}\n />\n ) : null}\n\n <div className={styles.body}>\n {detailItem ? (\n <div ref={detailRef} className={styles.detail} tabIndex={-1} aria-label=\"Item detail\">\n <button type=\"button\" className={styles.back} onClick={closeDetail}>\n ‹ All {SPLIT_LABEL[split].toLowerCase()}\n </button>\n {detailItem.target.kind === 'approval' ? (\n <div className={styles.approval}>\n <ApprovalDetail\n key={detailItem.target.proposalId}\n id={detailItem.target.proposalId}\n dispatchEnabled={dispatchEnabled}\n onDispatchDisabled={() => setDispatchDenied(true)}\n onDecided={() => {\n markResolved(detailItem.id);\n void refreshActivity();\n closeDetail();\n }}\n />\n </div>\n ) : (\n <ItemDetail\n item={detailItem}\n now={now}\n seats={bootstrap.data?.seats ?? NO_SEATS}\n onAct={act}\n onOpenTarget={openTarget}\n dispatchEnabled={dispatchEnabled}\n chip={chips.get(detailItem.id) ?? null}\n preview={chips.has(detailItem.id) ? previews.get(detailItem.id) ?? null : null}\n />\n )}\n </div>\n ) : loading ? (\n <div className={styles.loading} role=\"status\" aria-label=\"Loading\">\n <SkeletonRow />\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : unavailable ? (\n <div className={styles.empty}>\n <p className={styles.emptyTitle}>Needs you isn't available on this server</p>\n <p className={styles.emptyBody}>This build does not report activity yet, so nothing here can be vouched for. Approvals still work from the inbox.</p>\n </div>\n ) : items.length === 0 ? (\n <EmptySplit coverageText={describeSilence(coverage)} vouched={coverage.vouched} autonomyLabel={data?.autonomy?.label ?? null} split={split} />\n ) : (\n <NeedsYouList\n ref={listRef}\n items={items}\n selectedId={selectedId}\n onSelect={setSelectedId}\n // A click (or a tap — a phone has no J / K) opens the item;\n // the keyboard moves the selection without opening.\n onOpen={(id) => {\n setSelectedId(id);\n setDetailId(id);\n }}\n now={now}\n label={`${SPLIT_LABEL[split]} needing you`}\n picked={picked}\n onTogglePick={togglePick}\n chips={chips}\n />\n )}\n {/* The list holds the initial focus; with no list, the panel does. */}\n {items.length === 0 && !detailItem ? <div ref={listRef} tabIndex={-1} className={styles.focusSink} aria-hidden=\"true\" /> : null}\n </div>\n\n {!compact ? (\n <footer className={styles.foot} aria-hidden=\"true\">\n <span><kbd className={styles.key}>J</kbd><kbd className={styles.key}>K</kbd> move</span>\n <span><kbd className={styles.key}><ReturnKeyIcon /></kbd> open</span>\n <span><kbd className={styles.key}>A</kbd> approve</span>\n <span><kbd className={styles.key}>R</kbd> reject</span>\n <span><kbd className={styles.key}>V</kbd> veto</span>\n <span><kbd className={styles.key}>E</kbd> done</span>\n <span><kbd className={styles.key}>X</kbd> pick</span>\n <span><kbd className={styles.key}>H</kbd><kbd className={styles.key}>L</kbd> splits</span>\n </footer>\n ) : null}\n {!coverage.vouched && items.length > 0 ? (\n <p className={styles.caveat} role=\"note\">{describeSilence(coverage)} — this list may be incomplete.</p>\n ) : null}\n </div>\n </div>,\n document.body,\n );\n}\n\nfunction EmptySplit({ vouched, coverageText, autonomyLabel, split }: { vouched: boolean; coverageText: string; autonomyLabel: string | null; split: NeedsYouSplit }) {\n if (vouched) {\n return (\n <div className={styles.empty} data-state=\"clear\">\n <span className={styles.clearMark} aria-hidden=\"true\" />\n <p className={styles.emptyTitle}>All clear</p>\n <p className={styles.emptyBody}>{autonomyLabel ? `Fleet: ${autonomyLabel}.` : 'Nothing is waiting on you.'}</p>\n </div>\n );\n }\n return (\n <div className={styles.empty} data-state=\"unknown\">\n <p className={styles.emptyTitle}>Nothing to show{split === 'all' ? '' : ` in ${SPLIT_LABEL[split]}`} — but it isn't an all-clear</p>\n <p className={styles.emptyBody}>{coverageText}.</p>\n </div>\n );\n}\n\nconst TARGET_LABEL = (item: NeedsYouItem): string | null => {\n switch (item.target.kind) {\n case 'session':\n return 'Open chat';\n case 'section':\n return `Open ${sectionEntry(item.target.section).label}`;\n case 'seat':\n return 'Open Apps & Accounts';\n case 'url':\n return 'Open on GitHub';\n default:\n return null;\n }\n};\n\nconst NO_SEATS: readonly VerseSeat[] = [];\nconst NO_PREVIEWS: ReadonlyMap<string, CloudPrPreview> = new Map();\n\n/** Which actions the picks can run: every kind at least one pick has, with how many have it. */\nfunction sharedActions(pickedItems: readonly NeedsYouItem[]): Array<{ kind: NeedsYouActionKind; label: string; destructive: boolean; count: number }> {\n const byKind = new Map<NeedsYouActionKind, { label: string; destructive: boolean; count: number }>();\n for (const item of pickedItems) {\n for (const action of item.actions) {\n if (!action.request) continue;\n const entry = byKind.get(action.kind);\n if (entry) entry.count += 1;\n else byKind.set(action.kind, { label: action.label, destructive: action.destructive, count: 1 });\n }\n }\n // Land first, Dismiss last.\n const order: NeedsYouActionKind[] = ['approve', 'fix', 'reject', 'veto', 'resume', 'renew', 'done'];\n return order.flatMap((kind) => {\n const entry = byKind.get(kind);\n return entry ? [{ kind, ...entry }] : [];\n });\n}\n\n/**\n * The strip over the list: what the picks can do (each button runs on the\n * picks that have that action), or — with nothing picked — \"Land all clean\".\n */\nfunction BatchBar({\n pickedItems,\n landAll,\n dispatchEnabled,\n onRun,\n onClear,\n}: {\n pickedItems: readonly NeedsYouItem[];\n landAll: readonly NeedsYouItem[];\n dispatchEnabled: boolean;\n onRun: (targets: readonly NeedsYouItem[], kind: NeedsYouActionKind) => void;\n onClear: () => void;\n}) {\n if (pickedItems.length === 0) {\n return (\n <div className={styles.batch} role=\"toolbar\" aria-label=\"Cloud pull requests\">\n <span className={styles.batchCount}>\n {landAll.length} clean cloud {landAll.length === 1 ? 'PR' : 'PRs'}\n </span>\n <Button size=\"sm\" variant=\"primary\" disabled={!dispatchEnabled} onClick={() => onRun(landAll, 'approve')}>\n Land all clean\n </Button>\n </div>\n );\n }\n const actions = sharedActions(pickedItems);\n return (\n <div className={styles.batch} role=\"toolbar\" aria-label=\"Picked items\">\n <span className={styles.batchCount}>{pickedItems.length} picked</span>\n {actions.map((a) => {\n const key = NEEDS_YOU_ACTION_KEYS[a.kind];\n const partial = a.count < pickedItems.length;\n return (\n <Button\n key={a.kind}\n size=\"sm\"\n variant={a.destructive ? 'danger' : a.kind === 'approve' ? 'primary' : 'subtle'}\n disabled={!dispatchEnabled}\n onClick={() => onRun(pickedItems, a.kind)}\n aria-keyshortcuts={key}\n title={partial ? `${a.count} of ${pickedItems.length} picked can do this` : undefined}\n >\n {a.label}{partial ? ` ${a.count}` : ''}\n {key ? <kbd className={styles.inlineKey} aria-hidden=\"true\">{key}</kbd> : null}\n </Button>\n );\n })}\n <Button size=\"sm\" variant=\"ghost\" onClick={onClear}>Clear</Button>\n </div>\n );\n}\n\nfunction ItemDetail({\n item,\n now,\n seats,\n onAct,\n onOpenTarget,\n dispatchEnabled,\n chip,\n preview,\n}: {\n item: NeedsYouItem;\n now: number;\n /** The roster (bootstrap), for naming the item's seat and its run's model. */\n seats: readonly VerseSeat[];\n onAct: (item: NeedsYouItem, kind: NeedsYouActionKind) => void;\n onOpenTarget: (item: NeedsYouItem) => void;\n dispatchEnabled: boolean;\n /** A cloud PR's verdict and the checks behind it; null for everything else. */\n chip: TriageChip | null;\n preview: CloudPrPreview | null;\n}) {\n const targetLabel = TARGET_LABEL(item);\n const cloudTaskId = CLOUD_ITEM_RE.exec(item.id)?.[1] ?? null;\n const [evidenceOpen, setEvidenceOpen] = useState(false);\n // The same readable text as the row (needs-you-model needsYouRowView), with room for the whole title.\n const view = needsYouRowView(item, now);\n // \"Claude Max\" and \"Fable 5.1\", never `claude-a` / `claude:claude-fable-5-1`\n // — the ids ride in tooltips (monospace only when the id is all we have).\n const seat = item.subject.seatId ? seatDisplayName(seats, item.subject.seatId) : null;\n const model = view.run ? runModelDisplayName(seats, view.run.model, item.subject.seatId) : null;\n return (\n <article className={styles.item}>\n <header className={styles.itemHead}>\n {view.kindLabel ? <p className={styles.rowKind}>{view.kindLabel}</p> : null}\n <h3 className={styles.itemTitle} title={view.fullTitle}>{view.title}</h3>\n {view.run ? <NeedsYouRunFacts run={view.run} /> : null}\n </header>\n {view.detail ? <p className={styles.itemDetail}>{view.detail}</p> : null}\n {chip && preview ? (\n <section className={styles.verdict} aria-label=\"Gate preview\">\n <p className={styles.verdictHead}>\n <TriageChipView chip={{ ...chip, why: null }} />\n <span className={styles.mono} title={preview.headSha}>{preview.headSha.slice(0, 7)}</span>\n </p>\n <ul className={styles.checks}>\n {preview.checks.map((check) => (\n <li key={check.id} data-ok={check.ok ? 'true' : 'false'}>\n <span className={styles.checkMark} aria-hidden=\"true\">{check.ok ? '✓' : '×'}</span>\n <span className=\"visually-hidden\">{check.ok ? 'Passes: ' : 'Fails: '}</span>\n {check.text}\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n <dl className={styles.defs}>\n {view.repo ? (<><dt>Repo</dt><dd className={styles.repo} title={view.repoFull}>{view.repo}</dd></>) : null}\n {item.subject.pr ? (<><dt>Pull request</dt><dd>#{item.subject.pr}</dd></>) : null}\n {seat ? (<><dt>Seat</dt><dd className={seat.raw ? undefined : styles.mono} title={seat.raw}>{seat.text}</dd></>) : null}\n {model ? (<><dt>Model</dt><dd className={model.raw ? undefined : styles.mono} title={model.raw}>{model.text}</dd></>) : null}\n <dt>Raised</dt>\n <dd title={view.ageStamp}>{view.age}</dd>\n {item.expiresAt ? (<><dt>Closes</dt><dd className={styles.deadline}>{until(item.expiresAt, now)}</dd></>) : null}\n </dl>\n <div className={styles.itemActions}>\n {targetLabel ? (\n <Button variant=\"subtle\" size=\"sm\" onClick={() => onOpenTarget(item)} trailingIcon={item.target.kind === 'url' ? <IconExternalLink /> : undefined}>\n {targetLabel}\n </Button>\n ) : null}\n {cloudTaskId ? (\n <Button variant=\"subtle\" size=\"sm\" aria-haspopup=\"dialog\" onClick={() => setEvidenceOpen(true)}>\n Evidence\n </Button>\n ) : null}\n {item.actions.map((action) => {\n const key = NEEDS_YOU_ACTION_KEYS[action.kind];\n const needsDispatch = action.request !== null;\n return (\n <Button\n key={action.kind}\n size=\"sm\"\n variant={action.destructive ? 'danger' : action.kind === 'approve' ? 'primary' : 'subtle'}\n disabled={needsDispatch && !dispatchEnabled}\n onClick={() => onAct(item, action.kind)}\n aria-keyshortcuts={key}\n >\n {action.label}\n {key ? <kbd className={styles.inlineKey} aria-hidden=\"true\">{key}</kbd> : null}\n </Button>\n );\n })}\n </div>\n {!dispatchEnabled ? <p className={styles.caveat}>Read-only session — actions need `ashlr verse`.</p> : null}\n {evidenceOpen && cloudTaskId ? (\n <Suspense fallback={null}>\n <EvidenceTimeline taskId={cloudTaskId} title={view.title} open onClose={() => setEvidenceOpen(false)} now={now} />\n </Suspense>\n ) : null}\n </article>\n );\n}\n"],"file":"NeedsYouDrawer-N1cWJjpz.js"}
@@ -1,3 +0,0 @@
1
- import{a as e,c as t,n}from"./index-CyK31YRm.js";import{h as r,o as i}from"./global-y_exIyAP.js";import{t as a}from"./Dialog-BRd_B9OE.js";import{S as o,i as s,s as ee}from"./VerseConsoleApp-DXDv1aOi.js";import{B as c,D as l,M as u,i as d}from"./verse-model-JTuvRBVK.js";import{t as te}from"./Segmented-Wt1ATod9.js";import{c as f,i as ne,n as p}from"./context-queries-_9bFWb9v.js";import{a as m,v as h}from"./git-model-BFwAVbxF.js";import{C as g,_ as re,a as ie,b as _,c as v,g as y,h as b,i as ae,l as x,n as S,t as C,u as w,x as oe,y as T}from"./context-model-CDeyP0cA.js";import{n as se,t as ce}from"./SeatSelector-DpwNiX8F.js";import{r as le}from"./CapacityStrip-DKbKA_Aa.js";import{a as ue,m as de,o as fe,s as pe,v as me}from"./workspace-model-D-SLfads.js";import{n as he,t as ge}from"./folder-picker-C8zo3A56.js";var E=t(e(),1),D={option:`_option_qkog4_1`,toggle:`_toggle_qkog4_12`,details:`_details_qkog4_24`,nameLabel:`_nameLabel_qkog4_30`,name:`_name_qkog4_30`,hint:`_hint_qkog4_46`},O=n(),k=/^[a-z0-9][a-z0-9._-]{0,62}$/i;function A(e){return k.test(e)&&!e.endsWith(`.lock`)&&!e.includes(`..`)}function _e(e=new Date){let t=e=>String(e).padStart(2,`0`);return`chat-${t(e.getMonth()+1)}${t(e.getDate())}-${t(e.getHours())}${t(e.getMinutes())}`}function j(e){return e.toLowerCase().replace(/[^a-z0-9._-]+/g,`-`).replace(/^[^a-z0-9]+/,``).replace(/-{2,}/g,`-`).slice(0,63)}function ve({repoName:e,value:t,onChange:n,disabled:r=!1}){let i=(0,E.useId)(),a=(0,E.useId)(),o=A(t.name);return(0,O.jsxs)(`fieldset`,{className:D.option,disabled:r,children:[(0,O.jsxs)(`label`,{className:D.toggle,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:t.enabled,onChange:e=>n({enabled:e.target.checked,name:t.name||_e()}),"aria-describedby":a}),`Isolate in a worktree`]}),t.enabled?(0,O.jsxs)(`div`,{className:D.details,children:[(0,O.jsx)(`label`,{className:D.nameLabel,htmlFor:i,children:`Name`}),(0,O.jsx)(`input`,{id:i,className:D.name,value:t.name,onChange:e=>n({...t,name:j(e.target.value)}),spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,"aria-invalid":!o||void 0,"aria-describedby":a,maxLength:63})]}):null,(0,O.jsx)(`p`,{id:a,className:D.hint,children:t.enabled?o?(0,O.jsxs)(O.Fragment,{children:[`Creates `,(0,O.jsxs)(`code`,{children:[`~/.ashlr-worktrees/`,e,`/`,t.name]}),` on a new branch `,(0,O.jsxs)(`code`,{children:[`verse/`,t.name]}),`, from the current commit. Uncommitted changes stay in `,e,`.`]}):`Use letters, digits, dots, dashes or underscores.`:`The chat works on its own branch in its own folder, so your checkout is untouched.`})]})}async function ye(e,t){return t.enabled?(await h(e,t.name)).path:e}var M={width:`_width_stwix_1`,form:`_form_stwix_3`,field:`_field_stwix_4`,label:`_label_stwix_5`,optional:`_optional_stwix_13`,select:`_select_stwix_15`,input:`_input_stwix_16`,hint:`_hint_stwix_40`,error:`_error_stwix_41`,actions:`_actions_stwix_49`,cancel:`_cancel_stwix_50`,create:`_create_stwix_51`,capacity:`_capacity_stwix_72`,rootRow:`_rootRow_stwix_78`,removeRoot:`_removeRoot_stwix_87`,addRoot:`_addRoot_stwix_88`,context:`_context_stwix_108`,contextHead:`_contextHead_stwix_115`,contextBudget:`_contextBudget_stwix_122`,warn:`_warn_stwix_130`,fit:`_fit_stwix_137`,fitLine:`_fitLine_stwix_138`,fitBadge:`_fitBadge_stwix_147`,seatFacts:`_seatFacts_stwix_165`},N=`\0workspace:`,P=`\0other`,be=(e,t)=>t();function xe(e,t){return e?.seats[t]?.contextMode??`standard`}function Se(e,t,n){return e?c(e)?T(e,t):n!==`standard`&&u(e,`standard`)!==null?`standard`:null:null}function F(e){return e instanceof s?`Unlock actions with the mutation token to save a default.`:e instanceof i?e.detail??e.message:e instanceof Error?e.message:String(e)}function I({open:e,onClose:t,projects:n,seats:i,workspaces:s=[],initialProjectPath:l,initialSeat:u,busy:d=!1,error:te,onCreate:h,runMutation:re=be}){let ie=(0,E.useId)(),_=(0,E.useId)(),v=(0,E.useId)(),b=(0,E.useId)(),ae=(0,E.useId)(),x=(0,E.useRef)(null),[S,w]=(0,E.useState)(``),[oe,D]=(0,E.useState)(``),[k,j]=(0,E.useState)(null),[I,Ee]=(0,E.useState)(``),[De,L]=(0,E.useState)(null),[R,z]=(0,E.useState)([]),[Oe,ke]=(0,E.useState)([]),[Ae,je]=(0,E.useState)(!1),[Me,Ne]=(0,E.useState)(null),[B,Pe]=(0,E.useState)(null),[Fe,Ie]=(0,E.useState)(null),[Le,V]=(0,E.useState)(null),[Re,ze]=(0,E.useState)(!1),[Be,H]=(0,E.useState)(null),[Ve,U]=(0,E.useState)({status:`idle`}),[W,He]=(0,E.useState)({enabled:!1,name:``}),[Ue,We]=(0,E.useState)(!1),Ge=(0,E.useRef)(new Map),Ke=(0,E.useMemo)(()=>[...n].sort((e,t)=>Number(t.enrolled)-Number(e.enrolled)||e.name.localeCompare(t.name)),[n]),qe=(0,E.useRef)({initialProjectPath:l,initialSeat:u,projects:n,seats:i,sortedProjects:Ke});qe.current={initialProjectPath:l,initialSeat:u,projects:n,seats:i,sortedProjects:Ke},(0,E.useEffect)(()=>{if(!e)return;let{initialProjectPath:t,initialSeat:n,projects:r,seats:i,sortedProjects:a}=qe.current,o=t&&r.some(e=>e.path===t)?t:null;w(o??(t?P:a[0]?.path??P)),D(o?``:t??``),j(we(n??null,i)??se(i)),Ee(``),L(null),z([]),Ne(null),je(!1),ke([]),V(null),H(null),ze(!1),He({enabled:!1,name:_e()}),We(!1),Ge.current=new Map},[e]),(0,E.useEffect)(()=>{if(!e)return;let t=!1;return Ie(null),ne().then(e=>{t||Pe(e)}).catch(e=>{t||(Pe(null),Ie(F(e)))}),()=>{t=!0}},[e]),(0,E.useEffect)(()=>{e&&k===null&&i.length!==0&&j(we(u??null,i)??se(i))},[e,k,i,u]);let Je=r(o);(0,E.useEffect)(()=>{e&&Je()},[e,Je]);let Ye=(0,E.useMemo)(()=>{let e=new Map;for(let t of s)e.set(t.id,t);for(let t of Oe)e.has(t.id)||e.set(t.id,t);return[...e.values()]},[s,Oe]),G=S.startsWith(N),K=G?S.slice(11):null,q=G?``:S===P?oe.trim():S,J=k===null?null:i.find(e=>e.id===k.seatId)??null,Y=J===null||k===null?null:g(J,k.model),Xe=J?.health.state===`unavailable`,X=J!==null&&Y!==null?y(J,Y):null,Ze=!G&&q.length>0,Qe=Ze&&W.enabled,$e=!d&&!Ue&&(G||q.length>0)&&k!==null&&!Xe&&Y!==null&&X===null&&(!Qe||A(W.name)),et=K===null?null:Ye.find(e=>e.id===K)??null,Z=k===null?`standard`:xe(B,k.seatId),Q=T(Y,Le??Z),tt=c(Y),nt=T(Y,Z),rt=(0,E.useCallback)((e,t)=>k!==null&&e.id===k.seatId&&t.id===k.model?Q:T(t,xe(B,e.id)),[k,Q,B]);function it(e){j(e),V(null),H(null)}async function at(){if(k===null||J===null)return;let e=Q;ze(!0),H(null);try{let t=await re(`Saving ${C[e]} as the default context mode for ${J.label}.`,()=>f({seatId:k.seatId,contextMode:e}).then(e=>({ok:!0,prefs:e}),e=>({ok:!1,error:e})));if(t===null)return;if(!t.ok){H({ok:!1,text:F(t.error)});return}Pe(t.prefs),V(null),H({ok:!0,text:`New chats on ${J.label} now start in ${C[e]}.`})}catch(e){H({ok:!1,text:F(e)})}finally{ze(!1)}}let ot=(0,E.useMemo)(()=>{if(K!==null)return{key:`w:${K}`,query:{workspaceId:K}};if(G)return null;let e=de(q,R);if(!e.ok)return null;let[t,...n]=e.roots;return{key:`p:${e.roots.join(`
2
- `)}`,query:n.length>0?{projectPath:t,extraRoots:n}:{projectPath:t}}},[K,G,q,R]),st=(0,E.useRef)(ot);st.current=ot;let $=ot?.key??null;(0,E.useEffect)(()=>{let t=st.current;if(!e||$===null||t===null){U({status:`idle`});return}let n=Ge.current.get($);if(n){U({status:`ready`,key:$,fit:n});return}let r=!1;U({status:`loading`,key:$});let i=setTimeout(()=>{p(t.query).then(e=>{Ge.current.set($,e),r||U({status:`ready`,key:$,fit:e})}).catch(e=>{r||U({status:`error`,key:$,message:F(e)})})},350);return()=>{r=!0,clearTimeout(i)}},[e,$]);let ct=$===null?{status:`idle`}:Ve.status!==`idle`&&Ve.key===$?Ve:{status:`loading`,key:$},lt=ct.status===`ready`?ct.fit:null,ut=pe(J?.engine??null,1+R.length),dt=fe(J?.engine??null,et?.roots.length??0),ft=ge();async function pt(){let e=await he();e!==null&&e.length>0&&(w(P),D(e))}async function mt(e){let t=await he();t!==null&&t.length>0&&z(R.map((n,r)=>r===e?t:n))}async function ht(){let e=de(q,R);if(!e.ok){L(e.error);return}je(!0),L(null),Ne(null);try{let t=ue(e.roots[0]),n=await ee({name:t,roots:e.roots});ke(e=>[...e,n]),w(`${N}${n.id}`),Ne(`Saved. “${n.name}” is in this list from now on.`)}catch(e){L(e instanceof Error?e.message:String(e))}finally{je(!1)}}function gt(e){if(e.preventDefault(),!k){L(`Pick a seat first.`);return}if(Y===null){L(`Pick a model this seat offers.`);return}if(X!==null){L(`${Y.label} cannot run on this seat: ${X}.`);return}if(K!==null){L(null);let e={workspaceId:K,seatId:k.seatId,model:k.model};delete e.projectPath;let t=I.trim();t&&(e.title=t);let n=Se(Y,Q,Z);n!==null&&(e.contextMode=n),h(e);return}let t=de(q,R);if(!t.ok){L(t.error);return}if(Qe&&!A(W.name)){L(`Name the worktree with letters, digits, dots, dashes or underscores.`);return}L(null);let[n,...r]=t.roots,i={projectPath:n,seatId:k.seatId,model:k.model};r.length>0&&(i.extraRoots=r);let a=I.trim();a&&(i.title=a);let o=Se(Y,Q,Z);if(o!==null&&(i.contextMode=o),!Qe){h(i);return}_t(n,i)}async function _t(e,t){We(!0);try{let n=await re(`Creating the worktree ${W.name} (a new branch verse/${W.name}) for this chat.`,()=>ye(e,W).then(e=>({ok:!0,folder:e}),e=>({ok:!1,error:e})));if(n===null)return;if(!n.ok){L(`The worktree could not be created: ${m(n.error)}`);return}await h({...t,projectPath:n.folder})}catch(e){L(m(e))}finally{We(!1)}}let vt=De??te??null;return(0,O.jsx)(a,{open:e,onClose:t,titleId:ie,title:`New chat`,initialFocusRef:x,widthClassName:M.width,children:(0,O.jsxs)(`form`,{className:M.form,onSubmit:gt,noValidate:!0,children:[(0,O.jsxs)(`label`,{className:M.field,htmlFor:_,children:[(0,O.jsx)(`span`,{className:M.label,children:`Project`}),(0,O.jsxs)(`select`,{id:_,ref:x,value:S,onChange:e=>w(e.target.value),className:M.select,children:[Ye.length>0?(0,O.jsx)(`optgroup`,{label:`Saved projects`,children:Ye.map(e=>(0,O.jsxs)(`option`,{value:`${N}${e.id}`,children:[e.name,` — `,me(e)]},e.id))}):null,Ke.map(e=>(0,O.jsxs)(`option`,{value:e.path,children:[e.name,e.enrolled?``:` (recent)`,` — `,e.path]},e.path)),(0,O.jsx)(`option`,{value:P,children:`Other folder…`})]})]}),S===P&&!G?(0,O.jsxs)(`label`,{className:M.field,htmlFor:v,children:[(0,O.jsx)(`span`,{className:M.label,children:`Folder path`}),(0,O.jsxs)(`div`,{className:M.rootRow,children:[(0,O.jsx)(`input`,{id:v,className:M.input,value:oe,onChange:e=>D(e.target.value),placeholder:`/absolute/path/to/project`,autoComplete:`off`,spellCheck:!1}),ft?(0,O.jsx)(`button`,{type:`button`,className:M.addRoot,onClick:()=>void pt(),children:`Choose folder…`}):null]})]}):null,dt?(0,O.jsx)(`p`,{className:M.hint,children:dt}):null,G?null:(0,O.jsxs)(`div`,{className:M.field,children:[(0,O.jsxs)(`span`,{className:M.label,children:[`Also include `,(0,O.jsx)(`span`,{className:M.optional,children:`optional`})]}),R.map((e,t)=>(0,O.jsxs)(`div`,{className:M.rootRow,children:[(0,O.jsx)(`input`,{className:M.input,value:e,onChange:e=>z(R.map((n,r)=>r===t?e.target.value:n)),placeholder:`/absolute/path/to/another/folder`,"aria-label":`Additional folder ${t+1}`,autoComplete:`off`,spellCheck:!1}),ft?(0,O.jsx)(`button`,{type:`button`,className:M.removeRoot,onClick:()=>void mt(t),"aria-label":`Choose additional folder ${t+1}`,children:`Choose folder…`}):null,(0,O.jsx)(`button`,{type:`button`,className:M.removeRoot,onClick:()=>z(R.filter((e,n)=>n!==t)),"aria-label":`Remove additional folder ${t+1}`,children:`Remove`})]},t)),R.length+1<8?(0,O.jsx)(`button`,{type:`button`,className:M.addRoot,onClick:()=>z([...R,``]),children:`Add a folder`}):null,ut?(0,O.jsx)(`p`,{className:M.hint,children:ut}):null,(0,O.jsxs)(`div`,{className:M.rootRow,children:[(0,O.jsx)(`button`,{type:`button`,className:M.addRoot,onClick:()=>void ht(),disabled:Ae||q.length===0,children:Ae?`Saving…`:`Save as a project`}),(0,O.jsx)(`span`,{className:M.hint,children:`Keeps these folders in the list above. No chat needed first.`})]})]}),Me?(0,O.jsx)(`p`,{role:`status`,className:M.hint,children:Me}):null,Ze?(0,O.jsx)(ve,{repoName:Ce(q),value:W,onChange:He,disabled:Ue||d}):null,(0,O.jsx)(ce,{id:ae,seats:i,value:k,onChange:it,workingSetTokens:lt?.totalEstTokens??null,modeFor:rt}),J===null?null:(0,O.jsx)(`div`,{className:M.capacity,children:(0,O.jsx)(le,{seats:i,seatIds:[J.id],local:`each`,headline:!1,title:`${J.label} capacity`})}),J===null||Y===null?null:(0,O.jsx)(Te,{seat:J,option:Y,unavailableReason:X,mode:Q,offersModes:tt,savedDefault:nt,prefsLoaded:B!==null,prefsError:Fe,onMode:e=>{V(e),H(null)},savingDefault:Re,defaultNote:Be,onMakeDefault:()=>void at(),fitState:ct}),i.length===0?(0,O.jsx)(`p`,{className:M.hint,children:`No seats yet — connect an account or start Ollama, then reload.`}):null,(0,O.jsxs)(`label`,{className:M.field,htmlFor:b,children:[(0,O.jsxs)(`span`,{className:M.label,children:[`Title `,(0,O.jsx)(`span`,{className:M.optional,children:`optional`})]}),(0,O.jsx)(`input`,{id:b,className:M.input,value:I,onChange:e=>Ee(e.target.value),placeholder:`Defaults to your first message`,maxLength:120})]}),vt?(0,O.jsx)(`p`,{role:`alert`,className:M.error,children:vt}):null,(0,O.jsxs)(`div`,{className:M.actions,children:[(0,O.jsx)(`button`,{type:`button`,className:M.cancel,onClick:t,children:`Cancel`}),(0,O.jsx)(`button`,{type:`submit`,className:M.create,disabled:!$e,children:Ue?`Creating worktree…`:d?`Creating…`:`Start chat`})]})]})})}function Ce(e){let t=e.replace(/[\\/]+$/,``).split(/[\\/]/);return t[t.length-1]||e}function we(e,t){if(e===null)return null;let n=t.find(t=>t.id===e.seatId),r=g(n,e.model);return r===null?e:{seatId:e.seatId,model:r.id}}function Te({seat:e,option:t,unavailableReason:n,mode:r,offersModes:i,savedDefault:a,prefsLoaded:o,prefsError:s,onMode:ee,savingDefault:c,defaultNote:f,onMakeDefault:ne,fitState:p}){let m=(0,E.useId)(),h=ie(t,r),g=_(e),y=oe(e),T=p.status===`ready`?b(p.fit.totalEstTokens,t,r,e.engine):null;return(0,O.jsxs)(`div`,{className:M.context,role:`group`,"aria-labelledby":m,children:[(0,O.jsxs)(`div`,{className:M.contextHead,children:[(0,O.jsx)(`span`,{id:m,className:M.label,children:`Context`}),(0,O.jsx)(`span`,{className:M.contextBudget,children:h===null?`Window unknown`:`${l(h.contextWindow)} window${h.autoCompactAt===null?``:` · compacts ≈${l(h.autoCompactAt)}`}`})]}),h!==null&&t.windowSource?(0,O.jsxs)(`p`,{className:M.hint,children:[`Window `,d[t.windowSource],`.`]}):null,n===null?null:(0,O.jsxs)(`p`,{className:M.warn,children:[t.label,` cannot run on this seat: `,n,`. Pick another model.`]}),i?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(te,{"aria-label":`Context mode`,size:`sm`,value:r,onChange:ee,options:[`standard`,`expansive`].map(e=>{let n=u(t,e);return{value:e,label:n===null?C[e]:`${C[e]} · ≈${l(n.autoCompactAt??n.contextWindow)}`,ariaLabel:C[e]}})}),(0,O.jsx)(`p`,{className:M.hint,children:ae(e.engine,t,r)}),o&&r!==a?(0,O.jsx)(`div`,{className:M.rootRow,children:(0,O.jsx)(`button`,{type:`button`,className:M.addRoot,onClick:ne,disabled:c,children:c?`Saving…`:`Make ${C[r]} the default for ${e.label}`})}):null,f===null?null:(0,O.jsx)(`p`,{role:f.ok?`status`:`alert`,className:f.ok?M.hint:M.error,children:f.text}),s===null?null:(0,O.jsxs)(`p`,{className:M.hint,children:[`Saved defaults could not be read (`,s,`); this chat starts in `,C[r],` unless you pick otherwise.`]})]}):(0,O.jsx)(`p`,{className:M.hint,children:re(e.engine,t)}),(0,O.jsx)(`div`,{className:M.fit,"aria-live":`polite`,children:p.status===`idle`?null:p.status===`loading`?(0,O.jsx)(`p`,{className:M.hint,children:`Sizing the chosen folders…`}):p.status===`error`?(0,O.jsxs)(`p`,{className:M.hint,children:[`Could not size the chosen folders: `,p.message]}):T===null?(0,O.jsxs)(`p`,{className:M.hint,children:[`~`,l(p.fit.totalEstTokens),` tokens of tracked code; this model’s budget is unknown, so no fit is claimed.`]}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`p`,{className:M.fitLine,children:[(0,O.jsx)(`span`,{className:M.fitBadge,"data-fit":T,children:S[T]}),(0,O.jsx)(`span`,{children:v({verdict:T,tokens:p.fit.totalEstTokens,option:t,mode:r,floor:x(p.fit)})})]}),(0,O.jsx)(`p`,{className:M.hint,children:w(e.engine)})]})}),g===null&&y.length===0?null:(0,O.jsxs)(`ul`,{className:M.seatFacts,"aria-label":`${e.label} facts`,children:[g===null?null:(0,O.jsxs)(`li`,{children:[`Runs `,g,`.`]}),y.map(e=>(0,O.jsx)(`li`,{children:e},e))]})]})}export{I as NewChatDialog};
3
- //# sourceMappingURL=NewChatDialog-BqFTWgHU.js.map
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OnboardingFlow-DcDsguAM.js","assets/global-y_exIyAP.js","assets/VerseConsoleApp-DXDv1aOi.js","assets/RouteErrorBoundary-C8WGiixc.js","assets/format-BmH2yWL6.js","assets/format-DKrNjdwD.js","assets/verse-model-JTuvRBVK.js","assets/compaction-point-VL9oegWS.js","assets/CapacityStrip-DKbKA_Aa.js","assets/ProviderLogo-AwHn2sKm.js","assets/Tag-WSUIaMVy.js","assets/budget-queries-DFF-3ICg.js","assets/capacity-strip-model-5ViUgUlP.js","assets/seat-subscription-BhUUz7VL.js","assets/context-model-Bb15chFt.js","assets/transient-events-nTLhMBND.js","assets/useSeatsRefresh-q7Id9RcW.js","assets/Button-DtE0rlWD.js","assets/icons-CygCEFWs.js","assets/verse-icons-DsG1dOQx.js","assets/command-catalog-ffCAijVY.js","assets/AutonomyOffState-CpFYS3tQ.js","assets/nav-mimleI0R.js","assets/surface-data-C3UAQ4QX.js","assets/control-queries-CXtmZZH6.js","assets/mutations-CWlxEMEm.js","assets/clipboard-DkZdqlxf.js","assets/primitives-DMijqcu0.js","assets/focus-trap-ChZ5EFfM.js","assets/Dialog-BRd_B9OE.js","assets/Epistemic-fycQTBRO.js","assets/StatusBadge-CXG3iNL4.js","assets/RefreshIndicator-SEFZlMB2.js","assets/Segmented-Wt1ATod9.js","assets/EmptyState-DsN1H6MC.js","assets/Meter-b69LM0mU.js","assets/Slider-DaEDws-b.js","assets/Switch-BmCzfFnu.js","assets/Sheet-HkBOBMTT.js","assets/Select-By-V9lMc.js","assets/Input-CI0yBHmn.js","assets/usage-queries-pXxvy54x.js","assets/authority-model-8NeAEwAF.js","assets/copy-setup-BIp0iaiZ.js","assets/global-BlI2BYa1.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/VerseConsoleApp-Cxqr-3qc.css","assets/Tag-D0rAEciH.css","assets/CapacityStrip-Cc28CyWk.css","assets/Button-DrnKsvnQ.css","assets/AutonomyOffState-CmSSTHVe.css","assets/Dialog-tQ8kFulD.css","assets/Epistemic-OaGnEJkn.css","assets/StatusBadge-BVi0IBb9.css","assets/RefreshIndicator-CVv22U_j.css","assets/Segmented-BnjHbKzH.css","assets/EmptyState-B3YUPGaa.css","assets/Meter-CYt9KpM0.css","assets/Slider-AgAdMFpo.css","assets/Switch-CU044EaE.css","assets/Sheet-ChxlNivX.css","assets/Select-DSu5ghId.css","assets/Input-BQ3PR065.css","assets/OnboardingFlow-HUNQGQuU.css"])))=>i.map(i=>d[i]);
2
- import{a as e,c as t,n,t as r}from"./index-CyK31YRm.js";import{t as i}from"./useOnboarding-Bk0VnkxQ.js";var a=t(e(),1),o=n(),s=(0,a.lazy)(()=>r(()=>import(`./OnboardingFlow-DcDsguAM.js`).then(e=>({default:e.OnboardingFlow})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63])));function c(){return i().open?(0,o.jsx)(s,{}):null}export{c as OnboardingGate};
3
- //# sourceMappingURL=OnboardingGate-BZafM1Vf.js.map
@@ -1,2 +0,0 @@
1
- import{a as e,c as t,n}from"./index-CyK31YRm.js";import{M as r,O as i,c as a,i as o,o as s}from"./global-y_exIyAP.js";import{L as c,R as l,Xt as ee,Yt as u,kt as te,nn as d}from"./VerseConsoleApp-DXDv1aOi.js";import{t as f}from"./MessageMarkdown-BCe4TsXk.js";import{t as ne}from"./Segmented-Wt1ATod9.js";import{n as p,t as m}from"./Button-DtE0rlWD.js";import{C as h,c as re,g as ie}from"./icons-CygCEFWs.js";import{t as g}from"./EmptyState-DsN1H6MC.js";import{a as ae,c as oe,d as se,i as ce,l as le,n as ue,o as de,s as _,t as fe}from"./terminal-icons-BwgQTQP0.js";import{t as pe}from"./pane-chrome.module-D7o-fVd0.js";var v=t(e(),1),y=`/api/verse/preview/ticket`;function b(e){return new URLSearchParams(e).toString()}var x={targets:(e,t)=>a(`${ee}?${b({sessionId:e})}`,t),ticket:(e,t)=>a(`${y}?${b({sessionId:e,path:t})}`),text:async(e,t)=>{let n=`${u}?${b({sessionId:e,path:t})}`,a=await fetch(n,{credentials:`same-origin`,headers:{"x-ashlr-read-client":i()}});if(a.status===401)throw r(),new s(`Read session expired.`,401,n);if(!a.ok)throw new s(`GET ${n} failed (HTTP ${a.status}).`,a.status,n);return a.text()}};function S(e){return e.port||(e.protocol===`https:`?`443`:`80`)}function C(e,t){let n=e.trim();if(n.length===0||n.length>2048||/\s/.test(n))return{kind:`invalid`};let r=n;if(/^:?\d{2,5}$/.test(n))r=`http://localhost:${n.replace(`:`,``)}/`;else if(/^(?:localhost|127\.0\.0\.1)(?::\d{1,5})?(?:[/?#].*)?$/i.test(n))r=`http://${n}`;else if(!/^[a-z][a-z0-9+.-]*:/i.test(n)){if(!/^[\w-]+(?:\.[\w-]+)+(?::\d{1,5})?(?:[/?#].*)?$/.test(n))return{kind:`invalid`};r=`https://${n}`}let i;try{i=new URL(r)}catch{return{kind:`invalid`}}if(i.protocol!==`http:`&&i.protocol!==`https:`)return{kind:`invalid`};if(d(i.href)){let e=null;try{e=new URL(t)}catch{e=null}return e&&(e.hostname===`localhost`||e.hostname===`127.0.0.1`)&&S(e)===S(i)?{kind:`self`,url:i.href}:{kind:`loopback`,url:i.href}}return i.username||i.password?{kind:`invalid`}:{kind:`external`,url:i.href}}function w(e){try{let t=new URL(e),n=t.pathname===`/`?``:t.pathname;return`${t.host}${n}${t.search}`}catch{return e}}function T(e){return!Number.isFinite(e)||e<0?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(+(e<10240))} KB`:`${(e/1048576).toFixed(1)} MB`}var E={pane:`_pane_k6hui_8`,strip:`_strip_k6hui_19`,tabs:`_tabs_k6hui_28`,tab:`_tab_k6hui_28`,tabButton:`_tabButton_k6hui_60`,tabClose:`_tabClose_k6hui_78`,noticeClose:`_noticeClose_k6hui_79`,external:`_external_k6hui_80`,tabTitle:`_tabTitle_k6hui_85`,newTab:`_newTab_k6hui_118`,toolbar:`_toolbar_k6hui_126`,nav:`_nav_k6hui_128`,addressForm:`_addressForm_k6hui_134`,address:`_address_k6hui_134`,addressNote:`_addressNote_k6hui_177`,notice:`_notice_k6hui_79`,waiting:`_waiting_k6hui_179`,waitingText:`_waitingText_k6hui_201`,pulse:`_pulse_k6hui_208`,body:`_body_k6hui_234`,loading:`_loading_k6hui_243`,stage:`_stage_k6hui_250`,frame:`_frame_k6hui_262`,frameHint:`_frameHint_k6hui_278`,imageStage:`_imageStage_k6hui_291`,image:`_image_k6hui_291`,markdown:`_markdown_k6hui_308`,launcher:`_launcher_k6hui_316`,section:`_section_k6hui_322`,sectionTitle:`_sectionTitle_k6hui_328`,muted:`_muted_k6hui_339`,rows:`_rows_k6hui_347`,row:`_row_k6hui_347`,dot:`_dot_k6hui_364`,fileIcon:`_fileIcon_k6hui_376`,rowMain:`_rowMain_k6hui_378`,rowTitle:`_rowTitle_k6hui_385`,rowMeta:`_rowMeta_k6hui_395`,rowCommand:`_rowCommand_k6hui_405`},D=n(),me={api:x,origin:()=>window.location.origin,now:()=>Date.now()},he=12e4,ge=2e3,_e=5e3,O=`ashlr.verse.preview.v1:`,k={"launch-json":`launch.json`,"package-json":`package.json`,listening:`running`},ve={html:`HTML`,md:`Markdown`,svg:`SVG`,image:`Image`,pdf:`PDF`},A=0,j=0,M=()=>`p${++j}`;function N(){A=0,j=0}function P(e){let t=e.toLowerCase().slice(e.lastIndexOf(`.`));return t===`.html`||t===`.htm`?`html`:t===`.md`||t===`.markdown`?`md`:t===`.svg`?`svg`:t===`.pdf`?`pdf`:[`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.avif`,`.bmp`,`.ico`].includes(t)?`image`:null}function F(e){return e.slice(e.lastIndexOf(`/`)+1)||e}function ye(e){return e.kind===`launcher`?`New tab`:e.kind===`url`?w(e.history[e.index]??``):F(e.path)}function be(e){return e?.kind===`url`?e.history[e.index]??null:null}function xe(e,t){try{let n=localStorage.getItem(`${O}${e}`);if(!n)return null;let r=JSON.parse(n),i=[],a=null;return Array.isArray(r.tabs)&&r.tabs.slice(0,12).forEach((e,n)=>{if(!e||typeof e!=`object`)return;let o=e,s=M();if(o.url&&typeof o.url==`string`&&C(o.url,t).kind===`loopback`)i.push({id:s,kind:`url`,history:[o.url],index:0,reloadKey:0});else if(typeof o.path==`string`){let e=P(o.path);if(e)i.push({id:s,kind:`artifact`,path:o.path,artifactKind:e,reloadKey:0});else return}else return;r.active===n&&(a=s)}),{tabs:i,activeId:a??i.at(-1)?.id??null,device:r.device===`phone`?`phone`:`desktop`}}catch{return null}}function Se(e,t,n,r){try{let i=t.filter(e=>e.kind!==`launcher`);localStorage.setItem(`${O}${e}`,JSON.stringify({tabs:i.map(e=>e.kind===`url`?{url:e.history[e.index]}:e.kind===`artifact`?{path:e.path}:{}),active:i.findIndex(e=>e.id===n),device:r}))}catch{}}function I({sessionId:e,roots:t,request:n,onOpenTerminal:r,visible:i,deps:a}){let o=(0,v.useMemo)(()=>({...me,...a}),[a]),ee=l(),u=i&&ee,d=te().compact,[f]=(0,v.useState)(()=>xe(e,o.origin())),[g,_]=(0,v.useState)(()=>f?.tabs??[]),[y,b]=(0,v.useState)(()=>f?.activeId??null),[x,S]=(0,v.useState)(()=>f?.device??`desktop`),[T,he]=(0,v.useState)(e),[O,k]=(0,v.useState)(null),[ve,j]=(0,v.useState)(null),[N,F]=(0,v.useState)(``),[I,L]=(0,v.useState)(null),[R,z]=(0,v.useState)(null),[Ee,B]=(0,v.useState)(null),[V,H]=(0,v.useState)(()=>new Map),[De,Oe]=(0,v.useState)(()=>o.now()),U=(0,v.useRef)(!0),W=(0,v.useRef)(new Map),ke=(0,v.useRef)(null);if(T!==e){let t=xe(e,o.origin());he(e),_(t?.tabs??[]),b(t?.activeId??null),k(null),z(null),B(null)}let G=g.find(e=>e.id===y)??null,K=be(G),q=!G||G.kind===`launcher`;(0,v.useEffect)(()=>(U.current=!0,()=>{U.current=!1}),[]),(0,v.useEffect)(()=>{T===e&&Se(e,g,y,x)},[T,e,g,y,x]),(0,v.useEffect)(()=>{F(G?.kind===`url`?G.history[G.index]??``:G?.kind===`artifact`?G.path:``),L(null)},[G]);let J=(0,v.useCallback)(async()=>{try{let t=await o.api.targets(e);return U.current?(k(t),j(null),t):null}catch(e){return U.current&&j(e instanceof s&&e.detail?e.detail:`Dev servers and files could not be listed.`),null}},[o.api,e]),Ae=(0,v.useRef)(null);(0,v.useEffect)(()=>{u&&Ae.current!==e&&(Ae.current=e,J())},[u,e,J]),c(()=>{J()},R?ge:_e,{enabled:i&&(R!==null||q)});let Y=(0,v.useCallback)((e,t={})=>{B(null);let n=g.find(e=>e.id===y);if(!t.newTab&&n?.kind===`launcher`){_(g.map(t=>t.id===n.id?{id:t.id,kind:`url`,history:[e],index:0,reloadKey:0}:t));return}let r=g.find(t=>t.kind===`url`&&t.history[t.index]===e);if(r&&!t.newTab){b(r.id);return}let i=M();_([...g,{id:i,kind:`url`,history:[e],index:0,reloadKey:0}]),b(i)},[g,y]),je=(0,v.useCallback)(e=>{if(!G||G.kind!==`url`){Y(e);return}_(t=>t.map(t=>{if(t.id!==G.id||t.kind!==`url`)return t;let n=[...t.history.slice(0,t.index+1),e].slice(-50);return{...t,history:n,index:n.length-1}}))},[G,Y]),X=(0,v.useCallback)((e,t)=>{B(null);let n=g.find(t=>t.kind===`artifact`&&t.path===e);if(n){b(n.id);return}let r=g.find(e=>e.id===y);if(r?.kind===`launcher`){_(g.map(n=>n.id===r.id?{id:n.id,kind:`artifact`,path:e,artifactKind:t,reloadKey:0}:n));return}let i=M();_([...g,{id:i,kind:`artifact`,path:e,artifactKind:t,reloadKey:0}]),b(i)},[g,y]),Me=()=>{let e=g.find(e=>e.kind===`launcher`);if(e)b(e.id);else{let e=M();_(t=>[...t,{id:e,kind:`launcher`}]),b(e)}J()},Ne=e=>{let t=g.findIndex(t=>t.id===e.id),n=g.filter(t=>t.id!==e.id);_(n),H(t=>{let n=new Map(t);for(let r of t.keys())r.startsWith(`${e.id}:`)&&n.delete(r);return n}),y===e.id&&b((n[t]??n[t-1]??null)?.id??null)},Pe=(e,t)=>{let n=-1;if(e.key===`ArrowRight`?n=(t+1)%g.length:e.key===`ArrowLeft`?n=(t-1+g.length)%g.length:e.key===`Home`?n=0:e.key===`End`&&(n=g.length-1),n<0)return;e.preventDefault();let r=g[n];b(r.id),W.current.get(r.id)?.focus()},Fe=(0,v.useCallback)(e=>{B(null),r({root:e.root,devServerId:e.id}),z({server:e,since:o.now()})},[o,r]),Z=(0,v.useCallback)(e=>{e.running?Y(e.url):Fe(e)},[Y,Fe]);(0,v.useEffect)(()=>{if(R&&O){if(O.devServers.find(e=>e.running&&(e.id===R.server.id||e.port===R.server.port))){z(null),Y(R.server.url);return}o.now()-R.since>12e4&&(z(null),B(`Nothing answered on port ${R.server.port} within 2 minutes. Check the terminal for errors.`))}},[O,R,Y,o,De]),(0,v.useEffect)(()=>{if(!R)return;let e=setInterval(()=>Oe(o.now()),1e3);return()=>clearInterval(e)},[R,o]);let Q=(0,v.useCallback)(async e=>{if(e.url){let t=C(e.url,o.origin());t.kind===`loopback`?Y(t.url):L(t);return}if(e.artifactPath){let t=O?.artifacts.find(t=>t.path===e.artifactPath)?.kind??P(e.artifactPath);t?X(e.artifactPath,t):B(`That file cannot be previewed.`);return}if(e.devServerId){let t=(await J()??O)?.devServers.find(t=>t.id===e.devServerId);t?Z(t):B(`That dev server is no longer listed for this chat.`)}},[o,X,Z,Y,J,O]);(0,v.useEffect)(()=>{!n||n.nonce<=A||(A=n.nonce,Q(n))},[n,Q]);let $=G?.kind===`artifact`?`${G.id}:${G.reloadKey}`:null;(0,v.useEffect)(()=>{if(!u||!G||G.kind!==`artifact`||!$||V.has($))return;let t=G,n=$;H(e=>new Map(e).set(n,{status:`loading`})),(t.artifactKind===`md`?o.api.text(e,t.path).then(e=>({status:`text`,text:e})):o.api.ticket(e,t.path).then(e=>({status:`frame`,src:e.url}))).then(e=>{U.current&&H(t=>new Map(t).set(n,e))},e=>{let t=e instanceof s&&e.status===404?`This file is no longer in the chat's folder.`:e instanceof s&&e.status===413?`This file is larger than 5 MB, too large to preview.`:`This file could not be loaded.`;U.current&&H(e=>new Map(e).set(n,{status:`error`,message:t}))})},[u,G,$,V,o.api,e]);let Ie=e=>{G&&G.kind===`url`&&_(t=>t.map(t=>t.id===G.id&&t.kind===`url`?{...t,index:Math.min(t.history.length-1,Math.max(0,t.index+e))}:t))},Le=()=>{if(G){if(G.kind===`launcher`){J();return}_(e=>e.map(e=>e.id===G.id&&e.kind!==`launcher`?{...e,reloadKey:e.reloadKey+1}:e))}},Re=e=>{e.preventDefault();let t=C(N,o.origin());if(t.kind===`loopback`){L(null),G?.kind===`url`?je(t.url):Y(t.url);return}L(t)},ze=e=>{e.key===`Escape`&&(e.preventDefault(),F(K??(G?.kind===`artifact`?G.path:``)),L(null),e.currentTarget.blur())},Be=G?.kind===`url`&&G.index>0,Ve=G?.kind===`url`&&G.index<G.history.length-1;return(0,D.jsxs)(`div`,{className:E.pane,"data-compact":d||void 0,children:[(0,D.jsxs)(`div`,{className:E.strip,children:[(0,D.jsx)(`div`,{className:E.tabs,role:`tablist`,"aria-label":`Previews`,children:g.map((e,t)=>{let n=e.id===y,r=ye(e);return(0,D.jsxs)(`div`,{className:E.tab,"data-selected":n||void 0,role:`presentation`,children:[(0,D.jsxs)(`button`,{ref:t=>{t?W.current.set(e.id,t):W.current.delete(e.id)},type:`button`,role:`tab`,id:`preview-tab-${e.id}`,"aria-selected":n,"aria-controls":`preview-panel`,tabIndex:n?0:-1,className:E.tabButton,title:e.kind===`url`?e.history[e.index]:e.kind===`artifact`?e.path:`Choose what to preview`,onClick:()=>b(e.id),onKeyDown:e=>Pe(e,t),children:[e.kind===`artifact`?(0,D.jsx)(ae,{size:12}):e.kind===`url`?(0,D.jsx)(se,{size:12}):(0,D.jsx)(oe,{size:12}),(0,D.jsx)(`span`,{className:E.tabTitle,children:r})]}),(0,D.jsx)(`button`,{type:`button`,className:E.tabClose,"aria-label":`Close preview ${r}`,title:`Close`,onClick:()=>Ne(e),children:(0,D.jsx)(h,{size:12})})]},e.id)})}),(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(ie,{}),"aria-label":`New preview tab`,title:`New preview tab`,className:E.newTab,onClick:Me})]}),(0,D.jsxs)(`div`,{className:`${pe.header} ${E.toolbar}`,children:[(0,D.jsxs)(`div`,{className:E.nav,children:[(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(fe,{}),"aria-label":`Back`,title:`Back`,disabled:!Be,onClick:()=>Ie(-1)}),(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(ue,{}),"aria-label":`Forward`,title:`Forward`,disabled:!Ve,onClick:()=>Ie(1)}),(0,D.jsx)(p,{variant:`ghost`,size:`sm`,icon:(0,D.jsx)(le,{}),"aria-label":q?`Refresh the list`:`Reload`,title:q?`Refresh the list`:`Reload`,disabled:!G&&q&&O===null,onClick:Le})]}),(0,D.jsx)(`form`,{className:E.addressForm,onSubmit:Re,role:`search`,"aria-label":`Preview address`,children:(0,D.jsx)(`input`,{ref:ke,className:E.address,value:N,onChange:e=>F(e.target.value),onKeyDown:ze,onFocus:e=>e.currentTarget.select(),placeholder:`localhost:5173`,"aria-label":`Address`,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,inputMode:`url`,readOnly:G?.kind===`artifact`})}),(0,D.jsxs)(`div`,{className:pe.actions,children:[d?null:(0,D.jsx)(ne,{"aria-label":`Frame width`,size:`sm`,value:x,onChange:S,options:[{value:`desktop`,label:(0,D.jsx)(ce,{size:14}),ariaLabel:`Desktop width`},{value:`phone`,label:(0,D.jsx)(de,{size:14}),ariaLabel:`375 px width`}]}),K?(0,D.jsx)(`a`,{className:E.external,href:K,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open in browser`,title:`Open in browser`,children:(0,D.jsx)(re,{})}):(0,D.jsx)(`span`,{className:E.external,"data-placeholder":`true`,"aria-hidden":`true`})]})]}),I?(0,D.jsx)(Ce,{note:I,onDismiss:()=>L(null)}):null,R?(0,D.jsxs)(`div`,{className:E.waiting,role:`status`,children:[(0,D.jsx)(`span`,{className:E.pulse,"aria-hidden":`true`}),(0,D.jsxs)(`span`,{className:E.waitingText,children:[`Starting `,(0,D.jsx)(`code`,{children:R.server.command??R.server.label}),` — waiting for `,w(R.server.url),` · `,Math.max(0,Math.round((De-R.since)/1e3)),`s`]}),(0,D.jsx)(m,{size:`sm`,variant:`ghost`,onClick:()=>z(null),children:`Stop waiting`})]}):null,Ee?(0,D.jsxs)(`div`,{className:E.notice,role:`alert`,children:[(0,D.jsx)(`span`,{children:Ee}),(0,D.jsx)(`button`,{type:`button`,className:E.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:()=>B(null),children:(0,D.jsx)(h,{size:12})})]}):null,(0,D.jsx)(`div`,{className:E.body,id:`preview-panel`,role:`tabpanel`,"aria-labelledby":G?`preview-tab-${G.id}`:void 0,children:q?(0,D.jsx)(Te,{targets:O,error:ve,roots:t,onOpenServer:Z,onOpenArtifact:e=>X(e.path,e.kind),onRetry:()=>void J(),onOpenTerminal:()=>r(t[0]?{root:t[0]}:{}),waitingId:R?.server.id??null}):G?.kind===`url`?(0,D.jsxs)(`div`,{className:E.stage,"data-device":x,children:[(0,D.jsx)(`iframe`,{className:E.frame,src:G.history[G.index],title:`Preview of ${ye(G)}`,sandbox:`allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-downloads`,referrerPolicy:`no-referrer`},`${G.id}:${G.index}:${G.reloadKey}`),(0,D.jsxs)(`p`,{className:E.frameHint,children:[`Blank page? Some servers refuse to be framed.`,` `,(0,D.jsx)(`a`,{href:G.history[G.index],target:`_blank`,rel:`noopener noreferrer`,children:`Open in browser ↗`})]})]}):G?.kind===`artifact`?(0,D.jsx)(we,{tab:G,content:$?V.get($)??{status:`loading`}:{status:`loading`},device:x,onRetry:Le}):null})]})}function Ce({note:e,onDismiss:t}){return(0,D.jsxs)(`div`,{className:E.addressNote,role:`status`,children:[e.kind===`external`?(0,D.jsxs)(`span`,{children:[`Only local dev servers open here.`,` `,(0,D.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:`Open in browser ↗`})]}):e.kind===`self`?(0,D.jsx)(`span`,{children:`That address is Verse itself.`}):(0,D.jsxs)(`span`,{children:[`Enter a local address, like `,(0,D.jsx)(`code`,{children:`localhost:5173`}),`.`]}),(0,D.jsx)(`button`,{type:`button`,className:E.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:t,children:(0,D.jsx)(h,{size:12})})]})}function we({tab:e,content:t,device:n,onRetry:r}){return t.status===`loading`?(0,D.jsxs)(`div`,{className:E.loading,"aria-busy":`true`,children:[(0,D.jsx)(o,{width:`50%`}),(0,D.jsx)(o,{width:`80%`})]}):t.status===`error`?(0,D.jsx)(g,{compact:!0,tone:`error`,title:`Preview unavailable`,body:t.message,action:(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:r,children:`Try again`})}):t.status===`text`?(0,D.jsx)(`article`,{className:E.markdown,"aria-label":e.path,children:(0,D.jsx)(f,{text:t.text})}):e.artifactKind===`image`?(0,D.jsx)(`div`,{className:E.imageStage,children:(0,D.jsx)(`img`,{className:E.image,src:t.src,alt:F(e.path)})}):(0,D.jsx)(`div`,{className:E.stage,"data-device":e.artifactKind===`pdf`?`desktop`:n,children:(0,D.jsx)(`iframe`,{className:E.frame,src:t.src,title:`Preview of ${e.path}`,...e.artifactKind===`pdf`?{}:{sandbox:`allow-scripts`},referrerPolicy:`no-referrer`},t.src)})}function Te({targets:e,error:t,roots:n,onOpenServer:r,onOpenArtifact:i,onRetry:a,onOpenTerminal:s,waitingId:c}){if(!e)return t?(0,D.jsx)(g,{compact:!0,tone:`error`,title:`Could not list what to preview`,body:t,action:(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:a,children:`Try again`})}):(0,D.jsxs)(`div`,{className:E.loading,"aria-busy":`true`,children:[(0,D.jsx)(o,{width:`35%`}),(0,D.jsx)(o,{width:`70%`}),(0,D.jsx)(o,{width:`60%`})]});let l=n.length>1;return e.devServers.length===0&&e.artifacts.length===0?(0,D.jsx)(g,{compact:!0,icon:(0,D.jsx)(oe,{size:20}),title:`Nothing to preview yet`,body:`Start a dev server in the terminal, or ask for an HTML report. Local servers and the files this chat writes show up here.`,action:(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:s,children:`Open a terminal`})}):(0,D.jsxs)(`div`,{className:E.launcher,children:[(0,D.jsxs)(`section`,{className:E.section,"aria-labelledby":`preview-servers-title`,children:[(0,D.jsx)(`h3`,{className:E.sectionTitle,id:`preview-servers-title`,children:`Dev servers`}),e.devServers.length===0?(0,D.jsxs)(`p`,{className:E.muted,children:[`No dev server found in this chat's folders. Add one to `,(0,D.jsx)(`code`,{children:`.claude/launch.json`}),`, or start it in the terminal.`]}):(0,D.jsx)(`ul`,{className:E.rows,children:e.devServers.map(e=>(0,D.jsxs)(`li`,{className:E.row,children:[(0,D.jsx)(`span`,{className:E.dot,"data-running":e.running||void 0,"aria-hidden":`true`}),(0,D.jsxs)(`span`,{className:E.rowMain,children:[(0,D.jsx)(`span`,{className:E.rowTitle,title:e.label,children:e.label}),(0,D.jsxs)(`span`,{className:E.rowMeta,title:`${w(e.url)} · ${e.running?`running`:`stopped`} · ${k[e.source]}${l?` · ${e.root}`:``}`,children:[w(e.url),` · `,e.running?`running`:`stopped`,` · `,k[e.source],l?` · ${F(e.root)}`:``]}),!e.running&&e.command&&e.command!==e.label?(0,D.jsx)(`code`,{className:E.rowCommand,title:e.command,children:e.command}):null]}),e.running?(0,D.jsx)(m,{size:`sm`,variant:`subtle`,onClick:()=>r(e),"aria-label":`Open ${e.label}`,children:`Open`}):(0,D.jsx)(m,{size:`sm`,variant:`subtle`,icon:(0,D.jsx)(_,{size:12}),busy:c===e.id,onClick:()=>r(e),"aria-label":`Start ${e.label}`,title:`Runs ${e.command??e.label} in a terminal tab`,children:`Start`})]},e.id))})]}),(0,D.jsxs)(`section`,{className:E.section,"aria-labelledby":`preview-files-title`,children:[(0,D.jsx)(`h3`,{className:E.sectionTitle,id:`preview-files-title`,children:`This chat's files`}),e.artifacts.length===0?(0,D.jsx)(`p`,{className:E.muted,children:`Ask the chat for a report or a page: HTML, Markdown, SVG, images and PDFs it writes appear here.`}):(0,D.jsx)(`ul`,{className:E.rows,children:e.artifacts.map(e=>{let t=e.bytes>5242880;return(0,D.jsxs)(`li`,{className:E.row,children:[(0,D.jsx)(ae,{size:14,className:E.fileIcon}),(0,D.jsxs)(`span`,{className:E.rowMain,children:[(0,D.jsx)(`span`,{className:E.rowTitle,title:e.path,children:e.path}),(0,D.jsxs)(`span`,{className:E.rowMeta,children:[ve[e.kind],` · `,T(e.bytes)]})]}),(0,D.jsx)(m,{size:`sm`,variant:`subtle`,disabled:t,title:t?`Larger than 5 MB`:void 0,onClick:()=>i(e),"aria-label":`Open ${e.path}`,children:`Open`})]},e.path)})})]})]})}export{he as PREVIEW_START_TIMEOUT_MS,I as PreviewPane,N as resetPreviewPaneForTest};
2
- //# sourceMappingURL=PreviewPane-zT3gK9TD.js.map