@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,216 @@
1
+ const require_sealedSession = require("../lib/sealedSession.cjs");
2
+ const require_webauthnClient = require("../lib/webauthnClient.cjs");
3
+ const require_remoteApi = require("../lib/remoteApi.cjs");
4
+ //#region src/web/stores/remoteAccessStore.ts
5
+ const remoteAccessStore = new (require("@tanstack/store")).Store({
6
+ step: "closed",
7
+ busy: false
8
+ });
9
+ const pendingSettings = /* @__PURE__ */ new Set();
10
+ function set(patch) {
11
+ const view = patch.view;
12
+ if (view !== void 0 && pendingSettings.size > 0) patch = {
13
+ ...patch,
14
+ view: {
15
+ ...view,
16
+ settings: [...pendingSettings].reduce((settings, draft) => ({
17
+ ...settings,
18
+ ...draft
19
+ }), view.settings)
20
+ }
21
+ };
22
+ remoteAccessStore.setState((state) => ({
23
+ ...state,
24
+ ...patch
25
+ }));
26
+ }
27
+ /** Clears the previous error before an action, so a stale one never outlives its cause. */
28
+ function begin() {
29
+ set({
30
+ busy: true,
31
+ error: void 0
32
+ });
33
+ }
34
+ function settle(outcome) {
35
+ if ("error" in outcome) {
36
+ set({
37
+ busy: false,
38
+ error: outcome.error
39
+ });
40
+ return false;
41
+ }
42
+ set({
43
+ busy: false,
44
+ view: outcome.state
45
+ });
46
+ return true;
47
+ }
48
+ function openRemoteDialog() {
49
+ set({
50
+ step: "options",
51
+ error: void 0
52
+ });
53
+ refreshRemoteState();
54
+ }
55
+ function closeRemoteDialog() {
56
+ set({
57
+ step: "closed",
58
+ error: void 0
59
+ });
60
+ }
61
+ function showRemoteOptions() {
62
+ set({
63
+ step: "options",
64
+ error: void 0
65
+ });
66
+ }
67
+ /** Whether this tunnel and this browser can carry a passkey at all. */
68
+ async function refreshPasskeys() {
69
+ try {
70
+ const response = await require_sealedSession.sealedHttpSession.fetch("/api/remote/passkeys", { credentials: "same-origin" });
71
+ if (!response.ok) return;
72
+ const body = await response.json();
73
+ set({ passkeys: {
74
+ supported: body.support.supported && require_webauthnClient.passkeysAvailable(),
75
+ ...body.support.reason === void 0 ? {} : { reason: body.support.reason },
76
+ count: body.credentials.length
77
+ } });
78
+ } catch {}
79
+ }
80
+ async function addPasskey() {
81
+ begin();
82
+ const outcome = await require_webauthnClient.registerPasskey();
83
+ set({
84
+ busy: false,
85
+ ...outcome.ok ? {} : { error: outcome.error }
86
+ });
87
+ await refreshPasskeys();
88
+ }
89
+ async function refreshRemoteState() {
90
+ const outcome = await require_remoteApi.fetchRemoteState();
91
+ if ("error" in outcome) {
92
+ set({ error: outcome.error });
93
+ return;
94
+ }
95
+ set({ view: outcome.state });
96
+ }
97
+ /** Turns the tunnel on and moves straight to the code, which is what the user came for. */
98
+ async function turnRemoteAccessOn() {
99
+ begin();
100
+ const outcome = await require_remoteApi.enableRemoteAccess();
101
+ if (!settle(outcome)) return;
102
+ if ("handingOver" in outcome && outcome.handingOver === true) {
103
+ set({ step: "handover" });
104
+ return;
105
+ }
106
+ await Promise.all([newPairingCode(), refreshPasskeys()]);
107
+ set({ step: "pairing" });
108
+ }
109
+ async function turnRemoteAccessOff() {
110
+ begin();
111
+ if (!settle(await require_remoteApi.disableRemoteAccess())) return;
112
+ set({
113
+ step: "options",
114
+ pairUrl: void 0,
115
+ pairCode: void 0,
116
+ pairFingerprint: void 0,
117
+ pairRevision: void 0,
118
+ pairExpiresAt: void 0
119
+ });
120
+ }
121
+ async function newPairingCode() {
122
+ const minted = await require_remoteApi.mintPairingCode();
123
+ if ("error" in minted) {
124
+ set({
125
+ error: minted.error,
126
+ pairUrl: void 0,
127
+ pairCode: void 0,
128
+ pairFingerprint: void 0,
129
+ pairRevision: void 0
130
+ });
131
+ return;
132
+ }
133
+ set({
134
+ pairUrl: minted.pairUrl,
135
+ pairCode: minted.manualCode,
136
+ pairFingerprint: minted.fingerprint,
137
+ pairRevision: minted.revision,
138
+ pairExpiresAt: minted.expiresAt
139
+ });
140
+ }
141
+ async function approveDevice(requestId) {
142
+ settle(await require_remoteApi.approvePairing(requestId));
143
+ }
144
+ async function denyDevice(requestId) {
145
+ settle(await require_remoteApi.denyPairing(requestId));
146
+ }
147
+ async function revokePairedDevice(id) {
148
+ begin();
149
+ settle(await require_remoteApi.revokeDevice(id));
150
+ }
151
+ async function revokeTrustedNativeDevice(id) {
152
+ begin();
153
+ settle(await require_remoteApi.revokeTrustedDevice(id));
154
+ }
155
+ let settingsWrites = Promise.resolve();
156
+ async function updateRemoteSettings(patch) {
157
+ const draft = { ...patch };
158
+ pendingSettings.add(draft);
159
+ const view = remoteAccessStore.state.view;
160
+ if (view !== void 0) set({
161
+ view: {
162
+ ...view,
163
+ settings: {
164
+ ...view.settings,
165
+ ...draft
166
+ }
167
+ },
168
+ error: void 0
169
+ });
170
+ const write = () => require_remoteApi.saveRemoteSettings(draft);
171
+ const pending = settingsWrites.then(write, write);
172
+ settingsWrites = pending;
173
+ const outcome = await pending;
174
+ pendingSettings.delete(draft);
175
+ if ("error" in outcome) {
176
+ set({ error: outcome.error });
177
+ if (settingsWrites === pending) refreshRemoteState();
178
+ return false;
179
+ }
180
+ const current = remoteAccessStore.state.view;
181
+ if (current !== void 0 && settingsWrites === pending) set({
182
+ view: {
183
+ ...current,
184
+ settings: outcome.settings
185
+ },
186
+ error: void 0
187
+ });
188
+ return true;
189
+ }
190
+ /** Applies a state frame the hub pushed, so the page never polls for this. */
191
+ function applyRemoteState(view) {
192
+ const waiting = remoteAccessStore.state.step === "handover";
193
+ set({ view });
194
+ if (waiting && view.status === "on") Promise.all([newPairingCode(), refreshPasskeys()]).then(() => {
195
+ set({ step: "pairing" });
196
+ });
197
+ }
198
+ //#endregion
199
+ exports.addPasskey = addPasskey;
200
+ exports.applyRemoteState = applyRemoteState;
201
+ exports.approveDevice = approveDevice;
202
+ exports.closeRemoteDialog = closeRemoteDialog;
203
+ exports.denyDevice = denyDevice;
204
+ exports.newPairingCode = newPairingCode;
205
+ exports.openRemoteDialog = openRemoteDialog;
206
+ exports.refreshPasskeys = refreshPasskeys;
207
+ exports.refreshRemoteState = refreshRemoteState;
208
+ exports.remoteAccessStore = remoteAccessStore;
209
+ exports.revokePairedDevice = revokePairedDevice;
210
+ exports.revokeTrustedNativeDevice = revokeTrustedNativeDevice;
211
+ exports.showRemoteOptions = showRemoteOptions;
212
+ exports.turnRemoteAccessOff = turnRemoteAccessOff;
213
+ exports.turnRemoteAccessOn = turnRemoteAccessOn;
214
+ exports.updateRemoteSettings = updateRemoteSettings;
215
+
216
+ //# sourceMappingURL=remoteAccessStore.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remoteAccessStore.cjs","names":["Store","sealedHttpSession","passkeysAvailable","registerPasskey","fetchRemoteState","enableRemoteAccess","disableRemoteAccess","mintPairingCode","approvePairing","denyPairing","revokeDevice","revokeTrustedDevice","saveRemoteSettings"],"sources":["../../../src/web/stores/remoteAccessStore.ts"],"sourcesContent":["import { Store } from '@tanstack/store';\n\nimport type { RemoteAccessSettings, RemoteAccessStateView } from '../../types/remoteAccess';\nimport {\n approvePairing,\n denyPairing,\n disableRemoteAccess,\n enableRemoteAccess,\n fetchRemoteState,\n mintPairingCode,\n revokeDevice,\n revokeTrustedDevice,\n saveRemoteSettings,\n} from '../lib/remoteApi';\nimport { sealedHttpSession } from '../lib/sealedSession';\nimport { passkeysAvailable, registerPasskey } from '../lib/webauthnClient';\n\n/** Which panel of the dialog is showing. Options first, then the code to scan. */\nexport type RemoteStep = 'closed' | 'options' | 'handover' | 'pairing';\n\nexport interface PasskeySupportView {\n supported: boolean;\n reason?: string;\n count: number;\n}\n\nexport interface RemoteAccessState {\n step: RemoteStep;\n /** Undefined until the passkey surface has been asked about. */\n passkeys?: PasskeySupportView;\n /** Undefined until the first load answers. */\n view?: RemoteAccessStateView;\n /** The URL the QR encodes; present only while a code is live. */\n pairUrl?: string;\n /** Short code accepted by the same pairing claim for manual entry. */\n pairCode?: string;\n /** Signing-key fingerprint the user compares during manual pairing. */\n pairFingerprint?: string;\n pairRevision?: number;\n pairExpiresAt?: string;\n busy: boolean;\n error?: string;\n}\n\nexport const remoteAccessStore = new Store<RemoteAccessState>({ step: 'closed', busy: false });\nconst pendingSettings = new Set<Partial<RemoteAccessSettings>>();\n\nfunction set(patch: Partial<RemoteAccessState>): void {\n const view = patch.view;\n if (view !== undefined && pendingSettings.size > 0)\n patch = {\n ...patch,\n view: {\n ...view,\n settings: [...pendingSettings].reduce<RemoteAccessSettings>(\n (settings, draft) => ({ ...settings, ...draft }),\n view.settings,\n ),\n },\n };\n remoteAccessStore.setState((state) => ({ ...state, ...patch }));\n}\n\n/** Clears the previous error before an action, so a stale one never outlives its cause. */\nfunction begin(): void {\n set({ busy: true, error: undefined });\n}\n\nfunction settle(outcome: { state: RemoteAccessStateView } | { error: string }): boolean {\n if ('error' in outcome) {\n set({ busy: false, error: outcome.error });\n return false;\n }\n set({ busy: false, view: outcome.state });\n return true;\n}\n\nexport function openRemoteDialog(): void {\n set({ step: 'options', error: undefined });\n void refreshRemoteState();\n}\n\nexport function closeRemoteDialog(): void {\n // The code is left to expire on its own rather than cancelled here: closing\n // the dialog while a phone is mid-scan should not strand it.\n set({ step: 'closed', error: undefined });\n}\n\nexport function showRemoteOptions(): void {\n set({ step: 'options', error: undefined });\n}\n\n/** Whether this tunnel and this browser can carry a passkey at all. */\nexport async function refreshPasskeys(): Promise<void> {\n try {\n const response = await sealedHttpSession.fetch('/api/remote/passkeys', { credentials: 'same-origin' });\n if (!response.ok) return;\n const body = (await response.json()) as {\n support: { supported: boolean; reason?: string };\n credentials: unknown[];\n };\n set({\n passkeys: {\n supported: body.support.supported && passkeysAvailable(),\n ...(body.support.reason === undefined ? {} : { reason: body.support.reason }),\n count: body.credentials.length,\n },\n });\n } catch {\n // The hub is unreachable; the state refresh reports that already.\n }\n}\n\nexport async function addPasskey(): Promise<void> {\n begin();\n const outcome = await registerPasskey();\n set({ busy: false, ...(outcome.ok ? {} : { error: outcome.error }) });\n await refreshPasskeys();\n}\n\nexport async function refreshRemoteState(): Promise<void> {\n const outcome = await fetchRemoteState();\n if ('error' in outcome) {\n set({ error: outcome.error });\n return;\n }\n set({ view: outcome.state });\n}\n\n/** Turns the tunnel on and moves straight to the code, which is what the user came for. */\nexport async function turnRemoteAccessOn(): Promise<void> {\n begin();\n const outcome = await enableRemoteAccess();\n if (!settle(outcome)) return;\n // A contained cockpit is about to close this hub and open another on the same\n // port. Nothing can be asked of it in between, so the dialog waits for the\n // socket to come back rather than calling into a server that is going away.\n if ('handingOver' in outcome && outcome.handingOver === true) {\n set({ step: 'handover' });\n return;\n }\n await Promise.all([newPairingCode(), refreshPasskeys()]);\n set({ step: 'pairing' });\n}\n\nexport async function turnRemoteAccessOff(): Promise<void> {\n begin();\n if (!settle(await disableRemoteAccess())) return;\n set({\n step: 'options',\n pairUrl: undefined,\n pairCode: undefined,\n pairFingerprint: undefined,\n pairRevision: undefined,\n pairExpiresAt: undefined,\n });\n}\n\nexport async function newPairingCode(): Promise<void> {\n const minted = await mintPairingCode();\n if ('error' in minted) {\n set({\n error: minted.error,\n pairUrl: undefined,\n pairCode: undefined,\n pairFingerprint: undefined,\n pairRevision: undefined,\n });\n return;\n }\n set({\n pairUrl: minted.pairUrl,\n pairCode: minted.manualCode,\n pairFingerprint: minted.fingerprint,\n pairRevision: minted.revision,\n pairExpiresAt: minted.expiresAt,\n });\n}\n\nexport async function approveDevice(requestId: string): Promise<void> {\n settle(await approvePairing(requestId));\n}\n\nexport async function denyDevice(requestId: string): Promise<void> {\n settle(await denyPairing(requestId));\n}\n\nexport async function revokePairedDevice(id: string): Promise<void> {\n begin();\n settle(await revokeDevice(id));\n}\n\nexport async function revokeTrustedNativeDevice(id: string): Promise<void> {\n begin();\n settle(await revokeTrustedDevice(id));\n}\n\nlet settingsWrites: Promise<unknown> = Promise.resolve();\n\nexport async function updateRemoteSettings(patch: Partial<RemoteAccessSettings>): Promise<boolean> {\n // Keep autosave edits responsive, but serialize writes across app replacements.\n const draft = { ...patch };\n pendingSettings.add(draft);\n const view = remoteAccessStore.state.view;\n if (view !== undefined) set({ view: { ...view, settings: { ...view.settings, ...draft } }, error: undefined });\n const write = () => saveRemoteSettings(draft);\n const pending = settingsWrites.then(write, write);\n settingsWrites = pending;\n const outcome = await pending;\n pendingSettings.delete(draft);\n if ('error' in outcome) {\n set({ error: outcome.error });\n if (settingsWrites === pending) void refreshRemoteState();\n return false;\n }\n const current = remoteAccessStore.state.view;\n if (current !== undefined && settingsWrites === pending)\n set({ view: { ...current, settings: outcome.settings }, error: undefined });\n return true;\n}\n\n/** Applies a state frame the hub pushed, so the page never polls for this. */\nexport function applyRemoteState(view: RemoteAccessStateView): void {\n const waiting = remoteAccessStore.state.step === 'handover';\n set({ view });\n // The first frame from the cockpit that took over. It reaches here because\n // the socket reconnected on its own, which is the only signal the browser\n // gets that the move finished.\n if (waiting && view.status === 'on') {\n void Promise.all([newPairingCode(), refreshPasskeys()]).then(() => {\n set({ step: 'pairing' });\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { RemoteAccessSettings, RemoteAccessStateView } from "../../types/remoteAccess.mjs";
2
+ import { Store } from "@tanstack/store";
3
+ //#region src/web/stores/remoteAccessStore.d.ts
4
+ /** Which panel of the dialog is showing. Options first, then the code to scan. */
5
+ export type RemoteStep = 'closed' | 'options' | 'handover' | 'pairing';
6
+ export interface PasskeySupportView {
7
+ supported: boolean;
8
+ reason?: string;
9
+ count: number;
10
+ }
11
+ export interface RemoteAccessState {
12
+ step: RemoteStep;
13
+ /** Undefined until the passkey surface has been asked about. */
14
+ passkeys?: PasskeySupportView;
15
+ /** Undefined until the first load answers. */
16
+ view?: RemoteAccessStateView;
17
+ /** The URL the QR encodes; present only while a code is live. */
18
+ pairUrl?: string;
19
+ /** Short code accepted by the same pairing claim for manual entry. */
20
+ pairCode?: string;
21
+ /** Signing-key fingerprint the user compares during manual pairing. */
22
+ pairFingerprint?: string;
23
+ pairRevision?: number;
24
+ pairExpiresAt?: string;
25
+ busy: boolean;
26
+ error?: string;
27
+ }
28
+ export declare const remoteAccessStore: Store<RemoteAccessState, never>;
29
+ export declare function openRemoteDialog(): void;
30
+ export declare function closeRemoteDialog(): void;
31
+ export declare function showRemoteOptions(): void;
32
+ /** Whether this tunnel and this browser can carry a passkey at all. */
33
+ export declare function refreshPasskeys(): Promise<void>;
34
+ export declare function addPasskey(): Promise<void>;
35
+ export declare function refreshRemoteState(): Promise<void>;
36
+ /** Turns the tunnel on and moves straight to the code, which is what the user came for. */
37
+ export declare function turnRemoteAccessOn(): Promise<void>;
38
+ export declare function turnRemoteAccessOff(): Promise<void>;
39
+ export declare function newPairingCode(): Promise<void>;
40
+ export declare function approveDevice(requestId: string): Promise<void>;
41
+ export declare function denyDevice(requestId: string): Promise<void>;
42
+ export declare function revokePairedDevice(id: string): Promise<void>;
43
+ export declare function revokeTrustedNativeDevice(id: string): Promise<void>;
44
+ export declare function updateRemoteSettings(patch: Partial<RemoteAccessSettings>): Promise<boolean>;
45
+ /** Applies a state frame the hub pushed, so the page never polls for this. */
46
+ export declare function applyRemoteState(view: RemoteAccessStateView): void;
47
+ //#endregion
48
+ //# sourceMappingURL=remoteAccessStore.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remoteAccessStore.d.mts","names":[],"sources":["../../../src/web/stores/remoteAccessStore.ts"],"mappings":";;;;YAkBY;iBAEK;EACf;EACA;EACA;;iBAGe;EACf,MAAM;;EAEN,WAAW;;EAEX,OAAO;;EAEP;;EAEA;;EAEA;EACA;EACA;EACA;EACA;;qBAGW,mBAAiB,MAAA;wBAiCd;wBAKA;wBAMA;;wBAKM,mBAAmB;wBAoBnB,cAAc;wBAOd,sBAAsB;;wBAUtB,sBAAsB;wBAetB,uBAAuB;wBAavB,kBAAkB;wBAqBlB,cAAc,oBAAoB;wBAIlC,WAAW,oBAAoB;wBAI/B,mBAAmB,aAAa;wBAKhC,0BAA0B,aAAa;wBAOvC,qBAAqB,OAAO,QAAQ,wBAAwB;;wBAuBlE,iBAAiB,MAAM"}
@@ -0,0 +1,202 @@
1
+ import { sealedHttpSession } from "../lib/sealedSession.mjs";
2
+ import { passkeysAvailable, registerPasskey } from "../lib/webauthnClient.mjs";
3
+ import { approvePairing, denyPairing, disableRemoteAccess, enableRemoteAccess, fetchRemoteState, mintPairingCode, revokeDevice, revokeTrustedDevice, saveRemoteSettings } from "../lib/remoteApi.mjs";
4
+ import { Store } from "@tanstack/store";
5
+ //#region src/web/stores/remoteAccessStore.ts
6
+ const remoteAccessStore = new Store({
7
+ step: "closed",
8
+ busy: false
9
+ });
10
+ const pendingSettings = /* @__PURE__ */ new Set();
11
+ function set(patch) {
12
+ const view = patch.view;
13
+ if (view !== void 0 && pendingSettings.size > 0) patch = {
14
+ ...patch,
15
+ view: {
16
+ ...view,
17
+ settings: [...pendingSettings].reduce((settings, draft) => ({
18
+ ...settings,
19
+ ...draft
20
+ }), view.settings)
21
+ }
22
+ };
23
+ remoteAccessStore.setState((state) => ({
24
+ ...state,
25
+ ...patch
26
+ }));
27
+ }
28
+ /** Clears the previous error before an action, so a stale one never outlives its cause. */
29
+ function begin() {
30
+ set({
31
+ busy: true,
32
+ error: void 0
33
+ });
34
+ }
35
+ function settle(outcome) {
36
+ if ("error" in outcome) {
37
+ set({
38
+ busy: false,
39
+ error: outcome.error
40
+ });
41
+ return false;
42
+ }
43
+ set({
44
+ busy: false,
45
+ view: outcome.state
46
+ });
47
+ return true;
48
+ }
49
+ function openRemoteDialog() {
50
+ set({
51
+ step: "options",
52
+ error: void 0
53
+ });
54
+ refreshRemoteState();
55
+ }
56
+ function closeRemoteDialog() {
57
+ set({
58
+ step: "closed",
59
+ error: void 0
60
+ });
61
+ }
62
+ function showRemoteOptions() {
63
+ set({
64
+ step: "options",
65
+ error: void 0
66
+ });
67
+ }
68
+ /** Whether this tunnel and this browser can carry a passkey at all. */
69
+ async function refreshPasskeys() {
70
+ try {
71
+ const response = await sealedHttpSession.fetch("/api/remote/passkeys", { credentials: "same-origin" });
72
+ if (!response.ok) return;
73
+ const body = await response.json();
74
+ set({ passkeys: {
75
+ supported: body.support.supported && passkeysAvailable(),
76
+ ...body.support.reason === void 0 ? {} : { reason: body.support.reason },
77
+ count: body.credentials.length
78
+ } });
79
+ } catch {}
80
+ }
81
+ async function addPasskey() {
82
+ begin();
83
+ const outcome = await registerPasskey();
84
+ set({
85
+ busy: false,
86
+ ...outcome.ok ? {} : { error: outcome.error }
87
+ });
88
+ await refreshPasskeys();
89
+ }
90
+ async function refreshRemoteState() {
91
+ const outcome = await fetchRemoteState();
92
+ if ("error" in outcome) {
93
+ set({ error: outcome.error });
94
+ return;
95
+ }
96
+ set({ view: outcome.state });
97
+ }
98
+ /** Turns the tunnel on and moves straight to the code, which is what the user came for. */
99
+ async function turnRemoteAccessOn() {
100
+ begin();
101
+ const outcome = await enableRemoteAccess();
102
+ if (!settle(outcome)) return;
103
+ if ("handingOver" in outcome && outcome.handingOver === true) {
104
+ set({ step: "handover" });
105
+ return;
106
+ }
107
+ await Promise.all([newPairingCode(), refreshPasskeys()]);
108
+ set({ step: "pairing" });
109
+ }
110
+ async function turnRemoteAccessOff() {
111
+ begin();
112
+ if (!settle(await disableRemoteAccess())) return;
113
+ set({
114
+ step: "options",
115
+ pairUrl: void 0,
116
+ pairCode: void 0,
117
+ pairFingerprint: void 0,
118
+ pairRevision: void 0,
119
+ pairExpiresAt: void 0
120
+ });
121
+ }
122
+ async function newPairingCode() {
123
+ const minted = await mintPairingCode();
124
+ if ("error" in minted) {
125
+ set({
126
+ error: minted.error,
127
+ pairUrl: void 0,
128
+ pairCode: void 0,
129
+ pairFingerprint: void 0,
130
+ pairRevision: void 0
131
+ });
132
+ return;
133
+ }
134
+ set({
135
+ pairUrl: minted.pairUrl,
136
+ pairCode: minted.manualCode,
137
+ pairFingerprint: minted.fingerprint,
138
+ pairRevision: minted.revision,
139
+ pairExpiresAt: minted.expiresAt
140
+ });
141
+ }
142
+ async function approveDevice(requestId) {
143
+ settle(await approvePairing(requestId));
144
+ }
145
+ async function denyDevice(requestId) {
146
+ settle(await denyPairing(requestId));
147
+ }
148
+ async function revokePairedDevice(id) {
149
+ begin();
150
+ settle(await revokeDevice(id));
151
+ }
152
+ async function revokeTrustedNativeDevice(id) {
153
+ begin();
154
+ settle(await revokeTrustedDevice(id));
155
+ }
156
+ let settingsWrites = Promise.resolve();
157
+ async function updateRemoteSettings(patch) {
158
+ const draft = { ...patch };
159
+ pendingSettings.add(draft);
160
+ const view = remoteAccessStore.state.view;
161
+ if (view !== void 0) set({
162
+ view: {
163
+ ...view,
164
+ settings: {
165
+ ...view.settings,
166
+ ...draft
167
+ }
168
+ },
169
+ error: void 0
170
+ });
171
+ const write = () => saveRemoteSettings(draft);
172
+ const pending = settingsWrites.then(write, write);
173
+ settingsWrites = pending;
174
+ const outcome = await pending;
175
+ pendingSettings.delete(draft);
176
+ if ("error" in outcome) {
177
+ set({ error: outcome.error });
178
+ if (settingsWrites === pending) refreshRemoteState();
179
+ return false;
180
+ }
181
+ const current = remoteAccessStore.state.view;
182
+ if (current !== void 0 && settingsWrites === pending) set({
183
+ view: {
184
+ ...current,
185
+ settings: outcome.settings
186
+ },
187
+ error: void 0
188
+ });
189
+ return true;
190
+ }
191
+ /** Applies a state frame the hub pushed, so the page never polls for this. */
192
+ function applyRemoteState(view) {
193
+ const waiting = remoteAccessStore.state.step === "handover";
194
+ set({ view });
195
+ if (waiting && view.status === "on") Promise.all([newPairingCode(), refreshPasskeys()]).then(() => {
196
+ set({ step: "pairing" });
197
+ });
198
+ }
199
+ //#endregion
200
+ export { addPasskey, applyRemoteState, approveDevice, closeRemoteDialog, denyDevice, newPairingCode, openRemoteDialog, refreshPasskeys, refreshRemoteState, remoteAccessStore, revokePairedDevice, revokeTrustedNativeDevice, showRemoteOptions, turnRemoteAccessOff, turnRemoteAccessOn, updateRemoteSettings };
201
+
202
+ //# sourceMappingURL=remoteAccessStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remoteAccessStore.mjs","names":[],"sources":["../../../src/web/stores/remoteAccessStore.ts"],"sourcesContent":["import { Store } from '@tanstack/store';\n\nimport type { RemoteAccessSettings, RemoteAccessStateView } from '../../types/remoteAccess';\nimport {\n approvePairing,\n denyPairing,\n disableRemoteAccess,\n enableRemoteAccess,\n fetchRemoteState,\n mintPairingCode,\n revokeDevice,\n revokeTrustedDevice,\n saveRemoteSettings,\n} from '../lib/remoteApi';\nimport { sealedHttpSession } from '../lib/sealedSession';\nimport { passkeysAvailable, registerPasskey } from '../lib/webauthnClient';\n\n/** Which panel of the dialog is showing. Options first, then the code to scan. */\nexport type RemoteStep = 'closed' | 'options' | 'handover' | 'pairing';\n\nexport interface PasskeySupportView {\n supported: boolean;\n reason?: string;\n count: number;\n}\n\nexport interface RemoteAccessState {\n step: RemoteStep;\n /** Undefined until the passkey surface has been asked about. */\n passkeys?: PasskeySupportView;\n /** Undefined until the first load answers. */\n view?: RemoteAccessStateView;\n /** The URL the QR encodes; present only while a code is live. */\n pairUrl?: string;\n /** Short code accepted by the same pairing claim for manual entry. */\n pairCode?: string;\n /** Signing-key fingerprint the user compares during manual pairing. */\n pairFingerprint?: string;\n pairRevision?: number;\n pairExpiresAt?: string;\n busy: boolean;\n error?: string;\n}\n\nexport const remoteAccessStore = new Store<RemoteAccessState>({ step: 'closed', busy: false });\nconst pendingSettings = new Set<Partial<RemoteAccessSettings>>();\n\nfunction set(patch: Partial<RemoteAccessState>): void {\n const view = patch.view;\n if (view !== undefined && pendingSettings.size > 0)\n patch = {\n ...patch,\n view: {\n ...view,\n settings: [...pendingSettings].reduce<RemoteAccessSettings>(\n (settings, draft) => ({ ...settings, ...draft }),\n view.settings,\n ),\n },\n };\n remoteAccessStore.setState((state) => ({ ...state, ...patch }));\n}\n\n/** Clears the previous error before an action, so a stale one never outlives its cause. */\nfunction begin(): void {\n set({ busy: true, error: undefined });\n}\n\nfunction settle(outcome: { state: RemoteAccessStateView } | { error: string }): boolean {\n if ('error' in outcome) {\n set({ busy: false, error: outcome.error });\n return false;\n }\n set({ busy: false, view: outcome.state });\n return true;\n}\n\nexport function openRemoteDialog(): void {\n set({ step: 'options', error: undefined });\n void refreshRemoteState();\n}\n\nexport function closeRemoteDialog(): void {\n // The code is left to expire on its own rather than cancelled here: closing\n // the dialog while a phone is mid-scan should not strand it.\n set({ step: 'closed', error: undefined });\n}\n\nexport function showRemoteOptions(): void {\n set({ step: 'options', error: undefined });\n}\n\n/** Whether this tunnel and this browser can carry a passkey at all. */\nexport async function refreshPasskeys(): Promise<void> {\n try {\n const response = await sealedHttpSession.fetch('/api/remote/passkeys', { credentials: 'same-origin' });\n if (!response.ok) return;\n const body = (await response.json()) as {\n support: { supported: boolean; reason?: string };\n credentials: unknown[];\n };\n set({\n passkeys: {\n supported: body.support.supported && passkeysAvailable(),\n ...(body.support.reason === undefined ? {} : { reason: body.support.reason }),\n count: body.credentials.length,\n },\n });\n } catch {\n // The hub is unreachable; the state refresh reports that already.\n }\n}\n\nexport async function addPasskey(): Promise<void> {\n begin();\n const outcome = await registerPasskey();\n set({ busy: false, ...(outcome.ok ? {} : { error: outcome.error }) });\n await refreshPasskeys();\n}\n\nexport async function refreshRemoteState(): Promise<void> {\n const outcome = await fetchRemoteState();\n if ('error' in outcome) {\n set({ error: outcome.error });\n return;\n }\n set({ view: outcome.state });\n}\n\n/** Turns the tunnel on and moves straight to the code, which is what the user came for. */\nexport async function turnRemoteAccessOn(): Promise<void> {\n begin();\n const outcome = await enableRemoteAccess();\n if (!settle(outcome)) return;\n // A contained cockpit is about to close this hub and open another on the same\n // port. Nothing can be asked of it in between, so the dialog waits for the\n // socket to come back rather than calling into a server that is going away.\n if ('handingOver' in outcome && outcome.handingOver === true) {\n set({ step: 'handover' });\n return;\n }\n await Promise.all([newPairingCode(), refreshPasskeys()]);\n set({ step: 'pairing' });\n}\n\nexport async function turnRemoteAccessOff(): Promise<void> {\n begin();\n if (!settle(await disableRemoteAccess())) return;\n set({\n step: 'options',\n pairUrl: undefined,\n pairCode: undefined,\n pairFingerprint: undefined,\n pairRevision: undefined,\n pairExpiresAt: undefined,\n });\n}\n\nexport async function newPairingCode(): Promise<void> {\n const minted = await mintPairingCode();\n if ('error' in minted) {\n set({\n error: minted.error,\n pairUrl: undefined,\n pairCode: undefined,\n pairFingerprint: undefined,\n pairRevision: undefined,\n });\n return;\n }\n set({\n pairUrl: minted.pairUrl,\n pairCode: minted.manualCode,\n pairFingerprint: minted.fingerprint,\n pairRevision: minted.revision,\n pairExpiresAt: minted.expiresAt,\n });\n}\n\nexport async function approveDevice(requestId: string): Promise<void> {\n settle(await approvePairing(requestId));\n}\n\nexport async function denyDevice(requestId: string): Promise<void> {\n settle(await denyPairing(requestId));\n}\n\nexport async function revokePairedDevice(id: string): Promise<void> {\n begin();\n settle(await revokeDevice(id));\n}\n\nexport async function revokeTrustedNativeDevice(id: string): Promise<void> {\n begin();\n settle(await revokeTrustedDevice(id));\n}\n\nlet settingsWrites: Promise<unknown> = Promise.resolve();\n\nexport async function updateRemoteSettings(patch: Partial<RemoteAccessSettings>): Promise<boolean> {\n // Keep autosave edits responsive, but serialize writes across app replacements.\n const draft = { ...patch };\n pendingSettings.add(draft);\n const view = remoteAccessStore.state.view;\n if (view !== undefined) set({ view: { ...view, settings: { ...view.settings, ...draft } }, error: undefined });\n const write = () => saveRemoteSettings(draft);\n const pending = settingsWrites.then(write, write);\n settingsWrites = pending;\n const outcome = await pending;\n pendingSettings.delete(draft);\n if ('error' in outcome) {\n set({ error: outcome.error });\n if (settingsWrites === pending) void refreshRemoteState();\n return false;\n }\n const current = remoteAccessStore.state.view;\n if (current !== undefined && settingsWrites === pending)\n set({ view: { ...current, settings: outcome.settings }, error: undefined });\n return true;\n}\n\n/** Applies a state frame the hub pushed, so the page never polls for this. */\nexport function applyRemoteState(view: RemoteAccessStateView): void {\n const waiting = remoteAccessStore.state.step === 'handover';\n set({ view });\n // The first frame from the cockpit that took over. It reaches here because\n // the socket reconnected on its own, which is the only signal the browser\n // gets that the move finished.\n if (waiting && view.status === 'on') {\n void Promise.all([newPairingCode(), refreshPasskeys()]).then(() => {\n set({ step: 'pairing' });\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ //#region src/web/stores/sessionChannelHoldsStore.ts
2
+ /** Dialogs can observe their target without taking focus or stealing another observer's subscription. */
3
+ const heldSessionChannels = new (require("@tanstack/store")).Store(/* @__PURE__ */ new Map());
4
+ const observers = /* @__PURE__ */ new Set();
5
+ function holdSessionChannels(sessionId, receive) {
6
+ const observer = receive === void 0 ? void 0 : {
7
+ sessionId,
8
+ receive
9
+ };
10
+ if (observer) observers.add(observer);
11
+ heldSessionChannels.setState((current) => new Map(current).set(sessionId, (current.get(sessionId) ?? 0) + 1));
12
+ let released = false;
13
+ return () => {
14
+ if (released) return;
15
+ released = true;
16
+ if (observer) observers.delete(observer);
17
+ heldSessionChannels.setState((current) => {
18
+ const next = new Map(current);
19
+ const remaining = (next.get(sessionId) ?? 1) - 1;
20
+ if (remaining === 0) next.delete(sessionId);
21
+ else next.set(sessionId, remaining);
22
+ return next;
23
+ });
24
+ };
25
+ }
26
+ /** Deliver to the observing dialog's composition, even when the target has never been focused. */
27
+ function dispatchHeldSessionChannel(frame) {
28
+ if (typeof frame.type !== "string" || typeof frame.sessionId !== "string") return;
29
+ for (const observer of observers) {
30
+ if (observer.sessionId !== frame.sessionId) continue;
31
+ try {
32
+ observer.receive(frame);
33
+ } catch (error) {
34
+ console.error("Session channel observer failed", error);
35
+ }
36
+ }
37
+ }
38
+ //#endregion
39
+ exports.dispatchHeldSessionChannel = dispatchHeldSessionChannel;
40
+ exports.heldSessionChannels = heldSessionChannels;
41
+ exports.holdSessionChannels = holdSessionChannels;
42
+
43
+ //# sourceMappingURL=sessionChannelHoldsStore.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionChannelHoldsStore.cjs","names":["Store"],"sources":["../../../src/web/stores/sessionChannelHoldsStore.ts"],"sourcesContent":["import { Store } from '@tanstack/store';\n\n/** Dialogs can observe their target without taking focus or stealing another observer's subscription. */\nexport const heldSessionChannels = new Store<ReadonlyMap<string, number>>(new Map());\n\nconst observers = new Set<{ sessionId: string; receive: (frame: Record<string, unknown>) => void }>();\n\nexport function holdSessionChannels(sessionId: string, receive?: (frame: Record<string, unknown>) => void): () => void {\n const observer = receive === undefined ? undefined : { sessionId, receive };\n if (observer) observers.add(observer);\n heldSessionChannels.setState((current) => new Map(current).set(sessionId, (current.get(sessionId) ?? 0) + 1));\n let released = false;\n return () => {\n if (released) return;\n released = true;\n if (observer) observers.delete(observer);\n heldSessionChannels.setState((current) => {\n const next = new Map(current);\n const remaining = (next.get(sessionId) ?? 1) - 1;\n if (remaining === 0) next.delete(sessionId);\n else next.set(sessionId, remaining);\n return next;\n });\n };\n}\n\n/** Deliver to the observing dialog's composition, even when the target has never been focused. */\nexport function dispatchHeldSessionChannel(frame: Record<string, unknown>): void {\n if (typeof frame.type !== 'string' || typeof frame.sessionId !== 'string') return;\n for (const observer of observers) {\n if (observer.sessionId !== frame.sessionId) continue;\n try {\n observer.receive(frame);\n } catch (error) {\n console.error('Session channel observer failed', error);\n }\n }\n}\n"],"mappings":";;AAGA,MAAa,sBAAsB,8BAAIA,EAAAA,CAAAA,sBAAmC,IAAI,IAAI,CAAC;AAEnF,MAAM,4BAAY,IAAI,IAA8E;AAEpG,SAAgB,oBAAoB,WAAmB,SAAgE;CACrH,MAAM,WAAW,YAAY,KAAA,IAAY,KAAA,IAAY;EAAE;EAAW;CAAQ;CAC1E,IAAI,UAAU,UAAU,IAAI,QAAQ;CACpC,oBAAoB,UAAU,YAAY,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,YAAY,QAAQ,IAAI,SAAS,KAAK,KAAK,CAAC,CAAC;CAC5G,IAAI,WAAW;CACf,aAAa;EACX,IAAI,UAAU;EACd,WAAW;EACX,IAAI,UAAU,UAAU,OAAO,QAAQ;EACvC,oBAAoB,UAAU,YAAY;GACxC,MAAM,OAAO,IAAI,IAAI,OAAO;GAC5B,MAAM,aAAa,KAAK,IAAI,SAAS,KAAK,KAAK;GAC/C,IAAI,cAAc,GAAG,KAAK,OAAO,SAAS;QACrC,KAAK,IAAI,WAAW,SAAS;GAClC,OAAO;EACT,CAAC;CACH;AACF;;AAGA,SAAgB,2BAA2B,OAAsC;CAC/E,IAAI,OAAO,MAAM,SAAS,YAAY,OAAO,MAAM,cAAc,UAAU;CAC3E,KAAK,MAAM,YAAY,WAAW;EAChC,IAAI,SAAS,cAAc,MAAM,WAAW;EAC5C,IAAI;GACF,SAAS,QAAQ,KAAK;EACxB,SAAS,OAAO;GACd,QAAQ,MAAM,mCAAmC,KAAK;EACxD;CACF;AACF"}
@@ -0,0 +1,9 @@
1
+ import { Store } from "@tanstack/store";
2
+ //#region src/web/stores/sessionChannelHoldsStore.d.ts
3
+ /** Dialogs can observe their target without taking focus or stealing another observer's subscription. */
4
+ export declare const heldSessionChannels: Store<ReadonlyMap<string, number>, never>;
5
+ export declare function holdSessionChannels(sessionId: string, receive?: (frame: Record<string, unknown>) => void): () => void;
6
+ /** Deliver to the observing dialog's composition, even when the target has never been focused. */
7
+ export declare function dispatchHeldSessionChannel(frame: Record<string, unknown>): void;
8
+ //#endregion
9
+ //# sourceMappingURL=sessionChannelHoldsStore.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionChannelHoldsStore.d.mts","names":[],"sources":["../../../src/web/stores/sessionChannelHoldsStore.ts"],"mappings":";;;qBAGa,qBAAmB,MAAA;wBAIhB,oBAAoB,mBAAmB,WAAW,OAAO;;wBAoBzD,2BAA2B,OAAO"}
@@ -0,0 +1,42 @@
1
+ import { Store } from "@tanstack/store";
2
+ //#region src/web/stores/sessionChannelHoldsStore.ts
3
+ /** Dialogs can observe their target without taking focus or stealing another observer's subscription. */
4
+ const heldSessionChannels = new Store(/* @__PURE__ */ new Map());
5
+ const observers = /* @__PURE__ */ new Set();
6
+ function holdSessionChannels(sessionId, receive) {
7
+ const observer = receive === void 0 ? void 0 : {
8
+ sessionId,
9
+ receive
10
+ };
11
+ if (observer) observers.add(observer);
12
+ heldSessionChannels.setState((current) => new Map(current).set(sessionId, (current.get(sessionId) ?? 0) + 1));
13
+ let released = false;
14
+ return () => {
15
+ if (released) return;
16
+ released = true;
17
+ if (observer) observers.delete(observer);
18
+ heldSessionChannels.setState((current) => {
19
+ const next = new Map(current);
20
+ const remaining = (next.get(sessionId) ?? 1) - 1;
21
+ if (remaining === 0) next.delete(sessionId);
22
+ else next.set(sessionId, remaining);
23
+ return next;
24
+ });
25
+ };
26
+ }
27
+ /** Deliver to the observing dialog's composition, even when the target has never been focused. */
28
+ function dispatchHeldSessionChannel(frame) {
29
+ if (typeof frame.type !== "string" || typeof frame.sessionId !== "string") return;
30
+ for (const observer of observers) {
31
+ if (observer.sessionId !== frame.sessionId) continue;
32
+ try {
33
+ observer.receive(frame);
34
+ } catch (error) {
35
+ console.error("Session channel observer failed", error);
36
+ }
37
+ }
38
+ }
39
+ //#endregion
40
+ export { dispatchHeldSessionChannel, heldSessionChannels, holdSessionChannels };
41
+
42
+ //# sourceMappingURL=sessionChannelHoldsStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionChannelHoldsStore.mjs","names":[],"sources":["../../../src/web/stores/sessionChannelHoldsStore.ts"],"sourcesContent":["import { Store } from '@tanstack/store';\n\n/** Dialogs can observe their target without taking focus or stealing another observer's subscription. */\nexport const heldSessionChannels = new Store<ReadonlyMap<string, number>>(new Map());\n\nconst observers = new Set<{ sessionId: string; receive: (frame: Record<string, unknown>) => void }>();\n\nexport function holdSessionChannels(sessionId: string, receive?: (frame: Record<string, unknown>) => void): () => void {\n const observer = receive === undefined ? undefined : { sessionId, receive };\n if (observer) observers.add(observer);\n heldSessionChannels.setState((current) => new Map(current).set(sessionId, (current.get(sessionId) ?? 0) + 1));\n let released = false;\n return () => {\n if (released) return;\n released = true;\n if (observer) observers.delete(observer);\n heldSessionChannels.setState((current) => {\n const next = new Map(current);\n const remaining = (next.get(sessionId) ?? 1) - 1;\n if (remaining === 0) next.delete(sessionId);\n else next.set(sessionId, remaining);\n return next;\n });\n };\n}\n\n/** Deliver to the observing dialog's composition, even when the target has never been focused. */\nexport function dispatchHeldSessionChannel(frame: Record<string, unknown>): void {\n if (typeof frame.type !== 'string' || typeof frame.sessionId !== 'string') return;\n for (const observer of observers) {\n if (observer.sessionId !== frame.sessionId) continue;\n try {\n observer.receive(frame);\n } catch (error) {\n console.error('Session channel observer failed', error);\n }\n }\n}\n"],"mappings":";;;AAGA,MAAa,sBAAsB,IAAI,sBAAmC,IAAI,IAAI,CAAC;AAEnF,MAAM,4BAAY,IAAI,IAA8E;AAEpG,SAAgB,oBAAoB,WAAmB,SAAgE;CACrH,MAAM,WAAW,YAAY,KAAA,IAAY,KAAA,IAAY;EAAE;EAAW;CAAQ;CAC1E,IAAI,UAAU,UAAU,IAAI,QAAQ;CACpC,oBAAoB,UAAU,YAAY,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,YAAY,QAAQ,IAAI,SAAS,KAAK,KAAK,CAAC,CAAC;CAC5G,IAAI,WAAW;CACf,aAAa;EACX,IAAI,UAAU;EACd,WAAW;EACX,IAAI,UAAU,UAAU,OAAO,QAAQ;EACvC,oBAAoB,UAAU,YAAY;GACxC,MAAM,OAAO,IAAI,IAAI,OAAO;GAC5B,MAAM,aAAa,KAAK,IAAI,SAAS,KAAK,KAAK;GAC/C,IAAI,cAAc,GAAG,KAAK,OAAO,SAAS;QACrC,KAAK,IAAI,WAAW,SAAS;GAClC,OAAO;EACT,CAAC;CACH;AACF;;AAGA,SAAgB,2BAA2B,OAAsC;CAC/E,IAAI,OAAO,MAAM,SAAS,YAAY,OAAO,MAAM,cAAc,UAAU;CAC3E,KAAK,MAAM,YAAY,WAAW;EAChC,IAAI,SAAS,cAAc,MAAM,WAAW;EAC5C,IAAI;GACF,SAAS,QAAQ,KAAK;EACxB,SAAS,OAAO;GACd,QAAQ,MAAM,mCAAmC,KAAK;EACxD;CACF;AACF"}