@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,390 @@
1
+ let _tanstack_store = require("@tanstack/store");
2
+ let _tanstack_react_store = require("@tanstack/react-store");
3
+ //#region src/web/stores/composerStore.ts
4
+ const MAX_COMPOSER_ATTACHMENTS = 8;
5
+ const MAX_COMPOSER_IMAGE_BYTES = 10485760;
6
+ const MAX_COMPOSER_TOTAL_IMAGE_BYTES = 20971520;
7
+ const MAX_COMPOSER_TEXT_BYTES = 102400;
8
+ const MAX_COMPOSER_TOTAL_TEXT_BYTES = 204800;
9
+ /** The host's upload limit for one stored attachment. */
10
+ const MAX_COMPOSER_UPLOAD_BYTES = 8388608;
11
+ /** Bytes counted against the inline text budget: stored files and images travel separately. */
12
+ function inlineTextBytes(attachments) {
13
+ return attachments.reduce((total, attachment) => total + (attachment.kind === "text" || attachment.kind === "context" ? attachment.size : 0), 0);
14
+ }
15
+ const EMPTY_COMPOSER_SESSION = {
16
+ draft: "",
17
+ caret: 0,
18
+ dismissedToken: null,
19
+ attachments: [],
20
+ attachmentError: "",
21
+ nextAttachmentId: 0,
22
+ pendingAttachments: 0
23
+ };
24
+ /** Browser-only composer state, retained independently for each live session. */
25
+ const composerStore = new _tanstack_store.Store({});
26
+ function composerStateOf(state, sessionId) {
27
+ return (sessionId === null ? void 0 : state[sessionId]) ?? EMPTY_COMPOSER_SESSION;
28
+ }
29
+ function useComposerState(sessionId) {
30
+ return (0, _tanstack_react_store.useStore)(composerStore, (state) => composerStateOf(state, sessionId));
31
+ }
32
+ function updateComposerState(sessionId, update) {
33
+ if (sessionId === null) return;
34
+ composerStore.setState((state) => ({
35
+ ...state,
36
+ [sessionId]: update(composerStateOf(state, sessionId))
37
+ }));
38
+ }
39
+ /** Appends non-empty text to the latest draft for one session. */
40
+ function appendComposerDraft(sessionId, text) {
41
+ const transcript = text.trim();
42
+ if (sessionId === null || transcript === "") return;
43
+ updateComposerState(sessionId, (state) => {
44
+ const separator = state.draft === "" || /\s$/.test(state.draft) ? "" : " ";
45
+ const draft = `${state.draft}${separator}${transcript}`;
46
+ return {
47
+ ...state,
48
+ draft,
49
+ caret: draft.length,
50
+ dismissedToken: null
51
+ };
52
+ });
53
+ }
54
+ function contextFields(item) {
55
+ const name = item.label.trim().replace(/[\r\n]+/g, " ").slice(0, 200);
56
+ const content = item.content.trim();
57
+ return {
58
+ name,
59
+ content,
60
+ valid: item.kind.trim() !== "" && item.source.trim() !== "" && item.id.trim() !== "" && name !== "" && content !== ""
61
+ };
62
+ }
63
+ /** The open tab's context for one message. Slash commands, invalid items and failing reads send without it. */
64
+ function tabComposerContext(read, sessionId, draft) {
65
+ if (read === void 0 || draft.trim().startsWith("/")) return void 0;
66
+ let item;
67
+ try {
68
+ item = read(sessionId);
69
+ } catch {
70
+ return;
71
+ }
72
+ if (item === void 0) return void 0;
73
+ const { name, content, valid } = contextFields(item);
74
+ if (!valid || new TextEncoder().encode(content).byteLength > 102400) return void 0;
75
+ return {
76
+ ...item,
77
+ label: name,
78
+ content
79
+ };
80
+ }
81
+ function isCaptureShape(capture) {
82
+ const context = capture.context;
83
+ if (typeof capture.data !== "string" || capture.mimeType !== "image/png" && capture.mimeType !== "image/jpeg") return false;
84
+ if (typeof context !== "object" || context === null || Array.isArray(context)) return false;
85
+ const item = context;
86
+ return typeof item.kind === "string" && typeof item.source === "string" && typeof item.id === "string" && typeof item.label === "string" && typeof item.content === "string" && (item.url === void 0 || typeof item.url === "string");
87
+ }
88
+ const MAX_COMPOSER_CAPTURE_DIMENSION = 1600;
89
+ function decodeCanonicalBase64(data) {
90
+ if (data === "" || data.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data)) return null;
91
+ try {
92
+ const decoded = atob(data);
93
+ return btoa(decoded) === data ? decoded : null;
94
+ } catch {
95
+ return null;
96
+ }
97
+ }
98
+ function uint16(binary, offset) {
99
+ return binary.charCodeAt(offset) * 256 + binary.charCodeAt(offset + 1);
100
+ }
101
+ function uint32(binary, offset) {
102
+ return binary.charCodeAt(offset) * 16777216 + binary.charCodeAt(offset + 1) * 65536 + binary.charCodeAt(offset + 2) * 256 + binary.charCodeAt(offset + 3);
103
+ }
104
+ function pngDimensions(binary) {
105
+ if (binary.length < 24 || !binary.startsWith("‰PNG\r\n\n") || binary.slice(12, 16) !== "IHDR") return null;
106
+ return {
107
+ width: uint32(binary, 16),
108
+ height: uint32(binary, 20)
109
+ };
110
+ }
111
+ function jpegDimensions(binary) {
112
+ if (binary.length < 4 || binary.charCodeAt(0) !== 255 || binary.charCodeAt(1) !== 216 || binary.charCodeAt(2) !== 255) return null;
113
+ const startOfFrameMarkers = /* @__PURE__ */ new Set([
114
+ 192,
115
+ 193,
116
+ 194,
117
+ 195,
118
+ 197,
119
+ 198,
120
+ 199,
121
+ 201,
122
+ 202,
123
+ 203,
124
+ 205,
125
+ 206,
126
+ 207
127
+ ]);
128
+ let offset = 2;
129
+ while (offset < binary.length) {
130
+ if (binary.charCodeAt(offset) !== 255) return null;
131
+ while (binary.charCodeAt(offset) === 255) offset += 1;
132
+ if (offset >= binary.length) return null;
133
+ const marker = binary.charCodeAt(offset);
134
+ offset += 1;
135
+ if (marker === 217 || marker === 218) return null;
136
+ if (marker === 1 || marker >= 208 && marker <= 216) continue;
137
+ if (offset + 2 > binary.length) return null;
138
+ const segmentLength = uint16(binary, offset);
139
+ if (segmentLength < 2 || offset + segmentLength > binary.length) return null;
140
+ if (startOfFrameMarkers.has(marker)) {
141
+ if (segmentLength < 7) return null;
142
+ return {
143
+ width: uint16(binary, offset + 5),
144
+ height: uint16(binary, offset + 3)
145
+ };
146
+ }
147
+ offset += segmentLength;
148
+ }
149
+ return null;
150
+ }
151
+ function validCaptureDimensions(binary, mimeType) {
152
+ const dimensions = mimeType === "image/png" ? pngDimensions(binary) : jpegDimensions(binary);
153
+ return dimensions !== null && dimensions.width > 0 && dimensions.height > 0 && dimensions.width <= MAX_COMPOSER_CAPTURE_DIMENSION && dimensions.height <= MAX_COMPOSER_CAPTURE_DIMENSION;
154
+ }
155
+ /** Adds structured plugin context without changing the visible composer draft. */
156
+ function attachComposerContext(sessionId, item) {
157
+ if (sessionId === null) return;
158
+ const { name, content, valid } = contextFields(item);
159
+ updateComposerState(sessionId, (state) => {
160
+ if (!valid) return {
161
+ ...state,
162
+ attachmentError: "Context needs a source, id, label, and content."
163
+ };
164
+ if (state.attachments.length >= 8) return {
165
+ ...state,
166
+ attachmentError: `Only ${String(8)} attachments are allowed.`
167
+ };
168
+ const size = new TextEncoder().encode(content).byteLength;
169
+ if (size > 102400) return {
170
+ ...state,
171
+ attachmentError: `${name} exceeds the 100 KB context limit.`
172
+ };
173
+ if (inlineTextBytes(state.attachments) + size > 204800) return {
174
+ ...state,
175
+ attachmentError: `${name} exceeds the 200 KB total text limit.`
176
+ };
177
+ return {
178
+ ...state,
179
+ attachments: [...state.attachments, {
180
+ id: `context-${String(state.nextAttachmentId)}`,
181
+ kind: "context",
182
+ name,
183
+ size,
184
+ content,
185
+ source: item.source,
186
+ contextId: item.id,
187
+ contextKind: item.kind,
188
+ ...item.url === void 0 ? {} : { url: item.url }
189
+ }],
190
+ attachmentError: "",
191
+ nextAttachmentId: state.nextAttachmentId + 1
192
+ };
193
+ });
194
+ }
195
+ /** Validates a standalone capture without reading or changing the composer. */
196
+ function validateComposerCapture(capture) {
197
+ if (!isCaptureShape(capture) || !contextFields(capture.context).valid) throw new Error("Capture needs a base64 PNG or JPEG image and valid context.");
198
+ if (capture.data.length > Math.ceil(10485760 / 3) * 4) throw new Error("Capture exceeds the 10 MB image limit.");
199
+ const image = decodeCanonicalBase64(capture.data);
200
+ if (image === null || !validCaptureDimensions(image, capture.mimeType)) throw new Error("Capture needs a valid PNG or JPEG image.");
201
+ if (image.length > 10485760 || new TextEncoder().encode(capture.context.content).byteLength > 102400) throw new Error("Capture exceeds the attachment budget.");
202
+ }
203
+ /**
204
+ * Stages a capture as one image and one context chip in a single store update.
205
+ * Nothing is transported until the reader explicitly submits or queues it.
206
+ */
207
+ function attachComposerCapture(sessionId, capture) {
208
+ if (sessionId === null) return;
209
+ updateComposerState(sessionId, (state) => {
210
+ if (!isCaptureShape(capture)) return {
211
+ ...state,
212
+ attachmentError: "Capture needs a base64 PNG or JPEG image and valid context."
213
+ };
214
+ const { name, content, valid } = contextFields(capture.context);
215
+ if (!valid) return {
216
+ ...state,
217
+ attachmentError: "Capture needs a base64 PNG or JPEG image and valid context."
218
+ };
219
+ if (capture.data.length > Math.ceil(10485760 / 3) * 4) return {
220
+ ...state,
221
+ attachmentError: `${name} exceeds the 10 MB image limit.`
222
+ };
223
+ const decodedImage = decodeCanonicalBase64(capture.data);
224
+ if (decodedImage === null || !validCaptureDimensions(decodedImage, capture.mimeType)) return {
225
+ ...state,
226
+ attachmentError: "Capture needs a base64 PNG or JPEG image and valid context."
227
+ };
228
+ const imageSize = decodedImage.length;
229
+ if (state.attachments.length > 6) return {
230
+ ...state,
231
+ attachmentError: `Only ${String(8)} attachments are allowed.`
232
+ };
233
+ if (imageSize > 10485760) return {
234
+ ...state,
235
+ attachmentError: `${name} exceeds the 10 MB image limit.`
236
+ };
237
+ if (state.attachments.reduce((total, attachment) => total + (attachment.kind === "image" ? attachment.size : 0), 0) + imageSize > 20971520) return {
238
+ ...state,
239
+ attachmentError: `${name} exceeds the 20 MB total image limit.`
240
+ };
241
+ const contextSize = new TextEncoder().encode(content).byteLength;
242
+ if (contextSize > 102400) return {
243
+ ...state,
244
+ attachmentError: `${name} exceeds the 100 KB context limit.`
245
+ };
246
+ if (inlineTextBytes(state.attachments) + contextSize > 204800) return {
247
+ ...state,
248
+ attachmentError: `${name} exceeds the 200 KB total text limit.`
249
+ };
250
+ const imageId = state.nextAttachmentId;
251
+ const extension = capture.mimeType === "image/png" ? "png" : "jpg";
252
+ return {
253
+ ...state,
254
+ attachments: [
255
+ ...state.attachments,
256
+ {
257
+ id: `capture-${String(imageId)}`,
258
+ kind: "image",
259
+ name: `${name}.${extension}`,
260
+ size: imageSize,
261
+ dataUrl: `data:${capture.mimeType};base64,${capture.data}`,
262
+ data: capture.data,
263
+ mimeType: capture.mimeType
264
+ },
265
+ {
266
+ id: `context-${String(imageId + 1)}`,
267
+ kind: "context",
268
+ name,
269
+ size: contextSize,
270
+ content,
271
+ source: capture.context.source,
272
+ contextId: capture.context.id,
273
+ contextKind: capture.context.kind,
274
+ ...capture.context.url === void 0 ? {} : { url: capture.context.url }
275
+ }
276
+ ],
277
+ attachmentError: "",
278
+ nextAttachmentId: imageId + 2
279
+ };
280
+ });
281
+ }
282
+ /** Adds message text as a Markdown blockquote and leaves the caret ready for an instruction. */
283
+ function appendComposerQuote(sessionId, text) {
284
+ const transcript = text.trim().replace(/\r\n?/g, "\n");
285
+ if (sessionId === null || transcript === "") return null;
286
+ let caret = 0;
287
+ updateComposerState(sessionId, (state) => {
288
+ const separator = state.draft === "" ? "" : state.draft.endsWith("\n\n") ? "" : state.draft.endsWith("\n") ? "\n" : "\n\n";
289
+ const quote = transcript.split("\n").map((line) => line === "" ? ">" : `> ${line}`).join("\n");
290
+ const draft = `${state.draft}${separator}${quote}\n\n`;
291
+ caret = draft.length;
292
+ return {
293
+ ...state,
294
+ draft,
295
+ caret,
296
+ dismissedToken: null
297
+ };
298
+ });
299
+ return caret;
300
+ }
301
+ /** Empties the composer but keeps the id counter and pending batches, so a batch still uploading lands with a fresh id. */
302
+ function clearComposerState(sessionId) {
303
+ if (sessionId === null) return;
304
+ updateComposerState(sessionId, ({ nextAttachmentId, pendingAttachments }) => ({
305
+ ...EMPTY_COMPOSER_SESSION,
306
+ nextAttachmentId,
307
+ pendingAttachments
308
+ }));
309
+ }
310
+ /** A session that left takes its unfinished composer state with it. */
311
+ function dropComposerState(sessionId) {
312
+ composerStore.setState((state) => {
313
+ if (!(sessionId in state)) return state;
314
+ const next = { ...state };
315
+ delete next[sessionId];
316
+ return next;
317
+ });
318
+ }
319
+ const DRAFT_STORAGE_KEY = "po:composer-drafts";
320
+ /**
321
+ * Holds unsent text across a reload the person did not ask for.
322
+ *
323
+ * A verified bundle update reloads the page underneath whoever is typing, so
324
+ * the text has to outlive the document. Only the draft and the caret travel:
325
+ * attachments carry base64 image payloads that would not fit a storage quota,
326
+ * and re-attaching a file is a smaller loss than losing a written message.
327
+ */
328
+ function saveComposerDrafts() {
329
+ try {
330
+ const drafts = {};
331
+ for (const [sessionId, state] of Object.entries(composerStore.state)) if (state !== void 0 && state.draft !== "") drafts[sessionId] = {
332
+ draft: state.draft,
333
+ caret: state.caret
334
+ };
335
+ if (Object.keys(drafts).length === 0) window.sessionStorage.removeItem(DRAFT_STORAGE_KEY);
336
+ else window.sessionStorage.setItem(DRAFT_STORAGE_KEY, JSON.stringify(drafts));
337
+ } catch {}
338
+ }
339
+ /** Seeds the store from the last save, then forgets it so a later reload starts clean. */
340
+ function restoreComposerDrafts() {
341
+ let stored;
342
+ try {
343
+ const raw = window.sessionStorage.getItem(DRAFT_STORAGE_KEY);
344
+ window.sessionStorage.removeItem(DRAFT_STORAGE_KEY);
345
+ if (raw === null) return;
346
+ stored = JSON.parse(raw);
347
+ } catch {
348
+ return;
349
+ }
350
+ if (typeof stored !== "object" || stored === null || Array.isArray(stored)) return;
351
+ for (const [sessionId, value] of Object.entries(stored)) {
352
+ if (typeof value !== "object" || value === null) continue;
353
+ const entry = value;
354
+ if (typeof entry.draft !== "string" || entry.draft === "" || !Number.isSafeInteger(entry.caret)) continue;
355
+ const caret = Math.max(0, Math.min(Number(entry.caret), entry.draft.length));
356
+ updateComposerState(sessionId, (state) => ({
357
+ ...state,
358
+ draft: entry.draft,
359
+ caret
360
+ }));
361
+ }
362
+ }
363
+ /** Test seam. */
364
+ function resetComposerStore() {
365
+ composerStore.setState(() => ({}));
366
+ }
367
+ //#endregion
368
+ exports.MAX_COMPOSER_ATTACHMENTS = MAX_COMPOSER_ATTACHMENTS;
369
+ exports.MAX_COMPOSER_IMAGE_BYTES = MAX_COMPOSER_IMAGE_BYTES;
370
+ exports.MAX_COMPOSER_TEXT_BYTES = MAX_COMPOSER_TEXT_BYTES;
371
+ exports.MAX_COMPOSER_TOTAL_IMAGE_BYTES = MAX_COMPOSER_TOTAL_IMAGE_BYTES;
372
+ exports.MAX_COMPOSER_TOTAL_TEXT_BYTES = MAX_COMPOSER_TOTAL_TEXT_BYTES;
373
+ exports.MAX_COMPOSER_UPLOAD_BYTES = MAX_COMPOSER_UPLOAD_BYTES;
374
+ exports.appendComposerDraft = appendComposerDraft;
375
+ exports.appendComposerQuote = appendComposerQuote;
376
+ exports.attachComposerCapture = attachComposerCapture;
377
+ exports.attachComposerContext = attachComposerContext;
378
+ exports.clearComposerState = clearComposerState;
379
+ exports.composerStore = composerStore;
380
+ exports.dropComposerState = dropComposerState;
381
+ exports.inlineTextBytes = inlineTextBytes;
382
+ exports.resetComposerStore = resetComposerStore;
383
+ exports.restoreComposerDrafts = restoreComposerDrafts;
384
+ exports.saveComposerDrafts = saveComposerDrafts;
385
+ exports.tabComposerContext = tabComposerContext;
386
+ exports.updateComposerState = updateComposerState;
387
+ exports.useComposerState = useComposerState;
388
+ exports.validateComposerCapture = validateComposerCapture;
389
+
390
+ //# sourceMappingURL=composerStore.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composerStore.cjs","names":["Store","useStore"],"sources":["../../../src/web/stores/composerStore.ts"],"sourcesContent":["import type { ComposerCapture, TransientTab, WebPluginContextItem } from '@agimon-ai/po-core/web';\nimport { useStore } from '@tanstack/react-store';\nimport { Store } from '@tanstack/store';\n\nexport interface ComposerImageAttachment {\n id: string;\n kind: 'image';\n name: string;\n size: number;\n dataUrl: string;\n data: string;\n mimeType: string;\n /** Where the host stored a copy, when the best-effort upload succeeded. */\n path?: string;\n}\n\nexport interface ComposerTextAttachment {\n id: string;\n kind: 'text';\n name: string;\n size: number;\n content: string;\n /** Where the host stored a copy, when the best-effort upload succeeded. */\n path?: string;\n}\n\n/** Any other file: stored on the host and referenced by path, never inlined. */\nexport interface ComposerFileAttachment {\n id: string;\n kind: 'file';\n name: string;\n size: number;\n mimeType: string;\n path: string;\n}\n\nexport interface ComposerContextAttachment {\n id: string;\n kind: 'context';\n name: string;\n size: number;\n content: string;\n source: string;\n contextId: string;\n contextKind: string;\n url?: string;\n}\n\nexport type ComposerAttachment =\n | ComposerContextAttachment\n | ComposerFileAttachment\n | ComposerImageAttachment\n | ComposerTextAttachment;\n\nexport const MAX_COMPOSER_ATTACHMENTS = 8;\nexport const MAX_COMPOSER_IMAGE_BYTES = 10 * 1024 * 1024;\nexport const MAX_COMPOSER_TOTAL_IMAGE_BYTES = 20 * 1024 * 1024;\nexport const MAX_COMPOSER_TEXT_BYTES = 100 * 1024;\nexport const MAX_COMPOSER_TOTAL_TEXT_BYTES = 200 * 1024;\n/** The host's upload limit for one stored attachment. */\nexport const MAX_COMPOSER_UPLOAD_BYTES = 8 * 1024 * 1024;\n\n/** Bytes counted against the inline text budget: stored files and images travel separately. */\nexport function inlineTextBytes(attachments: ComposerAttachment[]): number {\n return attachments.reduce(\n (total, attachment) => total + (attachment.kind === 'text' || attachment.kind === 'context' ? attachment.size : 0),\n 0,\n );\n}\n\nexport interface ComposerSessionState {\n draft: string;\n caret: number;\n dismissedToken: number | null;\n attachments: ComposerAttachment[];\n attachmentError: string;\n nextAttachmentId: number;\n /** File batches still being read or uploaded; sending waits until they are staged. */\n pendingAttachments: number;\n}\n\ntype ComposerState = Partial<Record<string, ComposerSessionState>>;\n\nconst EMPTY_COMPOSER_SESSION: ComposerSessionState = {\n draft: '',\n caret: 0,\n dismissedToken: null,\n attachments: [],\n attachmentError: '',\n nextAttachmentId: 0,\n pendingAttachments: 0,\n};\n\n/** Browser-only composer state, retained independently for each live session. */\nexport const composerStore = new Store<ComposerState>({});\n\nfunction composerStateOf(state: ComposerState, sessionId: string | null): ComposerSessionState {\n return (sessionId === null ? undefined : state[sessionId]) ?? EMPTY_COMPOSER_SESSION;\n}\n\nexport function useComposerState(sessionId: string | null): ComposerSessionState {\n return useStore(composerStore, (state) => composerStateOf(state, sessionId));\n}\n\nexport function updateComposerState(\n sessionId: string | null,\n update: (state: ComposerSessionState) => ComposerSessionState,\n): void {\n if (sessionId === null) return;\n composerStore.setState((state) => ({ ...state, [sessionId]: update(composerStateOf(state, sessionId)) }));\n}\n\n/** Appends non-empty text to the latest draft for one session. */\nexport function appendComposerDraft(sessionId: string | null, text: string): void {\n const transcript = text.trim();\n if (sessionId === null || transcript === '') return;\n updateComposerState(sessionId, (state) => {\n const separator = state.draft === '' || /\\s$/.test(state.draft) ? '' : ' ';\n const draft = `${state.draft}${separator}${transcript}`;\n return { ...state, draft, caret: draft.length, dismissedToken: null };\n });\n}\n\nfunction contextFields(item: WebPluginContextItem): { name: string; content: string; valid: boolean } {\n const name = item.label\n .trim()\n .replace(/[\\r\\n]+/g, ' ')\n .slice(0, 200);\n const content = item.content.trim();\n return {\n name,\n content,\n valid:\n item.kind.trim() !== '' && item.source.trim() !== '' && item.id.trim() !== '' && name !== '' && content !== '',\n };\n}\n\n/** The open tab's context for one message. Slash commands, invalid items and failing reads send without it. */\nexport function tabComposerContext(\n read: TransientTab['composerContext'],\n sessionId: string,\n draft: string,\n): WebPluginContextItem | undefined {\n // A slash command is an action: appended text would become its arguments (builtinCommandFrame).\n if (read === undefined || draft.trim().startsWith('/')) return undefined;\n let item: WebPluginContextItem | undefined;\n try {\n item = read(sessionId);\n } catch {\n return undefined; // Documented fallback: a plugin bug must not block the user's message.\n }\n if (item === undefined) return undefined;\n const { name, content, valid } = contextFields(item);\n if (!valid || new TextEncoder().encode(content).byteLength > MAX_COMPOSER_TEXT_BYTES) return undefined;\n return { ...item, label: name, content };\n}\n\nfunction isCaptureShape(capture: ComposerCapture): boolean {\n const context: unknown = capture.context;\n if (typeof capture.data !== 'string' || (capture.mimeType !== 'image/png' && capture.mimeType !== 'image/jpeg')) {\n return false;\n }\n if (typeof context !== 'object' || context === null || Array.isArray(context)) return false;\n const item = context as Record<string, unknown>;\n return (\n typeof item.kind === 'string' &&\n typeof item.source === 'string' &&\n typeof item.id === 'string' &&\n typeof item.label === 'string' &&\n typeof item.content === 'string' &&\n (item.url === undefined || typeof item.url === 'string')\n );\n}\n\nconst MAX_COMPOSER_CAPTURE_DIMENSION = 1600;\n\nfunction decodeCanonicalBase64(data: string): string | null {\n if (data === '' || data.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data)) return null;\n try {\n const decoded = atob(data);\n return btoa(decoded) === data ? decoded : null;\n } catch {\n return null;\n }\n}\n\nfunction uint16(binary: string, offset: number): number {\n return binary.charCodeAt(offset) * 0x100 + binary.charCodeAt(offset + 1);\n}\n\nfunction uint32(binary: string, offset: number): number {\n return (\n binary.charCodeAt(offset) * 0x1000000 +\n binary.charCodeAt(offset + 1) * 0x10000 +\n binary.charCodeAt(offset + 2) * 0x100 +\n binary.charCodeAt(offset + 3)\n );\n}\n\nfunction pngDimensions(binary: string): { width: number; height: number } | null {\n const signature = '\\x89PNG\\r\\n\\x1a\\n';\n if (binary.length < 24 || !binary.startsWith(signature) || binary.slice(12, 16) !== 'IHDR') return null;\n return { width: uint32(binary, 16), height: uint32(binary, 20) };\n}\n\nfunction jpegDimensions(binary: string): { width: number; height: number } | null {\n if (\n binary.length < 4 ||\n binary.charCodeAt(0) !== 0xff ||\n binary.charCodeAt(1) !== 0xd8 ||\n binary.charCodeAt(2) !== 0xff\n ) {\n return null;\n }\n const startOfFrameMarkers = new Set([0xc0, 0xc1, 0xc2, 0xc3, 0xc5, 0xc6, 0xc7, 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf]);\n let offset = 2;\n while (offset < binary.length) {\n if (binary.charCodeAt(offset) !== 0xff) return null;\n while (binary.charCodeAt(offset) === 0xff) offset += 1;\n if (offset >= binary.length) return null;\n const marker = binary.charCodeAt(offset);\n offset += 1;\n if (marker === 0xd9 || marker === 0xda) return null;\n if (marker === 0x01 || (marker >= 0xd0 && marker <= 0xd8)) continue;\n if (offset + 2 > binary.length) return null;\n const segmentLength = uint16(binary, offset);\n if (segmentLength < 2 || offset + segmentLength > binary.length) return null;\n if (startOfFrameMarkers.has(marker)) {\n if (segmentLength < 7) return null;\n return { width: uint16(binary, offset + 5), height: uint16(binary, offset + 3) };\n }\n offset += segmentLength;\n }\n return null;\n}\n\nfunction validCaptureDimensions(binary: string, mimeType: ComposerCapture['mimeType']): boolean {\n const dimensions = mimeType === 'image/png' ? pngDimensions(binary) : jpegDimensions(binary);\n return (\n dimensions !== null &&\n dimensions.width > 0 &&\n dimensions.height > 0 &&\n dimensions.width <= MAX_COMPOSER_CAPTURE_DIMENSION &&\n dimensions.height <= MAX_COMPOSER_CAPTURE_DIMENSION\n );\n}\n\n/** Adds structured plugin context without changing the visible composer draft. */\nexport function attachComposerContext(sessionId: string | null, item: WebPluginContextItem): void {\n if (sessionId === null) return;\n const { name, content, valid } = contextFields(item);\n updateComposerState(sessionId, (state) => {\n if (!valid) {\n return { ...state, attachmentError: 'Context needs a source, id, label, and content.' };\n }\n if (state.attachments.length >= MAX_COMPOSER_ATTACHMENTS) {\n return { ...state, attachmentError: `Only ${String(MAX_COMPOSER_ATTACHMENTS)} attachments are allowed.` };\n }\n const size = new TextEncoder().encode(content).byteLength;\n if (size > MAX_COMPOSER_TEXT_BYTES) {\n return { ...state, attachmentError: `${name} exceeds the 100 KB context limit.` };\n }\n const textBytes = inlineTextBytes(state.attachments);\n if (textBytes + size > MAX_COMPOSER_TOTAL_TEXT_BYTES) {\n return { ...state, attachmentError: `${name} exceeds the 200 KB total text limit.` };\n }\n return {\n ...state,\n attachments: [\n ...state.attachments,\n {\n id: `context-${String(state.nextAttachmentId)}`,\n kind: 'context',\n name,\n size,\n content,\n source: item.source,\n contextId: item.id,\n contextKind: item.kind,\n ...(item.url === undefined ? {} : { url: item.url }),\n },\n ],\n attachmentError: '',\n nextAttachmentId: state.nextAttachmentId + 1,\n };\n });\n}\n\n/** Validates a standalone capture without reading or changing the composer. */\nexport function validateComposerCapture(capture: ComposerCapture): void {\n if (!isCaptureShape(capture) || !contextFields(capture.context).valid) {\n throw new Error('Capture needs a base64 PNG or JPEG image and valid context.');\n }\n if (capture.data.length > Math.ceil(MAX_COMPOSER_IMAGE_BYTES / 3) * 4) {\n throw new Error('Capture exceeds the 10 MB image limit.');\n }\n const image = decodeCanonicalBase64(capture.data);\n if (image === null || !validCaptureDimensions(image, capture.mimeType)) {\n throw new Error('Capture needs a valid PNG or JPEG image.');\n }\n if (\n image.length > MAX_COMPOSER_IMAGE_BYTES ||\n new TextEncoder().encode(capture.context.content).byteLength > MAX_COMPOSER_TEXT_BYTES\n ) {\n throw new Error('Capture exceeds the attachment budget.');\n }\n}\n\n/**\n * Stages a capture as one image and one context chip in a single store update.\n * Nothing is transported until the reader explicitly submits or queues it.\n */\nexport function attachComposerCapture(sessionId: string | null, capture: ComposerCapture): void {\n if (sessionId === null) return;\n updateComposerState(sessionId, (state) => {\n if (!isCaptureShape(capture)) {\n return { ...state, attachmentError: 'Capture needs a base64 PNG or JPEG image and valid context.' };\n }\n const { name, content, valid } = contextFields(capture.context);\n if (!valid) {\n return { ...state, attachmentError: 'Capture needs a base64 PNG or JPEG image and valid context.' };\n }\n if (capture.data.length > Math.ceil(MAX_COMPOSER_IMAGE_BYTES / 3) * 4) {\n return { ...state, attachmentError: `${name} exceeds the 10 MB image limit.` };\n }\n const decodedImage = decodeCanonicalBase64(capture.data);\n if (decodedImage === null || !validCaptureDimensions(decodedImage, capture.mimeType)) {\n return { ...state, attachmentError: 'Capture needs a base64 PNG or JPEG image and valid context.' };\n }\n const imageSize = decodedImage.length;\n if (state.attachments.length > MAX_COMPOSER_ATTACHMENTS - 2) {\n return { ...state, attachmentError: `Only ${String(MAX_COMPOSER_ATTACHMENTS)} attachments are allowed.` };\n }\n if (imageSize > MAX_COMPOSER_IMAGE_BYTES) {\n return { ...state, attachmentError: `${name} exceeds the 10 MB image limit.` };\n }\n const imageBytes = state.attachments.reduce(\n (total, attachment) => total + (attachment.kind === 'image' ? attachment.size : 0),\n 0,\n );\n if (imageBytes + imageSize > MAX_COMPOSER_TOTAL_IMAGE_BYTES) {\n return { ...state, attachmentError: `${name} exceeds the 20 MB total image limit.` };\n }\n const contextSize = new TextEncoder().encode(content).byteLength;\n if (contextSize > MAX_COMPOSER_TEXT_BYTES) {\n return { ...state, attachmentError: `${name} exceeds the 100 KB context limit.` };\n }\n const textBytes = inlineTextBytes(state.attachments);\n if (textBytes + contextSize > MAX_COMPOSER_TOTAL_TEXT_BYTES) {\n return { ...state, attachmentError: `${name} exceeds the 200 KB total text limit.` };\n }\n\n const imageId = state.nextAttachmentId;\n const extension = capture.mimeType === 'image/png' ? 'png' : 'jpg';\n return {\n ...state,\n attachments: [\n ...state.attachments,\n {\n id: `capture-${String(imageId)}`,\n kind: 'image',\n name: `${name}.${extension}`,\n size: imageSize,\n dataUrl: `data:${capture.mimeType};base64,${capture.data}`,\n data: capture.data,\n mimeType: capture.mimeType,\n },\n {\n id: `context-${String(imageId + 1)}`,\n kind: 'context',\n name,\n size: contextSize,\n content,\n source: capture.context.source,\n contextId: capture.context.id,\n contextKind: capture.context.kind,\n ...(capture.context.url === undefined ? {} : { url: capture.context.url }),\n },\n ],\n attachmentError: '',\n nextAttachmentId: imageId + 2,\n };\n });\n}\n/** Adds message text as a Markdown blockquote and leaves the caret ready for an instruction. */\nexport function appendComposerQuote(sessionId: string | null, text: string): number | null {\n const transcript = text.trim().replace(/\\r\\n?/g, '\\n');\n if (sessionId === null || transcript === '') return null;\n let caret = 0;\n updateComposerState(sessionId, (state) => {\n const separator =\n state.draft === '' ? '' : state.draft.endsWith('\\n\\n') ? '' : state.draft.endsWith('\\n') ? '\\n' : '\\n\\n';\n const quote = transcript\n .split('\\n')\n .map((line) => (line === '' ? '>' : `> ${line}`))\n .join('\\n');\n const draft = `${state.draft}${separator}${quote}\\n\\n`;\n caret = draft.length;\n return { ...state, draft, caret, dismissedToken: null };\n });\n return caret;\n}\n\n/** Empties the composer but keeps the id counter and pending batches, so a batch still uploading lands with a fresh id. */\nexport function clearComposerState(sessionId: string | null): void {\n if (sessionId === null) return;\n updateComposerState(sessionId, ({ nextAttachmentId, pendingAttachments }) => ({\n ...EMPTY_COMPOSER_SESSION,\n nextAttachmentId,\n pendingAttachments,\n }));\n}\n\n/** A session that left takes its unfinished composer state with it. */\nexport function dropComposerState(sessionId: string): void {\n composerStore.setState((state) => {\n if (!(sessionId in state)) return state;\n const next = { ...state };\n delete next[sessionId];\n return next;\n });\n}\n\nconst DRAFT_STORAGE_KEY = 'po:composer-drafts';\n\ninterface StoredDraft {\n draft: string;\n caret: number;\n}\n\n/**\n * Holds unsent text across a reload the person did not ask for.\n *\n * A verified bundle update reloads the page underneath whoever is typing, so\n * the text has to outlive the document. Only the draft and the caret travel:\n * attachments carry base64 image payloads that would not fit a storage quota,\n * and re-attaching a file is a smaller loss than losing a written message.\n */\nexport function saveComposerDrafts(): void {\n try {\n const drafts: Record<string, StoredDraft> = {};\n for (const [sessionId, state] of Object.entries(composerStore.state)) {\n if (state !== undefined && state.draft !== '') drafts[sessionId] = { draft: state.draft, caret: state.caret };\n }\n if (Object.keys(drafts).length === 0) window.sessionStorage.removeItem(DRAFT_STORAGE_KEY);\n else window.sessionStorage.setItem(DRAFT_STORAGE_KEY, JSON.stringify(drafts));\n } catch {\n // Losing a draft is not worth breaking the reload that was already decided.\n }\n}\n\n/** Seeds the store from the last save, then forgets it so a later reload starts clean. */\nexport function restoreComposerDrafts(): void {\n let stored: unknown;\n try {\n const raw = window.sessionStorage.getItem(DRAFT_STORAGE_KEY);\n window.sessionStorage.removeItem(DRAFT_STORAGE_KEY);\n if (raw === null) return;\n stored = JSON.parse(raw);\n } catch {\n return;\n }\n if (typeof stored !== 'object' || stored === null || Array.isArray(stored)) return;\n for (const [sessionId, value] of Object.entries(stored as Record<string, unknown>)) {\n if (typeof value !== 'object' || value === null) continue;\n const entry = value as Record<string, unknown>;\n if (typeof entry.draft !== 'string' || entry.draft === '' || !Number.isSafeInteger(entry.caret)) continue;\n const caret = Math.max(0, Math.min(Number(entry.caret), entry.draft.length));\n updateComposerState(sessionId, (state) => ({ ...state, draft: entry.draft as string, caret }));\n }\n}\n\n/** Test seam. */\nexport function resetComposerStore(): void {\n composerStore.setState(() => ({}));\n}\n"],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { ComposerCapture, TransientTab, WebPluginContextItem } from "@agimon-ai/po-core/web";
2
+ import { Store } from "@tanstack/store";
3
+ //#region src/web/stores/composerStore.d.ts
4
+ export interface ComposerImageAttachment {
5
+ id: string;
6
+ kind: 'image';
7
+ name: string;
8
+ size: number;
9
+ dataUrl: string;
10
+ data: string;
11
+ mimeType: string;
12
+ /** Where the host stored a copy, when the best-effort upload succeeded. */
13
+ path?: string;
14
+ }
15
+ export interface ComposerTextAttachment {
16
+ id: string;
17
+ kind: 'text';
18
+ name: string;
19
+ size: number;
20
+ content: string;
21
+ /** Where the host stored a copy, when the best-effort upload succeeded. */
22
+ path?: string;
23
+ }
24
+ /** Any other file: stored on the host and referenced by path, never inlined. */
25
+ export interface ComposerFileAttachment {
26
+ id: string;
27
+ kind: 'file';
28
+ name: string;
29
+ size: number;
30
+ mimeType: string;
31
+ path: string;
32
+ }
33
+ export interface ComposerContextAttachment {
34
+ id: string;
35
+ kind: 'context';
36
+ name: string;
37
+ size: number;
38
+ content: string;
39
+ source: string;
40
+ contextId: string;
41
+ contextKind: string;
42
+ url?: string;
43
+ }
44
+ export type ComposerAttachment = ComposerContextAttachment | ComposerFileAttachment | ComposerImageAttachment | ComposerTextAttachment;
45
+ export declare const MAX_COMPOSER_ATTACHMENTS = 8;
46
+ export declare const MAX_COMPOSER_IMAGE_BYTES: number;
47
+ export declare const MAX_COMPOSER_TOTAL_IMAGE_BYTES: number;
48
+ export declare const MAX_COMPOSER_TEXT_BYTES: number;
49
+ export declare const MAX_COMPOSER_TOTAL_TEXT_BYTES: number;
50
+ /** The host's upload limit for one stored attachment. */
51
+ export declare const MAX_COMPOSER_UPLOAD_BYTES: number;
52
+ /** Bytes counted against the inline text budget: stored files and images travel separately. */
53
+ export declare function inlineTextBytes(attachments: ComposerAttachment[]): number;
54
+ export interface ComposerSessionState {
55
+ draft: string;
56
+ caret: number;
57
+ dismissedToken: number | null;
58
+ attachments: ComposerAttachment[];
59
+ attachmentError: string;
60
+ nextAttachmentId: number;
61
+ /** File batches still being read or uploaded; sending waits until they are staged. */
62
+ pendingAttachments: number;
63
+ }
64
+ /** Browser-only composer state, retained independently for each live session. */
65
+ export declare const composerStore: Store<Partial<Record<string, ComposerSessionState>>, never>;
66
+ export declare function useComposerState(sessionId: string | null): ComposerSessionState;
67
+ export declare function updateComposerState(sessionId: string | null, update: (state: ComposerSessionState) => ComposerSessionState): void;
68
+ /** Appends non-empty text to the latest draft for one session. */
69
+ export declare function appendComposerDraft(sessionId: string | null, text: string): void;
70
+ /** The open tab's context for one message. Slash commands, invalid items and failing reads send without it. */
71
+ export declare function tabComposerContext(read: TransientTab['composerContext'], sessionId: string, draft: string): WebPluginContextItem | undefined;
72
+ /** Adds structured plugin context without changing the visible composer draft. */
73
+ export declare function attachComposerContext(sessionId: string | null, item: WebPluginContextItem): void;
74
+ /** Validates a standalone capture without reading or changing the composer. */
75
+ export declare function validateComposerCapture(capture: ComposerCapture): void;
76
+ /**
77
+ * Stages a capture as one image and one context chip in a single store update.
78
+ * Nothing is transported until the reader explicitly submits or queues it.
79
+ */
80
+ export declare function attachComposerCapture(sessionId: string | null, capture: ComposerCapture): void;
81
+ /** Adds message text as a Markdown blockquote and leaves the caret ready for an instruction. */
82
+ export declare function appendComposerQuote(sessionId: string | null, text: string): number | null;
83
+ /** Empties the composer but keeps the id counter and pending batches, so a batch still uploading lands with a fresh id. */
84
+ export declare function clearComposerState(sessionId: string | null): void;
85
+ /** A session that left takes its unfinished composer state with it. */
86
+ export declare function dropComposerState(sessionId: string): void;
87
+ /**
88
+ * Holds unsent text across a reload the person did not ask for.
89
+ *
90
+ * A verified bundle update reloads the page underneath whoever is typing, so
91
+ * the text has to outlive the document. Only the draft and the caret travel:
92
+ * attachments carry base64 image payloads that would not fit a storage quota,
93
+ * and re-attaching a file is a smaller loss than losing a written message.
94
+ */
95
+ export declare function saveComposerDrafts(): void;
96
+ /** Seeds the store from the last save, then forgets it so a later reload starts clean. */
97
+ export declare function restoreComposerDrafts(): void;
98
+ /** Test seam. */
99
+ export declare function resetComposerStore(): void;
100
+ //#endregion
101
+ //# sourceMappingURL=composerStore.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composerStore.d.mts","names":[],"sources":["../../../src/web/stores/composerStore.ts"],"mappings":";;;iBAIiB;EACf;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;iBAGe;EACf;EACA;EACA;EACA;EACA;;EAEA;;;iBAIe;EACf;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;YAGU,qBACR,4BACA,yBACA,0BACA;qBAES;qBACA;qBACA;qBACA;qBACA;;qBAEA;;wBAGG,gBAAgB,aAAa;iBAO5B;EACf;EACA;EACA;EACA,aAAa;EACb;EACA;;EAEA;;;qBAgBW,eAAa,MAAA,QAAA,eAAA;wBAMV,iBAAiB,2BAA2B;wBAI5C,oBACd,0BACA,SAAS,OAAO,yBAAyB;;wBAO3B,oBAAoB,0BAA0B;;wBAyB9C,mBACd,MAAM,iCACN,mBACA,gBACC;;wBA0Ga,sBAAsB,0BAA0B,MAAM;;wBAyCtD,wBAAwB,SAAS;;;;;wBAuBjC,sBAAsB,0BAA0B,SAAS;;wBAyEzD,oBAAoB,0BAA0B;;wBAmB9C,mBAAmB;;wBAUnB,kBAAkB;;;;;;;;;wBAwBlB;;wBAcA;;wBAqBA"}