@agimon-ai/po-web-dashboard 0.0.0-alpha.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 (924) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +10 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/core.cjs +222 -0
  5. package/dist/core.d.mts +21 -0
  6. package/dist/core.mjs +21 -0
  7. package/dist/index.cjs +546 -0
  8. package/dist/index.d.mts +81 -0
  9. package/dist/index.mjs +81 -0
  10. package/dist/testing.cjs +18 -0
  11. package/dist/testing.d.mts +6 -0
  12. package/dist/testing.mjs +6 -0
  13. package/dist/types/auth.cjs +20 -0
  14. package/dist/types/auth.cjs.map +1 -0
  15. package/dist/types/auth.d.mts +160 -0
  16. package/dist/types/auth.d.mts.map +1 -0
  17. package/dist/types/auth.mjs +19 -0
  18. package/dist/types/auth.mjs.map +1 -0
  19. package/dist/types/bridge.d.mts +18 -0
  20. package/dist/types/bridge.d.mts.map +1 -0
  21. package/dist/types/devProxy.cjs +41 -0
  22. package/dist/types/devProxy.cjs.map +1 -0
  23. package/dist/types/devProxy.d.mts +54 -0
  24. package/dist/types/devProxy.d.mts.map +1 -0
  25. package/dist/types/devProxy.mjs +39 -0
  26. package/dist/types/devProxy.mjs.map +1 -0
  27. package/dist/types/hub.cjs +220 -0
  28. package/dist/types/hub.cjs.map +1 -0
  29. package/dist/types/hub.d.mts +447 -0
  30. package/dist/types/hub.d.mts.map +1 -0
  31. package/dist/types/hub.mjs +179 -0
  32. package/dist/types/hub.mjs.map +1 -0
  33. package/dist/types/media.cjs +75 -0
  34. package/dist/types/media.cjs.map +1 -0
  35. package/dist/types/media.d.mts +22 -0
  36. package/dist/types/media.d.mts.map +1 -0
  37. package/dist/types/media.mjs +70 -0
  38. package/dist/types/media.mjs.map +1 -0
  39. package/dist/types/notification.cjs +19 -0
  40. package/dist/types/notification.cjs.map +1 -0
  41. package/dist/types/notification.d.mts +10 -0
  42. package/dist/types/notification.d.mts.map +1 -0
  43. package/dist/types/notification.mjs +19 -0
  44. package/dist/types/notification.mjs.map +1 -0
  45. package/dist/types/remoteAccess.cjs +92 -0
  46. package/dist/types/remoteAccess.cjs.map +1 -0
  47. package/dist/types/remoteAccess.d.mts +214 -0
  48. package/dist/types/remoteAccess.d.mts.map +1 -0
  49. package/dist/types/remoteAccess.mjs +68 -0
  50. package/dist/types/remoteAccess.mjs.map +1 -0
  51. package/dist/types/session.cjs +23 -0
  52. package/dist/types/session.cjs.map +1 -0
  53. package/dist/types/session.d.mts +29 -0
  54. package/dist/types/session.d.mts.map +1 -0
  55. package/dist/types/session.mjs +18 -0
  56. package/dist/types/session.mjs.map +1 -0
  57. package/dist/types/sessionMcp.d.mts +56 -0
  58. package/dist/types/sessionMcp.d.mts.map +1 -0
  59. package/dist/types/settings.cjs +18 -0
  60. package/dist/types/settings.cjs.map +1 -0
  61. package/dist/types/settings.d.mts +126 -0
  62. package/dist/types/settings.d.mts.map +1 -0
  63. package/dist/types/settings.mjs +12 -0
  64. package/dist/types/settings.mjs.map +1 -0
  65. package/dist/types.cjs +101 -0
  66. package/dist/types.d.mts +11 -0
  67. package/dist/types.mjs +9 -0
  68. package/dist/views.cjs +120 -0
  69. package/dist/views.d.mts +56 -0
  70. package/dist/views.mjs +56 -0
  71. package/dist/web/components/MascotMark.cjs +18 -0
  72. package/dist/web/components/MascotMark.cjs.map +1 -0
  73. package/dist/web/components/MascotMark.d.mts +9 -0
  74. package/dist/web/components/MascotMark.d.mts.map +1 -0
  75. package/dist/web/components/MascotMark.mjs +18 -0
  76. package/dist/web/components/MascotMark.mjs.map +1 -0
  77. package/dist/web/components/PluginSurface.cjs +15 -0
  78. package/dist/web/components/PluginSurface.cjs.map +1 -0
  79. package/dist/web/components/PluginSurface.d.mts +13 -0
  80. package/dist/web/components/PluginSurface.d.mts.map +1 -0
  81. package/dist/web/components/PluginSurface.mjs +15 -0
  82. package/dist/web/components/PluginSurface.mjs.map +1 -0
  83. package/dist/web/components/QrCode.cjs +37 -0
  84. package/dist/web/components/QrCode.cjs.map +1 -0
  85. package/dist/web/components/QrCode.d.mts +22 -0
  86. package/dist/web/components/QrCode.d.mts.map +1 -0
  87. package/dist/web/components/QrCode.mjs +37 -0
  88. package/dist/web/components/QrCode.mjs.map +1 -0
  89. package/dist/web/components/Remote.fixture.cjs +73 -0
  90. package/dist/web/components/Remote.fixture.cjs.map +1 -0
  91. package/dist/web/components/Remote.fixture.mjs +72 -0
  92. package/dist/web/components/Remote.fixture.mjs.map +1 -0
  93. package/dist/web/components/SessionMcp.cjs +279 -0
  94. package/dist/web/components/SessionMcp.cjs.map +1 -0
  95. package/dist/web/components/SessionMcp.d.mts +12 -0
  96. package/dist/web/components/SessionMcp.d.mts.map +1 -0
  97. package/dist/web/components/SessionMcp.mjs +278 -0
  98. package/dist/web/components/SessionMcp.mjs.map +1 -0
  99. package/dist/web/components/Story.fixture.cjs +124 -0
  100. package/dist/web/components/Story.fixture.cjs.map +1 -0
  101. package/dist/web/components/Story.fixture.d.mts +19 -0
  102. package/dist/web/components/Story.fixture.d.mts.map +1 -0
  103. package/dist/web/components/Story.fixture.mjs +119 -0
  104. package/dist/web/components/Story.fixture.mjs.map +1 -0
  105. package/dist/web/components/Template.fixture.cjs +67 -0
  106. package/dist/web/components/Template.fixture.cjs.map +1 -0
  107. package/dist/web/components/Template.fixture.d.mts +7 -0
  108. package/dist/web/components/Template.fixture.d.mts.map +1 -0
  109. package/dist/web/components/Template.fixture.mjs +65 -0
  110. package/dist/web/components/Template.fixture.mjs.map +1 -0
  111. package/dist/web/components/ToolRendererBoundary.cjs +23 -0
  112. package/dist/web/components/ToolRendererBoundary.cjs.map +1 -0
  113. package/dist/web/components/ToolRendererBoundary.d.mts +23 -0
  114. package/dist/web/components/ToolRendererBoundary.d.mts.map +1 -0
  115. package/dist/web/components/ToolRendererBoundary.mjs +23 -0
  116. package/dist/web/components/ToolRendererBoundary.mjs.map +1 -0
  117. package/dist/web/features/activity/ActivityDock.cjs +271 -0
  118. package/dist/web/features/activity/ActivityDock.cjs.map +1 -0
  119. package/dist/web/features/activity/ActivityDock.d.mts +22 -0
  120. package/dist/web/features/activity/ActivityDock.d.mts.map +1 -0
  121. package/dist/web/features/activity/ActivityDock.mjs +271 -0
  122. package/dist/web/features/activity/ActivityDock.mjs.map +1 -0
  123. package/dist/web/features/activity/ContextItemDialog.cjs +276 -0
  124. package/dist/web/features/activity/ContextItemDialog.cjs.map +1 -0
  125. package/dist/web/features/activity/ContextItemDialog.d.mts +16 -0
  126. package/dist/web/features/activity/ContextItemDialog.d.mts.map +1 -0
  127. package/dist/web/features/activity/ContextItemDialog.mjs +276 -0
  128. package/dist/web/features/activity/ContextItemDialog.mjs.map +1 -0
  129. package/dist/web/features/activity/ContextPanel.cjs +248 -0
  130. package/dist/web/features/activity/ContextPanel.cjs.map +1 -0
  131. package/dist/web/features/activity/ContextPanel.d.mts +4 -0
  132. package/dist/web/features/activity/ContextPanel.d.mts.map +1 -0
  133. package/dist/web/features/activity/ContextPanel.mjs +248 -0
  134. package/dist/web/features/activity/ContextPanel.mjs.map +1 -0
  135. package/dist/web/features/activity/DockTabs.cjs +47 -0
  136. package/dist/web/features/activity/DockTabs.cjs.map +1 -0
  137. package/dist/web/features/activity/DockTabs.d.mts +9 -0
  138. package/dist/web/features/activity/DockTabs.d.mts.map +1 -0
  139. package/dist/web/features/activity/DockTabs.mjs +47 -0
  140. package/dist/web/features/activity/DockTabs.mjs.map +1 -0
  141. package/dist/web/features/connection/RefusedCard.cjs +76 -0
  142. package/dist/web/features/connection/RefusedCard.cjs.map +1 -0
  143. package/dist/web/features/connection/RefusedCard.d.mts +5 -0
  144. package/dist/web/features/connection/RefusedCard.d.mts.map +1 -0
  145. package/dist/web/features/connection/RefusedCard.mjs +76 -0
  146. package/dist/web/features/connection/RefusedCard.mjs.map +1 -0
  147. package/dist/web/features/dialogs/DialogOverlay.cjs +164 -0
  148. package/dist/web/features/dialogs/DialogOverlay.cjs.map +1 -0
  149. package/dist/web/features/dialogs/DialogOverlay.d.mts +15 -0
  150. package/dist/web/features/dialogs/DialogOverlay.d.mts.map +1 -0
  151. package/dist/web/features/dialogs/DialogOverlay.mjs +164 -0
  152. package/dist/web/features/dialogs/DialogOverlay.mjs.map +1 -0
  153. package/dist/web/features/leader/CommandPalette.cjs +390 -0
  154. package/dist/web/features/leader/CommandPalette.cjs.map +1 -0
  155. package/dist/web/features/leader/CommandPalette.d.mts +14 -0
  156. package/dist/web/features/leader/CommandPalette.d.mts.map +1 -0
  157. package/dist/web/features/leader/CommandPalette.mjs +390 -0
  158. package/dist/web/features/leader/CommandPalette.mjs.map +1 -0
  159. package/dist/web/features/remote/DevProxyTargets.cjs +122 -0
  160. package/dist/web/features/remote/DevProxyTargets.cjs.map +1 -0
  161. package/dist/web/features/remote/DevProxyTargets.d.mts +15 -0
  162. package/dist/web/features/remote/DevProxyTargets.d.mts.map +1 -0
  163. package/dist/web/features/remote/DevProxyTargets.mjs +122 -0
  164. package/dist/web/features/remote/DevProxyTargets.mjs.map +1 -0
  165. package/dist/web/features/remote/HandoverProgress.cjs +28 -0
  166. package/dist/web/features/remote/HandoverProgress.cjs.map +1 -0
  167. package/dist/web/features/remote/HandoverProgress.d.mts +12 -0
  168. package/dist/web/features/remote/HandoverProgress.d.mts.map +1 -0
  169. package/dist/web/features/remote/HandoverProgress.mjs +28 -0
  170. package/dist/web/features/remote/HandoverProgress.mjs.map +1 -0
  171. package/dist/web/features/remote/PairedDeviceList.cjs +37 -0
  172. package/dist/web/features/remote/PairedDeviceList.cjs.map +1 -0
  173. package/dist/web/features/remote/PairedDeviceList.d.mts +5 -0
  174. package/dist/web/features/remote/PairedDeviceList.d.mts.map +1 -0
  175. package/dist/web/features/remote/PairedDeviceList.mjs +37 -0
  176. package/dist/web/features/remote/PairedDeviceList.mjs.map +1 -0
  177. package/dist/web/features/remote/PairingApprovalDialog.cjs +65 -0
  178. package/dist/web/features/remote/PairingApprovalDialog.cjs.map +1 -0
  179. package/dist/web/features/remote/PairingApprovalDialog.d.mts +11 -0
  180. package/dist/web/features/remote/PairingApprovalDialog.d.mts.map +1 -0
  181. package/dist/web/features/remote/PairingApprovalDialog.mjs +65 -0
  182. package/dist/web/features/remote/PairingApprovalDialog.mjs.map +1 -0
  183. package/dist/web/features/remote/RemoteAccessDialog.cjs +83 -0
  184. package/dist/web/features/remote/RemoteAccessDialog.cjs.map +1 -0
  185. package/dist/web/features/remote/RemoteAccessDialog.d.mts +11 -0
  186. package/dist/web/features/remote/RemoteAccessDialog.d.mts.map +1 -0
  187. package/dist/web/features/remote/RemoteAccessDialog.mjs +83 -0
  188. package/dist/web/features/remote/RemoteAccessDialog.mjs.map +1 -0
  189. package/dist/web/features/remote/RemoteAccessOptions.cjs +154 -0
  190. package/dist/web/features/remote/RemoteAccessOptions.cjs.map +1 -0
  191. package/dist/web/features/remote/RemoteAccessOptions.d.mts +11 -0
  192. package/dist/web/features/remote/RemoteAccessOptions.d.mts.map +1 -0
  193. package/dist/web/features/remote/RemoteAccessOptions.mjs +154 -0
  194. package/dist/web/features/remote/RemoteAccessOptions.mjs.map +1 -0
  195. package/dist/web/features/remote/RemoteAccessPairing.cjs +93 -0
  196. package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -0
  197. package/dist/web/features/remote/RemoteAccessPairing.d.mts +5 -0
  198. package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -0
  199. package/dist/web/features/remote/RemoteAccessPairing.mjs +93 -0
  200. package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -0
  201. package/dist/web/features/remote/SandboxWorkspaces.cjs +87 -0
  202. package/dist/web/features/remote/SandboxWorkspaces.cjs.map +1 -0
  203. package/dist/web/features/remote/SandboxWorkspaces.d.mts +7 -0
  204. package/dist/web/features/remote/SandboxWorkspaces.d.mts.map +1 -0
  205. package/dist/web/features/remote/SandboxWorkspaces.mjs +87 -0
  206. package/dist/web/features/remote/SandboxWorkspaces.mjs.map +1 -0
  207. package/dist/web/features/remote/TrustedDeviceList.cjs +65 -0
  208. package/dist/web/features/remote/TrustedDeviceList.cjs.map +1 -0
  209. package/dist/web/features/remote/TrustedDeviceList.d.mts +13 -0
  210. package/dist/web/features/remote/TrustedDeviceList.d.mts.map +1 -0
  211. package/dist/web/features/remote/TrustedDeviceList.mjs +64 -0
  212. package/dist/web/features/remote/TrustedDeviceList.mjs.map +1 -0
  213. package/dist/web/features/selection/SelectionBar.cjs +401 -0
  214. package/dist/web/features/selection/SelectionBar.cjs.map +1 -0
  215. package/dist/web/features/selection/SelectionBar.d.mts +14 -0
  216. package/dist/web/features/selection/SelectionBar.d.mts.map +1 -0
  217. package/dist/web/features/selection/SelectionBar.mjs +400 -0
  218. package/dist/web/features/selection/SelectionBar.mjs.map +1 -0
  219. package/dist/web/features/session/AgentLockPanel.cjs +31 -0
  220. package/dist/web/features/session/AgentLockPanel.cjs.map +1 -0
  221. package/dist/web/features/session/AgentLockPanel.mjs +31 -0
  222. package/dist/web/features/session/AgentLockPanel.mjs.map +1 -0
  223. package/dist/web/features/session/Composer.cjs +808 -0
  224. package/dist/web/features/session/Composer.cjs.map +1 -0
  225. package/dist/web/features/session/Composer.d.mts +21 -0
  226. package/dist/web/features/session/Composer.d.mts.map +1 -0
  227. package/dist/web/features/session/Composer.mjs +806 -0
  228. package/dist/web/features/session/Composer.mjs.map +1 -0
  229. package/dist/web/features/session/ComposerPrompt.cjs +47 -0
  230. package/dist/web/features/session/ComposerPrompt.cjs.map +1 -0
  231. package/dist/web/features/session/ComposerPrompt.d.mts +16 -0
  232. package/dist/web/features/session/ComposerPrompt.d.mts.map +1 -0
  233. package/dist/web/features/session/ComposerPrompt.mjs +47 -0
  234. package/dist/web/features/session/ComposerPrompt.mjs.map +1 -0
  235. package/dist/web/features/session/DormantPanel.cjs +61 -0
  236. package/dist/web/features/session/DormantPanel.cjs.map +1 -0
  237. package/dist/web/features/session/DormantPanel.d.mts +8 -0
  238. package/dist/web/features/session/DormantPanel.d.mts.map +1 -0
  239. package/dist/web/features/session/DormantPanel.mjs +61 -0
  240. package/dist/web/features/session/DormantPanel.mjs.map +1 -0
  241. package/dist/web/features/session/MentionPreviews.cjs +128 -0
  242. package/dist/web/features/session/MentionPreviews.cjs.map +1 -0
  243. package/dist/web/features/session/MentionPreviews.d.mts +17 -0
  244. package/dist/web/features/session/MentionPreviews.d.mts.map +1 -0
  245. package/dist/web/features/session/MentionPreviews.mjs +127 -0
  246. package/dist/web/features/session/MentionPreviews.mjs.map +1 -0
  247. package/dist/web/features/session/MessageMarkdown.cjs +20 -0
  248. package/dist/web/features/session/MessageMarkdown.cjs.map +1 -0
  249. package/dist/web/features/session/MessageMarkdown.d.mts +19 -0
  250. package/dist/web/features/session/MessageMarkdown.d.mts.map +1 -0
  251. package/dist/web/features/session/MessageMarkdown.mjs +20 -0
  252. package/dist/web/features/session/MessageMarkdown.mjs.map +1 -0
  253. package/dist/web/features/session/QueueSheet.cjs +189 -0
  254. package/dist/web/features/session/QueueSheet.cjs.map +1 -0
  255. package/dist/web/features/session/QueueSheet.d.mts +16 -0
  256. package/dist/web/features/session/QueueSheet.d.mts.map +1 -0
  257. package/dist/web/features/session/QueueSheet.mjs +189 -0
  258. package/dist/web/features/session/QueueSheet.mjs.map +1 -0
  259. package/dist/web/features/session/SessionActivity.cjs +88 -0
  260. package/dist/web/features/session/SessionActivity.cjs.map +1 -0
  261. package/dist/web/features/session/SessionActivity.d.mts +16 -0
  262. package/dist/web/features/session/SessionActivity.d.mts.map +1 -0
  263. package/dist/web/features/session/SessionActivity.mjs +87 -0
  264. package/dist/web/features/session/SessionActivity.mjs.map +1 -0
  265. package/dist/web/features/session/SessionTranscriptView.cjs +34 -0
  266. package/dist/web/features/session/SessionTranscriptView.cjs.map +1 -0
  267. package/dist/web/features/session/SessionTranscriptView.d.mts +16 -0
  268. package/dist/web/features/session/SessionTranscriptView.d.mts.map +1 -0
  269. package/dist/web/features/session/SessionTranscriptView.mjs +34 -0
  270. package/dist/web/features/session/SessionTranscriptView.mjs.map +1 -0
  271. package/dist/web/features/session/ThreadView.cjs +40 -0
  272. package/dist/web/features/session/ThreadView.cjs.map +1 -0
  273. package/dist/web/features/session/ThreadView.d.mts +18 -0
  274. package/dist/web/features/session/ThreadView.d.mts.map +1 -0
  275. package/dist/web/features/session/ThreadView.mjs +40 -0
  276. package/dist/web/features/session/ThreadView.mjs.map +1 -0
  277. package/dist/web/features/session/Timeline.cjs +620 -0
  278. package/dist/web/features/session/Timeline.cjs.map +1 -0
  279. package/dist/web/features/session/Timeline.d.mts +28 -0
  280. package/dist/web/features/session/Timeline.d.mts.map +1 -0
  281. package/dist/web/features/session/Timeline.mjs +619 -0
  282. package/dist/web/features/session/Timeline.mjs.map +1 -0
  283. package/dist/web/features/session/ToolCard.cjs +210 -0
  284. package/dist/web/features/session/ToolCard.cjs.map +1 -0
  285. package/dist/web/features/session/ToolCard.d.mts +16 -0
  286. package/dist/web/features/session/ToolCard.d.mts.map +1 -0
  287. package/dist/web/features/session/ToolCard.mjs +210 -0
  288. package/dist/web/features/session/ToolCard.mjs.map +1 -0
  289. package/dist/web/features/session/session.fixture.cjs +76 -0
  290. package/dist/web/features/session/session.fixture.cjs.map +1 -0
  291. package/dist/web/features/session/session.fixture.d.mts +6 -0
  292. package/dist/web/features/session/session.fixture.d.mts.map +1 -0
  293. package/dist/web/features/session/session.fixture.mjs +74 -0
  294. package/dist/web/features/session/session.fixture.mjs.map +1 -0
  295. package/dist/web/features/sessions/NewSessionDialog.cjs +70 -0
  296. package/dist/web/features/sessions/NewSessionDialog.cjs.map +1 -0
  297. package/dist/web/features/sessions/NewSessionDialog.d.mts +9 -0
  298. package/dist/web/features/sessions/NewSessionDialog.d.mts.map +1 -0
  299. package/dist/web/features/sessions/NewSessionDialog.mjs +70 -0
  300. package/dist/web/features/sessions/NewSessionDialog.mjs.map +1 -0
  301. package/dist/web/features/sessions/ResumeSessionDialog.cjs +131 -0
  302. package/dist/web/features/sessions/ResumeSessionDialog.cjs.map +1 -0
  303. package/dist/web/features/sessions/ResumeSessionDialog.d.mts +14 -0
  304. package/dist/web/features/sessions/ResumeSessionDialog.d.mts.map +1 -0
  305. package/dist/web/features/sessions/ResumeSessionDialog.mjs +131 -0
  306. package/dist/web/features/sessions/ResumeSessionDialog.mjs.map +1 -0
  307. package/dist/web/features/sessions/SessionRailDialogs.cjs +62 -0
  308. package/dist/web/features/sessions/SessionRailDialogs.cjs.map +1 -0
  309. package/dist/web/features/sessions/SessionRailDialogs.d.mts +10 -0
  310. package/dist/web/features/sessions/SessionRailDialogs.d.mts.map +1 -0
  311. package/dist/web/features/sessions/SessionRailDialogs.mjs +62 -0
  312. package/dist/web/features/sessions/SessionRailDialogs.mjs.map +1 -0
  313. package/dist/web/features/sessions/WelcomePanel.cjs +42 -0
  314. package/dist/web/features/sessions/WelcomePanel.cjs.map +1 -0
  315. package/dist/web/features/sessions/WelcomePanel.d.mts +16 -0
  316. package/dist/web/features/sessions/WelcomePanel.d.mts.map +1 -0
  317. package/dist/web/features/sessions/WelcomePanel.mjs +42 -0
  318. package/dist/web/features/sessions/WelcomePanel.mjs.map +1 -0
  319. package/dist/web/features/sessions/useNewSessionActions.cjs +38 -0
  320. package/dist/web/features/sessions/useNewSessionActions.cjs.map +1 -0
  321. package/dist/web/features/sessions/useNewSessionActions.d.mts +12 -0
  322. package/dist/web/features/sessions/useNewSessionActions.d.mts.map +1 -0
  323. package/dist/web/features/sessions/useNewSessionActions.mjs +38 -0
  324. package/dist/web/features/sessions/useNewSessionActions.mjs.map +1 -0
  325. package/dist/web/features/sessions/useSessionRail.cjs +302 -0
  326. package/dist/web/features/sessions/useSessionRail.cjs.map +1 -0
  327. package/dist/web/features/sessions/useSessionRail.d.mts +14 -0
  328. package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -0
  329. package/dist/web/features/sessions/useSessionRail.mjs +302 -0
  330. package/dist/web/features/sessions/useSessionRail.mjs.map +1 -0
  331. package/dist/web/features/settings/AppearanceSettings.cjs +126 -0
  332. package/dist/web/features/settings/AppearanceSettings.cjs.map +1 -0
  333. package/dist/web/features/settings/AppearanceSettings.d.mts +12 -0
  334. package/dist/web/features/settings/AppearanceSettings.d.mts.map +1 -0
  335. package/dist/web/features/settings/AppearanceSettings.mjs +126 -0
  336. package/dist/web/features/settings/AppearanceSettings.mjs.map +1 -0
  337. package/dist/web/features/settings/ContributedSettings.cjs +257 -0
  338. package/dist/web/features/settings/ContributedSettings.cjs.map +1 -0
  339. package/dist/web/features/settings/ContributedSettings.d.mts +14 -0
  340. package/dist/web/features/settings/ContributedSettings.d.mts.map +1 -0
  341. package/dist/web/features/settings/ContributedSettings.mjs +257 -0
  342. package/dist/web/features/settings/ContributedSettings.mjs.map +1 -0
  343. package/dist/web/features/settings/ImageSettings.cjs +146 -0
  344. package/dist/web/features/settings/ImageSettings.cjs.map +1 -0
  345. package/dist/web/features/settings/ImageSettings.d.mts +12 -0
  346. package/dist/web/features/settings/ImageSettings.d.mts.map +1 -0
  347. package/dist/web/features/settings/ImageSettings.mjs +146 -0
  348. package/dist/web/features/settings/ImageSettings.mjs.map +1 -0
  349. package/dist/web/features/settings/LoginFlowDialog.cjs +226 -0
  350. package/dist/web/features/settings/LoginFlowDialog.cjs.map +1 -0
  351. package/dist/web/features/settings/LoginFlowDialog.d.mts +15 -0
  352. package/dist/web/features/settings/LoginFlowDialog.d.mts.map +1 -0
  353. package/dist/web/features/settings/LoginFlowDialog.mjs +225 -0
  354. package/dist/web/features/settings/LoginFlowDialog.mjs.map +1 -0
  355. package/dist/web/features/settings/NotificationSettings.cjs +69 -0
  356. package/dist/web/features/settings/NotificationSettings.cjs.map +1 -0
  357. package/dist/web/features/settings/NotificationSettings.d.mts +5 -0
  358. package/dist/web/features/settings/NotificationSettings.d.mts.map +1 -0
  359. package/dist/web/features/settings/NotificationSettings.mjs +69 -0
  360. package/dist/web/features/settings/NotificationSettings.mjs.map +1 -0
  361. package/dist/web/features/settings/PluginSettings.cjs +106 -0
  362. package/dist/web/features/settings/PluginSettings.cjs.map +1 -0
  363. package/dist/web/features/settings/PluginSettings.d.mts +10 -0
  364. package/dist/web/features/settings/PluginSettings.d.mts.map +1 -0
  365. package/dist/web/features/settings/PluginSettings.mjs +106 -0
  366. package/dist/web/features/settings/PluginSettings.mjs.map +1 -0
  367. package/dist/web/features/settings/ProviderSettings.cjs +323 -0
  368. package/dist/web/features/settings/ProviderSettings.cjs.map +1 -0
  369. package/dist/web/features/settings/ProviderSettings.d.mts +9 -0
  370. package/dist/web/features/settings/ProviderSettings.d.mts.map +1 -0
  371. package/dist/web/features/settings/ProviderSettings.mjs +323 -0
  372. package/dist/web/features/settings/ProviderSettings.mjs.map +1 -0
  373. package/dist/web/features/settings/RemoteControlSettings.cjs +50 -0
  374. package/dist/web/features/settings/RemoteControlSettings.cjs.map +1 -0
  375. package/dist/web/features/settings/RemoteControlSettings.d.mts +5 -0
  376. package/dist/web/features/settings/RemoteControlSettings.d.mts.map +1 -0
  377. package/dist/web/features/settings/RemoteControlSettings.mjs +50 -0
  378. package/dist/web/features/settings/RemoteControlSettings.mjs.map +1 -0
  379. package/dist/web/features/settings/RepositorySettings.cjs +318 -0
  380. package/dist/web/features/settings/RepositorySettings.cjs.map +1 -0
  381. package/dist/web/features/settings/RepositorySettings.d.mts +7 -0
  382. package/dist/web/features/settings/RepositorySettings.d.mts.map +1 -0
  383. package/dist/web/features/settings/RepositorySettings.mjs +318 -0
  384. package/dist/web/features/settings/RepositorySettings.mjs.map +1 -0
  385. package/dist/web/features/settings/RepositoryWorkspace.cjs +160 -0
  386. package/dist/web/features/settings/RepositoryWorkspace.cjs.map +1 -0
  387. package/dist/web/features/settings/RepositoryWorkspace.d.mts +10 -0
  388. package/dist/web/features/settings/RepositoryWorkspace.d.mts.map +1 -0
  389. package/dist/web/features/settings/RepositoryWorkspace.mjs +160 -0
  390. package/dist/web/features/settings/RepositoryWorkspace.mjs.map +1 -0
  391. package/dist/web/features/settings/SessionMcpSettings.cjs +488 -0
  392. package/dist/web/features/settings/SessionMcpSettings.cjs.map +1 -0
  393. package/dist/web/features/settings/SessionMcpSettings.d.mts +5 -0
  394. package/dist/web/features/settings/SessionMcpSettings.d.mts.map +1 -0
  395. package/dist/web/features/settings/SessionMcpSettings.mjs +488 -0
  396. package/dist/web/features/settings/SessionMcpSettings.mjs.map +1 -0
  397. package/dist/web/features/settings/SettingsMenu.cjs +135 -0
  398. package/dist/web/features/settings/SettingsMenu.cjs.map +1 -0
  399. package/dist/web/features/settings/SettingsMenu.d.mts +9 -0
  400. package/dist/web/features/settings/SettingsMenu.d.mts.map +1 -0
  401. package/dist/web/features/settings/SettingsMenu.mjs +135 -0
  402. package/dist/web/features/settings/SettingsMenu.mjs.map +1 -0
  403. package/dist/web/features/settings/SettingsPanelHost.cjs +32 -0
  404. package/dist/web/features/settings/SettingsPanelHost.cjs.map +1 -0
  405. package/dist/web/features/settings/SettingsPanelHost.d.mts +8 -0
  406. package/dist/web/features/settings/SettingsPanelHost.d.mts.map +1 -0
  407. package/dist/web/features/settings/SettingsPanelHost.mjs +32 -0
  408. package/dist/web/features/settings/SettingsPanelHost.mjs.map +1 -0
  409. package/dist/web/features/settings/TemplateSettings.cjs +177 -0
  410. package/dist/web/features/settings/TemplateSettings.cjs.map +1 -0
  411. package/dist/web/features/settings/TemplateSettings.d.mts +8 -0
  412. package/dist/web/features/settings/TemplateSettings.d.mts.map +1 -0
  413. package/dist/web/features/settings/TemplateSettings.mjs +177 -0
  414. package/dist/web/features/settings/TemplateSettings.mjs.map +1 -0
  415. package/dist/web/features/settings/TunnelSettings.cjs +182 -0
  416. package/dist/web/features/settings/TunnelSettings.cjs.map +1 -0
  417. package/dist/web/features/settings/TunnelSettings.d.mts +8 -0
  418. package/dist/web/features/settings/TunnelSettings.d.mts.map +1 -0
  419. package/dist/web/features/settings/TunnelSettings.mjs +182 -0
  420. package/dist/web/features/settings/TunnelSettings.mjs.map +1 -0
  421. package/dist/web/features/settings/settings.fixture.cjs +230 -0
  422. package/dist/web/features/settings/settings.fixture.cjs.map +1 -0
  423. package/dist/web/features/settings/settings.fixture.d.mts +6 -0
  424. package/dist/web/features/settings/settings.fixture.d.mts.map +1 -0
  425. package/dist/web/features/settings/settings.fixture.mjs +223 -0
  426. package/dist/web/features/settings/settings.fixture.mjs.map +1 -0
  427. package/dist/web/features/status/TopBar.cjs +200 -0
  428. package/dist/web/features/status/TopBar.cjs.map +1 -0
  429. package/dist/web/features/status/TopBar.d.mts +11 -0
  430. package/dist/web/features/status/TopBar.d.mts.map +1 -0
  431. package/dist/web/features/status/TopBar.mjs +200 -0
  432. package/dist/web/features/status/TopBar.mjs.map +1 -0
  433. package/dist/web/lib/authApi.cjs +77 -0
  434. package/dist/web/lib/authApi.cjs.map +1 -0
  435. package/dist/web/lib/authApi.d.mts +28 -0
  436. package/dist/web/lib/authApi.d.mts.map +1 -0
  437. package/dist/web/lib/authApi.mjs +72 -0
  438. package/dist/web/lib/authApi.mjs.map +1 -0
  439. package/dist/web/lib/browserNotifications.cjs +37 -0
  440. package/dist/web/lib/browserNotifications.cjs.map +1 -0
  441. package/dist/web/lib/browserNotifications.d.mts +12 -0
  442. package/dist/web/lib/browserNotifications.d.mts.map +1 -0
  443. package/dist/web/lib/browserNotifications.mjs +35 -0
  444. package/dist/web/lib/browserNotifications.mjs.map +1 -0
  445. package/dist/web/lib/browserTelemetry.cjs +158 -0
  446. package/dist/web/lib/browserTelemetry.cjs.map +1 -0
  447. package/dist/web/lib/browserTelemetry.d.mts +28 -0
  448. package/dist/web/lib/browserTelemetry.d.mts.map +1 -0
  449. package/dist/web/lib/browserTelemetry.mjs +154 -0
  450. package/dist/web/lib/browserTelemetry.mjs.map +1 -0
  451. package/dist/web/lib/commands.cjs +176 -0
  452. package/dist/web/lib/commands.cjs.map +1 -0
  453. package/dist/web/lib/commands.d.mts +53 -0
  454. package/dist/web/lib/commands.d.mts.map +1 -0
  455. package/dist/web/lib/commands.mjs +153 -0
  456. package/dist/web/lib/commands.mjs.map +1 -0
  457. package/dist/web/lib/composerSubmissions.cjs +20 -0
  458. package/dist/web/lib/composerSubmissions.cjs.map +1 -0
  459. package/dist/web/lib/composerSubmissions.d.mts +7 -0
  460. package/dist/web/lib/composerSubmissions.d.mts.map +1 -0
  461. package/dist/web/lib/composerSubmissions.mjs +19 -0
  462. package/dist/web/lib/composerSubmissions.mjs.map +1 -0
  463. package/dist/web/lib/composition.cjs +403 -0
  464. package/dist/web/lib/composition.cjs.map +1 -0
  465. package/dist/web/lib/composition.d.mts +137 -0
  466. package/dist/web/lib/composition.d.mts.map +1 -0
  467. package/dist/web/lib/composition.mjs +392 -0
  468. package/dist/web/lib/composition.mjs.map +1 -0
  469. package/dist/web/lib/contextComposition.cjs +132 -0
  470. package/dist/web/lib/contextComposition.cjs.map +1 -0
  471. package/dist/web/lib/contextComposition.d.mts +75 -0
  472. package/dist/web/lib/contextComposition.d.mts.map +1 -0
  473. package/dist/web/lib/contextComposition.mjs +127 -0
  474. package/dist/web/lib/contextComposition.mjs.map +1 -0
  475. package/dist/web/lib/contextDetailApi.cjs +61 -0
  476. package/dist/web/lib/contextDetailApi.cjs.map +1 -0
  477. package/dist/web/lib/contextDetailApi.d.mts +12 -0
  478. package/dist/web/lib/contextDetailApi.d.mts.map +1 -0
  479. package/dist/web/lib/contextDetailApi.mjs +61 -0
  480. package/dist/web/lib/contextDetailApi.mjs.map +1 -0
  481. package/dist/web/lib/dashboardRenderers.cjs +9 -0
  482. package/dist/web/lib/dashboardRenderers.cjs.map +1 -0
  483. package/dist/web/lib/dashboardRenderers.d.mts +12 -0
  484. package/dist/web/lib/dashboardRenderers.d.mts.map +1 -0
  485. package/dist/web/lib/dashboardRenderers.mjs +9 -0
  486. package/dist/web/lib/dashboardRenderers.mjs.map +1 -0
  487. package/dist/web/lib/dashboardRoute.cjs +27 -0
  488. package/dist/web/lib/dashboardRoute.cjs.map +1 -0
  489. package/dist/web/lib/dashboardRoute.d.mts +29 -0
  490. package/dist/web/lib/dashboardRoute.d.mts.map +1 -0
  491. package/dist/web/lib/dashboardRoute.mjs +26 -0
  492. package/dist/web/lib/dashboardRoute.mjs.map +1 -0
  493. package/dist/web/lib/dashboardTranscript.cjs +15 -0
  494. package/dist/web/lib/dashboardTranscript.cjs.map +1 -0
  495. package/dist/web/lib/dashboardTranscript.d.mts +6 -0
  496. package/dist/web/lib/dashboardTranscript.d.mts.map +1 -0
  497. package/dist/web/lib/dashboardTranscript.mjs +14 -0
  498. package/dist/web/lib/dashboardTranscript.mjs.map +1 -0
  499. package/dist/web/lib/devProxyApi.cjs +74 -0
  500. package/dist/web/lib/devProxyApi.cjs.map +1 -0
  501. package/dist/web/lib/devProxyApi.d.mts +21 -0
  502. package/dist/web/lib/devProxyApi.d.mts.map +1 -0
  503. package/dist/web/lib/devProxyApi.mjs +72 -0
  504. package/dist/web/lib/devProxyApi.mjs.map +1 -0
  505. package/dist/web/lib/fileMentions.cjs +30 -0
  506. package/dist/web/lib/fileMentions.cjs.map +1 -0
  507. package/dist/web/lib/fileMentions.d.mts +13 -0
  508. package/dist/web/lib/fileMentions.d.mts.map +1 -0
  509. package/dist/web/lib/fileMentions.mjs +29 -0
  510. package/dist/web/lib/fileMentions.mjs.map +1 -0
  511. package/dist/web/lib/hubApi.cjs +283 -0
  512. package/dist/web/lib/hubApi.cjs.map +1 -0
  513. package/dist/web/lib/hubApi.d.mts +109 -0
  514. package/dist/web/lib/hubApi.d.mts.map +1 -0
  515. package/dist/web/lib/hubApi.mjs +268 -0
  516. package/dist/web/lib/hubApi.mjs.map +1 -0
  517. package/dist/web/lib/leaderTree.cjs +150 -0
  518. package/dist/web/lib/leaderTree.cjs.map +1 -0
  519. package/dist/web/lib/leaderTree.d.mts +41 -0
  520. package/dist/web/lib/leaderTree.d.mts.map +1 -0
  521. package/dist/web/lib/leaderTree.mjs +149 -0
  522. package/dist/web/lib/leaderTree.mjs.map +1 -0
  523. package/dist/web/lib/livePush.cjs +97 -0
  524. package/dist/web/lib/livePush.cjs.map +1 -0
  525. package/dist/web/lib/livePush.d.mts +10 -0
  526. package/dist/web/lib/livePush.d.mts.map +1 -0
  527. package/dist/web/lib/livePush.mjs +94 -0
  528. package/dist/web/lib/livePush.mjs.map +1 -0
  529. package/dist/web/lib/modelContextAdapter.cjs +63 -0
  530. package/dist/web/lib/modelContextAdapter.cjs.map +1 -0
  531. package/dist/web/lib/modelContextAdapter.d.mts +11 -0
  532. package/dist/web/lib/modelContextAdapter.d.mts.map +1 -0
  533. package/dist/web/lib/modelContextAdapter.mjs +62 -0
  534. package/dist/web/lib/modelContextAdapter.mjs.map +1 -0
  535. package/dist/web/lib/piTransport.cjs +103 -0
  536. package/dist/web/lib/piTransport.cjs.map +1 -0
  537. package/dist/web/lib/piTransport.d.mts +8 -0
  538. package/dist/web/lib/piTransport.d.mts.map +1 -0
  539. package/dist/web/lib/piTransport.mjs +102 -0
  540. package/dist/web/lib/piTransport.mjs.map +1 -0
  541. package/dist/web/lib/pluginCompositions.cjs +57 -0
  542. package/dist/web/lib/pluginCompositions.cjs.map +1 -0
  543. package/dist/web/lib/pluginCompositions.d.mts +37 -0
  544. package/dist/web/lib/pluginCompositions.d.mts.map +1 -0
  545. package/dist/web/lib/pluginCompositions.mjs +52 -0
  546. package/dist/web/lib/pluginCompositions.mjs.map +1 -0
  547. package/dist/web/lib/pluginRegistry.cjs +675 -0
  548. package/dist/web/lib/pluginRegistry.cjs.map +1 -0
  549. package/dist/web/lib/pluginRegistry.d.mts +155 -0
  550. package/dist/web/lib/pluginRegistry.d.mts.map +1 -0
  551. package/dist/web/lib/pluginRegistry.mjs +633 -0
  552. package/dist/web/lib/pluginRegistry.mjs.map +1 -0
  553. package/dist/web/lib/pluginScopes.cjs +48 -0
  554. package/dist/web/lib/pluginScopes.cjs.map +1 -0
  555. package/dist/web/lib/pluginScopes.d.mts +8 -0
  556. package/dist/web/lib/pluginScopes.d.mts.map +1 -0
  557. package/dist/web/lib/pluginScopes.mjs +47 -0
  558. package/dist/web/lib/pluginScopes.mjs.map +1 -0
  559. package/dist/web/lib/pluginSlotProps.cjs +83 -0
  560. package/dist/web/lib/pluginSlotProps.cjs.map +1 -0
  561. package/dist/web/lib/pluginSlotProps.d.mts +21 -0
  562. package/dist/web/lib/pluginSlotProps.d.mts.map +1 -0
  563. package/dist/web/lib/pluginSlotProps.mjs +82 -0
  564. package/dist/web/lib/pluginSlotProps.mjs.map +1 -0
  565. package/dist/web/lib/promptFocus.cjs +30 -0
  566. package/dist/web/lib/promptFocus.cjs.map +1 -0
  567. package/dist/web/lib/promptFocus.d.mts +7 -0
  568. package/dist/web/lib/promptFocus.d.mts.map +1 -0
  569. package/dist/web/lib/promptFocus.mjs +29 -0
  570. package/dist/web/lib/promptFocus.mjs.map +1 -0
  571. package/dist/web/lib/protocolHubSocket.cjs +107 -0
  572. package/dist/web/lib/protocolHubSocket.cjs.map +1 -0
  573. package/dist/web/lib/protocolHubSocket.d.mts +18 -0
  574. package/dist/web/lib/protocolHubSocket.d.mts.map +1 -0
  575. package/dist/web/lib/protocolHubSocket.mjs +107 -0
  576. package/dist/web/lib/protocolHubSocket.mjs.map +1 -0
  577. package/dist/web/lib/protocolTimeline.cjs +86 -0
  578. package/dist/web/lib/protocolTimeline.cjs.map +1 -0
  579. package/dist/web/lib/protocolTimeline.d.mts +9 -0
  580. package/dist/web/lib/protocolTimeline.d.mts.map +1 -0
  581. package/dist/web/lib/protocolTimeline.mjs +85 -0
  582. package/dist/web/lib/protocolTimeline.mjs.map +1 -0
  583. package/dist/web/lib/qrMatrix.cjs +37 -0
  584. package/dist/web/lib/qrMatrix.cjs.map +1 -0
  585. package/dist/web/lib/qrMatrix.d.mts +5 -0
  586. package/dist/web/lib/qrMatrix.d.mts.map +1 -0
  587. package/dist/web/lib/qrMatrix.mjs +35 -0
  588. package/dist/web/lib/qrMatrix.mjs.map +1 -0
  589. package/dist/web/lib/remoteApi.cjs +100 -0
  590. package/dist/web/lib/remoteApi.cjs.map +1 -0
  591. package/dist/web/lib/remoteApi.d.mts +45 -0
  592. package/dist/web/lib/remoteApi.d.mts.map +1 -0
  593. package/dist/web/lib/remoteApi.mjs +92 -0
  594. package/dist/web/lib/remoteApi.mjs.map +1 -0
  595. package/dist/web/lib/sealedSession.cjs +81 -0
  596. package/dist/web/lib/sealedSession.cjs.map +1 -0
  597. package/dist/web/lib/sealedSession.d.mts +24 -0
  598. package/dist/web/lib/sealedSession.d.mts.map +1 -0
  599. package/dist/web/lib/sealedSession.mjs +75 -0
  600. package/dist/web/lib/sealedSession.mjs.map +1 -0
  601. package/dist/web/lib/sessionActivityRenderer.cjs +19 -0
  602. package/dist/web/lib/sessionActivityRenderer.cjs.map +1 -0
  603. package/dist/web/lib/sessionActivityRenderer.d.mts +10 -0
  604. package/dist/web/lib/sessionActivityRenderer.d.mts.map +1 -0
  605. package/dist/web/lib/sessionActivityRenderer.mjs +17 -0
  606. package/dist/web/lib/sessionActivityRenderer.mjs.map +1 -0
  607. package/dist/web/lib/sessionAsset.cjs +45 -0
  608. package/dist/web/lib/sessionAsset.cjs.map +1 -0
  609. package/dist/web/lib/sessionAsset.d.mts +17 -0
  610. package/dist/web/lib/sessionAsset.d.mts.map +1 -0
  611. package/dist/web/lib/sessionAsset.mjs +44 -0
  612. package/dist/web/lib/sessionAsset.mjs.map +1 -0
  613. package/dist/web/lib/sessionAvatar.cjs +18 -0
  614. package/dist/web/lib/sessionAvatar.cjs.map +1 -0
  615. package/dist/web/lib/sessionAvatar.d.mts +10 -0
  616. package/dist/web/lib/sessionAvatar.d.mts.map +1 -0
  617. package/dist/web/lib/sessionAvatar.mjs +18 -0
  618. package/dist/web/lib/sessionAvatar.mjs.map +1 -0
  619. package/dist/web/lib/sessionMcpApi.cjs +120 -0
  620. package/dist/web/lib/sessionMcpApi.cjs.map +1 -0
  621. package/dist/web/lib/sessionMcpApi.d.mts +27 -0
  622. package/dist/web/lib/sessionMcpApi.d.mts.map +1 -0
  623. package/dist/web/lib/sessionMcpApi.mjs +114 -0
  624. package/dist/web/lib/sessionMcpApi.mjs.map +1 -0
  625. package/dist/web/lib/sessionMcpPrompt.cjs +24 -0
  626. package/dist/web/lib/sessionMcpPrompt.cjs.map +1 -0
  627. package/dist/web/lib/sessionMcpPrompt.mjs +23 -0
  628. package/dist/web/lib/sessionMcpPrompt.mjs.map +1 -0
  629. package/dist/web/lib/sessionModel.cjs +970 -0
  630. package/dist/web/lib/sessionModel.cjs.map +1 -0
  631. package/dist/web/lib/sessionModel.d.mts +254 -0
  632. package/dist/web/lib/sessionModel.d.mts.map +1 -0
  633. package/dist/web/lib/sessionModel.mjs +958 -0
  634. package/dist/web/lib/sessionModel.mjs.map +1 -0
  635. package/dist/web/lib/sessionProtocolCommands.cjs +196 -0
  636. package/dist/web/lib/sessionProtocolCommands.cjs.map +1 -0
  637. package/dist/web/lib/sessionProtocolCommands.d.mts +15 -0
  638. package/dist/web/lib/sessionProtocolCommands.d.mts.map +1 -0
  639. package/dist/web/lib/sessionProtocolCommands.mjs +193 -0
  640. package/dist/web/lib/sessionProtocolCommands.mjs.map +1 -0
  641. package/dist/web/lib/sessionRailModel.cjs +107 -0
  642. package/dist/web/lib/sessionRailModel.cjs.map +1 -0
  643. package/dist/web/lib/sessionRailModel.d.mts +38 -0
  644. package/dist/web/lib/sessionRailModel.d.mts.map +1 -0
  645. package/dist/web/lib/sessionRailModel.mjs +104 -0
  646. package/dist/web/lib/sessionRailModel.mjs.map +1 -0
  647. package/dist/web/lib/sessionSummary.cjs +58 -0
  648. package/dist/web/lib/sessionSummary.cjs.map +1 -0
  649. package/dist/web/lib/sessionSummary.d.mts +39 -0
  650. package/dist/web/lib/sessionSummary.d.mts.map +1 -0
  651. package/dist/web/lib/sessionSummary.mjs +54 -0
  652. package/dist/web/lib/sessionSummary.mjs.map +1 -0
  653. package/dist/web/lib/sessionTranscriptRenderer.cjs +19 -0
  654. package/dist/web/lib/sessionTranscriptRenderer.cjs.map +1 -0
  655. package/dist/web/lib/sessionTranscriptRenderer.d.mts +11 -0
  656. package/dist/web/lib/sessionTranscriptRenderer.d.mts.map +1 -0
  657. package/dist/web/lib/sessionTranscriptRenderer.mjs +17 -0
  658. package/dist/web/lib/sessionTranscriptRenderer.mjs.map +1 -0
  659. package/dist/web/lib/settingsApi.cjs +237 -0
  660. package/dist/web/lib/settingsApi.cjs.map +1 -0
  661. package/dist/web/lib/settingsApi.d.mts +57 -0
  662. package/dist/web/lib/settingsApi.d.mts.map +1 -0
  663. package/dist/web/lib/settingsApi.mjs +230 -0
  664. package/dist/web/lib/settingsApi.mjs.map +1 -0
  665. package/dist/web/lib/settingsDraft.cjs +48 -0
  666. package/dist/web/lib/settingsDraft.cjs.map +1 -0
  667. package/dist/web/lib/settingsDraft.d.mts +28 -0
  668. package/dist/web/lib/settingsDraft.d.mts.map +1 -0
  669. package/dist/web/lib/settingsDraft.mjs +45 -0
  670. package/dist/web/lib/settingsDraft.mjs.map +1 -0
  671. package/dist/web/lib/settingsSections.cjs +108 -0
  672. package/dist/web/lib/settingsSections.cjs.map +1 -0
  673. package/dist/web/lib/settingsSections.d.mts +36 -0
  674. package/dist/web/lib/settingsSections.d.mts.map +1 -0
  675. package/dist/web/lib/settingsSections.mjs +105 -0
  676. package/dist/web/lib/settingsSections.mjs.map +1 -0
  677. package/dist/web/lib/statusLine.cjs +82 -0
  678. package/dist/web/lib/statusLine.cjs.map +1 -0
  679. package/dist/web/lib/statusLine.d.mts +27 -0
  680. package/dist/web/lib/statusLine.d.mts.map +1 -0
  681. package/dist/web/lib/statusLine.mjs +79 -0
  682. package/dist/web/lib/statusLine.mjs.map +1 -0
  683. package/dist/web/lib/stepUp.cjs +41 -0
  684. package/dist/web/lib/stepUp.cjs.map +1 -0
  685. package/dist/web/lib/stepUp.d.mts +18 -0
  686. package/dist/web/lib/stepUp.d.mts.map +1 -0
  687. package/dist/web/lib/stepUp.mjs +41 -0
  688. package/dist/web/lib/stepUp.mjs.map +1 -0
  689. package/dist/web/lib/templateCatalog.cjs +123 -0
  690. package/dist/web/lib/templateCatalog.cjs.map +1 -0
  691. package/dist/web/lib/templateCatalog.d.mts +38 -0
  692. package/dist/web/lib/templateCatalog.d.mts.map +1 -0
  693. package/dist/web/lib/templateCatalog.mjs +118 -0
  694. package/dist/web/lib/templateCatalog.mjs.map +1 -0
  695. package/dist/web/lib/threadRenderer.cjs +25 -0
  696. package/dist/web/lib/threadRenderer.cjs.map +1 -0
  697. package/dist/web/lib/threadRenderer.d.mts +17 -0
  698. package/dist/web/lib/threadRenderer.d.mts.map +1 -0
  699. package/dist/web/lib/threadRenderer.mjs +23 -0
  700. package/dist/web/lib/threadRenderer.mjs.map +1 -0
  701. package/dist/web/lib/timelineGroups.cjs +83 -0
  702. package/dist/web/lib/timelineGroups.cjs.map +1 -0
  703. package/dist/web/lib/timelineGroups.d.mts +36 -0
  704. package/dist/web/lib/timelineGroups.d.mts.map +1 -0
  705. package/dist/web/lib/timelineGroups.mjs +81 -0
  706. package/dist/web/lib/timelineGroups.mjs.map +1 -0
  707. package/dist/web/lib/toolCompletionTabs.cjs +98 -0
  708. package/dist/web/lib/toolCompletionTabs.cjs.map +1 -0
  709. package/dist/web/lib/toolCompletionTabs.d.mts +14 -0
  710. package/dist/web/lib/toolCompletionTabs.d.mts.map +1 -0
  711. package/dist/web/lib/toolCompletionTabs.mjs +98 -0
  712. package/dist/web/lib/toolCompletionTabs.mjs.map +1 -0
  713. package/dist/web/lib/toolMessageProps.cjs +19 -0
  714. package/dist/web/lib/toolMessageProps.cjs.map +1 -0
  715. package/dist/web/lib/toolMessageProps.d.mts +7 -0
  716. package/dist/web/lib/toolMessageProps.d.mts.map +1 -0
  717. package/dist/web/lib/toolMessageProps.mjs +19 -0
  718. package/dist/web/lib/toolMessageProps.mjs.map +1 -0
  719. package/dist/web/lib/toolPrompt.cjs +44 -0
  720. package/dist/web/lib/toolPrompt.cjs.map +1 -0
  721. package/dist/web/lib/toolPrompt.d.mts +34 -0
  722. package/dist/web/lib/toolPrompt.d.mts.map +1 -0
  723. package/dist/web/lib/toolPrompt.mjs +44 -0
  724. package/dist/web/lib/toolPrompt.mjs.map +1 -0
  725. package/dist/web/lib/transport.cjs +57 -0
  726. package/dist/web/lib/transport.cjs.map +1 -0
  727. package/dist/web/lib/transport.d.mts +40 -0
  728. package/dist/web/lib/transport.d.mts.map +1 -0
  729. package/dist/web/lib/transport.mjs +50 -0
  730. package/dist/web/lib/transport.mjs.map +1 -0
  731. package/dist/web/lib/useSessionMcp.cjs +65 -0
  732. package/dist/web/lib/useSessionMcp.cjs.map +1 -0
  733. package/dist/web/lib/useSessionMcp.d.mts +15 -0
  734. package/dist/web/lib/useSessionMcp.d.mts.map +1 -0
  735. package/dist/web/lib/useSessionMcp.mjs +65 -0
  736. package/dist/web/lib/useSessionMcp.mjs.map +1 -0
  737. package/dist/web/lib/webauthnClient.cjs +110 -0
  738. package/dist/web/lib/webauthnClient.cjs.map +1 -0
  739. package/dist/web/lib/webauthnClient.d.mts +32 -0
  740. package/dist/web/lib/webauthnClient.d.mts.map +1 -0
  741. package/dist/web/lib/webauthnClient.mjs +106 -0
  742. package/dist/web/lib/webauthnClient.mjs.map +1 -0
  743. package/dist/web/lib/webmcpSimulator.cjs +105 -0
  744. package/dist/web/lib/webmcpSimulator.cjs.map +1 -0
  745. package/dist/web/lib/webmcpSimulator.mjs +105 -0
  746. package/dist/web/lib/webmcpSimulator.mjs.map +1 -0
  747. package/dist/web/stores/captureStore.cjs +137 -0
  748. package/dist/web/stores/captureStore.cjs.map +1 -0
  749. package/dist/web/stores/captureStore.d.mts +13 -0
  750. package/dist/web/stores/captureStore.d.mts.map +1 -0
  751. package/dist/web/stores/captureStore.mjs +133 -0
  752. package/dist/web/stores/captureStore.mjs.map +1 -0
  753. package/dist/web/stores/composerStore.cjs +390 -0
  754. package/dist/web/stores/composerStore.cjs.map +1 -0
  755. package/dist/web/stores/composerStore.d.mts +101 -0
  756. package/dist/web/stores/composerStore.d.mts.map +1 -0
  757. package/dist/web/stores/composerStore.mjs +370 -0
  758. package/dist/web/stores/composerStore.mjs.map +1 -0
  759. package/dist/web/stores/composerSubmissionStore.cjs +88 -0
  760. package/dist/web/stores/composerSubmissionStore.cjs.map +1 -0
  761. package/dist/web/stores/composerSubmissionStore.d.mts +11 -0
  762. package/dist/web/stores/composerSubmissionStore.d.mts.map +1 -0
  763. package/dist/web/stores/composerSubmissionStore.mjs +87 -0
  764. package/dist/web/stores/composerSubmissionStore.mjs.map +1 -0
  765. package/dist/web/stores/dashboardStateStore.cjs +35 -0
  766. package/dist/web/stores/dashboardStateStore.cjs.map +1 -0
  767. package/dist/web/stores/dashboardStateStore.d.mts +11 -0
  768. package/dist/web/stores/dashboardStateStore.d.mts.map +1 -0
  769. package/dist/web/stores/dashboardStateStore.mjs +33 -0
  770. package/dist/web/stores/dashboardStateStore.mjs.map +1 -0
  771. package/dist/web/stores/devProxyStore.cjs +76 -0
  772. package/dist/web/stores/devProxyStore.cjs.map +1 -0
  773. package/dist/web/stores/devProxyStore.d.mts +25 -0
  774. package/dist/web/stores/devProxyStore.d.mts.map +1 -0
  775. package/dist/web/stores/devProxyStore.mjs +73 -0
  776. package/dist/web/stores/devProxyStore.mjs.map +1 -0
  777. package/dist/web/stores/dialogDraftStore.cjs +38 -0
  778. package/dist/web/stores/dialogDraftStore.cjs.map +1 -0
  779. package/dist/web/stores/dialogDraftStore.d.mts +13 -0
  780. package/dist/web/stores/dialogDraftStore.d.mts.map +1 -0
  781. package/dist/web/stores/dialogDraftStore.mjs +36 -0
  782. package/dist/web/stores/dialogDraftStore.mjs.map +1 -0
  783. package/dist/web/stores/fileLinkModesStore.cjs +20 -0
  784. package/dist/web/stores/fileLinkModesStore.cjs.map +1 -0
  785. package/dist/web/stores/fileLinkModesStore.d.mts +5 -0
  786. package/dist/web/stores/fileLinkModesStore.d.mts.map +1 -0
  787. package/dist/web/stores/fileLinkModesStore.mjs +20 -0
  788. package/dist/web/stores/fileLinkModesStore.mjs.map +1 -0
  789. package/dist/web/stores/menuStore.cjs +85 -0
  790. package/dist/web/stores/menuStore.cjs.map +1 -0
  791. package/dist/web/stores/menuStore.d.mts +42 -0
  792. package/dist/web/stores/menuStore.d.mts.map +1 -0
  793. package/dist/web/stores/menuStore.mjs +79 -0
  794. package/dist/web/stores/menuStore.mjs.map +1 -0
  795. package/dist/web/stores/newSessionStore.cjs +93 -0
  796. package/dist/web/stores/newSessionStore.cjs.map +1 -0
  797. package/dist/web/stores/newSessionStore.d.mts +30 -0
  798. package/dist/web/stores/newSessionStore.d.mts.map +1 -0
  799. package/dist/web/stores/newSessionStore.mjs +86 -0
  800. package/dist/web/stores/newSessionStore.mjs.map +1 -0
  801. package/dist/web/stores/pagedTranscriptStore.cjs +235 -0
  802. package/dist/web/stores/pagedTranscriptStore.cjs.map +1 -0
  803. package/dist/web/stores/pagedTranscriptStore.d.mts +12 -0
  804. package/dist/web/stores/pagedTranscriptStore.d.mts.map +1 -0
  805. package/dist/web/stores/pagedTranscriptStore.mjs +235 -0
  806. package/dist/web/stores/pagedTranscriptStore.mjs.map +1 -0
  807. package/dist/web/stores/paletteStore.cjs +37 -0
  808. package/dist/web/stores/paletteStore.cjs.map +1 -0
  809. package/dist/web/stores/paletteStore.d.mts +14 -0
  810. package/dist/web/stores/paletteStore.d.mts.map +1 -0
  811. package/dist/web/stores/paletteStore.mjs +34 -0
  812. package/dist/web/stores/paletteStore.mjs.map +1 -0
  813. package/dist/web/stores/railDialogStore.cjs +105 -0
  814. package/dist/web/stores/railDialogStore.cjs.map +1 -0
  815. package/dist/web/stores/railDialogStore.d.mts +32 -0
  816. package/dist/web/stores/railDialogStore.d.mts.map +1 -0
  817. package/dist/web/stores/railDialogStore.mjs +97 -0
  818. package/dist/web/stores/railDialogStore.mjs.map +1 -0
  819. package/dist/web/stores/remoteAccessStore.cjs +216 -0
  820. package/dist/web/stores/remoteAccessStore.cjs.map +1 -0
  821. package/dist/web/stores/remoteAccessStore.d.mts +48 -0
  822. package/dist/web/stores/remoteAccessStore.d.mts.map +1 -0
  823. package/dist/web/stores/remoteAccessStore.mjs +202 -0
  824. package/dist/web/stores/remoteAccessStore.mjs.map +1 -0
  825. package/dist/web/stores/sessionChannelHoldsStore.cjs +43 -0
  826. package/dist/web/stores/sessionChannelHoldsStore.cjs.map +1 -0
  827. package/dist/web/stores/sessionChannelHoldsStore.d.mts +9 -0
  828. package/dist/web/stores/sessionChannelHoldsStore.d.mts.map +1 -0
  829. package/dist/web/stores/sessionChannelHoldsStore.mjs +42 -0
  830. package/dist/web/stores/sessionChannelHoldsStore.mjs.map +1 -0
  831. package/dist/web/stores/sessionStore.cjs +610 -0
  832. package/dist/web/stores/sessionStore.cjs.map +1 -0
  833. package/dist/web/stores/sessionStore.d.mts +116 -0
  834. package/dist/web/stores/sessionStore.d.mts.map +1 -0
  835. package/dist/web/stores/sessionStore.mjs +568 -0
  836. package/dist/web/stores/sessionStore.mjs.map +1 -0
  837. package/dist/web/stores/sessionsStore.cjs +272 -0
  838. package/dist/web/stores/sessionsStore.cjs.map +1 -0
  839. package/dist/web/stores/sessionsStore.d.mts +74 -0
  840. package/dist/web/stores/sessionsStore.d.mts.map +1 -0
  841. package/dist/web/stores/sessionsStore.mjs +257 -0
  842. package/dist/web/stores/sessionsStore.mjs.map +1 -0
  843. package/dist/web/stores/settingsDraftStore.cjs +138 -0
  844. package/dist/web/stores/settingsDraftStore.cjs.map +1 -0
  845. package/dist/web/stores/settingsDraftStore.d.mts +27 -0
  846. package/dist/web/stores/settingsDraftStore.d.mts.map +1 -0
  847. package/dist/web/stores/settingsDraftStore.mjs +132 -0
  848. package/dist/web/stores/settingsDraftStore.mjs.map +1 -0
  849. package/dist/web/stores/templateStore.cjs +136 -0
  850. package/dist/web/stores/templateStore.cjs.map +1 -0
  851. package/dist/web/stores/templateStore.d.mts +20 -0
  852. package/dist/web/stores/templateStore.d.mts.map +1 -0
  853. package/dist/web/stores/templateStore.mjs +131 -0
  854. package/dist/web/stores/templateStore.mjs.map +1 -0
  855. package/dist/web/stores/themeStore.cjs +42 -0
  856. package/dist/web/stores/themeStore.cjs.map +1 -0
  857. package/dist/web/stores/themeStore.d.mts +20 -0
  858. package/dist/web/stores/themeStore.d.mts.map +1 -0
  859. package/dist/web/stores/themeStore.mjs +39 -0
  860. package/dist/web/stores/themeStore.mjs.map +1 -0
  861. package/dist/web/stores/threadStore.cjs +122 -0
  862. package/dist/web/stores/threadStore.cjs.map +1 -0
  863. package/dist/web/stores/threadStore.d.mts +24 -0
  864. package/dist/web/stores/threadStore.d.mts.map +1 -0
  865. package/dist/web/stores/threadStore.mjs +114 -0
  866. package/dist/web/stores/threadStore.mjs.map +1 -0
  867. package/dist/web/stores/toolPromptStore.cjs +15 -0
  868. package/dist/web/stores/toolPromptStore.cjs.map +1 -0
  869. package/dist/web/stores/toolPromptStore.d.mts +23 -0
  870. package/dist/web/stores/toolPromptStore.d.mts.map +1 -0
  871. package/dist/web/stores/toolPromptStore.mjs +14 -0
  872. package/dist/web/stores/toolPromptStore.mjs.map +1 -0
  873. package/dist/web/stores/transientTabsStore.cjs +66 -0
  874. package/dist/web/stores/transientTabsStore.cjs.map +1 -0
  875. package/dist/web/stores/transientTabsStore.d.mts +21 -0
  876. package/dist/web/stores/transientTabsStore.d.mts.map +1 -0
  877. package/dist/web/stores/transientTabsStore.mjs +59 -0
  878. package/dist/web/stores/transientTabsStore.mjs.map +1 -0
  879. package/dist/web/stores/uiStore.cjs +47 -0
  880. package/dist/web/stores/uiStore.cjs.map +1 -0
  881. package/dist/web/stores/uiStore.d.mts +18 -0
  882. package/dist/web/stores/uiStore.d.mts.map +1 -0
  883. package/dist/web/stores/uiStore.mjs +45 -0
  884. package/dist/web/stores/uiStore.mjs.map +1 -0
  885. package/dist/web/stores/useOpenTab.cjs +31 -0
  886. package/dist/web/stores/useOpenTab.cjs.map +1 -0
  887. package/dist/web/stores/useOpenTab.d.mts +9 -0
  888. package/dist/web/stores/useOpenTab.d.mts.map +1 -0
  889. package/dist/web/stores/useOpenTab.mjs +31 -0
  890. package/dist/web/stores/useOpenTab.mjs.map +1 -0
  891. package/dist/web/stores/usePluginSlotProps.cjs +115 -0
  892. package/dist/web/stores/usePluginSlotProps.cjs.map +1 -0
  893. package/dist/web/stores/usePluginSlotProps.d.mts +6 -0
  894. package/dist/web/stores/usePluginSlotProps.d.mts.map +1 -0
  895. package/dist/web/stores/usePluginSlotProps.mjs +115 -0
  896. package/dist/web/stores/usePluginSlotProps.mjs.map +1 -0
  897. package/dist/web/stores/useToolPrompt.cjs +42 -0
  898. package/dist/web/stores/useToolPrompt.cjs.map +1 -0
  899. package/dist/web/stores/useToolPrompt.d.mts +14 -0
  900. package/dist/web/stores/useToolPrompt.d.mts.map +1 -0
  901. package/dist/web/stores/useToolPrompt.mjs +42 -0
  902. package/dist/web/stores/useToolPrompt.mjs.map +1 -0
  903. package/dist/web/stores/useWebPluginRegistry.cjs +11 -0
  904. package/dist/web/stores/useWebPluginRegistry.cjs.map +1 -0
  905. package/dist/web/stores/useWebPluginRegistry.d.mts +5 -0
  906. package/dist/web/stores/useWebPluginRegistry.d.mts.map +1 -0
  907. package/dist/web/stores/useWebPluginRegistry.mjs +11 -0
  908. package/dist/web/stores/useWebPluginRegistry.mjs.map +1 -0
  909. package/dist/web/stores/workspaceAdmissionStore.cjs +67 -0
  910. package/dist/web/stores/workspaceAdmissionStore.cjs.map +1 -0
  911. package/dist/web/stores/workspaceAdmissionStore.d.mts +24 -0
  912. package/dist/web/stores/workspaceAdmissionStore.d.mts.map +1 -0
  913. package/dist/web/stores/workspaceAdmissionStore.mjs +64 -0
  914. package/dist/web/stores/workspaceAdmissionStore.mjs.map +1 -0
  915. package/dist/web/stores/workspacesStore.cjs +83 -0
  916. package/dist/web/stores/workspacesStore.cjs.map +1 -0
  917. package/dist/web/stores/workspacesStore.d.mts +17 -0
  918. package/dist/web/stores/workspacesStore.d.mts.map +1 -0
  919. package/dist/web/stores/workspacesStore.mjs +78 -0
  920. package/dist/web/stores/workspacesStore.mjs.map +1 -0
  921. package/llms.txt +3 -0
  922. package/package.json +107 -0
  923. package/styles/dashboard.css +2 -0
  924. package/styles/preview.css +3 -0
