@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,8 @@
1
+ //#region src/web/features/settings/TemplateSettings.d.ts
2
+ /** Select only admitted template contributions, and make the config write destination explicit. */
3
+ export declare function TemplateSettings({ target, onTargetChange }: {
4
+ target: string;
5
+ onTargetChange: (target: string) => void;
6
+ }): import("react").JSX.Element;
7
+ //#endregion
8
+ //# sourceMappingURL=TemplateSettings.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateSettings.d.mts","names":[],"sources":["../../../../src/web/features/settings/TemplateSettings.tsx"],"mappings":";;wBAkCgB,mBACd,QACA;EAEA;EACA,iBAAiB;oBAClB,IAAA"}
@@ -0,0 +1,177 @@
1
+ import { resolveWebTemplate } from "../../lib/templateCatalog.mjs";
2
+ import { webTemplateCatalog } from "../../lib/pluginRegistry.mjs";
3
+ import { reloadWebTemplateDecision } from "../../lib/pluginCompositions.mjs";
4
+ import { configuredTemplate, refreshTemplateConfiguration, saveTemplateDefault, useTemplateConfiguration } from "../../stores/templateStore.mjs";
5
+ import { useWebPluginRegistry } from "../../stores/useWebPluginRegistry.mjs";
6
+ import { workspacesStore } from "../../stores/workspacesStore.mjs";
7
+ import { useDashboardState } from "../../stores/dashboardStateStore.mjs";
8
+ import { useStore } from "@tanstack/react-store";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ import { Button, CheckIcon, RadioGroup, RadioGroupCard, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, SettingsActions, SettingsNote, SettingsSection, SettingsSectionDescription, SettingsSectionHeader, SettingsSectionTitle } from "@agimon-ai/po-web-components";
11
+ //#region src/web/features/settings/TemplateSettings.tsx
12
+ const WORKSPACE_TARGET = "workspace:";
13
+ /** Select only admitted template contributions, and make the config write destination explicit. */
14
+ function TemplateSettings({ target, onTargetChange }) {
15
+ useWebPluginRegistry();
16
+ const workspaces = useStore(workspacesStore, (state) => state);
17
+ const workspaceId = target.startsWith(WORKSPACE_TARGET) ? target.slice(10) : void 0;
18
+ const configuration = useTemplateConfiguration(workspaceId);
19
+ const catalog = webTemplateCatalog(workspaceId === void 0 ? { scope: "global" } : {
20
+ scope: "workspace",
21
+ workspaceId
22
+ });
23
+ const configured = configuredTemplate(configuration);
24
+ const resolved = resolveWebTemplate(catalog.templates, configured);
25
+ const [draft, setDraft] = useDashboardState("template/draft", null);
26
+ const choice = draft?.target === target ? draft.id : resolved.template?.id;
27
+ const busy = configuration.saving || configuration.loading;
28
+ const origin = configuration.config?.values["web.template"]?.origin ?? "default";
29
+ const missingWorkspace = workspaceId !== void 0 && workspaces.byId[workspaceId] === void 0;
30
+ const changed = choice !== void 0 && choice !== configured;
31
+ return /* @__PURE__ */ jsxs(SettingsSection, {
32
+ "data-testid": "template-settings",
33
+ children: [
34
+ /* @__PURE__ */ jsxs(SettingsSectionHeader, { children: [/* @__PURE__ */ jsx(SettingsSectionTitle, { children: "Layout" }), /* @__PURE__ */ jsx(SettingsSectionDescription, { children: "The arrangement Po opens with. Set it for everyone, or let one workspace choose its own." })] }),
35
+ /* @__PURE__ */ jsxs("div", {
36
+ className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2",
37
+ children: [/* @__PURE__ */ jsx("span", {
38
+ id: "template-scope-label",
39
+ className: "text-sm text-doom-dim",
40
+ children: "Applies to"
41
+ }), /* @__PURE__ */ jsxs(Select, {
42
+ value: target,
43
+ onValueChange: (value) => {
44
+ onTargetChange(value);
45
+ setDraft(null);
46
+ },
47
+ disabled: configuration.saving,
48
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
49
+ "aria-labelledby": "template-scope-label",
50
+ "data-testid": "template-scope",
51
+ className: "w-auto min-w-56 max-w-full",
52
+ children: /* @__PURE__ */ jsx(SelectValue, {})
53
+ }), /* @__PURE__ */ jsxs(SelectContent, { children: [/* @__PURE__ */ jsx(SelectItem, {
54
+ value: "global",
55
+ children: "Global default"
56
+ }), workspaces.order.map((id) => /* @__PURE__ */ jsxs(SelectItem, {
57
+ value: `${WORKSPACE_TARGET}${id}`,
58
+ children: ["Workspace: ", workspaces.byId[id]?.root ?? id]
59
+ }, id))] })]
60
+ })]
61
+ }),
62
+ /* @__PURE__ */ jsx(RadioGroup, {
63
+ "aria-label": "Layout",
64
+ value: choice ?? "",
65
+ onValueChange: (id) => setDraft({
66
+ target,
67
+ id
68
+ }),
69
+ className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
70
+ disabled: busy || missingWorkspace,
71
+ children: catalog.templates.map((template) => /* @__PURE__ */ jsxs(RadioGroupCard, {
72
+ value: template.id,
73
+ "data-testid": `template-${template.id}`,
74
+ "data-selected": choice === template.id,
75
+ className: "flex items-start gap-2 rounded-lg p-4",
76
+ children: [/* @__PURE__ */ jsxs("span", {
77
+ className: "flex min-w-0 flex-1 flex-col gap-1",
78
+ children: [
79
+ /* @__PURE__ */ jsx("span", {
80
+ className: "text-base font-semibold text-doom-hi",
81
+ children: template.label
82
+ }),
83
+ /* @__PURE__ */ jsx("span", {
84
+ className: "text-sm leading-relaxed text-doom-dim",
85
+ children: template.description
86
+ }),
87
+ /* @__PURE__ */ jsx("span", {
88
+ className: "font-mono text-sm text-doom-dim",
89
+ children: template.pluginId
90
+ })
91
+ ]
92
+ }), choice === template.id ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
93
+ }, template.id))
94
+ }),
95
+ resolved.warning ? /* @__PURE__ */ jsx("output", {
96
+ className: "block text-sm text-doom-yellow",
97
+ children: resolved.warning
98
+ }) : null,
99
+ catalog.diagnostics.map((diagnostic, index) => /* @__PURE__ */ jsx("output", {
100
+ className: "block text-sm text-doom-yellow",
101
+ children: diagnostic.message
102
+ }, `${diagnostic.pluginId}:${index}`)),
103
+ configuration.error ? /* @__PURE__ */ jsx("p", {
104
+ role: "alert",
105
+ "data-testid": "template-save-error",
106
+ className: "text-sm text-doom-red",
107
+ children: configuration.error
108
+ }) : null,
109
+ /* @__PURE__ */ jsxs(SettingsActions, { children: [
110
+ /* @__PURE__ */ jsx(Button, {
111
+ "data-testid": "template-save",
112
+ size: "sm",
113
+ variant: changed ? "primary" : "outline",
114
+ disabled: busy || missingWorkspace || choice === void 0 || configuration.config === void 0,
115
+ onClick: () => {
116
+ if (choice !== void 0) saveTemplateDefault(choice, workspaceId).then((saved) => {
117
+ if (saved) {
118
+ setDraft(null);
119
+ reloadWebTemplateDecision();
120
+ }
121
+ });
122
+ },
123
+ children: configuration.saving ? "Saving…" : "Set as default"
124
+ }),
125
+ /* @__PURE__ */ jsx(Button, {
126
+ "data-testid": "template-inherit",
127
+ size: "sm",
128
+ variant: "ghost",
129
+ disabled: busy || missingWorkspace || configuration.config === void 0,
130
+ onClick: () => {
131
+ saveTemplateDefault(null, workspaceId).then((saved) => {
132
+ if (saved) {
133
+ setDraft(null);
134
+ reloadWebTemplateDecision();
135
+ }
136
+ });
137
+ },
138
+ children: workspaceId === void 0 ? "Use automatic fallback" : "Inherit global default"
139
+ }),
140
+ /* @__PURE__ */ jsx(Button, {
141
+ "data-testid": "template-reload",
142
+ size: "sm",
143
+ variant: "ghost",
144
+ disabled: busy,
145
+ onClick: () => {
146
+ refreshTemplateConfiguration(workspaceId).then(() => reloadWebTemplateDecision());
147
+ },
148
+ children: "Reload configuration"
149
+ })
150
+ ] }),
151
+ /* @__PURE__ */ jsxs(SettingsNote, {
152
+ "data-testid": "template-origin",
153
+ children: [
154
+ "Saved to",
155
+ " ",
156
+ /* @__PURE__ */ jsx("code", {
157
+ className: "font-mono",
158
+ children: workspaceId === void 0 ? "~/.po/config.yaml" : `${configuration.config?.repoRoot ?? workspaces.byId[workspaceId]?.root ?? workspaceId}/.po/config.yaml`
159
+ }),
160
+ ". Currently using",
161
+ " ",
162
+ configured === void 0 ? "automatic fallback" : /* @__PURE__ */ jsx("code", {
163
+ className: "font-mono",
164
+ children: configured
165
+ }),
166
+ " (",
167
+ origin,
168
+ ")."
169
+ ]
170
+ })
171
+ ]
172
+ });
173
+ }
174
+ //#endregion
175
+ export { TemplateSettings };
176
+
177
+ //# sourceMappingURL=TemplateSettings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateSettings.mjs","names":[],"sources":["../../../../src/web/features/settings/TemplateSettings.tsx"],"sourcesContent":["import {\n Button,\n CheckIcon,\n RadioGroup,\n RadioGroupCard,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SettingsActions,\n SettingsNote,\n SettingsSection,\n SettingsSectionDescription,\n SettingsSectionHeader,\n SettingsSectionTitle,\n} from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\n\nimport { reloadWebTemplateDecision } from '../../lib/pluginCompositions';\nimport { webTemplateCatalog } from '../../lib/pluginRegistry';\nimport { resolveWebTemplate } from '../../lib/templateCatalog';\nimport { useDashboardState } from '../../stores/dashboardStateStore';\nimport {\n configuredTemplate,\n refreshTemplateConfiguration,\n saveTemplateDefault,\n useTemplateConfiguration,\n} from '../../stores/templateStore';\nimport { useWebPluginRegistry } from '../../stores/useWebPluginRegistry';\nimport { workspacesStore } from '../../stores/workspacesStore';\n\nconst WORKSPACE_TARGET = 'workspace:';\n/** Select only admitted template contributions, and make the config write destination explicit. */\nexport function TemplateSettings({\n target,\n onTargetChange,\n}: {\n target: string;\n onTargetChange: (target: string) => void;\n}) {\n useWebPluginRegistry();\n const workspaces = useStore(workspacesStore, (state) => state);\n const workspaceId = target.startsWith(WORKSPACE_TARGET) ? target.slice(WORKSPACE_TARGET.length) : undefined;\n const configuration = useTemplateConfiguration(workspaceId);\n const catalog = webTemplateCatalog(\n workspaceId === undefined ? { scope: 'global' } : { scope: 'workspace', workspaceId },\n );\n const configured = configuredTemplate(configuration);\n const resolved = resolveWebTemplate(catalog.templates, configured);\n const [draft, setDraft] = useDashboardState<{ target: string; id: string } | null>('template/draft', null);\n const choice = draft?.target === target ? draft.id : resolved.template?.id;\n const busy = configuration.saving || configuration.loading;\n const origin = configuration.config?.values['web.template']?.origin ?? 'default';\n const missingWorkspace = workspaceId !== undefined && workspaces.byId[workspaceId] === undefined;\n const changed = choice !== undefined && choice !== configured;\n return (\n <SettingsSection data-testid=\"template-settings\">\n <SettingsSectionHeader>\n <SettingsSectionTitle>Layout</SettingsSectionTitle>\n <SettingsSectionDescription>\n The arrangement Po opens with. Set it for everyone, or let one workspace choose its own.\n </SettingsSectionDescription>\n </SettingsSectionHeader>\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2\">\n <span id=\"template-scope-label\" className=\"text-sm text-doom-dim\">\n Applies to\n </span>\n <Select\n value={target}\n onValueChange={(value) => {\n onTargetChange(value);\n setDraft(null);\n }}\n disabled={configuration.saving}\n >\n <SelectTrigger\n aria-labelledby=\"template-scope-label\"\n data-testid=\"template-scope\"\n className=\"w-auto min-w-56 max-w-full\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"global\">Global default</SelectItem>\n {workspaces.order.map((id) => (\n <SelectItem key={id} value={`${WORKSPACE_TARGET}${id}`}>\n Workspace: {workspaces.byId[id]?.root ?? id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <RadioGroup\n aria-label=\"Layout\"\n value={choice ?? ''}\n onValueChange={(id) => setDraft({ target, id })}\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\"\n disabled={busy || missingWorkspace}\n >\n {catalog.templates.map((template) => (\n <RadioGroupCard\n key={template.id}\n value={template.id}\n data-testid={`template-${template.id}`}\n data-selected={choice === template.id}\n className=\"flex items-start gap-2 rounded-lg p-4\"\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-base font-semibold text-doom-hi\">{template.label}</span>\n <span className=\"text-sm leading-relaxed text-doom-dim\">{template.description}</span>\n <span className=\"font-mono text-sm text-doom-dim\">{template.pluginId}</span>\n </span>\n {choice === template.id ? <CheckIcon className=\"size-4 shrink-0 text-doom-green\" /> : null}\n </RadioGroupCard>\n ))}\n </RadioGroup>\n {resolved.warning ? <output className=\"block text-sm text-doom-yellow\">{resolved.warning}</output> : null}\n {catalog.diagnostics.map((diagnostic, index) => (\n <output key={`${diagnostic.pluginId}:${index}`} className=\"block text-sm text-doom-yellow\">\n {diagnostic.message}\n </output>\n ))}\n {configuration.error ? (\n <p role=\"alert\" data-testid=\"template-save-error\" className=\"text-sm text-doom-red\">\n {configuration.error}\n </p>\n ) : null}\n <SettingsActions>\n <Button\n data-testid=\"template-save\"\n size=\"sm\"\n variant={changed ? 'primary' : 'outline'}\n disabled={busy || missingWorkspace || choice === undefined || configuration.config === undefined}\n onClick={() => {\n if (choice !== undefined)\n void saveTemplateDefault(choice, workspaceId).then((saved) => {\n if (saved) {\n setDraft(null);\n void reloadWebTemplateDecision();\n }\n });\n }}\n >\n {configuration.saving ? 'Saving…' : 'Set as default'}\n </Button>\n <Button\n data-testid=\"template-inherit\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={busy || missingWorkspace || configuration.config === undefined}\n onClick={() => {\n void saveTemplateDefault(null, workspaceId).then((saved) => {\n if (saved) {\n setDraft(null);\n void reloadWebTemplateDecision();\n }\n });\n }}\n >\n {workspaceId === undefined ? 'Use automatic fallback' : 'Inherit global default'}\n </Button>\n <Button\n data-testid=\"template-reload\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={busy}\n onClick={() => {\n void refreshTemplateConfiguration(workspaceId).then(() => reloadWebTemplateDecision());\n }}\n >\n Reload configuration\n </Button>\n </SettingsActions>\n <SettingsNote data-testid=\"template-origin\">\n Saved to{' '}\n <code className=\"font-mono\">\n {workspaceId === undefined\n ? '~/.po/config.yaml'\n : `${configuration.config?.repoRoot ?? workspaces.byId[workspaceId]?.root ?? workspaceId}/.po/config.yaml`}\n </code>\n . Currently using{' '}\n {configured === undefined ? 'automatic fallback' : <code className=\"font-mono\">{configured}</code>} ({origin}).\n </SettingsNote>\n </SettingsSection>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ const require_remoteAccessStore = require("../../stores/remoteAccessStore.cjs");
2
+ const require_dashboardStateStore = require("../../stores/dashboardStateStore.cjs");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
5
+ //#region src/web/features/settings/TunnelSettings.tsx
6
+ const PUBLIC_HOSTNAME = /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/iu;
7
+ function namedTunnel(tunnel) {
8
+ return tunnel.kind === "named" ? tunnel : {
9
+ kind: "named",
10
+ hostname: ""
11
+ };
12
+ }
13
+ function optional(value) {
14
+ const trimmed = value.trim();
15
+ return trimmed === "" ? void 0 : trimmed;
16
+ }
17
+ const TUNNEL_KINDS = [{
18
+ kind: "quick",
19
+ label: "Quick tunnel",
20
+ detail: "No account needed. The address changes each time."
21
+ }, {
22
+ kind: "named",
23
+ label: "Named tunnel",
24
+ detail: "Your own domain, and the address stays put."
25
+ }];
26
+ /** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */
27
+ function TunnelSettings({ tunnel }) {
28
+ const [draft, setDraft] = require_dashboardStateStore.useDashboardState("tunnel/draft", tunnel);
29
+ const [lastTunnel, setLastTunnel] = require_dashboardStateStore.useDashboardState("tunnel/source", tunnel);
30
+ const [busy, setBusy, busyState] = require_dashboardStateStore.useDashboardState("tunnel/saving", false);
31
+ if (lastTunnel !== tunnel && JSON.stringify(draft) === JSON.stringify(lastTunnel)) {
32
+ setLastTunnel(tunnel);
33
+ setDraft(tunnel);
34
+ }
35
+ const hostname = draft.kind === "named" ? draft.hostname.trim() : "";
36
+ const invalidHostname = draft.kind === "named" && !PUBLIC_HOSTNAME.test(hostname);
37
+ const changed = JSON.stringify(draft) !== JSON.stringify(tunnel);
38
+ function updateNamed(patch) {
39
+ setDraft((current) => ({
40
+ ...namedTunnel(current),
41
+ ...patch
42
+ }));
43
+ }
44
+ async function save() {
45
+ if (busyState.state) return;
46
+ setBusy(true);
47
+ const named = namedTunnel(draft);
48
+ const tokenFile = optional(named.tokenFile ?? "");
49
+ const name = optional(named.name ?? "");
50
+ const configFile = optional(named.configFile ?? "");
51
+ const next = draft.kind === "quick" ? draft : {
52
+ kind: "named",
53
+ hostname,
54
+ ...tokenFile === void 0 ? {} : { tokenFile },
55
+ ...name === void 0 ? {} : { name },
56
+ ...configFile === void 0 ? {} : { configFile }
57
+ };
58
+ try {
59
+ if (await require_remoteAccessStore.updateRemoteSettings({ tunnel: next })) {
60
+ setLastTunnel(next);
61
+ setDraft((current) => current === draft ? next : current);
62
+ }
63
+ } finally {
64
+ setBusy(false);
65
+ }
66
+ }
67
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSection, {
68
+ "data-testid": "remote-tunnel-settings",
69
+ children: [
70
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSectionHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionTitle, { children: "Tunnel" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionDescription, { children: "How your other devices reach Po. A named tunnel gives you a stable address, which passkeys need." })] }),
71
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.RadioGroup, {
72
+ value: draft.kind,
73
+ onValueChange: (kind) => setDraft(kind === "named" ? namedTunnel(draft) : { kind: "quick" }),
74
+ className: "grid grid-cols-1 gap-3 min-[480px]:grid-cols-2",
75
+ "aria-label": "Tunnel type",
76
+ children: TUNNEL_KINDS.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.RadioGroupCard, {
77
+ value: option.kind,
78
+ "data-testid": `remote-tunnel-${option.kind}`,
79
+ className: "flex items-start gap-2 rounded-lg p-4",
80
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
81
+ className: "flex min-w-0 flex-1 flex-col gap-1",
82
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
83
+ className: "text-base font-semibold text-doom-hi",
84
+ children: option.label
85
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
86
+ className: "text-sm leading-relaxed text-doom-dim",
87
+ children: option.detail
88
+ })]
89
+ }), draft.kind === option.kind ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
90
+ }, option.kind))
91
+ }),
92
+ draft.kind === "named" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsCard, { children: [
93
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
94
+ id: "remote-tunnel-hostname",
95
+ label: "Hostname",
96
+ description: invalidHostname ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
97
+ className: "text-doom-red",
98
+ children: "Enter the hostname only, without https://, a port or a path."
99
+ }) : "The domain your devices will open.",
100
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
101
+ id: "remote-tunnel-hostname",
102
+ "data-testid": "remote-tunnel-hostname",
103
+ value: draft.hostname,
104
+ placeholder: "po.example.com",
105
+ "aria-invalid": invalidHostname,
106
+ spellCheck: false,
107
+ onChange: (event) => updateNamed({ hostname: event.target.value }),
108
+ className: "font-mono text-sm"
109
+ })
110
+ }),
111
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
112
+ id: "remote-tunnel-token-file",
113
+ label: "Token file",
114
+ description: "A local file holding your Cloudflare connector token. Po reads the file and never stores the token itself.",
115
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
116
+ id: "remote-tunnel-token-file",
117
+ "data-testid": "remote-tunnel-token-file",
118
+ value: draft.tokenFile ?? "",
119
+ placeholder: "~/.cloudflared/po.token",
120
+ spellCheck: false,
121
+ onChange: (event) => updateNamed({ tokenFile: event.target.value }),
122
+ className: "font-mono text-sm"
123
+ })
124
+ }),
125
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
126
+ className: "group",
127
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
128
+ className: "cursor-pointer px-5 py-3 text-sm text-doom-dim hover:text-doom-hi",
129
+ children: "Tunnel you manage with cloudflared"
130
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
131
+ className: "flex flex-col divide-y divide-doom-border-soft border-t border-doom-border-soft",
132
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
133
+ id: "remote-tunnel-name",
134
+ label: "Tunnel name",
135
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
136
+ id: "remote-tunnel-name",
137
+ "data-testid": "remote-tunnel-name",
138
+ value: draft.name ?? "",
139
+ placeholder: "po",
140
+ spellCheck: false,
141
+ onChange: (event) => updateNamed({ name: event.target.value }),
142
+ className: "font-mono text-sm"
143
+ })
144
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
145
+ id: "remote-tunnel-config-file",
146
+ label: "Config file",
147
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
148
+ id: "remote-tunnel-config-file",
149
+ "data-testid": "remote-tunnel-config-file",
150
+ value: draft.configFile ?? "",
151
+ placeholder: "~/.cloudflared/config.yml",
152
+ spellCheck: false,
153
+ onChange: (event) => updateNamed({ configFile: event.target.value }),
154
+ className: "font-mono text-sm"
155
+ })
156
+ })]
157
+ })]
158
+ })
159
+ ] }) : null,
160
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
161
+ variant: changed && !invalidHostname ? "primary" : "outline",
162
+ size: "sm",
163
+ "data-testid": "remote-tunnel-save",
164
+ loading: busy,
165
+ disabled: busy || !changed || invalidHostname,
166
+ onClick: () => void save(),
167
+ children: "Save tunnel"
168
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsNote, { children: [
169
+ "Takes effect the next time remote access starts. Install ",
170
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
171
+ className: "font-mono",
172
+ children: "cloudflared"
173
+ }),
174
+ " on this machine first."
175
+ ] })] })
176
+ ]
177
+ });
178
+ }
179
+ //#endregion
180
+ exports.TunnelSettings = TunnelSettings;
181
+
182
+ //# sourceMappingURL=TunnelSettings.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelSettings.cjs","names":["useDashboardState","updateRemoteSettings","SettingsSection","SettingsSectionHeader","SettingsSectionTitle","SettingsSectionDescription","RadioGroup","RadioGroupCard","CheckIcon","SettingsCard","SettingsField","Input","SettingsActions","Button","SettingsNote"],"sources":["../../../../src/web/features/settings/TunnelSettings.tsx"],"sourcesContent":["import {\n Button,\n CheckIcon,\n Input,\n RadioGroup,\n RadioGroupCard,\n SettingsActions,\n SettingsCard,\n SettingsField,\n SettingsNote,\n SettingsSection,\n SettingsSectionDescription,\n SettingsSectionHeader,\n SettingsSectionTitle,\n} from '@agimon-ai/po-web-components';\n\nimport type { TunnelConfig } from '../../../types/remoteAccess';\nimport { useDashboardState } from '../../stores/dashboardStateStore';\nimport { updateRemoteSettings } from '../../stores/remoteAccessStore';\n\nconst PUBLIC_HOSTNAME =\n /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/iu;\n\nfunction namedTunnel(tunnel: TunnelConfig): Extract<TunnelConfig, { kind: 'named' }> {\n return tunnel.kind === 'named' ? tunnel : { kind: 'named', hostname: '' };\n}\n\nfunction optional(value: string): string | undefined {\n const trimmed = value.trim();\n return trimmed === '' ? undefined : trimmed;\n}\n\nconst TUNNEL_KINDS = [\n { kind: 'quick', label: 'Quick tunnel', detail: 'No account needed. The address changes each time.' },\n { kind: 'named', label: 'Named tunnel', detail: 'Your own domain, and the address stays put.' },\n] as const;\n\n/** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */\nexport function TunnelSettings({ tunnel }: { tunnel: TunnelConfig }) {\n const [draft, setDraft] = useDashboardState<TunnelConfig>('tunnel/draft', tunnel);\n\n // Refreshes must not replace an unsaved draft, including after an app remount.\n const [lastTunnel, setLastTunnel] = useDashboardState('tunnel/source', tunnel);\n const [busy, setBusy, busyState] = useDashboardState('tunnel/saving', false);\n if (lastTunnel !== tunnel && JSON.stringify(draft) === JSON.stringify(lastTunnel)) {\n setLastTunnel(tunnel);\n setDraft(tunnel);\n }\n\n const hostname = draft.kind === 'named' ? draft.hostname.trim() : '';\n const invalidHostname = draft.kind === 'named' && !PUBLIC_HOSTNAME.test(hostname);\n const changed = JSON.stringify(draft) !== JSON.stringify(tunnel);\n\n function updateNamed(patch: Partial<Extract<TunnelConfig, { kind: 'named' }>>): void {\n setDraft((current) => ({ ...namedTunnel(current), ...patch }));\n }\n\n async function save(): Promise<void> {\n if (busyState.state) return;\n setBusy(true);\n const named = namedTunnel(draft);\n const tokenFile = optional(named.tokenFile ?? '');\n const name = optional(named.name ?? '');\n const configFile = optional(named.configFile ?? '');\n const next: TunnelConfig =\n draft.kind === 'quick'\n ? draft\n : {\n kind: 'named',\n hostname,\n ...(tokenFile === undefined ? {} : { tokenFile }),\n ...(name === undefined ? {} : { name }),\n ...(configFile === undefined ? {} : { configFile }),\n };\n try {\n if (await updateRemoteSettings({ tunnel: next })) {\n setLastTunnel(next);\n setDraft((current) => (current === draft ? next : current));\n }\n } finally {\n setBusy(false);\n }\n }\n\n return (\n <SettingsSection data-testid=\"remote-tunnel-settings\">\n <SettingsSectionHeader>\n <SettingsSectionTitle>Tunnel</SettingsSectionTitle>\n <SettingsSectionDescription>\n How your other devices reach Po. A named tunnel gives you a stable address, which passkeys need.\n </SettingsSectionDescription>\n </SettingsSectionHeader>\n\n <RadioGroup\n value={draft.kind}\n onValueChange={(kind) => setDraft(kind === 'named' ? namedTunnel(draft) : { kind: 'quick' })}\n className=\"grid grid-cols-1 gap-3 min-[480px]:grid-cols-2\"\n aria-label=\"Tunnel type\"\n >\n {TUNNEL_KINDS.map((option) => (\n <RadioGroupCard\n key={option.kind}\n value={option.kind}\n data-testid={`remote-tunnel-${option.kind}`}\n className=\"flex items-start gap-2 rounded-lg p-4\"\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-base font-semibold text-doom-hi\">{option.label}</span>\n <span className=\"text-sm leading-relaxed text-doom-dim\">{option.detail}</span>\n </span>\n {draft.kind === option.kind ? <CheckIcon className=\"size-4 shrink-0 text-doom-green\" /> : null}\n </RadioGroupCard>\n ))}\n </RadioGroup>\n\n {draft.kind === 'named' ? (\n <SettingsCard>\n <SettingsField\n id=\"remote-tunnel-hostname\"\n label=\"Hostname\"\n description={\n invalidHostname ? (\n <span className=\"text-doom-red\">Enter the hostname only, without https://, a port or a path.</span>\n ) : (\n 'The domain your devices will open.'\n )\n }\n >\n <Input\n id=\"remote-tunnel-hostname\"\n data-testid=\"remote-tunnel-hostname\"\n value={draft.hostname}\n placeholder=\"po.example.com\"\n aria-invalid={invalidHostname}\n spellCheck={false}\n onChange={(event) => updateNamed({ hostname: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n <SettingsField\n id=\"remote-tunnel-token-file\"\n label=\"Token file\"\n description=\"A local file holding your Cloudflare connector token. Po reads the file and never stores the token itself.\"\n >\n <Input\n id=\"remote-tunnel-token-file\"\n data-testid=\"remote-tunnel-token-file\"\n value={draft.tokenFile ?? ''}\n placeholder=\"~/.cloudflared/po.token\"\n spellCheck={false}\n onChange={(event) => updateNamed({ tokenFile: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n <details className=\"group\">\n <summary className=\"cursor-pointer px-5 py-3 text-sm text-doom-dim hover:text-doom-hi\">\n Tunnel you manage with cloudflared\n </summary>\n <div className=\"flex flex-col divide-y divide-doom-border-soft border-t border-doom-border-soft\">\n <SettingsField id=\"remote-tunnel-name\" label=\"Tunnel name\">\n <Input\n id=\"remote-tunnel-name\"\n data-testid=\"remote-tunnel-name\"\n value={draft.name ?? ''}\n placeholder=\"po\"\n spellCheck={false}\n onChange={(event) => updateNamed({ name: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n <SettingsField id=\"remote-tunnel-config-file\" label=\"Config file\">\n <Input\n id=\"remote-tunnel-config-file\"\n data-testid=\"remote-tunnel-config-file\"\n value={draft.configFile ?? ''}\n placeholder=\"~/.cloudflared/config.yml\"\n spellCheck={false}\n onChange={(event) => updateNamed({ configFile: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n </div>\n </details>\n </SettingsCard>\n ) : null}\n\n <SettingsActions>\n <Button\n variant={changed && !invalidHostname ? 'primary' : 'outline'}\n size=\"sm\"\n data-testid=\"remote-tunnel-save\"\n loading={busy}\n disabled={busy || !changed || invalidHostname}\n onClick={() => void save()}\n >\n Save tunnel\n </Button>\n <SettingsNote>\n Takes effect the next time remote access starts. Install <code className=\"font-mono\">cloudflared</code> on\n this machine first.\n </SettingsNote>\n </SettingsActions>\n </SettingsSection>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { TunnelConfig } from "../../../types/remoteAccess.mjs";
2
+ //#region src/web/features/settings/TunnelSettings.d.ts
3
+ /** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */
4
+ export declare function TunnelSettings({ tunnel }: {
5
+ tunnel: TunnelConfig;
6
+ }): import("react").JSX.Element;
7
+ //#endregion
8
+ //# sourceMappingURL=TunnelSettings.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelSettings.d.mts","names":[],"sources":["../../../../src/web/features/settings/TunnelSettings.tsx"],"mappings":";;;wBAsCgB,iBAAiB;EAAY,QAAQ;oBAAc,IAAA"}
@@ -0,0 +1,182 @@
1
+ import { updateRemoteSettings } from "../../stores/remoteAccessStore.mjs";
2
+ import { useDashboardState } from "../../stores/dashboardStateStore.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { Button, CheckIcon, Input, RadioGroup, RadioGroupCard, SettingsActions, SettingsCard, SettingsField, SettingsNote, SettingsSection, SettingsSectionDescription, SettingsSectionHeader, SettingsSectionTitle } from "@agimon-ai/po-web-components";
5
+ //#region src/web/features/settings/TunnelSettings.tsx
6
+ const PUBLIC_HOSTNAME = /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/iu;
7
+ function namedTunnel(tunnel) {
8
+ return tunnel.kind === "named" ? tunnel : {
9
+ kind: "named",
10
+ hostname: ""
11
+ };
12
+ }
13
+ function optional(value) {
14
+ const trimmed = value.trim();
15
+ return trimmed === "" ? void 0 : trimmed;
16
+ }
17
+ const TUNNEL_KINDS = [{
18
+ kind: "quick",
19
+ label: "Quick tunnel",
20
+ detail: "No account needed. The address changes each time."
21
+ }, {
22
+ kind: "named",
23
+ label: "Named tunnel",
24
+ detail: "Your own domain, and the address stays put."
25
+ }];
26
+ /** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */
27
+ function TunnelSettings({ tunnel }) {
28
+ const [draft, setDraft] = useDashboardState("tunnel/draft", tunnel);
29
+ const [lastTunnel, setLastTunnel] = useDashboardState("tunnel/source", tunnel);
30
+ const [busy, setBusy, busyState] = useDashboardState("tunnel/saving", false);
31
+ if (lastTunnel !== tunnel && JSON.stringify(draft) === JSON.stringify(lastTunnel)) {
32
+ setLastTunnel(tunnel);
33
+ setDraft(tunnel);
34
+ }
35
+ const hostname = draft.kind === "named" ? draft.hostname.trim() : "";
36
+ const invalidHostname = draft.kind === "named" && !PUBLIC_HOSTNAME.test(hostname);
37
+ const changed = JSON.stringify(draft) !== JSON.stringify(tunnel);
38
+ function updateNamed(patch) {
39
+ setDraft((current) => ({
40
+ ...namedTunnel(current),
41
+ ...patch
42
+ }));
43
+ }
44
+ async function save() {
45
+ if (busyState.state) return;
46
+ setBusy(true);
47
+ const named = namedTunnel(draft);
48
+ const tokenFile = optional(named.tokenFile ?? "");
49
+ const name = optional(named.name ?? "");
50
+ const configFile = optional(named.configFile ?? "");
51
+ const next = draft.kind === "quick" ? draft : {
52
+ kind: "named",
53
+ hostname,
54
+ ...tokenFile === void 0 ? {} : { tokenFile },
55
+ ...name === void 0 ? {} : { name },
56
+ ...configFile === void 0 ? {} : { configFile }
57
+ };
58
+ try {
59
+ if (await updateRemoteSettings({ tunnel: next })) {
60
+ setLastTunnel(next);
61
+ setDraft((current) => current === draft ? next : current);
62
+ }
63
+ } finally {
64
+ setBusy(false);
65
+ }
66
+ }
67
+ return /* @__PURE__ */ jsxs(SettingsSection, {
68
+ "data-testid": "remote-tunnel-settings",
69
+ children: [
70
+ /* @__PURE__ */ jsxs(SettingsSectionHeader, { children: [/* @__PURE__ */ jsx(SettingsSectionTitle, { children: "Tunnel" }), /* @__PURE__ */ jsx(SettingsSectionDescription, { children: "How your other devices reach Po. A named tunnel gives you a stable address, which passkeys need." })] }),
71
+ /* @__PURE__ */ jsx(RadioGroup, {
72
+ value: draft.kind,
73
+ onValueChange: (kind) => setDraft(kind === "named" ? namedTunnel(draft) : { kind: "quick" }),
74
+ className: "grid grid-cols-1 gap-3 min-[480px]:grid-cols-2",
75
+ "aria-label": "Tunnel type",
76
+ children: TUNNEL_KINDS.map((option) => /* @__PURE__ */ jsxs(RadioGroupCard, {
77
+ value: option.kind,
78
+ "data-testid": `remote-tunnel-${option.kind}`,
79
+ className: "flex items-start gap-2 rounded-lg p-4",
80
+ children: [/* @__PURE__ */ jsxs("span", {
81
+ className: "flex min-w-0 flex-1 flex-col gap-1",
82
+ children: [/* @__PURE__ */ jsx("span", {
83
+ className: "text-base font-semibold text-doom-hi",
84
+ children: option.label
85
+ }), /* @__PURE__ */ jsx("span", {
86
+ className: "text-sm leading-relaxed text-doom-dim",
87
+ children: option.detail
88
+ })]
89
+ }), draft.kind === option.kind ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
90
+ }, option.kind))
91
+ }),
92
+ draft.kind === "named" ? /* @__PURE__ */ jsxs(SettingsCard, { children: [
93
+ /* @__PURE__ */ jsx(SettingsField, {
94
+ id: "remote-tunnel-hostname",
95
+ label: "Hostname",
96
+ description: invalidHostname ? /* @__PURE__ */ jsx("span", {
97
+ className: "text-doom-red",
98
+ children: "Enter the hostname only, without https://, a port or a path."
99
+ }) : "The domain your devices will open.",
100
+ children: /* @__PURE__ */ jsx(Input, {
101
+ id: "remote-tunnel-hostname",
102
+ "data-testid": "remote-tunnel-hostname",
103
+ value: draft.hostname,
104
+ placeholder: "po.example.com",
105
+ "aria-invalid": invalidHostname,
106
+ spellCheck: false,
107
+ onChange: (event) => updateNamed({ hostname: event.target.value }),
108
+ className: "font-mono text-sm"
109
+ })
110
+ }),
111
+ /* @__PURE__ */ jsx(SettingsField, {
112
+ id: "remote-tunnel-token-file",
113
+ label: "Token file",
114
+ description: "A local file holding your Cloudflare connector token. Po reads the file and never stores the token itself.",
115
+ children: /* @__PURE__ */ jsx(Input, {
116
+ id: "remote-tunnel-token-file",
117
+ "data-testid": "remote-tunnel-token-file",
118
+ value: draft.tokenFile ?? "",
119
+ placeholder: "~/.cloudflared/po.token",
120
+ spellCheck: false,
121
+ onChange: (event) => updateNamed({ tokenFile: event.target.value }),
122
+ className: "font-mono text-sm"
123
+ })
124
+ }),
125
+ /* @__PURE__ */ jsxs("details", {
126
+ className: "group",
127
+ children: [/* @__PURE__ */ jsx("summary", {
128
+ className: "cursor-pointer px-5 py-3 text-sm text-doom-dim hover:text-doom-hi",
129
+ children: "Tunnel you manage with cloudflared"
130
+ }), /* @__PURE__ */ jsxs("div", {
131
+ className: "flex flex-col divide-y divide-doom-border-soft border-t border-doom-border-soft",
132
+ children: [/* @__PURE__ */ jsx(SettingsField, {
133
+ id: "remote-tunnel-name",
134
+ label: "Tunnel name",
135
+ children: /* @__PURE__ */ jsx(Input, {
136
+ id: "remote-tunnel-name",
137
+ "data-testid": "remote-tunnel-name",
138
+ value: draft.name ?? "",
139
+ placeholder: "po",
140
+ spellCheck: false,
141
+ onChange: (event) => updateNamed({ name: event.target.value }),
142
+ className: "font-mono text-sm"
143
+ })
144
+ }), /* @__PURE__ */ jsx(SettingsField, {
145
+ id: "remote-tunnel-config-file",
146
+ label: "Config file",
147
+ children: /* @__PURE__ */ jsx(Input, {
148
+ id: "remote-tunnel-config-file",
149
+ "data-testid": "remote-tunnel-config-file",
150
+ value: draft.configFile ?? "",
151
+ placeholder: "~/.cloudflared/config.yml",
152
+ spellCheck: false,
153
+ onChange: (event) => updateNamed({ configFile: event.target.value }),
154
+ className: "font-mono text-sm"
155
+ })
156
+ })]
157
+ })]
158
+ })
159
+ ] }) : null,
160
+ /* @__PURE__ */ jsxs(SettingsActions, { children: [/* @__PURE__ */ jsx(Button, {
161
+ variant: changed && !invalidHostname ? "primary" : "outline",
162
+ size: "sm",
163
+ "data-testid": "remote-tunnel-save",
164
+ loading: busy,
165
+ disabled: busy || !changed || invalidHostname,
166
+ onClick: () => void save(),
167
+ children: "Save tunnel"
168
+ }), /* @__PURE__ */ jsxs(SettingsNote, { children: [
169
+ "Takes effect the next time remote access starts. Install ",
170
+ /* @__PURE__ */ jsx("code", {
171
+ className: "font-mono",
172
+ children: "cloudflared"
173
+ }),
174
+ " on this machine first."
175
+ ] })] })
176
+ ]
177
+ });
178
+ }
179
+ //#endregion
180
+ export { TunnelSettings };
181
+
182
+ //# sourceMappingURL=TunnelSettings.mjs.map