@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 @@
1
+ {"version":3,"file":"pluginRegistry.mjs","names":[],"sources":["../../../src/web/lib/pluginRegistry.ts"],"sourcesContent":["import type {\n ActivityGroupContribution,\n ContextActionContribution,\n DockFaceContribution,\n FileLinkSource,\n LeaderBindingContribution,\n MinorModeContribution,\n PaletteCommandContribution,\n RepositorySettingsPanelContribution,\n SettingsPanelContribution,\n SettingsSectionContribution,\n SelectionAxisContribution,\n SessionChannelContribution,\n SlotDeclaration,\n SlotFillContribution,\n SurfaceContribution,\n TabContribution,\n ToolRendererContribution,\n UserMessageActionContribution,\n WebPluginDefinition,\n WebPluginMount,\n WebPluginRuntime,\n WebPluginSlotProps,\n} from '@agimon-ai/po-core/web';\nimport type { ComponentType } from 'react';\n\nimport { leaderConflicts } from './leaderTree';\nimport { mergeScopedPlugins, pluginsAtScope } from './pluginScopes';\nimport {\n collectNativeTemplates,\n collectWebTemplates,\n type NativeTemplateCatalog,\n type WebTemplateCatalog,\n} from './templateCatalog';\n\n/**\n * The installed plugin set.\n *\n * Plain module state rather than a reactive store: the generated plugin list\n * is installed once at startup, before the first render, so every read during\n * render is stable. Install runs in two phases. The first collects every\n * plugin's contributions in the generated order, which is (registrationOrder,\n * pluginId); the second resolves every relation between plugins by name, so\n * a plugin may fill a slot whichever of the two installs first.\n *\n * Plugins are independent and a user may install any of them, so a collision\n * between two plugins never fails the install: a shared name goes to the\n * first plugin (a Leader Space leaf to the later one, as the TUI documents)\n * and the loser is recorded as a diagnostic. Only a malformed contribution\n * inside one plugin throws, because that is a developer error its own tests\n * catch. resetWebPlugins exists for unit tests only.\n */\n\nexport type InstallDiagnosticKind =\n | 'duplicate-plugin'\n | 'duplicate-tab'\n | 'duplicate-dock-face'\n | 'duplicate-channel'\n | 'duplicate-tool'\n | 'duplicate-activity-group'\n | 'duplicate-minor-mode'\n | 'duplicate-selection-axis'\n | 'duplicate-palette-command'\n | 'duplicate-settings-section'\n | 'leader-leaf-override'\n | 'leader-group-label'\n | 'orphan-fill'\n | 'rejected-fill'\n | 'invalid-template'\n | 'duplicate-template'\n | 'slot-load-failed';\n\nexport interface InstallDiagnostic {\n /** The plugin that lost or misfiled the contribution. */\n pluginId: string;\n kind: InstallDiagnosticKind;\n message: string;\n}\n\n/** One placed fill, as the owner's renderSlot and slotData read it. */\nexport interface ResolvedFill {\n slot: string;\n pluginId: string;\n id: string;\n order: number;\n data?: unknown;\n component?: ComponentType<WebPluginSlotProps>;\n}\n\nexport interface InstalledContextAction extends ContextActionContribution {\n pluginId: string;\n}\n\nexport interface InstalledUserMessageAction extends UserMessageActionContribution {\n pluginId: string;\n}\n/** The slots the host itself declares; a plugin's own slots are namespaced by its id instead. */\nexport const HOST_SLOTS = {\n overlay: 'overlay',\n rail: 'rail',\n context: 'context',\n selectionBar: 'selection-bar',\n activity: 'activity',\n composerActions: 'composer-actions',\n composerMenu: 'composer-menu',\n sessionMenu: 'session-menu',\n /** A workspace plugin fill here replaces the host's new-session dialog for that workspace. */\n newSession: 'new-session',\n} as const;\n\nconst SLOT_SEPARATOR = '.';\nconst DEFAULT_FILL_ORDER = 1000;\nconst RESERVED_PLUGIN_IDS: ReadonlySet<string> = new Set(Object.values(HOST_SLOTS));\n\n/** The keyed slot an activity group opens: sections fill it and render as the group's body. */\nexport function activityGroupSlot(name: string): string {\n return `${HOST_SLOTS.activity}${SLOT_SEPARATOR}${name}`;\n}\n\ninterface RegistryState {\n plugins: WebPluginDefinition[];\n tabs: TabContribution[];\n dockFaces: DockFaceContribution[];\n channels: Map<string, SessionChannelContribution>;\n commands: PaletteCommandContribution[];\n contextActions: InstalledContextAction[];\n userMessageActions: InstalledUserMessageAction[];\n leaderBindings: LeaderBindingContribution[];\n selectionAxes: SelectionAxisContribution[];\n minorModes: MinorModeContribution[];\n activityGroups: ActivityGroupContribution[];\n settingsSections: SettingsSectionContribution[];\n settingsPanels: InstalledSettingsPanel[];\n toolRenderers: Map<string, ToolRendererContribution>;\n toolMatchers: ToolRendererContribution[];\n slots: Map<string, SlotDeclaration>;\n fills: Map<string, ResolvedFill[]>;\n fileLinks: FileLinkSource[];\n diagnostics: InstallDiagnostic[];\n}\n\nfunction emptyState(): RegistryState {\n return {\n plugins: [],\n tabs: [],\n dockFaces: [],\n channels: new Map(),\n commands: [],\n contextActions: [],\n userMessageActions: [],\n leaderBindings: [],\n selectionAxes: [],\n minorModes: [],\n activityGroups: [],\n settingsSections: [],\n settingsPanels: [],\n toolRenderers: new Map(),\n toolMatchers: [],\n slots: new Map(),\n fills: new Map(),\n fileLinks: [],\n diagnostics: [],\n };\n}\n\nlet defaultState = emptyState();\nlet installingState = defaultState;\nlet defaultInstalled = false;\nconst sessionStates = new Map<string, RegistryState>();\nconst workspaceStates = new Map<string, RegistryState>();\nconst sessionPlugins = new Map<string, readonly WebPluginDefinition[]>();\nconst sessionWorkspaces = new Map<string, string>();\nlet activeWorkspaceId: string | null = null;\nconst pendingSessionFrames = new Map<string, Map<string, Record<string, unknown>>>();\nconst MAX_PENDING_CHANNEL_TYPES = 64;\nlet activeSessionId: string | null = null;\n/** Slots each mount could not load, keyed `global`, `workspace:<id>` or `session:<id>`. */\nconst loadDiagnostics = new Map<string, readonly InstallDiagnostic[]>();\nlet registryRevision = 0;\nconst registryListeners = new Set<() => void>();\n\nfunction activeState(): RegistryState {\n return (\n (activeSessionId === null ? undefined : sessionStates.get(activeSessionId)) ?? workspaceState() ?? defaultState\n );\n}\n\nfunction workspaceState(): RegistryState | undefined {\n return activeWorkspaceId === null ? undefined : workspaceStates.get(activeWorkspaceId);\n}\n\n/** Settings requests an explicit scope; the cockpit reads its active session composition. */\nexport function webTemplateCatalog(mount?: WebPluginMount): WebTemplateCatalog {\n if (mount === undefined) {\n const scope = activeSessionId === null ? (activeWorkspaceId === null ? 'global' : 'workspace') : 'session';\n return collectWebTemplates(activeState().plugins, scope);\n }\n if (mount.scope === 'global') return collectWebTemplates(defaultState.plugins, 'global');\n const workspace = workspaceStates.get(mount.workspaceId);\n const plugins = mount.scope === 'session' ? sessionStates.get(mount.sessionId)?.plugins : undefined;\n return collectWebTemplates(\n plugins ?? mergeScopedPlugins(defaultState.plugins, workspace?.plugins ?? []),\n mount.scope,\n );\n}\n\n/** The phone app's layouts at the server-resolved `native.template` mount. */\nexport function nativeTemplateCatalog(mount: WebPluginMount): NativeTemplateCatalog {\n if (mount.scope === 'global') return collectNativeTemplates(defaultState.plugins, 'global');\n const workspace = workspaceStates.get(mount.workspaceId);\n const plugins = mount.scope === 'session' ? sessionStates.get(mount.sessionId)?.plugins : undefined;\n return collectNativeTemplates(\n plugins ?? mergeScopedPlugins(defaultState.plugins, workspace?.plugins ?? []),\n mount.scope,\n );\n}\nfunction rebuildSession(sessionId: string): RegistryState {\n const previous = sessionStates.get(sessionId);\n const workspaceId = sessionWorkspaces.get(sessionId);\n const workspace = workspaceId === undefined ? undefined : workspaceStates.get(workspaceId);\n const state = buildWebPluginState(\n mergeScopedPlugins(defaultState.plugins, workspace?.plugins ?? [], sessionPlugins.get(sessionId) ?? []),\n );\n sessionStates.set(sessionId, state);\n // Drop stale stores before replay, since replacement channels may share a store.\n for (const [type, channel] of previous?.channels.entries() ?? [])\n if (state.channels.get(type) !== channel) channel.drop(sessionId);\n const pending = pendingSessionFrames.get(sessionId);\n if (pending !== undefined) {\n for (const [type, frame] of pending) if (dispatchFrameToState(state, frame)) pending.delete(type);\n if (pending.size === 0) pendingSessionFrames.delete(sessionId);\n }\n return state;\n}\n\nexport function installGlobalWebPlugins(plugins: readonly WebPluginDefinition[]): void {\n defaultState = buildWebPluginState(pluginsAtScope(plugins, 'global'));\n for (const id of sessionPlugins.keys()) rebuildSession(id);\n emitRegistryChange();\n}\n\nexport function installWorkspaceWebPlugins(workspaceId: string, plugins: readonly WebPluginDefinition[]): void {\n const state = buildWebPluginState(pluginsAtScope(plugins, 'workspace'));\n workspaceStates.set(workspaceId, state);\n for (const [id, owner] of sessionWorkspaces) if (owner === workspaceId) rebuildSession(id);\n emitRegistryChange();\n}\n\nexport function removeWorkspaceWebPlugins(workspaceId: string): void {\n workspaceStates.delete(workspaceId);\n loadDiagnostics.delete(`workspace:${workspaceId}`);\n for (const [id, owner] of sessionWorkspaces) if (owner === workspaceId) rebuildSession(id);\n if (activeWorkspaceId === workspaceId) activeWorkspaceId = null;\n emitRegistryChange();\n}\n\nexport function activateWebPluginWorkspace(workspaceId: string | null): void {\n if (activeWorkspaceId === workspaceId) return;\n activeWorkspaceId = workspaceId;\n emitRegistryChange();\n}\n\nexport function bindSessionWebWorkspace(sessionId: string, workspaceId: string): void {\n sessionWorkspaces.set(sessionId, workspaceId);\n if (sessionPlugins.has(sessionId)) rebuildSession(sessionId);\n}\n\nfunction emitRegistryChange(): void {\n registryRevision += 1;\n for (const listener of registryListeners) listener();\n}\n\n/** The TUI's leader alphabet: one lowercase letter or digit per segment. */\nconst LEADER_KEY = /^[a-z0-9]$/;\nconst MAX_LEADER_PATH = 4;\n\n/**\n * A malformed binding fails the install rather than the keypress: the plugin\n * set is generated at build time, so this is a developer error, and the TUI's\n * registry refuses the same shapes.\n */\nfunction checkLeaderBinding(pluginId: string, binding: LeaderBindingContribution): void {\n if (binding.path.length === 0 || binding.path.length > MAX_LEADER_PATH) {\n throw new Error(\n `Web plugin '${pluginId}' leader binding '${binding.id}' needs 1 to ${MAX_LEADER_PATH} path segments.`,\n );\n }\n for (const segment of binding.path) {\n if (!LEADER_KEY.test(segment.key)) {\n throw new Error(\n `Web plugin '${pluginId}' leader binding '${binding.id}' key '${segment.key}' must be one lowercase letter or digit.`,\n );\n }\n if (segment.label.trim() === '') {\n throw new Error(`Web plugin '${pluginId}' leader binding '${binding.id}' has an unlabeled segment.`);\n }\n }\n}\n\ninterface PendingFill {\n pluginId: string;\n fill: SlotFillContribution;\n}\n\ninterface PendingSection {\n pluginId: string;\n section: SurfaceContribution;\n}\n\ninterface PendingBinding {\n pluginId: string;\n binding: LeaderBindingContribution;\n}\n\ntype SharedNamespace =\n | 'plugin'\n | 'tab'\n | 'dock-face'\n | 'channel'\n | 'tool'\n | 'activity-group'\n | 'minor-mode'\n | 'selection-axis'\n | 'palette-command'\n | 'settings-section';\n\n/**\n * Claims `id` in one shared namespace: false, with a diagnostic, when another\n * plugin already holds it; a throw when this plugin declared it twice, which\n * is a developer error rather than a composition.\n */\nfunction claim(owners: Map<string, string>, thing: SharedNamespace, id: string, pluginId: string): boolean {\n const holder = owners.get(id);\n if (holder === pluginId) {\n throw new Error(`Web plugin '${pluginId}' declares ${thing.replace('-', ' ')} '${id}' twice.`);\n }\n if (holder !== undefined) {\n installingState.diagnostics.push({\n pluginId,\n kind: `duplicate-${thing}`,\n message: `Web plugin '${pluginId}' ${thing.replace('-', ' ')} '${id}' is already provided by '${holder}'; keeping the first.`,\n });\n return false;\n }\n owners.set(id, pluginId);\n return true;\n}\n\nfunction surfaceFill(slot: string, surface: SurfaceContribution): SlotFillContribution {\n return { slot, id: surface.id, component: surface.component };\n}\n\nfunction checkSlotDeclaration(pluginId: string, declared: Set<string>, declaration: SlotDeclaration): void {\n const prefix = `${pluginId}${SLOT_SEPARATOR}`;\n if (!declaration.slot.startsWith(prefix) || declaration.slot.length === prefix.length) {\n throw new Error(\n `Web plugin '${pluginId}' declares slot '${declaration.slot}', which must be named '${prefix}<name>'.`,\n );\n }\n if (declared.has(declaration.slot)) {\n throw new Error(`Web plugin '${pluginId}' declares slot '${declaration.slot}' twice.`);\n }\n declared.add(declaration.slot);\n}\n\nfunction checkFill(pluginId: string, seen: Set<string>, fill: SlotFillContribution): void {\n if (fill.id === '') throw new Error(`Web plugin '${pluginId}' has a fill into '${fill.slot}' with an empty id.`);\n if (fill.component === undefined && fill.data === undefined) {\n throw new Error(`Web plugin '${pluginId}' fill '${fill.id}' into '${fill.slot}' has neither a component nor data.`);\n }\n const key = `${fill.slot} ${fill.id}`;\n if (seen.has(key)) throw new Error(`Web plugin '${pluginId}' fills '${fill.slot}' with id '${fill.id}' twice.`);\n seen.add(key);\n}\n\nfunction checkContextAction(pluginId: string, seen: Set<string>, action: ContextActionContribution): void {\n if (action.id.trim() === '') throw new Error(`Web plugin '${pluginId}' has a context action with an empty id.`);\n if (seen.has(action.id)) throw new Error(`Web plugin '${pluginId}' declares context action '${action.id}' twice.`);\n if (action.label.trim() === '')\n throw new Error(`Web plugin '${pluginId}' context action '${action.id}' has an empty label.`);\n if (action.kinds.length === 0 || action.kinds.some((kind) => kind.trim() === '')) {\n throw new Error(`Web plugin '${pluginId}' context action '${action.id}' needs non-empty kinds.`);\n }\n seen.add(action.id);\n}\n\nfunction checkUserMessageAction(pluginId: string, seen: Set<string>, action: UserMessageActionContribution): void {\n if (action.id.trim() === '') throw new Error(`Web plugin '${pluginId}' has a user message action with an empty id.`);\n if (seen.has(action.id))\n throw new Error(`Web plugin '${pluginId}' declares user message action '${action.id}' twice.`);\n if (action.label.trim() === '')\n throw new Error(`Web plugin '${pluginId}' user message action '${action.id}' has an empty label.`);\n seen.add(action.id);\n}\n\nconst byFillOrder = (left: ResolvedFill, right: ResolvedFill): number =>\n left.order - right.order || left.pluginId.localeCompare(right.pluginId) || left.id.localeCompare(right.id);\n\nconst byDisplayOrder = (left: { order?: number; name: string }, right: { order?: number; name: string }): number =>\n (left.order ?? DEFAULT_FILL_ORDER) - (right.order ?? DEFAULT_FILL_ORDER) || left.name.localeCompare(right.name);\n\nfunction placeFill(pluginId: string, fill: SlotFillContribution): void {\n const declaration = installingState.slots.get(fill.slot);\n if (declaration === undefined) {\n installingState.diagnostics.push({\n pluginId,\n kind: 'orphan-fill',\n message: `Web plugin '${pluginId}' fills slot '${fill.slot}', which no installed plugin declares; nothing is placed.`,\n });\n return;\n }\n let data = fill.data;\n if (data !== undefined && declaration.parse !== undefined) {\n const parsed = declaration.parse(data);\n if (parsed === null) {\n installingState.diagnostics.push({\n pluginId,\n kind: 'rejected-fill',\n message: `Web plugin '${pluginId}' fill '${fill.id}' into '${fill.slot}' was rejected by the slot's parse gate.`,\n });\n return;\n }\n data = parsed;\n }\n const placed: ResolvedFill = {\n slot: fill.slot,\n pluginId,\n id: fill.id,\n order: fill.order ?? DEFAULT_FILL_ORDER,\n ...(data === undefined ? {} : { data }),\n ...(fill.component === undefined ? {} : { component: fill.component }),\n };\n const list = installingState.fills.get(fill.slot);\n if (list === undefined) installingState.fills.set(fill.slot, [placed]);\n else list.push(placed);\n}\n\nfunction resolveLeaderConflicts(bindings: readonly PendingBinding[]): void {\n const owner = new Map<LeaderBindingContribution, string>(bindings.map((entry) => [entry.binding, entry.pluginId]));\n for (const conflict of leaderConflicts(bindings.map((entry) => entry.binding))) {\n const winner = owner.get(conflict.winner) ?? '';\n const loser = owner.get(conflict.loser) ?? '';\n if (winner === loser) {\n throw new Error(\n `Web plugin '${winner}' binds Leader Space '${conflict.path}' twice ('${conflict.loser.id}' and '${conflict.winner.id}').`,\n );\n }\n if (conflict.kind === 'leaf-override') {\n installingState.diagnostics.push({\n pluginId: loser,\n kind: 'leader-leaf-override',\n message: `Web plugin '${loser}' Leader Space leaf '${conflict.path}' ('${conflict.loser.id}') is taken over by '${winner}' ('${conflict.winner.id}').`,\n });\n } else {\n installingState.diagnostics.push({\n pluginId: loser,\n kind: 'leader-group-label',\n message: `Web plugin '${loser}' words Leader Space group '${conflict.path}' differently from '${winner}', which named it first; keeping the first label.`,\n });\n }\n }\n}\n\nfunction buildWebPluginState(plugins: readonly WebPluginDefinition[]): RegistryState {\n const previous = installingState;\n installingState = emptyState();\n try {\n const owners: Record<SharedNamespace, Map<string, string>> = {\n plugin: new Map(),\n tab: new Map(),\n 'dock-face': new Map(),\n channel: new Map(),\n tool: new Map(),\n 'activity-group': new Map(),\n 'minor-mode': new Map(),\n 'selection-axis': new Map(),\n 'palette-command': new Map(),\n 'settings-section': new Map(),\n };\n const pendingFills: PendingFill[] = [];\n const pendingSections: PendingSection[] = [];\n const pendingBindings: PendingBinding[] = [];\n const pendingSlots: SlotDeclaration[] = [];\n\n // Phase 1: collect, in the generated (registrationOrder, pluginId) order.\n for (const plugin of plugins) {\n if (RESERVED_PLUGIN_IDS.has(plugin.id)) {\n throw new Error(`Web plugin id '${plugin.id}' is reserved for a host slot.`);\n }\n if (owners.plugin.has(plugin.id)) {\n installingState.diagnostics.push({\n pluginId: plugin.id,\n kind: 'duplicate-plugin',\n message: `Web plugin id '${plugin.id}' is declared twice; keeping the first definition.`,\n });\n continue;\n }\n owners.plugin.set(plugin.id, plugin.id);\n installingState.plugins.push(plugin);\n for (const tab of plugin.tabs ?? []) {\n if (claim(owners.tab, 'tab', tab.id, plugin.id)) installingState.tabs.push(tab);\n }\n for (const face of plugin.dockFaces ?? []) {\n if (face.id === 'activity' || face.id === 'context') {\n throw new Error(`Web plugin '${plugin.id}' dock face '${face.id}' is reserved by the host.`);\n }\n if (face.id.trim() === '' || face.label.trim() === '') {\n throw new Error(`Web plugin '${plugin.id}' has an unlabeled dock face.`);\n }\n if (claim(owners['dock-face'], 'dock-face', face.id, plugin.id)) installingState.dockFaces.push(face);\n }\n // A panel and a section both become a /settings/:id route, so the two\n // share one id namespace rather than racing to own the same URL.\n for (const section of plugin.settingsSections ?? []) {\n if (claim(owners['settings-section'], 'settings-section', section.id, plugin.id)) {\n installingState.settingsSections.push(section);\n }\n }\n for (const panel of plugin.settingsPanels ?? []) {\n if (claim(owners['settings-section'], 'settings-section', panel.id, plugin.id)) {\n installingState.settingsPanels.push({ pluginId: plugin.id, ...panel });\n }\n }\n for (const channel of plugin.channels ?? []) {\n if (claim(owners.channel, 'channel', channel.channel, plugin.id))\n installingState.channels.set(channel.channel, channel);\n }\n for (const command of plugin.paletteCommands ?? []) {\n if (claim(owners['palette-command'], 'palette-command', command.id, plugin.id))\n installingState.commands.push(command);\n }\n const contextActions = new Set<string>();\n for (const action of plugin.contextActions ?? []) {\n checkContextAction(plugin.id, contextActions, action);\n installingState.contextActions.push({ pluginId: plugin.id, ...action });\n }\n const userMessageActions = new Set<string>();\n for (const action of plugin.userMessageActions ?? []) {\n checkUserMessageAction(plugin.id, userMessageActions, action);\n installingState.userMessageActions.push({ pluginId: plugin.id, ...action });\n }\n for (const binding of plugin.leaderBindings ?? []) {\n checkLeaderBinding(plugin.id, binding);\n pendingBindings.push({ pluginId: plugin.id, binding });\n }\n for (const axis of plugin.selectionAxes ?? []) {\n if (claim(owners['selection-axis'], 'selection-axis', axis.name, plugin.id))\n installingState.selectionAxes.push(axis);\n }\n for (const mode of plugin.minorModes ?? []) {\n if (claim(owners['minor-mode'], 'minor-mode', mode.name, plugin.id)) installingState.minorModes.push(mode);\n }\n for (const group of plugin.activityGroups ?? []) {\n if (claim(owners['activity-group'], 'activity-group', group.name, plugin.id))\n installingState.activityGroups.push(group);\n }\n for (const renderer of plugin.toolRenderers ?? []) {\n for (const tool of renderer.tools) {\n if (claim(owners.tool, 'tool', tool, plugin.id)) installingState.toolRenderers.set(tool, renderer);\n }\n if (renderer.matches !== undefined) installingState.toolMatchers.push(renderer);\n }\n const declared = new Set<string>();\n for (const declaration of plugin.slots ?? []) {\n checkSlotDeclaration(plugin.id, declared, declaration);\n pendingSlots.push(declaration);\n }\n const filled = new Set<string>();\n for (const fill of plugin.fills ?? []) {\n checkFill(plugin.id, filled, fill);\n pendingFills.push({ pluginId: plugin.id, fill });\n }\n for (const surface of plugin.overlays ?? []) {\n pendingFills.push({ pluginId: plugin.id, fill: surfaceFill(HOST_SLOTS.overlay, surface) });\n }\n for (const surface of plugin.railSections ?? []) {\n pendingFills.push({ pluginId: plugin.id, fill: surfaceFill(HOST_SLOTS.rail, surface) });\n }\n for (const surface of plugin.contextSections ?? []) {\n pendingFills.push({ pluginId: plugin.id, fill: surfaceFill(HOST_SLOTS.context, surface) });\n }\n for (const surface of plugin.selectionBarItems ?? []) {\n pendingFills.push({ pluginId: plugin.id, fill: surfaceFill(HOST_SLOTS.selectionBar, surface) });\n }\n for (const surface of plugin.composerActions ?? []) {\n pendingFills.push({ pluginId: plugin.id, fill: surfaceFill(HOST_SLOTS.composerActions, surface) });\n }\n for (const surface of plugin.composerMenuItems ?? []) {\n pendingFills.push({ pluginId: plugin.id, fill: surfaceFill(HOST_SLOTS.composerMenu, surface) });\n }\n for (const section of plugin.activitySections ?? []) pendingSections.push({ pluginId: plugin.id, section });\n if (plugin.fileLinks !== undefined) installingState.fileLinks.push(plugin.fileLinks);\n }\n\n installingState.diagnostics.push(...collectWebTemplates(installingState.plugins).diagnostics);\n\n // Phase 2: resolve by name, now that every declaration is known.\n for (const slot of Object.values(HOST_SLOTS)) installingState.slots.set(slot, { slot });\n for (const group of installingState.activityGroups) {\n installingState.slots.set(activityGroupSlot(group.name), { slot: activityGroupSlot(group.name) });\n }\n for (const declaration of pendingSlots) installingState.slots.set(declaration.slot, declaration);\n for (const { pluginId, section } of pendingSections) {\n const keyed = activityGroupSlot(section.id);\n pendingFills.push({\n pluginId,\n fill: surfaceFill(installingState.slots.has(keyed) ? keyed : HOST_SLOTS.activity, section),\n });\n }\n for (const { pluginId, fill } of pendingFills) placeFill(pluginId, fill);\n for (const list of installingState.fills.values()) list.sort(byFillOrder);\n\n resolveLeaderConflicts(pendingBindings);\n installingState.leaderBindings.push(...pendingBindings.map((entry) => entry.binding));\n installingState.contextActions.sort(\n (left, right) =>\n (left.order ?? DEFAULT_FILL_ORDER) - (right.order ?? DEFAULT_FILL_ORDER) ||\n left.pluginId.localeCompare(right.pluginId) ||\n left.id.localeCompare(right.id),\n );\n installingState.userMessageActions.sort(\n (left, right) =>\n (left.order ?? DEFAULT_FILL_ORDER) - (right.order ?? DEFAULT_FILL_ORDER) ||\n left.pluginId.localeCompare(right.pluginId) ||\n left.id.localeCompare(right.id),\n );\n installingState.selectionAxes.sort(byDisplayOrder);\n installingState.minorModes.sort(byDisplayOrder);\n installingState.activityGroups.sort(byDisplayOrder);\n installingState.dockFaces.sort(\n (left, right) =>\n (left.order ?? DEFAULT_FILL_ORDER) - (right.order ?? DEFAULT_FILL_ORDER) || left.id.localeCompare(right.id),\n );\n return installingState;\n } finally {\n installingState = previous;\n }\n}\n\nexport function installWebPlugins(plugins: readonly WebPluginDefinition[]): void {\n if (defaultInstalled) throw new Error('Web plugins are already installed.');\n defaultState = buildWebPluginState(plugins);\n installingState = defaultState;\n defaultInstalled = true;\n}\n\nexport function webPluginsInstalled(): boolean {\n return defaultInstalled;\n}\n\n/** Unit-test escape hatch; production installs exactly once. */\nexport function resetWebPlugins(): void {\n defaultState = emptyState();\n installingState = defaultState;\n defaultInstalled = false;\n sessionStates.clear();\n workspaceStates.clear();\n sessionPlugins.clear();\n sessionWorkspaces.clear();\n activeWorkspaceId = null;\n pendingSessionFrames.clear();\n loadDiagnostics.clear();\n activeSessionId = null;\n emitRegistryChange();\n}\n\n/** Installs or atomically replaces one session's independently synchronized plugin definitions. */\nexport function installSessionWebPlugins(sessionId: string, plugins: readonly WebPluginDefinition[]): void {\n sessionPlugins.set(\n sessionId,\n plugins.flatMap((plugin) => (plugin.session === undefined ? [plugin] : pluginsAtScope([plugin], 'session'))),\n );\n rebuildSession(sessionId);\n if (sessionId === activeSessionId) emitRegistryChange();\n}\n\n/** Selects which session composition the no-argument contribution readers expose. */\nexport function activateWebPluginSession(sessionId: string | null): void {\n if (activeSessionId === sessionId) return;\n activeSessionId = sessionId;\n emitRegistryChange();\n}\n\n/** Removes one session registry after its plugin-owned stores have been dropped. */\nexport function removeSessionWebPlugins(sessionId: string): void {\n const sessionState = sessionStates.get(sessionId);\n pendingSessionFrames.delete(sessionId);\n loadDiagnostics.delete(`session:${sessionId}`);\n if (sessionState === undefined) return;\n for (const channel of sessionState.channels.values()) channel.drop(sessionId);\n sessionStates.delete(sessionId);\n sessionPlugins.delete(sessionId);\n sessionWorkspaces.delete(sessionId);\n if (sessionId === activeSessionId) emitRegistryChange();\n}\n\nexport function subscribeWebPluginRegistry(listener: () => void): () => void {\n registryListeners.add(listener);\n return () => registryListeners.delete(listener);\n}\n\nexport function webPluginRegistryRevision(): number {\n return registryRevision;\n}\n\n/**\n * Records the slots one mount could not load, replacing its previous record. The mount still\n * installs the slots that loaded, so one broken plugin never hides the others.\n */\nexport function setWebPluginLoadDiagnostics(mount: WebPluginMount, diagnostics: readonly InstallDiagnostic[]): void {\n const key =\n mount.scope === 'global'\n ? 'global'\n : mount.scope === 'workspace'\n ? `workspace:${mount.workspaceId}`\n : `session:${mount.sessionId}`;\n if (diagnostics.length === 0 && !loadDiagnostics.has(key)) return;\n if (diagnostics.length === 0) loadDiagnostics.delete(key);\n else loadDiagnostics.set(key, [...diagnostics]);\n emitRegistryChange();\n}\n\n/**\n * What the install had to resolve between plugins, plus the slots the visible mounts could not\n * load; empty for a composition whose plugins all load and never collide.\n */\nexport function webPluginDiagnostics(): readonly InstallDiagnostic[] {\n const workspaceId =\n (activeSessionId === null ? undefined : sessionWorkspaces.get(activeSessionId)) ?? activeWorkspaceId;\n const failed = [\n 'global',\n ...(workspaceId === null ? [] : [`workspace:${workspaceId}`]),\n ...(activeSessionId === null ? [] : [`session:${activeSessionId}`]),\n ].flatMap((key) => loadDiagnostics.get(key) ?? []);\n const installed = activeState().diagnostics;\n return failed.length === 0 ? installed : [...installed, ...failed];\n}\n\n/** Every installed plugin definition, in install order; the settings page lists them. */\nexport function installedWebPlugins(): readonly WebPluginDefinition[] {\n return activeState().plugins;\n}\n\nexport interface InstalledRepositorySettingsPanel extends RepositorySettingsPanelContribution {\n pluginId: string;\n}\n\n/** Package panels placed under the host's repository controls, in stable display order. */\nexport function pluginRepositorySettingsPanels(): readonly InstalledRepositorySettingsPanel[] {\n return (workspaceState() ?? emptyState()).plugins\n .flatMap((plugin) =>\n plugin.repositorySettingsPanel === undefined ? [] : [{ pluginId: plugin.id, ...plugin.repositorySettingsPanel }],\n )\n .sort(\n (left, right) =>\n (left.order ?? DEFAULT_FILL_ORDER) - (right.order ?? DEFAULT_FILL_ORDER) ||\n left.pluginId.localeCompare(right.pluginId),\n );\n}\n\nexport function webTabs(): readonly TabContribution[] {\n return activeState().tabs;\n}\n\n/** Optional right-dock faces from the active session composition, in display order. */\nexport function pluginDockFaces(): readonly DockFaceContribution[] {\n return activeState().dockFaces;\n}\n\n/** UI discovery only. Requests still require a proof injected by Electron's main process. */\nexport function isDesktopClient(): boolean {\n return (\n typeof window !== 'undefined' &&\n (window as Window & { poDesktop?: { platform?: string } }).poDesktop?.platform === 'desktop'\n );\n}\n/**\n * The settings pages plugins contribute, in menu order. Sorted here rather than\n * at the reader so the menu and the page agree without either sorting twice.\n */\nexport function pluginSettingsSections(\n scope: 'global' | 'workspace' = 'global',\n): readonly SettingsSectionContribution[] {\n const sections = (scope === 'global' ? defaultState : workspaceState())?.settingsSections ?? [];\n return isDesktopClient() ? sections : sections.filter((section) => !section.desktopOnly);\n}\n\nexport interface InstalledSettingsPanel extends SettingsPanelContribution {\n pluginId: string;\n}\n\n/** The settings pages plugins draw themselves, in install order; the reader sorts them with the sections. */\nexport function pluginSettingsPanels(): readonly InstalledSettingsPanel[] {\n return defaultState.settingsPanels;\n}\n\n/** The fills placed into one slot, in slot order; empty for a slot nobody declared. */\nexport function slotFills(slot: string): readonly ResolvedFill[] {\n return activeState().fills.get(slot) ?? [];\n}\n\n/** One workspace's own fills for a slot, whichever session or workspace is focused. */\nexport function workspaceSlotFills(workspaceId: string, slot: string): readonly ResolvedFill[] {\n return workspaceStates.get(workspaceId)?.fills.get(slot) ?? [];\n}\n\nexport function paletteCommands(): readonly PaletteCommandContribution[] {\n return activeState().commands;\n}\n\n/** Context actions from every installed plugin, in stable display order. */\nexport function pluginContextActions(): readonly InstalledContextAction[] {\n return activeState().contextActions;\n}\n\n/** User-message actions from every installed plugin, in stable display order. */\nexport function pluginUserMessageActions(): readonly InstalledUserMessageAction[] {\n return activeState().userMessageActions;\n}\n\n/** Leader Space bindings from every installed plugin, in install order: a later binding on a bound leaf wins. */\nexport function pluginLeaderBindings(): readonly LeaderBindingContribution[] {\n return activeState().leaderBindings;\n}\n\n/** Selection-axis declarations from every installed plugin, in display order. */\nexport function pluginSelectionAxes(): readonly SelectionAxisContribution[] {\n return activeState().selectionAxes;\n}\n\n/** Minor-mode declarations from every installed plugin, in display order. */\nexport function pluginMinorModes(): readonly MinorModeContribution[] {\n return activeState().minorModes;\n}\n\n/** Activity-dock group declarations from every installed plugin, in display order. */\nexport function pluginActivityGroups(): readonly ActivityGroupContribution[] {\n const groups = activeState().activityGroups;\n return isDesktopClient() ? groups : groups.filter((group) => !group.desktopOnly);\n}\n\n/**\n * The file-link sources installed plugins contribute, in install order.\n *\n * More than one is allowed and the first to claim a path wins, the same way a\n * runtime tool matcher does: the host has no way to choose between two\n * packages that both recognise a path, and the alternative is two tabs for one\n * file.\n */\nexport function pluginFileLinks(): readonly FileLinkSource[] {\n return activeState().fileLinks;\n}\n\n/**\n * The renderer a plugin registered for one tool: the exact name claim first,\n * then the first runtime matcher that accepts it, in install order (the one\n * place besides `start` where that order is observable); undefined leaves\n * the host's default card.\n */\nexport function pluginToolRenderer(\n toolName: string,\n statuses: Readonly<Record<string, string>> = {},\n details?: unknown,\n): ToolRendererContribution | undefined {\n return (\n activeState().toolRenderers.get(toolName) ??\n activeState().toolMatchers.find((renderer) => renderer.matches?.(toolName, statuses, details))\n );\n}\n\n/** A session-scoped renderer, or undefined until that session's verified composition is installed. */\nexport function sessionToolRenderer(sessionId: string, toolName: string): ToolRendererContribution | undefined {\n return sessionStates.get(sessionId)?.toolRenderers.get(toolName);\n}\n\nexport function sessionWebPluginsInstalled(sessionId: string): boolean {\n return sessionStates.has(sessionId);\n}\n\n/**\n * Routes one wire frame to the channel owning its type. Returns false when no\n * channel claims it, so the demux can fall through silently the way unknown\n * frames always have.\n */\nfunction dispatchFrameToState(state: RegistryState, frame: Record<string, unknown>): boolean {\n if (typeof frame.type !== 'string' || typeof frame.sessionId !== 'string') return false;\n const channel = state.channels.get(frame.type);\n if (channel === undefined) return false;\n const payload = channel.parse(frame.payload);\n if (payload !== null) channel.apply(frame.sessionId, payload);\n return true;\n}\n\nexport function dispatchChannelFrame(frame: Record<string, unknown>): boolean {\n if (typeof frame.type !== 'string' || typeof frame.sessionId !== 'string') return false;\n const state = sessionStates.get(frame.sessionId);\n if (state !== undefined) {\n if (dispatchFrameToState(state, frame)) return true;\n } else if (activeSessionId === null) return dispatchFrameToState(defaultState, frame);\n // Channel envelopes carry payload; protocol events do not and must not accumulate.\n if (!Object.hasOwn(frame, 'payload')) return false;\n const pending = pendingSessionFrames.get(frame.sessionId) ?? new Map<string, Record<string, unknown>>();\n if (!pending.has(frame.type) && pending.size >= MAX_PENDING_CHANNEL_TYPES) {\n const oldest = pending.keys().next().value as string | undefined;\n if (oldest !== undefined) pending.delete(oldest);\n }\n pending.set(frame.type, frame);\n pendingSessionFrames.set(frame.sessionId, pending);\n return false;\n}\n\n/** Session teardown: every channel forgets the session's data. */\nexport function dropPluginSessionData(sessionId: string): void {\n pendingSessionFrames.delete(sessionId);\n const state = sessionStates.get(sessionId) ?? (activeSessionId === null ? defaultState : undefined);\n for (const channel of state?.channels.values() ?? []) channel.drop(sessionId);\n}\n\n/** Starts every plugin runtime in install order; the disposer runs in reverse. */\nexport function startPluginDefinitions(plugins: readonly WebPluginDefinition[], runtime: WebPluginRuntime): () => void {\n const disposers: Array<() => void> = [];\n const disposeStarted = (): void => {\n for (const dispose of disposers.reverse()) dispose();\n };\n try {\n for (const plugin of plugins) {\n const dispose = plugin.start?.(runtime);\n if (dispose) disposers.push(dispose);\n }\n } catch (error) {\n disposeStarted();\n throw error;\n }\n return disposeStarted;\n}\n\nexport function startWebPlugins(runtime: WebPluginRuntime): () => void {\n return startPluginDefinitions(activeState().plugins, runtime);\n}\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ //#region src/web/lib/pluginScopes.ts
2
+ /** Select one declared mount from a verified composition. */
3
+ function pluginsAtScope(plugins, scope) {
4
+ return plugins.flatMap((plugin) => {
5
+ const contribution = plugin[scope];
6
+ return contribution === void 0 ? [] : [{
7
+ id: plugin.id,
8
+ ...contribution
9
+ }];
10
+ });
11
+ }
12
+ function contributionKey(value) {
13
+ if (value === null || typeof value !== "object") return void 0;
14
+ if ("slot" in value && typeof value.slot === "string" && "id" in value && typeof value.id === "string") return `${value.slot}\0${value.id}`;
15
+ if ("id" in value && typeof value.id === "string") return value.id;
16
+ if ("name" in value && typeof value.name === "string") return value.name;
17
+ if ("frameType" in value && typeof value.frameType === "string") return value.frameType;
18
+ if ("slot" in value && typeof value.slot === "string") return value.slot;
19
+ if ("tools" in value && Array.isArray(value.tools) && value.tools.length) return value.tools.join("\0");
20
+ }
21
+ /** Child contributions replace equal keys while retaining unrelated parent contributions. */
22
+ function mergeScopedPlugins(...levels) {
23
+ const merged = /* @__PURE__ */ new Map();
24
+ for (const plugins of levels) for (const plugin of plugins) {
25
+ const result = merged.get(plugin.id) ?? { id: plugin.id };
26
+ for (const [field, value] of Object.entries(plugin)) {
27
+ if (field === "start") continue;
28
+ if (Array.isArray(value)) {
29
+ const previous = result[field];
30
+ const values = Array.isArray(previous) ? [...previous] : [];
31
+ for (const item of value) {
32
+ const key = contributionKey(item);
33
+ const index = key === void 0 ? -1 : values.findIndex((candidate) => contributionKey(candidate) === key);
34
+ if (index === -1) values.push(item);
35
+ else values[index] = item;
36
+ }
37
+ result[field] = values;
38
+ } else result[field] = value;
39
+ }
40
+ merged.set(plugin.id, result);
41
+ }
42
+ return [...merged.values()];
43
+ }
44
+ //#endregion
45
+ exports.mergeScopedPlugins = mergeScopedPlugins;
46
+ exports.pluginsAtScope = pluginsAtScope;
47
+
48
+ //# sourceMappingURL=pluginScopes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginScopes.cjs","names":[],"sources":["../../../src/web/lib/pluginScopes.ts"],"sourcesContent":["import type { WebPluginDefinition, WebPluginScope } from '@agimon-ai/po-core/web';\n\n/** Select one declared mount from a verified composition. */\nexport function pluginsAtScope(plugins: readonly WebPluginDefinition[], scope: WebPluginScope): WebPluginDefinition[] {\n return plugins.flatMap((plugin) => {\n const contribution = plugin[scope];\n return contribution === undefined ? [] : [{ id: plugin.id, ...contribution }];\n });\n}\n\nfunction contributionKey(value: unknown): string | undefined {\n if (value === null || typeof value !== 'object') return undefined;\n if ('slot' in value && typeof value.slot === 'string' && 'id' in value && typeof value.id === 'string') {\n return `${value.slot}\\0${value.id}`;\n }\n if ('id' in value && typeof value.id === 'string') return value.id;\n if ('name' in value && typeof value.name === 'string') return value.name;\n if ('frameType' in value && typeof value.frameType === 'string') return value.frameType;\n if ('slot' in value && typeof value.slot === 'string') return value.slot;\n if ('tools' in value && Array.isArray(value.tools) && value.tools.length) return value.tools.join('\\0');\n return undefined;\n}\n\n/** Child contributions replace equal keys while retaining unrelated parent contributions. */\nexport function mergeScopedPlugins(...levels: readonly (readonly WebPluginDefinition[])[]): WebPluginDefinition[] {\n const merged = new Map<string, Record<string, unknown>>();\n for (const plugins of levels)\n for (const plugin of plugins) {\n const result = merged.get(plugin.id) ?? { id: plugin.id };\n for (const [field, value] of Object.entries(plugin)) {\n if (field === 'start') continue;\n if (Array.isArray(value)) {\n const previous = result[field];\n const values: unknown[] = Array.isArray(previous) ? [...previous] : [];\n for (const item of value) {\n const key = contributionKey(item);\n const index = key === undefined ? -1 : values.findIndex((candidate) => contributionKey(candidate) === key);\n if (index === -1) values.push(item);\n else values[index] = item;\n }\n result[field] = values;\n } else result[field] = value;\n }\n merged.set(plugin.id, result);\n }\n return [...merged.values()] as unknown as WebPluginDefinition[];\n}\n"],"mappings":";;AAGA,SAAgB,eAAe,SAAyC,OAA8C;CACpH,OAAO,QAAQ,SAAS,WAAW;EACjC,MAAM,eAAe,OAAO;EAC5B,OAAO,iBAAiB,KAAA,IAAY,CAAC,IAAI,CAAC;GAAE,IAAI,OAAO;GAAI,GAAG;EAAa,CAAC;CAC9E,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAoC;CAC3D,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAU,OAAO,KAAA;CACxD,IAAI,UAAU,SAAS,OAAO,MAAM,SAAS,YAAY,QAAQ,SAAS,OAAO,MAAM,OAAO,UAC5F,OAAO,GAAG,MAAM,KAAK,IAAI,MAAM;CAEjC,IAAI,QAAQ,SAAS,OAAO,MAAM,OAAO,UAAU,OAAO,MAAM;CAChE,IAAI,UAAU,SAAS,OAAO,MAAM,SAAS,UAAU,OAAO,MAAM;CACpE,IAAI,eAAe,SAAS,OAAO,MAAM,cAAc,UAAU,OAAO,MAAM;CAC9E,IAAI,UAAU,SAAS,OAAO,MAAM,SAAS,UAAU,OAAO,MAAM;CACpE,IAAI,WAAW,SAAS,MAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,MAAM,QAAQ,OAAO,MAAM,MAAM,KAAK,IAAI;AAExG;;AAGA,SAAgB,mBAAmB,GAAG,QAA4E;CAChH,MAAM,yBAAS,IAAI,IAAqC;CACxD,KAAK,MAAM,WAAW,QACpB,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,SAAS,OAAO,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,OAAO,GAAG;EACxD,KAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,MAAM,GAAG;GACnD,IAAI,UAAU,SAAS;GACvB,IAAI,MAAM,QAAQ,KAAK,GAAG;IACxB,MAAM,WAAW,OAAO;IACxB,MAAM,SAAoB,MAAM,QAAQ,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC;IACrE,KAAK,MAAM,QAAQ,OAAO;KACxB,MAAM,MAAM,gBAAgB,IAAI;KAChC,MAAM,QAAQ,QAAQ,KAAA,IAAY,KAAK,OAAO,WAAW,cAAc,gBAAgB,SAAS,MAAM,GAAG;KACzG,IAAI,UAAU,IAAI,OAAO,KAAK,IAAI;UAC7B,OAAO,SAAS;IACvB;IACA,OAAO,SAAS;GAClB,OAAO,OAAO,SAAS;EACzB;EACA,OAAO,IAAI,OAAO,IAAI,MAAM;CAC9B;CACF,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAC5B"}
@@ -0,0 +1,8 @@
1
+ import { WebPluginDefinition, WebPluginScope } from "@agimon-ai/po-core/web";
2
+ //#region src/web/lib/pluginScopes.d.ts
3
+ /** Select one declared mount from a verified composition. */
4
+ export declare function pluginsAtScope(plugins: readonly WebPluginDefinition[], scope: WebPluginScope): WebPluginDefinition[];
5
+ /** Child contributions replace equal keys while retaining unrelated parent contributions. */
6
+ export declare function mergeScopedPlugins(...levels: readonly (readonly WebPluginDefinition[])[]): WebPluginDefinition[];
7
+ //#endregion
8
+ //# sourceMappingURL=pluginScopes.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginScopes.d.mts","names":[],"sources":["../../../src/web/lib/pluginScopes.ts"],"mappings":";;;wBAGgB,eAAe,kBAAkB,uBAAuB,OAAO,iBAAiB;;wBAqBhF,sBAAsB,2BAA2B,2BAA2B"}
@@ -0,0 +1,47 @@
1
+ //#region src/web/lib/pluginScopes.ts
2
+ /** Select one declared mount from a verified composition. */
3
+ function pluginsAtScope(plugins, scope) {
4
+ return plugins.flatMap((plugin) => {
5
+ const contribution = plugin[scope];
6
+ return contribution === void 0 ? [] : [{
7
+ id: plugin.id,
8
+ ...contribution
9
+ }];
10
+ });
11
+ }
12
+ function contributionKey(value) {
13
+ if (value === null || typeof value !== "object") return void 0;
14
+ if ("slot" in value && typeof value.slot === "string" && "id" in value && typeof value.id === "string") return `${value.slot}\0${value.id}`;
15
+ if ("id" in value && typeof value.id === "string") return value.id;
16
+ if ("name" in value && typeof value.name === "string") return value.name;
17
+ if ("frameType" in value && typeof value.frameType === "string") return value.frameType;
18
+ if ("slot" in value && typeof value.slot === "string") return value.slot;
19
+ if ("tools" in value && Array.isArray(value.tools) && value.tools.length) return value.tools.join("\0");
20
+ }
21
+ /** Child contributions replace equal keys while retaining unrelated parent contributions. */
22
+ function mergeScopedPlugins(...levels) {
23
+ const merged = /* @__PURE__ */ new Map();
24
+ for (const plugins of levels) for (const plugin of plugins) {
25
+ const result = merged.get(plugin.id) ?? { id: plugin.id };
26
+ for (const [field, value] of Object.entries(plugin)) {
27
+ if (field === "start") continue;
28
+ if (Array.isArray(value)) {
29
+ const previous = result[field];
30
+ const values = Array.isArray(previous) ? [...previous] : [];
31
+ for (const item of value) {
32
+ const key = contributionKey(item);
33
+ const index = key === void 0 ? -1 : values.findIndex((candidate) => contributionKey(candidate) === key);
34
+ if (index === -1) values.push(item);
35
+ else values[index] = item;
36
+ }
37
+ result[field] = values;
38
+ } else result[field] = value;
39
+ }
40
+ merged.set(plugin.id, result);
41
+ }
42
+ return [...merged.values()];
43
+ }
44
+ //#endregion
45
+ export { mergeScopedPlugins, pluginsAtScope };
46
+
47
+ //# sourceMappingURL=pluginScopes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginScopes.mjs","names":[],"sources":["../../../src/web/lib/pluginScopes.ts"],"sourcesContent":["import type { WebPluginDefinition, WebPluginScope } from '@agimon-ai/po-core/web';\n\n/** Select one declared mount from a verified composition. */\nexport function pluginsAtScope(plugins: readonly WebPluginDefinition[], scope: WebPluginScope): WebPluginDefinition[] {\n return plugins.flatMap((plugin) => {\n const contribution = plugin[scope];\n return contribution === undefined ? [] : [{ id: plugin.id, ...contribution }];\n });\n}\n\nfunction contributionKey(value: unknown): string | undefined {\n if (value === null || typeof value !== 'object') return undefined;\n if ('slot' in value && typeof value.slot === 'string' && 'id' in value && typeof value.id === 'string') {\n return `${value.slot}\\0${value.id}`;\n }\n if ('id' in value && typeof value.id === 'string') return value.id;\n if ('name' in value && typeof value.name === 'string') return value.name;\n if ('frameType' in value && typeof value.frameType === 'string') return value.frameType;\n if ('slot' in value && typeof value.slot === 'string') return value.slot;\n if ('tools' in value && Array.isArray(value.tools) && value.tools.length) return value.tools.join('\\0');\n return undefined;\n}\n\n/** Child contributions replace equal keys while retaining unrelated parent contributions. */\nexport function mergeScopedPlugins(...levels: readonly (readonly WebPluginDefinition[])[]): WebPluginDefinition[] {\n const merged = new Map<string, Record<string, unknown>>();\n for (const plugins of levels)\n for (const plugin of plugins) {\n const result = merged.get(plugin.id) ?? { id: plugin.id };\n for (const [field, value] of Object.entries(plugin)) {\n if (field === 'start') continue;\n if (Array.isArray(value)) {\n const previous = result[field];\n const values: unknown[] = Array.isArray(previous) ? [...previous] : [];\n for (const item of value) {\n const key = contributionKey(item);\n const index = key === undefined ? -1 : values.findIndex((candidate) => contributionKey(candidate) === key);\n if (index === -1) values.push(item);\n else values[index] = item;\n }\n result[field] = values;\n } else result[field] = value;\n }\n merged.set(plugin.id, result);\n }\n return [...merged.values()] as unknown as WebPluginDefinition[];\n}\n"],"mappings":";;AAGA,SAAgB,eAAe,SAAyC,OAA8C;CACpH,OAAO,QAAQ,SAAS,WAAW;EACjC,MAAM,eAAe,OAAO;EAC5B,OAAO,iBAAiB,KAAA,IAAY,CAAC,IAAI,CAAC;GAAE,IAAI,OAAO;GAAI,GAAG;EAAa,CAAC;CAC9E,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAoC;CAC3D,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAU,OAAO,KAAA;CACxD,IAAI,UAAU,SAAS,OAAO,MAAM,SAAS,YAAY,QAAQ,SAAS,OAAO,MAAM,OAAO,UAC5F,OAAO,GAAG,MAAM,KAAK,IAAI,MAAM;CAEjC,IAAI,QAAQ,SAAS,OAAO,MAAM,OAAO,UAAU,OAAO,MAAM;CAChE,IAAI,UAAU,SAAS,OAAO,MAAM,SAAS,UAAU,OAAO,MAAM;CACpE,IAAI,eAAe,SAAS,OAAO,MAAM,cAAc,UAAU,OAAO,MAAM;CAC9E,IAAI,UAAU,SAAS,OAAO,MAAM,SAAS,UAAU,OAAO,MAAM;CACpE,IAAI,WAAW,SAAS,MAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,MAAM,QAAQ,OAAO,MAAM,MAAM,KAAK,IAAI;AAExG;;AAGA,SAAgB,mBAAmB,GAAG,QAA4E;CAChH,MAAM,yBAAS,IAAI,IAAqC;CACxD,KAAK,MAAM,WAAW,QACpB,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,SAAS,OAAO,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,OAAO,GAAG;EACxD,KAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,MAAM,GAAG;GACnD,IAAI,UAAU,SAAS;GACvB,IAAI,MAAM,QAAQ,KAAK,GAAG;IACxB,MAAM,WAAW,OAAO;IACxB,MAAM,SAAoB,MAAM,QAAQ,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC;IACrE,KAAK,MAAM,QAAQ,OAAO;KACxB,MAAM,MAAM,gBAAgB,IAAI;KAChC,MAAM,QAAQ,QAAQ,KAAA,IAAY,KAAK,OAAO,WAAW,cAAc,gBAAgB,SAAS,MAAM,GAAG;KACzG,IAAI,UAAU,IAAI,OAAO,KAAK,IAAI;UAC7B,OAAO,SAAS;IACvB;IACA,OAAO,SAAS;GAClB,OAAO,OAAO,SAAS;EACzB;EACA,OAAO,IAAI,OAAO,IAAI,MAAM;CAC9B;CACF,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAC5B"}
@@ -0,0 +1,83 @@
1
+ const require_pluginRegistry = require("./pluginRegistry.cjs");
2
+ const require_composition = require("./composition.cjs");
3
+ const require_sessionActivityRenderer = require("./sessionActivityRenderer.cjs");
4
+ const require_sessionTranscriptRenderer = require("./sessionTranscriptRenderer.cjs");
5
+ const require_threadRenderer = require("./threadRenderer.cjs");
6
+ const require_transport = require("./transport.cjs");
7
+ let react = require("react");
8
+ //#region src/web/lib/pluginSlotProps.ts
9
+ /** The id-only session context a plugin sees, from the hub's summary of the target session. */
10
+ function pluginSessionContext(sessionId, summary) {
11
+ if (sessionId === null || summary === void 0) return void 0;
12
+ return {
13
+ sessionId,
14
+ ...summary.workspaceId === void 0 ? {} : { workspaceId: summary.workspaceId },
15
+ ...summary.parentSessionId === void 0 ? {} : { parentSessionId: summary.parentSessionId },
16
+ ...summary.sessionProvenance === void 0 ? {} : { provenance: summary.sessionProvenance }
17
+ };
18
+ }
19
+ /**
20
+ * The one place the props every plugin component receives are built. The
21
+ * same object is handed to every fill a slot renders, so a fill that is
22
+ * itself a slot owner can render its own slots with it.
23
+ */
24
+ function pluginSlotProps(sessionId, openTab, statuses, tabs, appendComposerDraft, attachComposerContext, attachComposerCapture = () => void 0, contextInventory = [], submitCapture, sessionReservationId) {
25
+ const props = {
26
+ sessionId,
27
+ ...sessionReservationId === void 0 ? {} : { sessionReservationId },
28
+ openTab,
29
+ openTransientTab: tabs.open,
30
+ closeTransientTab: tabs.close,
31
+ fileTabFor: (path) => require_composition.fileTabForPath(sessionId, path),
32
+ appendComposerDraft,
33
+ attachComposerContext,
34
+ attachComposerCapture,
35
+ ...submitCapture === void 0 ? {} : { submitCapture },
36
+ contextActionsFor(item) {
37
+ return require_pluginRegistry.pluginContextActions().flatMap((action) => action.kinds.includes(item.kind) ? [{
38
+ id: `${action.pluginId}.${action.id}`,
39
+ label: action.label,
40
+ ...action.detail === void 0 ? {} : { detail: action.detail },
41
+ run: () => action.run({
42
+ item,
43
+ sessionId,
44
+ openTab,
45
+ openTransientTab: tabs.open,
46
+ sendSessionFrame: require_transport.sendFrame
47
+ })
48
+ }] : []);
49
+ },
50
+ sendSessionFrame: require_transport.sendFrame,
51
+ statuses,
52
+ contextInventory,
53
+ renderThread(threadId, options) {
54
+ return sessionId === null ? null : require_threadRenderer.renderThread(sessionId, threadId, options);
55
+ },
56
+ renderSessionActivity() {
57
+ return sessionId === null ? null : require_sessionActivityRenderer.renderSessionActivity(sessionId, () => openTab(null));
58
+ },
59
+ renderSessionTranscript(targetSessionId, options) {
60
+ return require_sessionTranscriptRenderer.renderSessionTranscript(targetSessionId, options);
61
+ },
62
+ renderSlot(slot) {
63
+ return require_pluginRegistry.slotFills(slot).flatMap((fill) => fill.component === void 0 ? [] : [(0, react.createElement)(fill.component, {
64
+ ...props,
65
+ key: `${fill.pluginId}:${fill.id}`
66
+ })]);
67
+ },
68
+ slotData(declaration) {
69
+ return require_pluginRegistry.slotFills(declaration.slot).flatMap((fill) => fill.data === void 0 ? [] : [{
70
+ pluginId: fill.pluginId,
71
+ id: fill.id,
72
+ order: fill.order,
73
+ data: fill.data
74
+ }]);
75
+ }
76
+ };
77
+ return props;
78
+ }
79
+ //#endregion
80
+ exports.pluginSessionContext = pluginSessionContext;
81
+ exports.pluginSlotProps = pluginSlotProps;
82
+
83
+ //# sourceMappingURL=pluginSlotProps.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginSlotProps.cjs","names":["fileTabForPath","pluginContextActions","sendFrame","renderThread","renderSessionActivity","renderSessionTranscript","slotFills","createElement"],"sources":["../../../src/web/lib/pluginSlotProps.ts"],"sourcesContent":["import type {\n ComposerCapture,\n SlotDataFill,\n SlotDeclaration,\n TransientTab,\n WebPluginContextItem,\n WebPluginSlotProps,\n WebPluginContextInventoryItem,\n WebPluginSessionContext,\n} from '@agimon-ai/po-core/web';\nimport { createElement, type ReactNode } from 'react';\n\nimport { fileTabForPath } from './composition';\nimport { pluginContextActions, slotFills } from './pluginRegistry';\nimport { renderSessionActivity } from './sessionActivityRenderer';\nimport { renderSessionTranscript } from './sessionTranscriptRenderer';\nimport { renderThread } from './threadRenderer';\nimport { sendFrame } from './transport';\n/** The id-only session context a plugin sees, from the hub's summary of the target session. */\nexport function pluginSessionContext(\n sessionId: string | null,\n summary: { workspaceId?: string; parentSessionId?: string; sessionProvenance?: string } | undefined,\n): WebPluginSessionContext | undefined {\n if (sessionId === null || summary === undefined) return undefined;\n return {\n sessionId,\n ...(summary.workspaceId === undefined ? {} : { workspaceId: summary.workspaceId }),\n ...(summary.parentSessionId === undefined ? {} : { parentSessionId: summary.parentSessionId }),\n ...(summary.sessionProvenance === undefined ? {} : { provenance: summary.sessionProvenance }),\n };\n}\n\n/** The host's hold on the focused session's runtime tabs, bound in by the caller that owns the store. */\nexport interface TransientTabActions {\n open: (tab: TransientTab) => void;\n close: (tabId: string) => void;\n}\n\n/**\n * The one place the props every plugin component receives are built. The\n * same object is handed to every fill a slot renders, so a fill that is\n * itself a slot owner can render its own slots with it.\n */\nexport function pluginSlotProps(\n sessionId: string | null,\n openTab: (tabId: string | null) => void,\n statuses: Readonly<Record<string, string>>,\n tabs: TransientTabActions,\n appendComposerDraft: (text: string) => void,\n attachComposerContext: (item: WebPluginContextItem) => void,\n attachComposerCapture: (capture: ComposerCapture) => void = () => undefined,\n contextInventory: readonly WebPluginContextInventoryItem[] = [],\n submitCapture?: (capture: ComposerCapture) => Promise<void>,\n sessionReservationId?: string,\n): WebPluginSlotProps {\n const props: WebPluginSlotProps = {\n sessionId,\n ...(sessionReservationId === undefined ? {} : { sessionReservationId }),\n openTab,\n openTransientTab: tabs.open,\n closeTransientTab: tabs.close,\n // Asked per render rather than bound to a snapshot: which plugin claims a\n // path is a property of what is installed, and the answer is cheap.\n fileTabFor: (path) => fileTabForPath(sessionId, path),\n appendComposerDraft,\n attachComposerContext,\n attachComposerCapture,\n ...(submitCapture === undefined ? {} : { submitCapture }),\n contextActionsFor(item) {\n return pluginContextActions().flatMap((action) =>\n action.kinds.includes(item.kind)\n ? [\n {\n id: `${action.pluginId}.${action.id}`,\n label: action.label,\n ...(action.detail === undefined ? {} : { detail: action.detail }),\n run: () =>\n action.run({\n item,\n sessionId,\n openTab,\n openTransientTab: tabs.open,\n sendSessionFrame: sendFrame,\n }),\n },\n ]\n : [],\n );\n },\n sendSessionFrame: sendFrame,\n statuses,\n contextInventory,\n renderThread(threadId, options): ReactNode {\n return sessionId === null ? null : renderThread(sessionId, threadId, options);\n },\n renderSessionActivity(): ReactNode {\n return sessionId === null ? null : renderSessionActivity(sessionId, () => openTab(null));\n },\n renderSessionTranscript(targetSessionId, options): ReactNode {\n return renderSessionTranscript(targetSessionId, options);\n },\n renderSlot(slot): ReactNode {\n return slotFills(slot).flatMap((fill) =>\n fill.component === undefined\n ? []\n : [createElement(fill.component, { ...props, key: `${fill.pluginId}:${fill.id}` })],\n );\n },\n slotData<Data>(declaration: SlotDeclaration<Data>): readonly SlotDataFill<Data>[] {\n return slotFills(declaration.slot).flatMap((fill) =>\n fill.data === undefined\n ? []\n : [{ pluginId: fill.pluginId, id: fill.id, order: fill.order, data: fill.data as Data }],\n );\n },\n };\n return props;\n}\n"],"mappings":";;;;;;;;;AAmBA,SAAgB,qBACd,WACA,SACqC;CACrC,IAAI,cAAc,QAAQ,YAAY,KAAA,GAAW,OAAO,KAAA;CACxD,OAAO;EACL;EACA,GAAI,QAAQ,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,QAAQ,YAAY;EAChF,GAAI,QAAQ,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ,gBAAgB;EAC5F,GAAI,QAAQ,sBAAsB,KAAA,IAAY,CAAC,IAAI,EAAE,YAAY,QAAQ,kBAAkB;CAC7F;AACF;;;;;;AAaA,SAAgB,gBACd,WACA,SACA,UACA,MACA,qBACA,uBACA,8BAAkE,KAAA,GAClE,mBAA6D,CAAC,GAC9D,eACA,sBACoB;CACpB,MAAM,QAA4B;EAChC;EACA,GAAI,yBAAyB,KAAA,IAAY,CAAC,IAAI,EAAE,qBAAqB;EACrE;EACA,kBAAkB,KAAK;EACvB,mBAAmB,KAAK;EAGxB,aAAa,SAASA,oBAAAA,eAAe,WAAW,IAAI;EACpD;EACA;EACA;EACA,GAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc;EACvD,kBAAkB,MAAM;GACtB,OAAOC,uBAAAA,qBAAqB,CAAC,CAAC,SAAS,WACrC,OAAO,MAAM,SAAS,KAAK,IAAI,IAC3B,CACE;IACE,IAAI,GAAG,OAAO,SAAS,GAAG,OAAO;IACjC,OAAO,OAAO;IACd,GAAI,OAAO,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,OAAO,OAAO;IAC/D,WACE,OAAO,IAAI;KACT;KACA;KACA;KACA,kBAAkB,KAAK;KACvB,kBAAkBC,kBAAAA;IACpB,CAAC;GACL,CACF,IACA,CAAC,CACP;EACF;EACA,kBAAkBA,kBAAAA;EAClB;EACA;EACA,aAAa,UAAU,SAAoB;GACzC,OAAO,cAAc,OAAO,OAAOC,uBAAAA,aAAa,WAAW,UAAU,OAAO;EAC9E;EACA,wBAAmC;GACjC,OAAO,cAAc,OAAO,OAAOC,gCAAAA,sBAAsB,iBAAiB,QAAQ,IAAI,CAAC;EACzF;EACA,wBAAwB,iBAAiB,SAAoB;GAC3D,OAAOC,kCAAAA,wBAAwB,iBAAiB,OAAO;EACzD;EACA,WAAW,MAAiB;GAC1B,OAAOC,uBAAAA,UAAU,IAAI,CAAC,CAAC,SAAS,SAC9B,KAAK,cAAc,KAAA,IACf,CAAC,IACD,EAAA,GAACC,MAAAA,cAAAA,CAAc,KAAK,WAAW;IAAE,GAAG;IAAO,KAAK,GAAG,KAAK,SAAS,GAAG,KAAK;GAAK,CAAC,CAAC,CACtF;EACF;EACA,SAAe,aAAmE;GAChF,OAAOD,uBAAAA,UAAU,YAAY,IAAI,CAAC,CAAC,SAAS,SAC1C,KAAK,SAAS,KAAA,IACV,CAAC,IACD,CAAC;IAAE,UAAU,KAAK;IAAU,IAAI,KAAK;IAAI,OAAO,KAAK;IAAO,MAAM,KAAK;GAAa,CAAC,CAC3F;EACF;CACF;CACA,OAAO;AACT"}
@@ -0,0 +1,21 @@
1
+ import { ComposerCapture, TransientTab, WebPluginContextInventoryItem, WebPluginContextItem, WebPluginSessionContext, WebPluginSlotProps } from "@agimon-ai/po-core/web";
2
+ //#region src/web/lib/pluginSlotProps.d.ts
3
+ /** The id-only session context a plugin sees, from the hub's summary of the target session. */
4
+ export declare function pluginSessionContext(sessionId: string | null, summary: {
5
+ workspaceId?: string;
6
+ parentSessionId?: string;
7
+ sessionProvenance?: string;
8
+ } | undefined): WebPluginSessionContext | undefined;
9
+ /** The host's hold on the focused session's runtime tabs, bound in by the caller that owns the store. */
10
+ export interface TransientTabActions {
11
+ open: (tab: TransientTab) => void;
12
+ close: (tabId: string) => void;
13
+ }
14
+ /**
15
+ * The one place the props every plugin component receives are built. The
16
+ * same object is handed to every fill a slot renders, so a fill that is
17
+ * itself a slot owner can render its own slots with it.
18
+ */
19
+ export declare function pluginSlotProps(sessionId: string | null, openTab: (tabId: string | null) => void, statuses: Readonly<Record<string, string>>, tabs: TransientTabActions, appendComposerDraft: (text: string) => void, attachComposerContext: (item: WebPluginContextItem) => void, attachComposerCapture?: (capture: ComposerCapture) => void, contextInventory?: readonly WebPluginContextInventoryItem[], submitCapture?: (capture: ComposerCapture) => Promise<void>, sessionReservationId?: string): WebPluginSlotProps;
20
+ //#endregion
21
+ //# sourceMappingURL=pluginSlotProps.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginSlotProps.d.mts","names":[],"sources":["../../../src/web/lib/pluginSlotProps.ts"],"mappings":";;;wBAmBgB,qBACd,0BACA;EAAW;EAAsB;EAA0B;gBAC1D;;iBAWc;EACf,OAAO,KAAK;EACZ,QAAQ;;;;;;;wBAQM,gBACd,0BACA,UAAU,+BACV,UAAU,SAAS,yBACnB,MAAM,qBACN,sBAAsB,uBACtB,wBAAwB,MAAM,+BAC9B,yBAAwB,SAAS,0BACjC,4BAA2B,iCAC3B,iBAAiB,SAAS,oBAAoB,eAC9C,gCACC"}
@@ -0,0 +1,82 @@
1
+ import { pluginContextActions, slotFills } from "./pluginRegistry.mjs";
2
+ import { fileTabForPath } from "./composition.mjs";
3
+ import { renderSessionActivity } from "./sessionActivityRenderer.mjs";
4
+ import { renderSessionTranscript } from "./sessionTranscriptRenderer.mjs";
5
+ import { renderThread } from "./threadRenderer.mjs";
6
+ import { sendFrame } from "./transport.mjs";
7
+ import { createElement } from "react";
8
+ //#region src/web/lib/pluginSlotProps.ts
9
+ /** The id-only session context a plugin sees, from the hub's summary of the target session. */
10
+ function pluginSessionContext(sessionId, summary) {
11
+ if (sessionId === null || summary === void 0) return void 0;
12
+ return {
13
+ sessionId,
14
+ ...summary.workspaceId === void 0 ? {} : { workspaceId: summary.workspaceId },
15
+ ...summary.parentSessionId === void 0 ? {} : { parentSessionId: summary.parentSessionId },
16
+ ...summary.sessionProvenance === void 0 ? {} : { provenance: summary.sessionProvenance }
17
+ };
18
+ }
19
+ /**
20
+ * The one place the props every plugin component receives are built. The
21
+ * same object is handed to every fill a slot renders, so a fill that is
22
+ * itself a slot owner can render its own slots with it.
23
+ */
24
+ function pluginSlotProps(sessionId, openTab, statuses, tabs, appendComposerDraft, attachComposerContext, attachComposerCapture = () => void 0, contextInventory = [], submitCapture, sessionReservationId) {
25
+ const props = {
26
+ sessionId,
27
+ ...sessionReservationId === void 0 ? {} : { sessionReservationId },
28
+ openTab,
29
+ openTransientTab: tabs.open,
30
+ closeTransientTab: tabs.close,
31
+ fileTabFor: (path) => fileTabForPath(sessionId, path),
32
+ appendComposerDraft,
33
+ attachComposerContext,
34
+ attachComposerCapture,
35
+ ...submitCapture === void 0 ? {} : { submitCapture },
36
+ contextActionsFor(item) {
37
+ return pluginContextActions().flatMap((action) => action.kinds.includes(item.kind) ? [{
38
+ id: `${action.pluginId}.${action.id}`,
39
+ label: action.label,
40
+ ...action.detail === void 0 ? {} : { detail: action.detail },
41
+ run: () => action.run({
42
+ item,
43
+ sessionId,
44
+ openTab,
45
+ openTransientTab: tabs.open,
46
+ sendSessionFrame: sendFrame
47
+ })
48
+ }] : []);
49
+ },
50
+ sendSessionFrame: sendFrame,
51
+ statuses,
52
+ contextInventory,
53
+ renderThread(threadId, options) {
54
+ return sessionId === null ? null : renderThread(sessionId, threadId, options);
55
+ },
56
+ renderSessionActivity() {
57
+ return sessionId === null ? null : renderSessionActivity(sessionId, () => openTab(null));
58
+ },
59
+ renderSessionTranscript(targetSessionId, options) {
60
+ return renderSessionTranscript(targetSessionId, options);
61
+ },
62
+ renderSlot(slot) {
63
+ return slotFills(slot).flatMap((fill) => fill.component === void 0 ? [] : [createElement(fill.component, {
64
+ ...props,
65
+ key: `${fill.pluginId}:${fill.id}`
66
+ })]);
67
+ },
68
+ slotData(declaration) {
69
+ return slotFills(declaration.slot).flatMap((fill) => fill.data === void 0 ? [] : [{
70
+ pluginId: fill.pluginId,
71
+ id: fill.id,
72
+ order: fill.order,
73
+ data: fill.data
74
+ }]);
75
+ }
76
+ };
77
+ return props;
78
+ }
79
+ //#endregion
80
+ export { pluginSessionContext, pluginSlotProps };
81
+
82
+ //# sourceMappingURL=pluginSlotProps.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginSlotProps.mjs","names":[],"sources":["../../../src/web/lib/pluginSlotProps.ts"],"sourcesContent":["import type {\n ComposerCapture,\n SlotDataFill,\n SlotDeclaration,\n TransientTab,\n WebPluginContextItem,\n WebPluginSlotProps,\n WebPluginContextInventoryItem,\n WebPluginSessionContext,\n} from '@agimon-ai/po-core/web';\nimport { createElement, type ReactNode } from 'react';\n\nimport { fileTabForPath } from './composition';\nimport { pluginContextActions, slotFills } from './pluginRegistry';\nimport { renderSessionActivity } from './sessionActivityRenderer';\nimport { renderSessionTranscript } from './sessionTranscriptRenderer';\nimport { renderThread } from './threadRenderer';\nimport { sendFrame } from './transport';\n/** The id-only session context a plugin sees, from the hub's summary of the target session. */\nexport function pluginSessionContext(\n sessionId: string | null,\n summary: { workspaceId?: string; parentSessionId?: string; sessionProvenance?: string } | undefined,\n): WebPluginSessionContext | undefined {\n if (sessionId === null || summary === undefined) return undefined;\n return {\n sessionId,\n ...(summary.workspaceId === undefined ? {} : { workspaceId: summary.workspaceId }),\n ...(summary.parentSessionId === undefined ? {} : { parentSessionId: summary.parentSessionId }),\n ...(summary.sessionProvenance === undefined ? {} : { provenance: summary.sessionProvenance }),\n };\n}\n\n/** The host's hold on the focused session's runtime tabs, bound in by the caller that owns the store. */\nexport interface TransientTabActions {\n open: (tab: TransientTab) => void;\n close: (tabId: string) => void;\n}\n\n/**\n * The one place the props every plugin component receives are built. The\n * same object is handed to every fill a slot renders, so a fill that is\n * itself a slot owner can render its own slots with it.\n */\nexport function pluginSlotProps(\n sessionId: string | null,\n openTab: (tabId: string | null) => void,\n statuses: Readonly<Record<string, string>>,\n tabs: TransientTabActions,\n appendComposerDraft: (text: string) => void,\n attachComposerContext: (item: WebPluginContextItem) => void,\n attachComposerCapture: (capture: ComposerCapture) => void = () => undefined,\n contextInventory: readonly WebPluginContextInventoryItem[] = [],\n submitCapture?: (capture: ComposerCapture) => Promise<void>,\n sessionReservationId?: string,\n): WebPluginSlotProps {\n const props: WebPluginSlotProps = {\n sessionId,\n ...(sessionReservationId === undefined ? {} : { sessionReservationId }),\n openTab,\n openTransientTab: tabs.open,\n closeTransientTab: tabs.close,\n // Asked per render rather than bound to a snapshot: which plugin claims a\n // path is a property of what is installed, and the answer is cheap.\n fileTabFor: (path) => fileTabForPath(sessionId, path),\n appendComposerDraft,\n attachComposerContext,\n attachComposerCapture,\n ...(submitCapture === undefined ? {} : { submitCapture }),\n contextActionsFor(item) {\n return pluginContextActions().flatMap((action) =>\n action.kinds.includes(item.kind)\n ? [\n {\n id: `${action.pluginId}.${action.id}`,\n label: action.label,\n ...(action.detail === undefined ? {} : { detail: action.detail }),\n run: () =>\n action.run({\n item,\n sessionId,\n openTab,\n openTransientTab: tabs.open,\n sendSessionFrame: sendFrame,\n }),\n },\n ]\n : [],\n );\n },\n sendSessionFrame: sendFrame,\n statuses,\n contextInventory,\n renderThread(threadId, options): ReactNode {\n return sessionId === null ? null : renderThread(sessionId, threadId, options);\n },\n renderSessionActivity(): ReactNode {\n return sessionId === null ? null : renderSessionActivity(sessionId, () => openTab(null));\n },\n renderSessionTranscript(targetSessionId, options): ReactNode {\n return renderSessionTranscript(targetSessionId, options);\n },\n renderSlot(slot): ReactNode {\n return slotFills(slot).flatMap((fill) =>\n fill.component === undefined\n ? []\n : [createElement(fill.component, { ...props, key: `${fill.pluginId}:${fill.id}` })],\n );\n },\n slotData<Data>(declaration: SlotDeclaration<Data>): readonly SlotDataFill<Data>[] {\n return slotFills(declaration.slot).flatMap((fill) =>\n fill.data === undefined\n ? []\n : [{ pluginId: fill.pluginId, id: fill.id, order: fill.order, data: fill.data as Data }],\n );\n },\n };\n return props;\n}\n"],"mappings":";;;;;;;;;AAmBA,SAAgB,qBACd,WACA,SACqC;CACrC,IAAI,cAAc,QAAQ,YAAY,KAAA,GAAW,OAAO,KAAA;CACxD,OAAO;EACL;EACA,GAAI,QAAQ,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,QAAQ,YAAY;EAChF,GAAI,QAAQ,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ,gBAAgB;EAC5F,GAAI,QAAQ,sBAAsB,KAAA,IAAY,CAAC,IAAI,EAAE,YAAY,QAAQ,kBAAkB;CAC7F;AACF;;;;;;AAaA,SAAgB,gBACd,WACA,SACA,UACA,MACA,qBACA,uBACA,8BAAkE,KAAA,GAClE,mBAA6D,CAAC,GAC9D,eACA,sBACoB;CACpB,MAAM,QAA4B;EAChC;EACA,GAAI,yBAAyB,KAAA,IAAY,CAAC,IAAI,EAAE,qBAAqB;EACrE;EACA,kBAAkB,KAAK;EACvB,mBAAmB,KAAK;EAGxB,aAAa,SAAS,eAAe,WAAW,IAAI;EACpD;EACA;EACA;EACA,GAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc;EACvD,kBAAkB,MAAM;GACtB,OAAO,qBAAqB,CAAC,CAAC,SAAS,WACrC,OAAO,MAAM,SAAS,KAAK,IAAI,IAC3B,CACE;IACE,IAAI,GAAG,OAAO,SAAS,GAAG,OAAO;IACjC,OAAO,OAAO;IACd,GAAI,OAAO,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,OAAO,OAAO;IAC/D,WACE,OAAO,IAAI;KACT;KACA;KACA;KACA,kBAAkB,KAAK;KACvB,kBAAkB;IACpB,CAAC;GACL,CACF,IACA,CAAC,CACP;EACF;EACA,kBAAkB;EAClB;EACA;EACA,aAAa,UAAU,SAAoB;GACzC,OAAO,cAAc,OAAO,OAAO,aAAa,WAAW,UAAU,OAAO;EAC9E;EACA,wBAAmC;GACjC,OAAO,cAAc,OAAO,OAAO,sBAAsB,iBAAiB,QAAQ,IAAI,CAAC;EACzF;EACA,wBAAwB,iBAAiB,SAAoB;GAC3D,OAAO,wBAAwB,iBAAiB,OAAO;EACzD;EACA,WAAW,MAAiB;GAC1B,OAAO,UAAU,IAAI,CAAC,CAAC,SAAS,SAC9B,KAAK,cAAc,KAAA,IACf,CAAC,IACD,CAAC,cAAc,KAAK,WAAW;IAAE,GAAG;IAAO,KAAK,GAAG,KAAK,SAAS,GAAG,KAAK;GAAK,CAAC,CAAC,CACtF;EACF;EACA,SAAe,aAAmE;GAChF,OAAO,UAAU,YAAY,IAAI,CAAC,CAAC,SAAS,SAC1C,KAAK,SAAS,KAAA,IACV,CAAC,IACD,CAAC;IAAE,UAAU,KAAK;IAAU,IAAI,KAAK;IAAI,OAAO,KAAK;IAAO,MAAM,KAAK;GAAa,CAAC,CAC3F;EACF;CACF;CACA,OAAO;AACT"}
@@ -0,0 +1,30 @@
1
+ //#region src/web/lib/promptFocus.ts
2
+ /**
3
+ * Where the keyboard belongs when no overlay holds it.
4
+ *
5
+ * Overlays opened by a shortcut have no trigger element, so the browser has
6
+ * nothing to restore focus to when they close and the caret lands on the
7
+ * body: the next keystroke goes nowhere. The composer registers its input
8
+ * here and every overlay hands focus back to it, which is what makes
9
+ * "ctrl+k, escape, keep typing" work. A module-level ref rather than a store
10
+ * because nothing renders from it.
11
+ */
12
+ let promptInput = null;
13
+ /** The composer claims the keyboard on mount; the returned disposer releases it. */
14
+ function registerPromptInput(element) {
15
+ promptInput = element;
16
+ return () => {
17
+ if (promptInput === element) promptInput = null;
18
+ };
19
+ }
20
+ /** Returns the caret to the composer, if there is one and it can take it. */
21
+ function focusPrompt(caret) {
22
+ if (promptInput === null || promptInput.disabled) return;
23
+ promptInput.focus();
24
+ if (caret !== void 0) promptInput.setSelectionRange(caret, caret);
25
+ }
26
+ //#endregion
27
+ exports.focusPrompt = focusPrompt;
28
+ exports.registerPromptInput = registerPromptInput;
29
+
30
+ //# sourceMappingURL=promptFocus.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptFocus.cjs","names":[],"sources":["../../../src/web/lib/promptFocus.ts"],"sourcesContent":["/**\n * Where the keyboard belongs when no overlay holds it.\n *\n * Overlays opened by a shortcut have no trigger element, so the browser has\n * nothing to restore focus to when they close and the caret lands on the\n * body: the next keystroke goes nowhere. The composer registers its input\n * here and every overlay hands focus back to it, which is what makes\n * \"ctrl+k, escape, keep typing\" work. A module-level ref rather than a store\n * because nothing renders from it.\n */\nlet promptInput: HTMLTextAreaElement | null = null;\n\n/** The composer claims the keyboard on mount; the returned disposer releases it. */\nexport function registerPromptInput(element: HTMLTextAreaElement | null): () => void {\n promptInput = element;\n return () => {\n if (promptInput === element) promptInput = null;\n };\n}\n\n/** Returns the caret to the composer, if there is one and it can take it. */\nexport function focusPrompt(caret?: number): void {\n if (promptInput === null || promptInput.disabled) return;\n promptInput.focus();\n if (caret !== undefined) promptInput.setSelectionRange(caret, caret);\n}\n"],"mappings":";;;;;;;;;;;AAUA,IAAI,cAA0C;;AAG9C,SAAgB,oBAAoB,SAAiD;CACnF,cAAc;CACd,aAAa;EACX,IAAI,gBAAgB,SAAS,cAAc;CAC7C;AACF;;AAGA,SAAgB,YAAY,OAAsB;CAChD,IAAI,gBAAgB,QAAQ,YAAY,UAAU;CAClD,YAAY,MAAM;CAClB,IAAI,UAAU,KAAA,GAAW,YAAY,kBAAkB,OAAO,KAAK;AACrE"}
@@ -0,0 +1,7 @@
1
+ //#region src/web/lib/promptFocus.d.ts
2
+ /** The composer claims the keyboard on mount; the returned disposer releases it. */
3
+ export declare function registerPromptInput(element: HTMLTextAreaElement | null): () => void;
4
+ /** Returns the caret to the composer, if there is one and it can take it. */
5
+ export declare function focusPrompt(caret?: number): void;
6
+ //#endregion
7
+ //# sourceMappingURL=promptFocus.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptFocus.d.mts","names":[],"sources":["../../../src/web/lib/promptFocus.ts"],"mappings":";;wBAagB,oBAAoB,SAAS;;wBAQ7B,YAAY"}
@@ -0,0 +1,29 @@
1
+ //#region src/web/lib/promptFocus.ts
2
+ /**
3
+ * Where the keyboard belongs when no overlay holds it.
4
+ *
5
+ * Overlays opened by a shortcut have no trigger element, so the browser has
6
+ * nothing to restore focus to when they close and the caret lands on the
7
+ * body: the next keystroke goes nowhere. The composer registers its input
8
+ * here and every overlay hands focus back to it, which is what makes
9
+ * "ctrl+k, escape, keep typing" work. A module-level ref rather than a store
10
+ * because nothing renders from it.
11
+ */
12
+ let promptInput = null;
13
+ /** The composer claims the keyboard on mount; the returned disposer releases it. */
14
+ function registerPromptInput(element) {
15
+ promptInput = element;
16
+ return () => {
17
+ if (promptInput === element) promptInput = null;
18
+ };
19
+ }
20
+ /** Returns the caret to the composer, if there is one and it can take it. */
21
+ function focusPrompt(caret) {
22
+ if (promptInput === null || promptInput.disabled) return;
23
+ promptInput.focus();
24
+ if (caret !== void 0) promptInput.setSelectionRange(caret, caret);
25
+ }
26
+ //#endregion
27
+ export { focusPrompt, registerPromptInput };
28
+
29
+ //# sourceMappingURL=promptFocus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptFocus.mjs","names":[],"sources":["../../../src/web/lib/promptFocus.ts"],"sourcesContent":["/**\n * Where the keyboard belongs when no overlay holds it.\n *\n * Overlays opened by a shortcut have no trigger element, so the browser has\n * nothing to restore focus to when they close and the caret lands on the\n * body: the next keystroke goes nowhere. The composer registers its input\n * here and every overlay hands focus back to it, which is what makes\n * \"ctrl+k, escape, keep typing\" work. A module-level ref rather than a store\n * because nothing renders from it.\n */\nlet promptInput: HTMLTextAreaElement | null = null;\n\n/** The composer claims the keyboard on mount; the returned disposer releases it. */\nexport function registerPromptInput(element: HTMLTextAreaElement | null): () => void {\n promptInput = element;\n return () => {\n if (promptInput === element) promptInput = null;\n };\n}\n\n/** Returns the caret to the composer, if there is one and it can take it. */\nexport function focusPrompt(caret?: number): void {\n if (promptInput === null || promptInput.disabled) return;\n promptInput.focus();\n if (caret !== undefined) promptInput.setSelectionRange(caret, caret);\n}\n"],"mappings":";;;;;;;;;;;AAUA,IAAI,cAA0C;;AAG9C,SAAgB,oBAAoB,SAAiD;CACnF,cAAc;CACd,aAAa;EACX,IAAI,gBAAgB,SAAS,cAAc;CAC7C;AACF;;AAGA,SAAgB,YAAY,OAAsB;CAChD,IAAI,gBAAgB,QAAQ,YAAY,UAAU;CAClD,YAAY,MAAM;CAClB,IAAI,UAAU,KAAA,GAAW,YAAY,kBAAkB,OAAO,KAAK;AACrE"}