@@ -0,0 +1,302 @@
1
+ const require_pluginRegistry = require("../../lib/pluginRegistry.cjs");
2
+ const require_composition = require("../../lib/composition.cjs");
3
+ const require_hubApi = require("../../lib/hubApi.cjs");
4
+ const require_sessionAvatar = require("../../lib/sessionAvatar.cjs");
5
+ const require_sessionMcpApi = require("../../lib/sessionMcpApi.cjs");
6
+ const require_sessionRailModel = require("../../lib/sessionRailModel.cjs");
7
+ const require_settingsSections = require("../../lib/settingsSections.cjs");
8
+ const require_sessionsStore = require("../../stores/sessionsStore.cjs");
9
+ const require_sessionStore = require("../../stores/sessionStore.cjs");
10
+ const require_newSessionStore = require("../../stores/newSessionStore.cjs");
11
+ const require_paletteStore = require("../../stores/paletteStore.cjs");
12
+ const require_railDialogStore = require("../../stores/railDialogStore.cjs");
13
+ const require_remoteAccessStore = require("../../stores/remoteAccessStore.cjs");
14
+ const require_workspacesStore = require("../../stores/workspacesStore.cjs");
15
+ const require_workspaceAdmissionStore = require("../../stores/workspaceAdmissionStore.cjs");
16
+ const require_PluginSurface = require("../../components/PluginSurface.cjs");
17
+ let react = require("react");
18
+ let _tanstack_react_router = require("@tanstack/react-router");
19
+ let _tanstack_react_store = require("@tanstack/react-store");
20
+ let react_jsx_runtime = require("react/jsx-runtime");
21
+ //#region src/web/features/sessions/useSessionRail.tsx
22
+ const STATUS_REFRESH_MS = 3e4;
23
+ function isEditable(target) {
24
+ if (!(target instanceof HTMLElement)) return false;
25
+ return target.isContentEditable || target.tagName === "INPUT" || target.tagName === "TEXTAREA";
26
+ }
27
+ /** A key pressed inside an overlay belongs to that overlay, never to the rail. */
28
+ function insideOverlay(target) {
29
+ return target instanceof Element && target.closest("[role=\"dialog\"], [role=\"menu\"], [role=\"alertdialog\"]") !== null;
30
+ }
31
+ /**
32
+ * Loads each distinct profile avatar once, keyed by profile and icon version so
33
+ * sessions sharing a persona share one image, and revokes images no card shows.
34
+ */
35
+ function useSessionAvatars(order, byId) {
36
+ const wanted = /* @__PURE__ */ new Map();
37
+ for (const id of order) {
38
+ const profile = byId[id]?.summary.profile;
39
+ if (profile?.iconVersion !== void 0) wanted.set(id, `${profile.name}:${profile.iconVersion}`);
40
+ }
41
+ const wantedKey = [...wanted].map(([id, key]) => `${id}=${key}`).join("\n");
42
+ const [loaded, setLoaded] = (0, react.useState)({});
43
+ const requested = (0, react.useRef)(/* @__PURE__ */ new Set());
44
+ (0, react.useEffect)(() => {
45
+ const keys = new Set(wanted.values());
46
+ for (const [id, key] of wanted) {
47
+ if (requested.current.has(key)) continue;
48
+ requested.current.add(key);
49
+ const version = key.slice(key.lastIndexOf(":") + 1);
50
+ require_sessionAvatar.loadSessionAvatar(id, version).then((url) => setLoaded((previous) => ({
51
+ ...previous,
52
+ [key]: url
53
+ })), () => void 0);
54
+ }
55
+ setLoaded((previous) => {
56
+ const stale = Object.keys(previous).filter((key) => !keys.has(key));
57
+ if (stale.length === 0) return previous;
58
+ const next = { ...previous };
59
+ for (const key of stale) {
60
+ URL.revokeObjectURL(next[key]);
61
+ delete next[key];
62
+ requested.current.delete(key);
63
+ }
64
+ return next;
65
+ });
66
+ }, [wantedKey]);
67
+ (0, react.useEffect)(() => () => {
68
+ setLoaded((previous) => {
69
+ for (const url of Object.values(previous)) URL.revokeObjectURL(url);
70
+ return {};
71
+ });
72
+ }, []);
73
+ const urls = {};
74
+ for (const [id, key] of wanted) {
75
+ const url = loaded[key];
76
+ if (url !== void 0) urls[id] = url;
77
+ }
78
+ return urls;
79
+ }
80
+ /**
81
+ * The session rail as data and actions for the active template.
82
+ *
83
+ * Owns what must keep working whichever template renders (or hides) the rail:
84
+ * the status clock, workspace hydration, the Ctrl+T and 1-9 shortcuts, and the
85
+ * actions that reach the hub and the router.
86
+ */
87
+ function useSessionRail({ onDismiss }) {
88
+ const navigate = (0, _tanstack_react_router.useNavigate)();
89
+ const scrollTop = (0, react.useRef)(0);
90
+ const scrollRef = (0, react.useCallback)((element) => {
91
+ if (element === null) return;
92
+ element.scrollTop = scrollTop.current;
93
+ return () => {
94
+ scrollTop.current = element.scrollTop;
95
+ };
96
+ }, []);
97
+ const order = (0, _tanstack_react_store.useStore)(require_sessionsStore.sessionsStore, (state) => state.order);
98
+ const byId = (0, _tanstack_react_store.useStore)(require_sessionsStore.sessionsStore, (state) => state.byId);
99
+ const activeId = (0, _tanstack_react_store.useStore)(require_sessionsStore.sessionsStore, (state) => state.activeId);
100
+ const workspaceOrder = (0, _tanstack_react_store.useStore)(require_workspacesStore.workspacesStore, (state) => state.order);
101
+ const workspacesById = (0, _tanstack_react_store.useStore)(require_workspacesStore.workspacesStore, (state) => state.byId);
102
+ const selectedWorkspaceId = (0, _tanstack_react_store.useStore)(require_workspacesStore.workspacesStore, (state) => state.selectedId);
103
+ const workspacesHydrated = (0, _tanstack_react_store.useStore)(require_workspacesStore.workspacesStore, (state) => state.hydrated);
104
+ const hasDialog = (0, _tanstack_react_store.useStore)(require_sessionStore.sessionStoreFor(activeId), (state) => state.dialog !== null);
105
+ const remote = (0, _tanstack_react_store.useStore)(require_remoteAccessStore.remoteAccessStore, (state) => state.view);
106
+ const creating = (0, _tanstack_react_store.useStore)(require_newSessionStore.newSessionStore, (state) => state);
107
+ const [now, setNow] = (0, react.useState)(() => Date.now());
108
+ const restarts = (0, _tanstack_react_store.useStore)(require_railDialogStore.railRestartStore);
109
+ const avatarUrls = useSessionAvatars(order, byId);
110
+ const backgroundWorkKey = (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => {
111
+ const releases = [require_composition.subscribeActivitySources(listener), ...order.map((id) => {
112
+ const subscription = require_sessionStore.sessionStoreFor(id).subscribe(listener);
113
+ return () => subscription.unsubscribe();
114
+ })];
115
+ return () => releases.forEach((release) => release());
116
+ }, [order]), () => JSON.stringify(order.filter((id) => {
117
+ const { statuses, widgets } = require_sessionStore.sessionStoreFor(id).state;
118
+ return require_composition.activityGroups(statuses, widgets, id).some((group) => group.active && group.marksBackgroundWork !== false);
119
+ })));
120
+ const backgroundWorkSessions = (0, react.useMemo)(() => new Set(JSON.parse(backgroundWorkKey)), [backgroundWorkKey]);
121
+ (0, react.useEffect)(() => {
122
+ const timer = setInterval(() => setNow(Date.now()), STATUS_REFRESH_MS);
123
+ return () => clearInterval(timer);
124
+ }, []);
125
+ (0, react.useEffect)(() => {
126
+ if (workspacesHydrated) return;
127
+ let stale = false;
128
+ require_hubApi.listWorkspaces().then((result) => {
129
+ if (!stale && "workspaces" in result) require_workspacesStore.applyWorkspacesSnapshot(result);
130
+ });
131
+ return () => {
132
+ stale = true;
133
+ };
134
+ }, [workspacesHydrated]);
135
+ (0, react.useEffect)(() => {
136
+ const workspaceId = activeId === null ? void 0 : byId[activeId]?.summary.workspaceId;
137
+ if (workspaceId !== void 0 && workspacesById[workspaceId] !== void 0) require_workspacesStore.selectWorkspace(workspaceId);
138
+ }, [
139
+ activeId,
140
+ byId,
141
+ workspacesById
142
+ ]);
143
+ (0, react.useEffect)(() => {
144
+ const onKeyDown = (event) => {
145
+ if (event.ctrlKey && !event.metaKey && !event.altKey && event.key === "t") {
146
+ event.preventDefault();
147
+ onDismiss?.();
148
+ require_newSessionStore.openNewSession(selectedWorkspaceId);
149
+ return;
150
+ }
151
+ if (event.ctrlKey || event.metaKey || event.altKey || event.defaultPrevented) return;
152
+ if (isEditable(event.target) || insideOverlay(event.target) || require_paletteStore.paletteStore.state.open || hasDialog) return;
153
+ const ordinal = Number.parseInt(event.key, 10);
154
+ if (!Number.isInteger(ordinal) || ordinal < 1 || ordinal > 9) return;
155
+ const target = order[ordinal - 1];
156
+ if (target === void 0) return;
157
+ event.preventDefault();
158
+ onDismiss?.();
159
+ navigate({
160
+ to: "/session/$sessionId",
161
+ params: { sessionId: target }
162
+ });
163
+ };
164
+ window.addEventListener("keydown", onKeyDown);
165
+ return () => window.removeEventListener("keydown", onKeyDown);
166
+ }, [
167
+ order,
168
+ hasDialog,
169
+ navigate,
170
+ onDismiss,
171
+ selectedWorkspaceId
172
+ ]);
173
+ const workspaces = (0, react.useMemo)(() => require_sessionRailModel.buildRailWorkspaces({
174
+ order,
175
+ byId,
176
+ activeId,
177
+ workspaceOrder,
178
+ workspacesById,
179
+ nested: new Set(order.filter((id) => require_sessionsStore.resolveParentId(byId, id) !== void 0)),
180
+ now,
181
+ restarts,
182
+ avatarUrls,
183
+ backgroundWorkSessions
184
+ }), [
185
+ order,
186
+ byId,
187
+ activeId,
188
+ workspaceOrder,
189
+ workspacesById,
190
+ now,
191
+ restarts,
192
+ avatarUrls,
193
+ backgroundWorkSessions
194
+ ]);
195
+ const addingWorkspace = creating.open && (creating.workspaceId === null || workspacesById[creating.workspaceId] === void 0);
196
+ return {
197
+ workspaces,
198
+ scrollRef,
199
+ remote: {
200
+ status: remote?.status ?? "off",
201
+ deviceCount: remote?.devices.length ?? 0,
202
+ ...remote?.publicUrl === void 0 ? {} : { host: new URL(remote.publicUrl).host },
203
+ ...remote?.error === void 0 ? {} : { error: remote.error }
204
+ },
205
+ pluginContent: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PluginSurface.PluginSurface, {
206
+ slot: require_pluginRegistry.HOST_SLOTS.rail,
207
+ sessionId: activeId
208
+ }),
209
+ ...addingWorkspace ? { addWorkspace: { suggestedPaths: remote?.settings.sandbox.workspaces ?? [] } } : {},
210
+ actions: {
211
+ openSession(sessionId) {
212
+ onDismiss?.();
213
+ navigate({
214
+ to: "/session/$sessionId",
215
+ params: { sessionId }
216
+ });
217
+ },
218
+ renameSession(sessionId, name) {
219
+ const trimmed = name.trim();
220
+ if (trimmed !== "" && trimmed !== byId[sessionId]?.summary.name) require_sessionStore.renameSession(trimmed, sessionId);
221
+ },
222
+ restartSession(sessionId) {
223
+ require_railDialogStore.restartDashboardSession(sessionId);
224
+ },
225
+ async removeSession(sessionId) {
226
+ const result = await require_hubApi.stopSession(sessionId);
227
+ if ("error" in result) return { error: result.error };
228
+ require_sessionsStore.applySessionRemoved({ sessionId });
229
+ },
230
+ resumeSession(sessionId) {
231
+ require_railDialogStore.openResumeDialog({ sessionId });
232
+ },
233
+ createSession(workspaceId) {
234
+ require_workspacesStore.selectWorkspace(workspaceId);
235
+ onDismiss?.();
236
+ require_newSessionStore.openNewSession(workspaceId);
237
+ },
238
+ resumeInWorkspace(workspaceId) {
239
+ require_railDialogStore.openResumeDialog({ workspaceId });
240
+ },
241
+ openWorkspaceSettings(workspaceId) {
242
+ require_workspacesStore.selectWorkspace(workspaceId);
243
+ onDismiss?.();
244
+ navigate({
245
+ to: "/settings/$section",
246
+ params: { section: require_settingsSections.DEFAULT_REPOSITORY_SETTINGS_SECTION },
247
+ search: { workspace: workspaceId }
248
+ });
249
+ },
250
+ async deleteWorkspace(workspaceId) {
251
+ const result = await require_hubApi.removeWorkspace(workspaceId);
252
+ if ("error" in result) return { error: result.error };
253
+ require_workspacesStore.applyWorkspaceRemoved({ workspaceId });
254
+ },
255
+ openAddWorkspace() {
256
+ onDismiss?.();
257
+ require_newSessionStore.openNewSession(null);
258
+ },
259
+ closeAddWorkspace() {
260
+ if (require_workspaceAdmissionStore.workspaceAdmissionStore.state.pending) return;
261
+ require_workspaceAdmissionStore.resetWorkspaceAdmission();
262
+ require_newSessionStore.closeNewSession();
263
+ },
264
+ async addWorkspace(input) {
265
+ const result = await require_workspaceAdmissionStore.admitDashboardWorkspace(input);
266
+ if (result === void 0) require_newSessionStore.closeNewSession();
267
+ return result;
268
+ },
269
+ searchDirectories: require_hubApi.searchDirectories,
270
+ listDirectory: require_hubApi.listDirectory,
271
+ async removePendingSetup(sessionId, setupId) {
272
+ const workspaceId = byId[sessionId]?.summary.workspaceId;
273
+ if (workspaceId === void 0) return { error: "This session belongs to no workspace." };
274
+ const result = await require_sessionMcpApi.removeSessionMcpSetup(workspaceId, sessionId, setupId);
275
+ return "error" in result ? { error: result.error } : void 0;
276
+ },
277
+ openSettings() {
278
+ onDismiss?.();
279
+ navigate({
280
+ to: "/settings/$section",
281
+ params: { section: require_settingsSections.DEFAULT_SETTINGS_SECTION },
282
+ search: { workspace: selectedWorkspaceId ?? void 0 }
283
+ });
284
+ },
285
+ openRemoteAccess() {
286
+ onDismiss?.();
287
+ require_remoteAccessStore.openRemoteDialog();
288
+ },
289
+ turnRemoteAccessOff() {
290
+ require_remoteAccessStore.turnRemoteAccessOff();
291
+ },
292
+ renderSessionMenuItems: (sessionId) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PluginSurface.PluginSurface, {
293
+ slot: require_pluginRegistry.HOST_SLOTS.sessionMenu,
294
+ sessionId
295
+ })
296
+ }
297
+ };
298
+ }
299
+ //#endregion
300
+ exports.useSessionRail = useSessionRail;
301
+
302
+ //# sourceMappingURL=useSessionRail.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionRail.cjs","names":["useState","useRef","loadSessionAvatar","useNavigate","useCallback","useStore","sessionsStore","workspacesStore","sessionStoreFor","remoteAccessStore","newSessionStore","railRestartStore","useSyncExternalStore","subscribeActivitySources","activityGroups","useMemo","listWorkspaces","paletteStore","buildRailWorkspaces","resolveParentId","PluginSurface","HOST_SLOTS","restartDashboardSession","stopSession","DEFAULT_REPOSITORY_SETTINGS_SECTION","removeWorkspace","workspaceAdmissionStore","admitDashboardWorkspace","removeSessionMcpSetup","DEFAULT_SETTINGS_SECTION","turnRemoteAccessOff"],"sources":["../../../../src/web/features/sessions/useSessionRail.tsx"],"sourcesContent":["import type { WebTemplateRail } from '@agimon-ai/po-core/web';\nimport { useNavigate } from '@tanstack/react-router';\nimport { useStore } from '@tanstack/react-store';\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\n\nimport { PluginSurface } from '../../components/PluginSurface';\nimport { activityGroups, subscribeActivitySources } from '../../lib/composition';\nimport { listDirectory, listWorkspaces, removeWorkspace, searchDirectories, stopSession } from '../../lib/hubApi';\nimport { HOST_SLOTS } from '../../lib/pluginRegistry';\nimport { loadSessionAvatar } from '../../lib/sessionAvatar';\nimport { removeSessionMcpSetup } from '../../lib/sessionMcpApi';\nimport { buildRailWorkspaces } from '../../lib/sessionRailModel';\nimport { DEFAULT_REPOSITORY_SETTINGS_SECTION, DEFAULT_SETTINGS_SECTION } from '../../lib/settingsSections';\nimport { closeNewSession, newSessionStore, openNewSession } from '../../stores/newSessionStore';\nimport { paletteStore } from '../../stores/paletteStore';\nimport { openResumeDialog, railRestartStore, restartDashboardSession } from '../../stores/railDialogStore';\nimport { openRemoteDialog, remoteAccessStore, turnRemoteAccessOff } from '../../stores/remoteAccessStore';\nimport { applySessionRemoved, resolveParentId, sessionsStore, type SessionMeta } from '../../stores/sessionsStore';\nimport { renameSession, sessionStoreFor } from '../../stores/sessionStore';\nimport {\n admitDashboardWorkspace,\n resetWorkspaceAdmission,\n workspaceAdmissionStore,\n} from '../../stores/workspaceAdmissionStore';\nimport {\n applyWorkspaceRemoved,\n applyWorkspacesSnapshot,\n selectWorkspace,\n workspacesStore,\n} from '../../stores/workspacesStore';\n\nconst STATUS_REFRESH_MS = 30_000;\n\nfunction isEditable(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return target.isContentEditable || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA';\n}\n\n/** A key pressed inside an overlay belongs to that overlay, never to the rail. */\nfunction insideOverlay(target: EventTarget | null): boolean {\n return target instanceof Element && target.closest('[role=\"dialog\"], [role=\"menu\"], [role=\"alertdialog\"]') !== null;\n}\n\n/**\n * Loads each distinct profile avatar once, keyed by profile and icon version so\n * sessions sharing a persona share one image, and revokes images no card shows.\n */\nfunction useSessionAvatars(order: readonly string[], byId: Readonly<Record<string, SessionMeta>>) {\n const wanted = new Map<string, string>();\n for (const id of order) {\n const profile = byId[id]?.summary.profile;\n if (profile?.iconVersion !== undefined) wanted.set(id, `${profile.name}:${profile.iconVersion}`);\n }\n const wantedKey = [...wanted].map(([id, key]) => `${id}=${key}`).join('\\n');\n const [loaded, setLoaded] = useState<Readonly<Record<string, string>>>({});\n const requested = useRef(new Set<string>());\n\n useEffect(() => {\n const keys = new Set(wanted.values());\n for (const [id, key] of wanted) {\n if (requested.current.has(key)) continue;\n requested.current.add(key);\n const version = key.slice(key.lastIndexOf(':') + 1);\n void loadSessionAvatar(id, version).then(\n (url) => setLoaded((previous) => ({ ...previous, [key]: url })),\n // A missing image leaves the initials in place; the next icon version retries.\n () => undefined,\n );\n }\n setLoaded((previous) => {\n const stale = Object.keys(previous).filter((key) => !keys.has(key));\n if (stale.length === 0) return previous;\n const next = { ...previous };\n for (const key of stale) {\n URL.revokeObjectURL(next[key]!);\n delete next[key];\n requested.current.delete(key);\n }\n return next;\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `wanted` is rebuilt each render; `wantedKey` tracks its content.\n }, [wantedKey]);\n\n useEffect(\n () => () => {\n setLoaded((previous) => {\n for (const url of Object.values(previous)) URL.revokeObjectURL(url);\n return {};\n });\n },\n [],\n );\n\n const urls: Record<string, string> = {};\n for (const [id, key] of wanted) {\n const url = loaded[key];\n if (url !== undefined) urls[id] = url;\n }\n return urls;\n}\n\n/**\n * The session rail as data and actions for the active template.\n *\n * Owns what must keep working whichever template renders (or hides) the rail:\n * the status clock, workspace hydration, the Ctrl+T and 1-9 shortcuts, and the\n * actions that reach the hub and the router.\n */\nexport function useSessionRail({ onDismiss }: { onDismiss?: () => void }): WebTemplateRail {\n const navigate = useNavigate();\n const scrollTop = useRef(0);\n const scrollRef = useCallback((element: HTMLElement | null) => {\n if (element === null) return;\n element.scrollTop = scrollTop.current;\n return () => {\n scrollTop.current = element.scrollTop;\n };\n }, []);\n const order = useStore(sessionsStore, (state) => state.order);\n const byId = useStore(sessionsStore, (state) => state.byId);\n const activeId = useStore(sessionsStore, (state) => state.activeId);\n const workspaceOrder = useStore(workspacesStore, (state) => state.order);\n const workspacesById = useStore(workspacesStore, (state) => state.byId);\n const selectedWorkspaceId = useStore(workspacesStore, (state) => state.selectedId);\n const workspacesHydrated = useStore(workspacesStore, (state) => state.hydrated);\n const hasDialog = useStore(sessionStoreFor(activeId), (state) => state.dialog !== null);\n const remote = useStore(remoteAccessStore, (state) => state.view);\n const creating = useStore(newSessionStore, (state) => state);\n const [now, setNow] = useState(() => Date.now());\n const restarts = useStore(railRestartStore);\n const avatarUrls = useSessionAvatars(order, byId);\n const backgroundWorkKey = useSyncExternalStore(\n useCallback(\n (listener: () => void) => {\n const releases = [\n subscribeActivitySources(listener),\n ...order.map((id) => {\n const subscription = sessionStoreFor(id).subscribe(listener);\n return () => subscription.unsubscribe();\n }),\n ];\n return () => releases.forEach((release) => release());\n },\n [order],\n ),\n () =>\n JSON.stringify(\n order.filter((id) => {\n const { statuses, widgets } = sessionStoreFor(id).state;\n return activityGroups(statuses, widgets, id).some(\n (group) => group.active && group.marksBackgroundWork !== false,\n );\n }),\n ),\n );\n const backgroundWorkSessions = useMemo<ReadonlySet<string>>(\n () => new Set(JSON.parse(backgroundWorkKey) as string[]),\n [backgroundWorkKey],\n );\n\n useEffect(() => {\n const timer = setInterval(() => setNow(Date.now()), STATUS_REFRESH_MS);\n return () => clearInterval(timer);\n }, []);\n\n useEffect(() => {\n if (workspacesHydrated) return;\n let stale = false;\n void listWorkspaces().then((result) => {\n if (!stale && 'workspaces' in result) applyWorkspacesSnapshot(result);\n });\n return () => {\n stale = true;\n };\n }, [workspacesHydrated]);\n\n useEffect(() => {\n const workspaceId = activeId === null ? undefined : byId[activeId]?.summary.workspaceId;\n if (workspaceId !== undefined && workspacesById[workspaceId] !== undefined) selectWorkspace(workspaceId);\n }, [activeId, byId, workspacesById]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.ctrlKey && !event.metaKey && !event.altKey && event.key === 't') {\n event.preventDefault();\n onDismiss?.();\n openNewSession(selectedWorkspaceId);\n return;\n }\n if (event.ctrlKey || event.metaKey || event.altKey || event.defaultPrevented) return;\n if (isEditable(event.target) || insideOverlay(event.target) || paletteStore.state.open || hasDialog) return;\n const ordinal = Number.parseInt(event.key, 10);\n if (!Number.isInteger(ordinal) || ordinal < 1 || ordinal > 9) return;\n const target = order[ordinal - 1];\n if (target === undefined) return;\n event.preventDefault();\n onDismiss?.();\n void navigate({ to: '/session/$sessionId', params: { sessionId: target } });\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [order, hasDialog, navigate, onDismiss, selectedWorkspaceId]);\n\n const workspaces = useMemo(\n () =>\n buildRailWorkspaces({\n order,\n byId,\n activeId,\n workspaceOrder,\n workspacesById,\n nested: new Set(order.filter((id) => resolveParentId(byId, id) !== undefined)),\n now,\n restarts,\n avatarUrls,\n backgroundWorkSessions,\n }),\n [order, byId, activeId, workspaceOrder, workspacesById, now, restarts, avatarUrls, backgroundWorkSessions],\n );\n\n const addingWorkspace =\n creating.open && (creating.workspaceId === null || workspacesById[creating.workspaceId] === undefined);\n\n return {\n workspaces,\n scrollRef,\n remote: {\n status: remote?.status ?? 'off',\n deviceCount: remote?.devices.length ?? 0,\n ...(remote?.publicUrl === undefined ? {} : { host: new URL(remote.publicUrl).host }),\n ...(remote?.error === undefined ? {} : { error: remote.error }),\n },\n pluginContent: <PluginSurface slot={HOST_SLOTS.rail} sessionId={activeId} />,\n ...(addingWorkspace ? { addWorkspace: { suggestedPaths: remote?.settings.sandbox.workspaces ?? [] } } : {}),\n actions: {\n openSession(sessionId) {\n onDismiss?.();\n void navigate({ to: '/session/$sessionId', params: { sessionId } });\n },\n renameSession(sessionId, name) {\n const trimmed = name.trim();\n if (trimmed !== '' && trimmed !== byId[sessionId]?.summary.name) renameSession(trimmed, sessionId);\n },\n restartSession(sessionId) {\n void restartDashboardSession(sessionId);\n },\n async removeSession(sessionId) {\n const result = await stopSession(sessionId);\n if ('error' in result) return { error: result.error };\n applySessionRemoved({ sessionId });\n return undefined;\n },\n resumeSession(sessionId) {\n openResumeDialog({ sessionId });\n },\n createSession(workspaceId) {\n selectWorkspace(workspaceId);\n onDismiss?.();\n openNewSession(workspaceId);\n },\n resumeInWorkspace(workspaceId) {\n openResumeDialog({ workspaceId });\n },\n openWorkspaceSettings(workspaceId) {\n selectWorkspace(workspaceId);\n onDismiss?.();\n void navigate({\n to: '/settings/$section',\n params: { section: DEFAULT_REPOSITORY_SETTINGS_SECTION },\n search: { workspace: workspaceId },\n });\n },\n async deleteWorkspace(workspaceId) {\n const result = await removeWorkspace(workspaceId);\n if ('error' in result) return { error: result.error };\n applyWorkspaceRemoved({ workspaceId });\n return undefined;\n },\n openAddWorkspace() {\n onDismiss?.();\n openNewSession(null);\n },\n closeAddWorkspace() {\n if (workspaceAdmissionStore.state.pending) return;\n resetWorkspaceAdmission();\n closeNewSession();\n },\n async addWorkspace(input) {\n const result = await admitDashboardWorkspace(input);\n if (result === undefined) closeNewSession();\n return result;\n },\n searchDirectories,\n listDirectory,\n async removePendingSetup(sessionId, setupId) {\n const workspaceId = byId[sessionId]?.summary.workspaceId;\n if (workspaceId === undefined) return { error: 'This session belongs to no workspace.' };\n const result = await removeSessionMcpSetup(workspaceId, sessionId, setupId);\n return 'error' in result ? { error: result.error } : undefined;\n },\n openSettings() {\n onDismiss?.();\n void navigate({\n to: '/settings/$section',\n params: { section: DEFAULT_SETTINGS_SECTION },\n search: { workspace: selectedWorkspaceId ?? undefined },\n });\n },\n openRemoteAccess() {\n onDismiss?.();\n openRemoteDialog();\n },\n turnRemoteAccessOff() {\n void turnRemoteAccessOff();\n },\n renderSessionMenuItems: (sessionId) => <PluginSurface slot={HOST_SLOTS.sessionMenu} sessionId={sessionId} />,\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { WebTemplateRail } from "@agimon-ai/po-core/web";
2
+ //#region src/web/features/sessions/useSessionRail.d.ts
3
+ /**
4
+ * The session rail as data and actions for the active template.
5
+ *
6
+ * Owns what must keep working whichever template renders (or hides) the rail:
7
+ * the status clock, workspace hydration, the Ctrl+T and 1-9 shortcuts, and the
8
+ * actions that reach the hub and the router.
9
+ */
10
+ export declare function useSessionRail({ onDismiss }: {
11
+ onDismiss?: () => void;
12
+ }): WebTemplateRail;
13
+ //#endregion
14
+ //# sourceMappingURL=useSessionRail.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionRail.d.mts","names":[],"sources":["../../../../src/web/features/sessions/useSessionRail.tsx"],"mappings":";;;;;;;;;wBA4GgB,iBAAiB;EAAe;IAA2B"}
@@ -0,0 +1,302 @@
1
+ import { HOST_SLOTS } from "../../lib/pluginRegistry.mjs";
2
+ import { activityGroups, subscribeActivitySources } from "../../lib/composition.mjs";
3
+ import { listDirectory, listWorkspaces, removeWorkspace, searchDirectories, stopSession } from "../../lib/hubApi.mjs";
4
+ import { loadSessionAvatar } from "../../lib/sessionAvatar.mjs";
5
+ import { removeSessionMcpSetup } from "../../lib/sessionMcpApi.mjs";
6
+ import { buildRailWorkspaces } from "../../lib/sessionRailModel.mjs";
7
+ import { DEFAULT_REPOSITORY_SETTINGS_SECTION, DEFAULT_SETTINGS_SECTION } from "../../lib/settingsSections.mjs";
8
+ import { applySessionRemoved, resolveParentId, sessionsStore } from "../../stores/sessionsStore.mjs";
9
+ import { renameSession, sessionStoreFor } from "../../stores/sessionStore.mjs";
10
+ import { closeNewSession, newSessionStore, openNewSession } from "../../stores/newSessionStore.mjs";
11
+ import { paletteStore } from "../../stores/paletteStore.mjs";
12
+ import { openResumeDialog, railRestartStore, restartDashboardSession } from "../../stores/railDialogStore.mjs";
13
+ import { openRemoteDialog, remoteAccessStore, turnRemoteAccessOff } from "../../stores/remoteAccessStore.mjs";
14
+ import { applyWorkspaceRemoved, applyWorkspacesSnapshot, selectWorkspace, workspacesStore } from "../../stores/workspacesStore.mjs";
15
+ import { admitDashboardWorkspace, resetWorkspaceAdmission, workspaceAdmissionStore } from "../../stores/workspaceAdmissionStore.mjs";
16
+ import { PluginSurface } from "../../components/PluginSurface.mjs";
17
+ import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
18
+ import { useNavigate } from "@tanstack/react-router";
19
+ import { useStore } from "@tanstack/react-store";
20
+ import { jsx } from "react/jsx-runtime";
21
+ //#region src/web/features/sessions/useSessionRail.tsx
22
+ const STATUS_REFRESH_MS = 3e4;
23
+ function isEditable(target) {
24
+ if (!(target instanceof HTMLElement)) return false;
25
+ return target.isContentEditable || target.tagName === "INPUT" || target.tagName === "TEXTAREA";
26
+ }
27
+ /** A key pressed inside an overlay belongs to that overlay, never to the rail. */
28
+ function insideOverlay(target) {
29
+ return target instanceof Element && target.closest("[role=\"dialog\"], [role=\"menu\"], [role=\"alertdialog\"]") !== null;
30
+ }
31
+ /**
32
+ * Loads each distinct profile avatar once, keyed by profile and icon version so
33
+ * sessions sharing a persona share one image, and revokes images no card shows.
34
+ */
35
+ function useSessionAvatars(order, byId) {
36
+ const wanted = /* @__PURE__ */ new Map();
37
+ for (const id of order) {
38
+ const profile = byId[id]?.summary.profile;
39
+ if (profile?.iconVersion !== void 0) wanted.set(id, `${profile.name}:${profile.iconVersion}`);
40
+ }
41
+ const wantedKey = [...wanted].map(([id, key]) => `${id}=${key}`).join("\n");
42
+ const [loaded, setLoaded] = useState({});
43
+ const requested = useRef(/* @__PURE__ */ new Set());
44
+ useEffect(() => {
45
+ const keys = new Set(wanted.values());
46
+ for (const [id, key] of wanted) {
47
+ if (requested.current.has(key)) continue;
48
+ requested.current.add(key);
49
+ const version = key.slice(key.lastIndexOf(":") + 1);
50
+ loadSessionAvatar(id, version).then((url) => setLoaded((previous) => ({
51
+ ...previous,
52
+ [key]: url
53
+ })), () => void 0);
54
+ }
55
+ setLoaded((previous) => {
56
+ const stale = Object.keys(previous).filter((key) => !keys.has(key));
57
+ if (stale.length === 0) return previous;
58
+ const next = { ...previous };
59
+ for (const key of stale) {
60
+ URL.revokeObjectURL(next[key]);
61
+ delete next[key];
62
+ requested.current.delete(key);
63
+ }
64
+ return next;
65
+ });
66
+ }, [wantedKey]);
67
+ useEffect(() => () => {
68
+ setLoaded((previous) => {
69
+ for (const url of Object.values(previous)) URL.revokeObjectURL(url);
70
+ return {};
71
+ });
72
+ }, []);
73
+ const urls = {};
74
+ for (const [id, key] of wanted) {
75
+ const url = loaded[key];
76
+ if (url !== void 0) urls[id] = url;
77
+ }
78
+ return urls;
79
+ }
80
+ /**
81
+ * The session rail as data and actions for the active template.
82
+ *
83
+ * Owns what must keep working whichever template renders (or hides) the rail:
84
+ * the status clock, workspace hydration, the Ctrl+T and 1-9 shortcuts, and the
85
+ * actions that reach the hub and the router.
86
+ */
87
+ function useSessionRail({ onDismiss }) {
88
+ const navigate = useNavigate();
89
+ const scrollTop = useRef(0);
90
+ const scrollRef = useCallback((element) => {
91
+ if (element === null) return;
92
+ element.scrollTop = scrollTop.current;
93
+ return () => {
94
+ scrollTop.current = element.scrollTop;
95
+ };
96
+ }, []);
97
+ const order = useStore(sessionsStore, (state) => state.order);
98
+ const byId = useStore(sessionsStore, (state) => state.byId);
99
+ const activeId = useStore(sessionsStore, (state) => state.activeId);
100
+ const workspaceOrder = useStore(workspacesStore, (state) => state.order);
101
+ const workspacesById = useStore(workspacesStore, (state) => state.byId);
102
+ const selectedWorkspaceId = useStore(workspacesStore, (state) => state.selectedId);
103
+ const workspacesHydrated = useStore(workspacesStore, (state) => state.hydrated);
104
+ const hasDialog = useStore(sessionStoreFor(activeId), (state) => state.dialog !== null);
105
+ const remote = useStore(remoteAccessStore, (state) => state.view);
106
+ const creating = useStore(newSessionStore, (state) => state);
107
+ const [now, setNow] = useState(() => Date.now());
108
+ const restarts = useStore(railRestartStore);
109
+ const avatarUrls = useSessionAvatars(order, byId);
110
+ const backgroundWorkKey = useSyncExternalStore(useCallback((listener) => {
111
+ const releases = [subscribeActivitySources(listener), ...order.map((id) => {
112
+ const subscription = sessionStoreFor(id).subscribe(listener);
113
+ return () => subscription.unsubscribe();
114
+ })];
115
+ return () => releases.forEach((release) => release());
116
+ }, [order]), () => JSON.stringify(order.filter((id) => {
117
+ const { statuses, widgets } = sessionStoreFor(id).state;
118
+ return activityGroups(statuses, widgets, id).some((group) => group.active && group.marksBackgroundWork !== false);
119
+ })));
120
+ const backgroundWorkSessions = useMemo(() => new Set(JSON.parse(backgroundWorkKey)), [backgroundWorkKey]);
121
+ useEffect(() => {
122
+ const timer = setInterval(() => setNow(Date.now()), STATUS_REFRESH_MS);
123
+ return () => clearInterval(timer);
124
+ }, []);
125
+ useEffect(() => {
126
+ if (workspacesHydrated) return;
127
+ let stale = false;
128
+ listWorkspaces().then((result) => {
129
+ if (!stale && "workspaces" in result) applyWorkspacesSnapshot(result);
130
+ });
131
+ return () => {
132
+ stale = true;
133
+ };
134
+ }, [workspacesHydrated]);
135
+ useEffect(() => {
136
+ const workspaceId = activeId === null ? void 0 : byId[activeId]?.summary.workspaceId;
137
+ if (workspaceId !== void 0 && workspacesById[workspaceId] !== void 0) selectWorkspace(workspaceId);
138
+ }, [
139
+ activeId,
140
+ byId,
141
+ workspacesById
142
+ ]);
143
+ useEffect(() => {
144
+ const onKeyDown = (event) => {
145
+ if (event.ctrlKey && !event.metaKey && !event.altKey && event.key === "t") {
146
+ event.preventDefault();
147
+ onDismiss?.();
148
+ openNewSession(selectedWorkspaceId);
149
+ return;
150
+ }
151
+ if (event.ctrlKey || event.metaKey || event.altKey || event.defaultPrevented) return;
152
+ if (isEditable(event.target) || insideOverlay(event.target) || paletteStore.state.open || hasDialog) return;
153
+ const ordinal = Number.parseInt(event.key, 10);
154
+ if (!Number.isInteger(ordinal) || ordinal < 1 || ordinal > 9) return;
155
+ const target = order[ordinal - 1];
156
+ if (target === void 0) return;
157
+ event.preventDefault();
158
+ onDismiss?.();
159
+ navigate({
160
+ to: "/session/$sessionId",
161
+ params: { sessionId: target }
162
+ });
163
+ };
164
+ window.addEventListener("keydown", onKeyDown);
165
+ return () => window.removeEventListener("keydown", onKeyDown);
166
+ }, [
167
+ order,
168
+ hasDialog,
169
+ navigate,
170
+ onDismiss,
171
+ selectedWorkspaceId
172
+ ]);
173
+ const workspaces = useMemo(() => buildRailWorkspaces({
174
+ order,
175
+ byId,
176
+ activeId,
177
+ workspaceOrder,
178
+ workspacesById,
179
+ nested: new Set(order.filter((id) => resolveParentId(byId, id) !== void 0)),
180
+ now,
181
+ restarts,
182
+ avatarUrls,
183
+ backgroundWorkSessions
184
+ }), [
185
+ order,
186
+ byId,
187
+ activeId,
188
+ workspaceOrder,
189
+ workspacesById,
190
+ now,
191
+ restarts,
192
+ avatarUrls,
193
+ backgroundWorkSessions
194
+ ]);
195
+ const addingWorkspace = creating.open && (creating.workspaceId === null || workspacesById[creating.workspaceId] === void 0);
196
+ return {
197
+ workspaces,
198
+ scrollRef,
199
+ remote: {
200
+ status: remote?.status ?? "off",
201
+ deviceCount: remote?.devices.length ?? 0,
202
+ ...remote?.publicUrl === void 0 ? {} : { host: new URL(remote.publicUrl).host },
203
+ ...remote?.error === void 0 ? {} : { error: remote.error }
204
+ },
205
+ pluginContent: /* @__PURE__ */ jsx(PluginSurface, {
206
+ slot: HOST_SLOTS.rail,
207
+ sessionId: activeId
208
+ }),
209
+ ...addingWorkspace ? { addWorkspace: { suggestedPaths: remote?.settings.sandbox.workspaces ?? [] } } : {},
210
+ actions: {
211
+ openSession(sessionId) {
212
+ onDismiss?.();
213
+ navigate({
214
+ to: "/session/$sessionId",
215
+ params: { sessionId }
216
+ });
217
+ },
218
+ renameSession(sessionId, name) {
219
+ const trimmed = name.trim();
220
+ if (trimmed !== "" && trimmed !== byId[sessionId]?.summary.name) renameSession(trimmed, sessionId);
221
+ },
222
+ restartSession(sessionId) {
223
+ restartDashboardSession(sessionId);
224
+ },
225
+ async removeSession(sessionId) {
226
+ const result = await stopSession(sessionId);
227
+ if ("error" in result) return { error: result.error };
228
+ applySessionRemoved({ sessionId });
229
+ },
230
+ resumeSession(sessionId) {
231
+ openResumeDialog({ sessionId });
232
+ },
233
+ createSession(workspaceId) {
234
+ selectWorkspace(workspaceId);
235
+ onDismiss?.();
236
+ openNewSession(workspaceId);
237
+ },
238
+ resumeInWorkspace(workspaceId) {
239
+ openResumeDialog({ workspaceId });
240
+ },
241
+ openWorkspaceSettings(workspaceId) {
242
+ selectWorkspace(workspaceId);
243
+ onDismiss?.();
244
+ navigate({
245
+ to: "/settings/$section",
246
+ params: { section: DEFAULT_REPOSITORY_SETTINGS_SECTION },
247
+ search: { workspace: workspaceId }
248
+ });
249
+ },
250
+ async deleteWorkspace(workspaceId) {
251
+ const result = await removeWorkspace(workspaceId);
252
+ if ("error" in result) return { error: result.error };
253
+ applyWorkspaceRemoved({ workspaceId });
254
+ },
255
+ openAddWorkspace() {
256
+ onDismiss?.();
257
+ openNewSession(null);
258
+ },
259
+ closeAddWorkspace() {
260
+ if (workspaceAdmissionStore.state.pending) return;
261
+ resetWorkspaceAdmission();
262
+ closeNewSession();
263
+ },
264
+ async addWorkspace(input) {
265
+ const result = await admitDashboardWorkspace(input);
266
+ if (result === void 0) closeNewSession();
267
+ return result;
268
+ },
269
+ searchDirectories,
270
+ listDirectory,
271
+ async removePendingSetup(sessionId, setupId) {
272
+ const workspaceId = byId[sessionId]?.summary.workspaceId;
273
+ if (workspaceId === void 0) return { error: "This session belongs to no workspace." };
274
+ const result = await removeSessionMcpSetup(workspaceId, sessionId, setupId);
275
+ return "error" in result ? { error: result.error } : void 0;
276
+ },
277
+ openSettings() {
278
+ onDismiss?.();
279
+ navigate({
280
+ to: "/settings/$section",
281
+ params: { section: DEFAULT_SETTINGS_SECTION },
282
+ search: { workspace: selectedWorkspaceId ?? void 0 }
283
+ });
284
+ },
285
+ openRemoteAccess() {
286
+ onDismiss?.();
287
+ openRemoteDialog();
288
+ },
289
+ turnRemoteAccessOff() {
290
+ turnRemoteAccessOff();
291
+ },
292
+ renderSessionMenuItems: (sessionId) => /* @__PURE__ */ jsx(PluginSurface, {
293
+ slot: HOST_SLOTS.sessionMenu,
294
+ sessionId
295
+ })
296
+ }
297
+ };
298
+ }
299
+ //#endregion
300
+ export { useSessionRail };
301
+
302
+ //# sourceMappingURL=useSessionRail.mjs.map