@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,568 @@
1
+ import { abortCommand, builtinCommandFrame, clearQueueCommand, dialogCancelled, dialogConfirmed, dialogValue, enqueueAutomaticCommand, getAvailableModelsCommand, getAvailableThinkingLevelsCommand, getCommandsCommand, getSessionStatsCommand, getStateCommand, promoteQueuedCommand, promptCommand, removeQueuedCommand, resumeQueueCommand, rewindCommand, setModelCommand, setSessionNameCommand, setThinkingLevelCommand, steerCommand } from "../lib/commands.mjs";
2
+ import { HISTORY_REQUEST_TYPE } from "../../types/hub.mjs";
3
+ import { sendFrame, sendFrameWithAck, sendHubFrame } from "../lib/transport.mjs";
4
+ import { appendUserPrompt, clearDialog, initialSessionState, isSupportedImageMimeType, prependHistory, reduceSession, replaceQueuedEntries } from "../lib/sessionModel.mjs";
5
+ import { activeSessionId, sessionsStore } from "./sessionsStore.mjs";
6
+ import { Store } from "@tanstack/store";
7
+ import { useStore } from "@tanstack/react-store";
8
+ //#region src/web/stores/sessionStore.ts
9
+ /**
10
+ * One store per session, created on first touch.
11
+ *
12
+ * The heavyweight timeline state only exists for sessions this page has
13
+ * subscribed to; the rail runs on hub summaries alone.
14
+ */
15
+ const stores = /* @__PURE__ */ new Map();
16
+ const MAX_CACHED_ENTRIES = 500;
17
+ function setHasNewerHistory(sessionId, value) {
18
+ sessionStoreFor(sessionId).setState((state) => state.hasNewerHistory === value ? state : {
19
+ ...state,
20
+ hasNewerHistory: value
21
+ });
22
+ }
23
+ /** Sessions whose visible transcript is currently supplied by Pi's protocol. */
24
+ const protocolTranscripts = /* @__PURE__ */ new Set();
25
+ /** Projection keys changed after a subscription snapshot was requested. */
26
+ const replayGuards = /* @__PURE__ */ new Map();
27
+ const PROTOCOL_ENTRY_KINDS = /* @__PURE__ */ new Set([
28
+ "user",
29
+ "assistant",
30
+ "tool"
31
+ ]);
32
+ /** Read-only stand-in while no session is focused, so hooks stay unconditional. */
33
+ const detachedStore = new Store(initialSessionState);
34
+ function isRecord(value) {
35
+ return typeof value === "object" && value !== null && !Array.isArray(value);
36
+ }
37
+ function sessionStoreFor(sessionId) {
38
+ if (sessionId === null) return detachedStore;
39
+ const existing = stores.get(sessionId);
40
+ if (existing) return existing;
41
+ const created = new Store(initialSessionState);
42
+ stores.set(sessionId, created);
43
+ return created;
44
+ }
45
+ /** Reads the focused session's state; components stay on the useStore idiom. */
46
+ function useActiveSession(selector) {
47
+ const activeId = useStore(sessionsStore, (state) => state.activeId);
48
+ return useStore(sessionStoreFor(activeId), selector);
49
+ }
50
+ function projectionKey(frame) {
51
+ const projected = frame.type === "replay" && isRecord(frame.frame) ? frame.frame : frame;
52
+ if (projected.type !== "extension_ui_request") return void 0;
53
+ if (typeof projected.statusKey === "string" && projected.method === "setStatus") return {
54
+ kind: "status",
55
+ key: projected.statusKey
56
+ };
57
+ if (typeof projected.widgetKey === "string" && projected.method === "setWidget") return {
58
+ kind: "widget",
59
+ key: projected.widgetKey
60
+ };
61
+ }
62
+ /** Presentation frames from the Pi protocol, or from bounded replay when replay is true. */
63
+ function applySessionFrame(sessionId, frame, options = {}) {
64
+ const projection = projectionKey(frame);
65
+ const guard = replayGuards.get(sessionId);
66
+ if (projection !== void 0 && guard !== void 0) {
67
+ const keys = projection.kind === "status" ? guard.statuses : guard.widgets;
68
+ if (options.replay && keys.has(projection.key)) return;
69
+ if (!options.replay) keys.add(projection.key);
70
+ }
71
+ const transcriptFromProtocol = protocolTranscripts.has(sessionId) || options.source === "hub" && hasReadyHistoryReader(sessionId);
72
+ sessionStoreFor(sessionId).setState((state) => {
73
+ const next = reduceSession(state, frame, { transcriptFromProtocol });
74
+ if (!historyReaders.has(sessionId)) return next;
75
+ return {
76
+ ...next,
77
+ entries: next.entries.length > MAX_CACHED_ENTRIES ? next.entries.slice(-500) : next.entries,
78
+ restoredIds: next.restoredIds.length > MAX_CACHED_ENTRIES ? next.restoredIds.slice(-500) : next.restoredIds
79
+ };
80
+ });
81
+ }
82
+ /** Lets the presentation stream resume transcript ownership after a typed service failure. */
83
+ function releaseProtocolTranscript(sessionId) {
84
+ protocolTranscripts.delete(sessionId);
85
+ }
86
+ /** A thread has no protocol session, so its journal remains its authoritative transcript. */
87
+ function applyThreadFrame(threadKey, frame) {
88
+ sessionStoreFor(threadKey).setState((state) => reduceSession(state, frame));
89
+ }
90
+ const history = /* @__PURE__ */ new Map();
91
+ const historyReaders = /* @__PURE__ */ new Map();
92
+ function hasReadyHistoryReader(sessionId) {
93
+ return historyReaders.get(sessionId)?.ready() === true;
94
+ }
95
+ function bindHistoryReader(sessionId, reader, ready = () => false) {
96
+ const binding = {
97
+ read: reader,
98
+ ready
99
+ };
100
+ historyReaders.set(sessionId, binding);
101
+ return () => {
102
+ if (historyReaders.get(sessionId) === binding) historyReaders.delete(sessionId);
103
+ };
104
+ }
105
+ function requestNewerHistory(sessionId) {
106
+ return sessionId !== null && (historyReaders.get(sessionId)?.read("newer") ?? false);
107
+ }
108
+ function requestLatestHistory(sessionId) {
109
+ return sessionId !== null && (historyReaders.get(sessionId)?.read("latest") ?? false);
110
+ }
111
+ const historyStore = new Store({});
112
+ const NO_HISTORY = {
113
+ cursor: null,
114
+ hasMore: true,
115
+ loading: false,
116
+ pages: 0
117
+ };
118
+ function historyFor(sessionId) {
119
+ return history.get(sessionId) ?? NO_HISTORY;
120
+ }
121
+ function setHistory(sessionId, next) {
122
+ history.set(sessionId, next);
123
+ historyStore.setState((state) => ({
124
+ ...state,
125
+ [sessionId]: next
126
+ }));
127
+ }
128
+ /** Whether more transcript exists above what this session's page holds. */
129
+ function useHasOlderHistory(sessionId) {
130
+ return useStore(historyStore, (state) => sessionId === null ? false : (state[sessionId] ?? NO_HISTORY).hasMore);
131
+ }
132
+ /**
133
+ * Asks the hub for the window above what this page holds.
134
+ *
135
+ * One request at a time: a reader flicking upwards would otherwise ask for the
136
+ * same window repeatedly before the first answer lands, and every copy would
137
+ * be prepended.
138
+ */
139
+ function requestOlderHistory(sessionId) {
140
+ if (sessionId === null) return false;
141
+ const reader = historyReaders.get(sessionId);
142
+ if (reader) return reader.read("older");
143
+ const current = historyFor(sessionId);
144
+ if (current.loading || !current.hasMore) return false;
145
+ setHistory(sessionId, {
146
+ ...current,
147
+ loading: true
148
+ });
149
+ sendHubFrame({
150
+ type: HISTORY_REQUEST_TYPE,
151
+ sessionId,
152
+ ...current.cursor === null ? {} : { before: current.cursor }
153
+ });
154
+ return true;
155
+ }
156
+ /** Folds one answered window above the timeline and records how far back it reached. */
157
+ function applyHistoryPage(sessionId, frames, next) {
158
+ const pages = historyFor(sessionId).pages + 1;
159
+ sessionStoreFor(sessionId).setState((state) => prependHistory(state, frames, pages));
160
+ setHistory(sessionId, {
161
+ cursor: next.cursor,
162
+ hasMore: next.hasMore,
163
+ loading: false,
164
+ pages
165
+ });
166
+ }
167
+ /** The oldest entry the page holds, which is where the next window ends. */
168
+ function seedHistoryCursor(sessionId, cursor) {
169
+ setHistory(sessionId, {
170
+ ...NO_HISTORY,
171
+ cursor
172
+ });
173
+ }
174
+ /** Keeps Po-only and optimistic entries beside the protocol items that preceded them. */
175
+ function mergeProtocolEntries(previous, protocol, pendingUserIds, reconciledUserIds) {
176
+ const localByAnchor = /* @__PURE__ */ new Map();
177
+ let anchor = null;
178
+ for (const entry of previous) {
179
+ if ((PROTOCOL_ENTRY_KINDS.has(entry.kind) || reconciledUserIds.has(entry.id)) && !pendingUserIds.has(entry.id)) {
180
+ anchor = entry.id;
181
+ continue;
182
+ }
183
+ const local = localByAnchor.get(anchor) ?? [];
184
+ local.push(entry);
185
+ localByAnchor.set(anchor, local);
186
+ }
187
+ const merged = [...localByAnchor.get(null) ?? []];
188
+ const used = /* @__PURE__ */ new Set([null]);
189
+ for (const entry of protocol) {
190
+ merged.push(entry, ...localByAnchor.get(entry.id) ?? []);
191
+ used.add(entry.id);
192
+ }
193
+ for (const [entryAnchor, local] of localByAnchor) if (!used.has(entryAnchor)) merged.push(...local);
194
+ return merged;
195
+ }
196
+ /**
197
+ * Replaces protocol-owned transcript items with the authoritative snapshot.
198
+ *
199
+ * Local echoes disappear when the protocol publishes them. Po-only entries,
200
+ * such as notices, queued messages, and run dividers, retain their place beside
201
+ * the protocol item that preceded them.
202
+ */
203
+ function applyProtocolTranscript(sessionId, entries, streaming) {
204
+ protocolTranscripts.add(sessionId);
205
+ sessionStoreFor(sessionId).setState((state) => {
206
+ const pendingUserEntries = [...state.pendingUserEntries];
207
+ const pendingUserIdsBeforeReconciliation = new Set(pendingUserEntries.map((pending) => pending.id));
208
+ const knownProtocolIds = new Set(state.entries.filter((entry) => PROTOCOL_ENTRY_KINDS.has(entry.kind) && !pendingUserIdsBeforeReconciliation.has(entry.id)).map((entry) => entry.id));
209
+ const protocolUserEntryIds = { ...state.protocolUserEntryIds };
210
+ const normalizedEntries = [...entries];
211
+ const reconciledUserEntries = [...state.reconciledUserEntries];
212
+ for (let index = entries.length - 1; index >= 0; index -= 1) {
213
+ const entry = entries[index];
214
+ if (entry?.kind !== "user") continue;
215
+ const localId = protocolUserEntryIds[entry.id];
216
+ if (localId !== void 0) {
217
+ normalizedEntries[index] = {
218
+ ...entry,
219
+ id: localId
220
+ };
221
+ continue;
222
+ }
223
+ if (knownProtocolIds.has(entry.id)) continue;
224
+ const pendingIndex = pendingUserEntries.findLastIndex((pending) => pending.text === entry.text);
225
+ if (pendingIndex === -1) continue;
226
+ const [pending] = pendingUserEntries.splice(pendingIndex, 1);
227
+ if (pending === void 0) continue;
228
+ protocolUserEntryIds[entry.id] = pending.id;
229
+ reconciledUserEntries.push(pending);
230
+ normalizedEntries[index] = {
231
+ ...entry,
232
+ id: pending.id
233
+ };
234
+ }
235
+ const pendingUserIds = new Set(pendingUserEntries.map((pending) => pending.id));
236
+ const reconciledUserIds = new Set(Object.values(protocolUserEntryIds));
237
+ return {
238
+ ...state,
239
+ entries: mergeProtocolEntries(state.entries, normalizedEntries, pendingUserIds, reconciledUserIds),
240
+ streaming: state.lifecycle === null ? streaming : state.lifecycle.operation !== null,
241
+ settled: state.lifecycle === null ? !streaming : state.lifecycle.operation === null,
242
+ pendingUserEntries,
243
+ reconciledUserEntries,
244
+ protocolUserEntryIds
245
+ };
246
+ });
247
+ }
248
+ function protocolQueueMatches(state, queue) {
249
+ const current = state.entries.filter((entry) => entry.kind === "queued");
250
+ return current.length === queue.length && current.every((entry, index) => {
251
+ const next = queue[index];
252
+ if (next === void 0 || entry.id !== next.id || entry.text !== next.text || entry.delivery !== next.delivery || entry.scheduling !== next.scheduling || entry.disposition !== next.disposition) return false;
253
+ const images = entry.images ?? [];
254
+ const nextImages = next.images ?? [];
255
+ return images.length === nextImages.length && images.every((image, imageIndex) => {
256
+ const nextImage = nextImages[imageIndex];
257
+ return nextImage !== void 0 && image.data === nextImage.data && image.mimeType === nextImage.mimeType;
258
+ });
259
+ });
260
+ }
261
+ /** Applies execution and retained-input state from the server, never from replayed history. */
262
+ function applySessionLifecycle(sessionId, lifecycle, newBinding = false) {
263
+ sessionStoreFor(sessionId).setState((state) => {
264
+ const current = state.lifecycle;
265
+ if (!newBinding && current !== null && lifecycle.revision < current.revision) return state;
266
+ const queue = lifecycle.queue.map(({ id, text, images, delivery, scheduling, disposition }) => ({
267
+ kind: "queued",
268
+ id,
269
+ text,
270
+ delivery,
271
+ scheduling,
272
+ disposition,
273
+ ...images === void 0 ? {} : { images: images.map(({ data, mimeType }) => ({
274
+ data,
275
+ mimeType
276
+ })) }
277
+ }));
278
+ const streaming = lifecycle.operation !== null;
279
+ return {
280
+ ...protocolQueueMatches(state, queue) ? state : replaceQueuedEntries(state, queue),
281
+ lifecycle,
282
+ streaming,
283
+ settled: !streaming,
284
+ ...state.agent === null ? {} : { agent: {
285
+ ...state.agent,
286
+ isStreaming: streaming
287
+ } }
288
+ };
289
+ });
290
+ }
291
+ /** Replaces composer queue rows with the protocol server's authoritative queue. */
292
+ function applyProtocolQueue(sessionId, queue) {
293
+ sessionStoreFor(sessionId).setState((state) => protocolQueueMatches(state, queue) ? state : replaceQueuedEntries(state, queue));
294
+ }
295
+ /** Marks the start of a subscription replay, so live projections beat an older snapshot. */
296
+ function beginSessionReplay(sessionId) {
297
+ replayGuards.set(sessionId, {
298
+ statuses: /* @__PURE__ */ new Set(),
299
+ widgets: /* @__PURE__ */ new Set()
300
+ });
301
+ }
302
+ function endSessionReplay(sessionId) {
303
+ replayGuards.delete(sessionId);
304
+ }
305
+ function resetSessionStore(sessionId, options = {}) {
306
+ const guard = replayGuards.get(sessionId);
307
+ const preservePages = options.source === "hub" && hasReadyHistoryReader(sessionId);
308
+ sessionStoreFor(sessionId).setState((state) => {
309
+ const reset = {
310
+ ...initialSessionState,
311
+ agent: state.agent,
312
+ lifecycle: state.lifecycle,
313
+ stats: state.stats,
314
+ commands: state.commands,
315
+ models: state.models,
316
+ thinkingLevels: state.thinkingLevels
317
+ };
318
+ const preservedStatuses = guard === void 0 ? {} : Object.fromEntries(Object.entries(state.statuses).filter(([key]) => guard.statuses.has(key)));
319
+ const preservedWidgets = guard === void 0 ? [] : state.widgets.filter((key) => guard.widgets.has(key));
320
+ if (preservePages) return {
321
+ ...state,
322
+ statuses: preservedStatuses,
323
+ widgets: preservedWidgets
324
+ };
325
+ if (!protocolTranscripts.has(sessionId)) return {
326
+ ...reset,
327
+ statuses: preservedStatuses,
328
+ widgets: preservedWidgets
329
+ };
330
+ const entries = state.entries.filter((entry) => PROTOCOL_ENTRY_KINDS.has(entry.kind));
331
+ return {
332
+ ...reset,
333
+ entries,
334
+ statuses: preservedStatuses,
335
+ widgets: preservedWidgets,
336
+ streaming: state.streaming,
337
+ settled: state.settled,
338
+ pendingUserEntries: state.pendingUserEntries,
339
+ reconciledUserEntries: state.reconciledUserEntries,
340
+ protocolUserEntryIds: state.protocolUserEntryIds
341
+ };
342
+ });
343
+ if (preservePages) return;
344
+ history.delete(sessionId);
345
+ historyStore.setState((state) => {
346
+ const { [sessionId]: _dropped, ...rest } = state;
347
+ return rest;
348
+ });
349
+ }
350
+ function dropSessionStore(sessionId) {
351
+ stores.delete(sessionId);
352
+ protocolTranscripts.delete(sessionId);
353
+ replayGuards.delete(sessionId);
354
+ }
355
+ function resetSessionStores() {
356
+ stores.clear();
357
+ protocolTranscripts.clear();
358
+ replayGuards.clear();
359
+ detachedStore.setState(() => initialSessionState);
360
+ }
361
+ /** Asks for the facts the cockpit shows but Pi only reports on request. */
362
+ function refreshSessionFacts(sessionId) {
363
+ sendFrame(sessionId, getStateCommand());
364
+ sendFrame(sessionId, getSessionStatsCommand());
365
+ sendFrame(sessionId, getCommandsCommand());
366
+ }
367
+ /**
368
+ * Asks only for the usage figures, cheap enough to run once per message.
369
+ *
370
+ * `refreshSessionFacts` costs three round trips because it also re-reads the
371
+ * state and the command list, and neither of those changes mid-turn.
372
+ */
373
+ function refreshSessionStats(sessionId) {
374
+ sendFrame(sessionId, getSessionStatsCommand());
375
+ }
376
+ /** Asks what the model picker lists; Pi's answer depends on the current model. */
377
+ function loadModelChoices(sessionId = activeSessionId()) {
378
+ if (sessionId === null) return;
379
+ sendFrame(sessionId, getAvailableModelsCommand());
380
+ sendFrame(sessionId, getAvailableThinkingLevelsCommand());
381
+ }
382
+ /**
383
+ * Switches the model, then re-reads the facts Pi adjusts alongside it: the
384
+ * thinking level gets clamped to what the new model accepts, and the level
385
+ * list changes with it.
386
+ */
387
+ function selectModel(provider, modelId, sessionId = activeSessionId()) {
388
+ if (sessionId === null) return;
389
+ sendFrame(sessionId, setModelCommand(provider, modelId));
390
+ sendFrame(sessionId, getStateCommand());
391
+ sendFrame(sessionId, getAvailableThinkingLevelsCommand());
392
+ }
393
+ /** Read back server state rather than optimistically enabling priority. */
394
+ function selectFastMode(enabled, sessionId = activeSessionId()) {
395
+ if (sessionId === null) return;
396
+ if (sessionStoreFor(sessionId).state.agent?.provider !== "openai-codex") return;
397
+ sendFrame(sessionId, {
398
+ type: "set_fast_mode",
399
+ enabled
400
+ });
401
+ sendFrame(sessionId, getStateCommand());
402
+ }
403
+ /** Locking aborts a running local turn; the snapshot reports the new state back. */
404
+ function setAgentLock(locked, sessionId = activeSessionId()) {
405
+ if (sessionId === null) return;
406
+ sendFrame(sessionId, {
407
+ type: "set_agent_lock",
408
+ locked
409
+ });
410
+ sendFrame(sessionId, getStateCommand());
411
+ }
412
+ /** The set reply carries nothing back, so get_state is what updates the chip. */
413
+ function selectThinkingLevel(level, sessionId = activeSessionId()) {
414
+ if (sessionId === null) return;
415
+ sendFrame(sessionId, setThinkingLevelCommand(level));
416
+ sendFrame(sessionId, getStateCommand());
417
+ }
418
+ /**
419
+ * Sends a prompt, or steers the run when one is already in flight.
420
+ *
421
+ * Pi rejects a prompt while the agent is working, so the composer picks the
422
+ * verb from the run state rather than making the reader remember which is
423
+ * legal. Every action defaults to the focused session and is a no-op when
424
+ * nothing is focused.
425
+ */
426
+ function submitMessage(text, images = [], sessionId = activeSessionId()) {
427
+ const trimmed = text.trim();
428
+ if (!trimmed || sessionId === null) return;
429
+ const store = sessionStoreFor(sessionId);
430
+ const builtin = builtinCommandFrame(trimmed);
431
+ if (builtin) {
432
+ store.setState((state) => appendUserPrompt(state, trimmed));
433
+ sendFrame(sessionId, builtin);
434
+ return;
435
+ }
436
+ const streaming = store.state.streaming;
437
+ const userImages = images.filter((image) => isSupportedImageMimeType(image.mimeType)).map(({ data, mimeType }) => ({
438
+ data,
439
+ mimeType
440
+ }));
441
+ store.setState((state) => appendUserPrompt(state, trimmed, userImages));
442
+ sendFrame(sessionId, streaming ? steerCommand(trimmed, images) : promptCommand(trimmed, images));
443
+ }
444
+ /** The composer retains its draft until the server acknowledges admission. */
445
+ async function submitMessageWithAck(text, images = [], sessionId = activeSessionId()) {
446
+ const trimmed = text.trim();
447
+ if (!trimmed || sessionId === null) return false;
448
+ const store = sessionStoreFor(sessionId);
449
+ const builtin = builtinCommandFrame(trimmed);
450
+ const active = store.state.lifecycle === null ? store.state.streaming : store.state.lifecycle.operation !== null;
451
+ const userImages = (builtin ? [] : images).filter((image) => isSupportedImageMimeType(image.mimeType)).map(({ data, mimeType }) => ({
452
+ data,
453
+ mimeType
454
+ }));
455
+ const localId = `u${store.state.nextId}`;
456
+ store.setState((state) => appendUserPrompt(state, trimmed, userImages));
457
+ let accepted = false;
458
+ try {
459
+ const response = await sendFrameWithAck(sessionId, builtin ?? (active ? steerCommand(trimmed, images) : promptCommand(trimmed, images)));
460
+ accepted = response.success;
461
+ if (!accepted && response.error?.includes("uncertain")) store.setState((state) => reduceSession(state, {
462
+ type: "error",
463
+ message: response.error
464
+ }));
465
+ return accepted;
466
+ } finally {
467
+ if (!accepted) store.setState((state) => state.pendingUserEntries.some(({ id }) => id === localId) ? {
468
+ ...state,
469
+ entries: state.entries.filter(({ id }) => id !== localId),
470
+ pendingUserEntries: state.pendingUserEntries.filter(({ id }) => id !== localId)
471
+ } : state);
472
+ }
473
+ }
474
+ function rewindToMessage(itemId, sessionId = activeSessionId()) {
475
+ if (sessionId === null || itemId === "") return;
476
+ sendFrame(sessionId, rewindCommand(itemId));
477
+ }
478
+ function queueFollowUp(text, images = [], sessionId = activeSessionId()) {
479
+ const trimmed = text.trim();
480
+ if (!trimmed || sessionId === null) return;
481
+ sendFrame(sessionId, enqueueAutomaticCommand(trimmed, images));
482
+ }
483
+ /** A queued submission is acknowledged by the server; consumption is a later lifecycle event. */
484
+ async function queueFollowUpWithAck(text, images = [], sessionId = activeSessionId()) {
485
+ const trimmed = text.trim();
486
+ if (!trimmed || sessionId === null) return false;
487
+ const response = await sendFrameWithAck(sessionId, enqueueAutomaticCommand(trimmed, images));
488
+ if (!response.success && response.error?.includes("uncertain")) sessionStoreFor(sessionId).setState((state) => reduceSession(state, {
489
+ type: "error",
490
+ message: response.error
491
+ }));
492
+ return response.success;
493
+ }
494
+ async function clearQueuedMessages(sessionId = activeSessionId()) {
495
+ if (sessionId === null) throw new Error("The session protocol is not connected.");
496
+ const response = await sendFrameWithAck(sessionId, clearQueueCommand());
497
+ if (!response.success) throw new Error(response.error ?? "Could not clear queued messages.");
498
+ }
499
+ /** Requests server-owned removal; the authoritative snapshot removes the row on success. */
500
+ async function deleteQueuedMessage(id, _knownQueueCount, sessionId = activeSessionId()) {
501
+ if (sessionId === null) throw new Error("The session protocol is not connected.");
502
+ const response = await sendFrameWithAck(sessionId, removeQueuedCommand(id));
503
+ if (!response.success) throw new Error(response.error ?? "Could not delete the queued message.");
504
+ switch (response.data) {
505
+ case "removed": return;
506
+ case "in_flight": throw new Error("This message is already being delivered and cannot be deleted.");
507
+ case "already_consumed": throw new Error("This message has already been sent.");
508
+ case "not_found": throw new Error("This message is no longer queued. Refresh the session.");
509
+ default: throw new Error("Deletion uncertain. Check the queue before trying again.");
510
+ }
511
+ }
512
+ /** The caller captures the active target at click time; absent means expected idle. */
513
+ async function promoteQueuedMessage(id, operationId, sessionId = activeSessionId()) {
514
+ if (sessionId === null) throw new Error("The session protocol is not connected.");
515
+ const response = await sendFrameWithAck(sessionId, promoteQueuedCommand(id, operationId));
516
+ if (!response.success) throw new Error(response.error ?? "Could not send the queued message.");
517
+ switch (response.data) {
518
+ case "promoted": return;
519
+ case "target_changed": throw new Error("The active run changed. Check the session before sending this message.");
520
+ case "in_flight": throw new Error("This message is already being delivered.");
521
+ case "not_found": throw new Error("This message is no longer queued. Refresh the session.");
522
+ default: throw new Error("Delivery uncertain. Check the conversation before trying again.");
523
+ }
524
+ }
525
+ async function resumeQueuedMessages(sessionId = activeSessionId()) {
526
+ if (sessionId === null) throw new Error("The session protocol is not connected.");
527
+ const response = await sendFrameWithAck(sessionId, resumeQueueCommand());
528
+ if (!response.success) throw new Error(response.error ?? "Could not resume queued messages.");
529
+ }
530
+ /**
531
+ * Renames the session where the name actually lives: in the agent. Pi keeps
532
+ * it in the session file and reports it back through get_state, which is
533
+ * what the hub folds into every page's rail card.
534
+ */
535
+ function renameSession(name, sessionId = activeSessionId()) {
536
+ const trimmed = name.trim();
537
+ if (!trimmed || sessionId === null) return;
538
+ sendFrame(sessionId, setSessionNameCommand(trimmed));
539
+ sendFrame(sessionId, getStateCommand());
540
+ }
541
+ function abortRun(sessionId = activeSessionId()) {
542
+ if (sessionId === null) return;
543
+ sendFrame(sessionId, abortCommand(sessionStoreFor(sessionId).state.lifecycle?.operation?.id));
544
+ }
545
+ function runCommand(name, sessionId = activeSessionId()) {
546
+ if (sessionId === null) return;
547
+ const slashed = name.startsWith("/") ? name : `/${name}`;
548
+ sendFrame(sessionId, builtinCommandFrame(slashed) ?? promptCommand(slashed));
549
+ }
550
+ function answerDialogValue(id, value, sessionId = activeSessionId()) {
551
+ if (sessionId === null) return;
552
+ sendFrame(sessionId, dialogValue(id, value));
553
+ sessionStoreFor(sessionId).setState(clearDialog);
554
+ }
555
+ function answerDialogConfirm(id, confirmed, sessionId = activeSessionId()) {
556
+ if (sessionId === null) return;
557
+ sendFrame(sessionId, dialogConfirmed(id, confirmed));
558
+ sessionStoreFor(sessionId).setState(clearDialog);
559
+ }
560
+ function cancelDialog(id, sessionId = activeSessionId()) {
561
+ if (sessionId === null) return;
562
+ sendFrame(sessionId, dialogCancelled(id));
563
+ sessionStoreFor(sessionId).setState(clearDialog);
564
+ }
565
+ //#endregion
566
+ export { abortRun, answerDialogConfirm, answerDialogValue, applyHistoryPage, applyProtocolQueue, applyProtocolTranscript, applySessionFrame, applySessionLifecycle, applyThreadFrame, beginSessionReplay, bindHistoryReader, cancelDialog, clearQueuedMessages, deleteQueuedMessage, dropSessionStore, endSessionReplay, loadModelChoices, promoteQueuedMessage, queueFollowUp, queueFollowUpWithAck, refreshSessionFacts, refreshSessionStats, releaseProtocolTranscript, renameSession, requestLatestHistory, requestNewerHistory, requestOlderHistory, resetSessionStore, resetSessionStores, resumeQueuedMessages, rewindToMessage, runCommand, seedHistoryCursor, selectFastMode, selectModel, selectThinkingLevel, sessionStoreFor, setAgentLock, setHasNewerHistory, submitMessage, submitMessageWithAck, useActiveSession, useHasOlderHistory };
567
+
568
+ //# sourceMappingURL=sessionStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionStore.mjs","names":[],"sources":["../../../src/web/stores/sessionStore.ts"],"sourcesContent":["import type { SessionLifecycle } from '@agimon-ai/po-core/sessionProtocol';\nimport { useStore } from '@tanstack/react-store';\nimport { Store } from '@tanstack/store';\n\nimport { HISTORY_REQUEST_TYPE } from '../../types/hub';\nimport {\n abortCommand,\n builtinCommandFrame,\n clearQueueCommand,\n dialogCancelled,\n dialogConfirmed,\n dialogValue,\n enqueueAutomaticCommand,\n promoteQueuedCommand,\n removeQueuedCommand,\n resumeQueueCommand,\n getAvailableModelsCommand,\n getAvailableThinkingLevelsCommand,\n getCommandsCommand,\n getSessionStatsCommand,\n getStateCommand,\n promptCommand,\n type RpcImage,\n rewindCommand,\n setModelCommand,\n setSessionNameCommand,\n setThinkingLevelCommand,\n steerCommand,\n} from '../lib/commands';\nimport {\n appendUserPrompt,\n clearDialog,\n isSupportedImageMimeType,\n initialSessionState,\n prependHistory,\n reduceSession,\n replaceQueuedEntries,\n type QueuedEntry,\n type SessionState,\n type TimelineEntry,\n} from '../lib/sessionModel';\nimport { sendFrame, sendFrameWithAck, sendHubFrame } from '../lib/transport';\nimport { activeSessionId, sessionsStore } from './sessionsStore';\n\n/**\n * One store per session, created on first touch.\n *\n * The heavyweight timeline state only exists for sessions this page has\n * subscribed to; the rail runs on hub summaries alone.\n */\nconst stores = new Map<string, Store<SessionState>>();\nconst MAX_CACHED_ENTRIES = 500;\n\nexport function setHasNewerHistory(sessionId: string, value: boolean): void {\n sessionStoreFor(sessionId).setState((state) =>\n state.hasNewerHistory === value ? state : { ...state, hasNewerHistory: value },\n );\n}\n/** Sessions whose visible transcript is currently supplied by Pi's protocol. */\nconst protocolTranscripts = new Set<string>();\n/** Projection keys changed after a subscription snapshot was requested. */\nconst replayGuards = new Map<string, { statuses: Set<string>; widgets: Set<string> }>();\nconst PROTOCOL_ENTRY_KINDS = new Set<TimelineEntry['kind']>(['user', 'assistant', 'tool']);\n/** Read-only stand-in while no session is focused, so hooks stay unconditional. */\nconst detachedStore = new Store<SessionState>(initialSessionState);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function sessionStoreFor(sessionId: string | null): Store<SessionState> {\n if (sessionId === null) return detachedStore;\n const existing = stores.get(sessionId);\n if (existing) return existing;\n const created = new Store<SessionState>(initialSessionState);\n stores.set(sessionId, created);\n return created;\n}\n\n/** Reads the focused session's state; components stay on the useStore idiom. */\nexport function useActiveSession<T>(selector: (state: SessionState) => T): T {\n const activeId = useStore(sessionsStore, (state) => state.activeId);\n return useStore(sessionStoreFor(activeId), selector);\n}\n\nfunction projectionKey(frame: Record<string, unknown>): { kind: 'status' | 'widget'; key: string } | undefined {\n const projected = frame.type === 'replay' && isRecord(frame.frame) ? frame.frame : frame;\n if (projected.type !== 'extension_ui_request') return undefined;\n if (typeof projected.statusKey === 'string' && projected.method === 'setStatus') {\n return { kind: 'status', key: projected.statusKey };\n }\n if (typeof projected.widgetKey === 'string' && projected.method === 'setWidget') {\n return { kind: 'widget', key: projected.widgetKey };\n }\n return undefined;\n}\n\n/** Presentation frames from the Pi protocol, or from bounded replay when replay is true. */\nexport function applySessionFrame(\n sessionId: string,\n frame: Record<string, unknown>,\n options: { replay?: boolean; source?: 'hub' } = {},\n): void {\n const projection = projectionKey(frame);\n const guard = replayGuards.get(sessionId);\n if (projection !== undefined && guard !== undefined) {\n const keys = projection.kind === 'status' ? guard.statuses : guard.widgets;\n if (options.replay && keys.has(projection.key)) return;\n if (!options.replay) keys.add(projection.key);\n }\n // The presentation stream owns live and replay projection until the typed session\n // service publishes a snapshot. Once it does, only Po-specific frames reduce here.\n const transcriptFromProtocol =\n protocolTranscripts.has(sessionId) || (options.source === 'hub' && hasReadyHistoryReader(sessionId));\n sessionStoreFor(sessionId).setState((state) => {\n const next = reduceSession(state, frame, { transcriptFromProtocol });\n if (!historyReaders.has(sessionId)) return next;\n return {\n ...next,\n entries: next.entries.length > MAX_CACHED_ENTRIES ? next.entries.slice(-MAX_CACHED_ENTRIES) : next.entries,\n restoredIds:\n next.restoredIds.length > MAX_CACHED_ENTRIES ? next.restoredIds.slice(-MAX_CACHED_ENTRIES) : next.restoredIds,\n };\n });\n}\n\n/** Lets the presentation stream resume transcript ownership after a typed service failure. */\nexport function releaseProtocolTranscript(sessionId: string): void {\n protocolTranscripts.delete(sessionId);\n}\n\n/** A thread has no protocol session, so its journal remains its authoritative transcript. */\nexport function applyThreadFrame(threadKey: string, frame: Record<string, unknown>): void {\n sessionStoreFor(threadKey).setState((state) => reduceSession(state, frame));\n}\n\n/**\n * One session's paging state: how far back the page has read, and whether a\n * request is already in flight. Kept beside the timeline rather than inside it\n * because it describes the reading, not the session.\n */\ninterface HistoryState {\n cursor: string | null;\n hasMore: boolean;\n loading: boolean;\n /** Pages taken so far; also what keeps prepended entry ids unique. */\n pages: number;\n}\n\nconst history = new Map<string, HistoryState>();\nconst historyReaders = new Map<\n string,\n {\n read: (direction: 'older' | 'newer' | 'latest') => boolean;\n ready: () => boolean;\n }\n>();\n\nfunction hasReadyHistoryReader(sessionId: string): boolean {\n return historyReaders.get(sessionId)?.ready() === true;\n}\n\nexport function bindHistoryReader(\n sessionId: string,\n reader: (direction: 'older' | 'newer' | 'latest') => boolean,\n ready: () => boolean = () => false,\n): () => void {\n const binding = { read: reader, ready };\n historyReaders.set(sessionId, binding);\n return () => {\n if (historyReaders.get(sessionId) === binding) historyReaders.delete(sessionId);\n };\n}\n\nexport function requestNewerHistory(sessionId: string | null): boolean {\n return sessionId !== null && (historyReaders.get(sessionId)?.read('newer') ?? false);\n}\n\nexport function requestLatestHistory(sessionId: string | null): boolean {\n return sessionId !== null && (historyReaders.get(sessionId)?.read('latest') ?? false);\n}\nconst historyStore = new Store<Record<string, HistoryState>>({});\nconst NO_HISTORY: HistoryState = { cursor: null, hasMore: true, loading: false, pages: 0 };\n\nfunction historyFor(sessionId: string): HistoryState {\n return history.get(sessionId) ?? NO_HISTORY;\n}\n\nfunction setHistory(sessionId: string, next: HistoryState): void {\n history.set(sessionId, next);\n historyStore.setState((state) => ({ ...state, [sessionId]: next }));\n}\n\n/** Whether more transcript exists above what this session's page holds. */\nexport function useHasOlderHistory(sessionId: string | null): boolean {\n return useStore(historyStore, (state) => (sessionId === null ? false : (state[sessionId] ?? NO_HISTORY).hasMore));\n}\n\n/**\n * Asks the hub for the window above what this page holds.\n *\n * One request at a time: a reader flicking upwards would otherwise ask for the\n * same window repeatedly before the first answer lands, and every copy would\n * be prepended.\n */\nexport function requestOlderHistory(sessionId: string | null): boolean {\n if (sessionId === null) return false;\n const reader = historyReaders.get(sessionId);\n if (reader) return reader.read('older');\n const current = historyFor(sessionId);\n if (current.loading || !current.hasMore) return false;\n setHistory(sessionId, { ...current, loading: true });\n sendHubFrame({\n type: HISTORY_REQUEST_TYPE,\n sessionId,\n ...(current.cursor === null ? {} : { before: current.cursor }),\n });\n return true;\n}\n\n/** Folds one answered window above the timeline and records how far back it reached. */\nexport function applyHistoryPage(sessionId: string, frames: Record<string, unknown>[], next: HistoryPage): void {\n const current = historyFor(sessionId);\n const pages = current.pages + 1;\n sessionStoreFor(sessionId).setState((state) => prependHistory(state, frames, pages));\n setHistory(sessionId, { cursor: next.cursor, hasMore: next.hasMore, loading: false, pages });\n}\n\nexport interface HistoryPage {\n cursor: string | null;\n hasMore: boolean;\n}\n\n/** The oldest entry the page holds, which is where the next window ends. */\nexport function seedHistoryCursor(sessionId: string, cursor: string | null): void {\n setHistory(sessionId, { ...NO_HISTORY, cursor });\n}\n\n/** Keeps Po-only and optimistic entries beside the protocol items that preceded them. */\nfunction mergeProtocolEntries(\n previous: TimelineEntry[],\n protocol: TimelineEntry[],\n pendingUserIds: ReadonlySet<string>,\n reconciledUserIds: ReadonlySet<string>,\n): TimelineEntry[] {\n const localByAnchor = new Map<string | null, TimelineEntry[]>();\n let anchor: string | null = null;\n for (const entry of previous) {\n const protocolOwned =\n (PROTOCOL_ENTRY_KINDS.has(entry.kind) || reconciledUserIds.has(entry.id)) && !pendingUserIds.has(entry.id);\n if (protocolOwned) {\n anchor = entry.id;\n continue;\n }\n const local = localByAnchor.get(anchor) ?? [];\n local.push(entry);\n localByAnchor.set(anchor, local);\n }\n\n const merged = [...(localByAnchor.get(null) ?? [])];\n const used = new Set<string | null>([null]);\n for (const entry of protocol) {\n merged.push(entry, ...(localByAnchor.get(entry.id) ?? []));\n used.add(entry.id);\n }\n for (const [entryAnchor, local] of localByAnchor) {\n if (!used.has(entryAnchor)) merged.push(...local);\n }\n return merged;\n}\n\n/**\n * Replaces protocol-owned transcript items with the authoritative snapshot.\n *\n * Local echoes disappear when the protocol publishes them. Po-only entries,\n * such as notices, queued messages, and run dividers, retain their place beside\n * the protocol item that preceded them.\n */\nexport function applyProtocolTranscript(sessionId: string, entries: TimelineEntry[], streaming: boolean): void {\n protocolTranscripts.add(sessionId);\n sessionStoreFor(sessionId).setState((state) => {\n const pendingUserEntries = [...state.pendingUserEntries];\n const pendingUserIdsBeforeReconciliation = new Set(pendingUserEntries.map((pending) => pending.id));\n const knownProtocolIds = new Set(\n state.entries\n .filter((entry) => PROTOCOL_ENTRY_KINDS.has(entry.kind) && !pendingUserIdsBeforeReconciliation.has(entry.id))\n .map((entry) => entry.id),\n );\n const protocolUserEntryIds = { ...state.protocolUserEntryIds };\n const normalizedEntries = [...entries];\n // Claimed prompts are remembered rather than dropped: the journal reports\n // the same message on its own channel, and that copy has to fold into this\n // entry instead of arriving as a new one.\n const reconciledUserEntries = [...state.reconciledUserEntries];\n\n // Work backwards so repeated text binds to the newest matching prompt. The\n // local id keeps React from mounting the same message again when Pi publishes\n // its authoritative transcript copy at the end of a run.\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index];\n if (entry?.kind !== 'user') continue;\n const localId = protocolUserEntryIds[entry.id];\n if (localId !== undefined) {\n normalizedEntries[index] = { ...entry, id: localId };\n continue;\n }\n if (knownProtocolIds.has(entry.id)) continue;\n const pendingIndex = pendingUserEntries.findLastIndex((pending) => pending.text === entry.text);\n if (pendingIndex === -1) continue;\n const [pending] = pendingUserEntries.splice(pendingIndex, 1);\n if (pending === undefined) continue;\n protocolUserEntryIds[entry.id] = pending.id;\n reconciledUserEntries.push(pending);\n normalizedEntries[index] = { ...entry, id: pending.id };\n }\n\n const pendingUserIds = new Set(pendingUserEntries.map((pending) => pending.id));\n const reconciledUserIds = new Set(Object.values(protocolUserEntryIds));\n return {\n ...state,\n entries: mergeProtocolEntries(state.entries, normalizedEntries, pendingUserIds, reconciledUserIds),\n streaming: state.lifecycle === null ? streaming : state.lifecycle.operation !== null,\n settled: state.lifecycle === null ? !streaming : state.lifecycle.operation === null,\n pendingUserEntries,\n reconciledUserEntries,\n protocolUserEntryIds,\n };\n });\n}\n\nfunction protocolQueueMatches(state: SessionState, queue: readonly QueuedEntry[]): boolean {\n const current = state.entries.filter((entry): entry is QueuedEntry => entry.kind === 'queued');\n return (\n current.length === queue.length &&\n current.every((entry, index) => {\n const next = queue[index];\n if (\n next === undefined ||\n entry.id !== next.id ||\n entry.text !== next.text ||\n entry.delivery !== next.delivery ||\n entry.scheduling !== next.scheduling ||\n entry.disposition !== next.disposition\n )\n return false;\n const images = entry.images ?? [];\n const nextImages = next.images ?? [];\n return (\n images.length === nextImages.length &&\n images.every((image, imageIndex) => {\n const nextImage = nextImages[imageIndex];\n return nextImage !== undefined && image.data === nextImage.data && image.mimeType === nextImage.mimeType;\n })\n );\n })\n );\n}\n\n/** Applies execution and retained-input state from the server, never from replayed history. */\nexport function applySessionLifecycle(sessionId: string, lifecycle: SessionLifecycle, newBinding = false): void {\n sessionStoreFor(sessionId).setState((state) => {\n const current = state.lifecycle;\n if (!newBinding && current !== null && lifecycle.revision < current.revision) return state;\n const queue: QueuedEntry[] = lifecycle.queue.map(({ id, text, images, delivery, scheduling, disposition }) => ({\n kind: 'queued',\n id,\n text,\n delivery,\n scheduling,\n disposition,\n ...(images === undefined ? {} : { images: images.map(({ data, mimeType }) => ({ data, mimeType })) }),\n }));\n const streaming = lifecycle.operation !== null;\n const updated = protocolQueueMatches(state, queue) ? state : replaceQueuedEntries(state, queue);\n return {\n ...updated,\n lifecycle,\n streaming,\n settled: !streaming,\n ...(state.agent === null ? {} : { agent: { ...state.agent, isStreaming: streaming } }),\n };\n });\n}\n\n/** Replaces composer queue rows with the protocol server's authoritative queue. */\nexport function applyProtocolQueue(sessionId: string, queue: readonly QueuedEntry[]): void {\n sessionStoreFor(sessionId).setState((state) =>\n protocolQueueMatches(state, queue) ? state : replaceQueuedEntries(state, queue),\n );\n}\n/** Marks the start of a subscription replay, so live projections beat an older snapshot. */\nexport function beginSessionReplay(sessionId: string): void {\n replayGuards.set(sessionId, { statuses: new Set(), widgets: new Set() });\n}\n\nexport function endSessionReplay(sessionId: string): void {\n replayGuards.delete(sessionId);\n}\n\nexport function resetSessionStore(sessionId: string, options: { source?: 'hub' } = {}): void {\n const guard = replayGuards.get(sessionId);\n const preservePages = options.source === 'hub' && hasReadyHistoryReader(sessionId);\n sessionStoreFor(sessionId).setState((state) => {\n // Transcript pages do not contain facts returned by the session commands.\n // Keep those facts even when their response arrives before a page reload.\n const reset = {\n ...initialSessionState,\n agent: state.agent,\n lifecycle: state.lifecycle,\n stats: state.stats,\n commands: state.commands,\n models: state.models,\n thinkingLevels: state.thinkingLevels,\n };\n const preservedStatuses =\n guard === undefined\n ? {}\n : Object.fromEntries(Object.entries(state.statuses).filter(([key]) => guard.statuses.has(key)));\n const preservedWidgets = guard === undefined ? [] : state.widgets.filter((key) => guard.widgets.has(key));\n // A bounded hub backlog is not a canonical page. Keep durable entries,\n // their deduplication ids, and custom projections while replaying hub state.\n if (preservePages) return { ...state, statuses: preservedStatuses, widgets: preservedWidgets };\n if (!protocolTranscripts.has(sessionId)) {\n return {\n ...reset,\n statuses: preservedStatuses,\n widgets: preservedWidgets,\n };\n }\n // A legacy socket reconnect replays its backlog. Keep the protocol snapshot\n // visible while that replay rebuilds Po-only state around it.\n const entries = state.entries.filter((entry) => PROTOCOL_ENTRY_KINDS.has(entry.kind));\n return {\n ...reset,\n entries,\n statuses: preservedStatuses,\n widgets: preservedWidgets,\n streaming: state.streaming,\n settled: state.settled,\n pendingUserEntries: state.pendingUserEntries,\n reconciledUserEntries: state.reconciledUserEntries,\n protocolUserEntryIds: state.protocolUserEntryIds,\n };\n });\n if (preservePages) return;\n history.delete(sessionId);\n historyStore.setState((state) => {\n const { [sessionId]: _dropped, ...rest } = state;\n return rest;\n });\n}\n\nexport function dropSessionStore(sessionId: string): void {\n stores.delete(sessionId);\n protocolTranscripts.delete(sessionId);\n replayGuards.delete(sessionId);\n}\n\nexport function resetSessionStores(): void {\n stores.clear();\n protocolTranscripts.clear();\n replayGuards.clear();\n detachedStore.setState(() => initialSessionState);\n}\n\n/** Asks for the facts the cockpit shows but Pi only reports on request. */\nexport function refreshSessionFacts(sessionId: string): void {\n sendFrame(sessionId, getStateCommand());\n sendFrame(sessionId, getSessionStatsCommand());\n sendFrame(sessionId, getCommandsCommand());\n}\n\n/**\n * Asks only for the usage figures, cheap enough to run once per message.\n *\n * `refreshSessionFacts` costs three round trips because it also re-reads the\n * state and the command list, and neither of those changes mid-turn.\n */\nexport function refreshSessionStats(sessionId: string): void {\n sendFrame(sessionId, getSessionStatsCommand());\n}\n\n/** Asks what the model picker lists; Pi's answer depends on the current model. */\nexport function loadModelChoices(sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n sendFrame(sessionId, getAvailableModelsCommand());\n sendFrame(sessionId, getAvailableThinkingLevelsCommand());\n}\n\n/**\n * Switches the model, then re-reads the facts Pi adjusts alongside it: the\n * thinking level gets clamped to what the new model accepts, and the level\n * list changes with it.\n */\nexport function selectModel(provider: string, modelId: string, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n sendFrame(sessionId, setModelCommand(provider, modelId));\n sendFrame(sessionId, getStateCommand());\n sendFrame(sessionId, getAvailableThinkingLevelsCommand());\n}\n\n/** Read back server state rather than optimistically enabling priority. */\nexport function selectFastMode(enabled: boolean, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n const agent = sessionStoreFor(sessionId).state.agent;\n if (agent?.provider !== 'openai-codex') return;\n sendFrame(sessionId, { type: 'set_fast_mode', enabled });\n sendFrame(sessionId, getStateCommand());\n}\n\n/** Locking aborts a running local turn; the snapshot reports the new state back. */\nexport function setAgentLock(locked: boolean, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n sendFrame(sessionId, { type: 'set_agent_lock', locked });\n sendFrame(sessionId, getStateCommand());\n}\n\n/** The set reply carries nothing back, so get_state is what updates the chip. */\nexport function selectThinkingLevel(level: string, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n sendFrame(sessionId, setThinkingLevelCommand(level));\n sendFrame(sessionId, getStateCommand());\n}\n\n/**\n * Sends a prompt, or steers the run when one is already in flight.\n *\n * Pi rejects a prompt while the agent is working, so the composer picks the\n * verb from the run state rather than making the reader remember which is\n * legal. Every action defaults to the focused session and is a no-op when\n * nothing is focused.\n */\nexport function submitMessage(\n text: string,\n images: RpcImage[] = [],\n sessionId: string | null = activeSessionId(),\n): void {\n const trimmed = text.trim();\n if (!trimmed || sessionId === null) return;\n const store = sessionStoreFor(sessionId);\n // A built-in is an action, not something to say: steering the run with the\n // text, or prompting with it, would reach the model as literal characters.\n const builtin = builtinCommandFrame(trimmed);\n if (builtin) {\n store.setState((state) => appendUserPrompt(state, trimmed));\n sendFrame(sessionId, builtin);\n return;\n }\n const streaming = store.state.streaming;\n const userImages = images\n .filter((image) => isSupportedImageMimeType(image.mimeType))\n .map(({ data, mimeType }) => ({ data, mimeType }));\n store.setState((state) => appendUserPrompt(state, trimmed, userImages));\n sendFrame(sessionId, streaming ? steerCommand(trimmed, images) : promptCommand(trimmed, images));\n}\n\n/** The composer retains its draft until the server acknowledges admission. */\nexport async function submitMessageWithAck(\n text: string,\n images: RpcImage[] = [],\n sessionId: string | null = activeSessionId(),\n): Promise<boolean> {\n const trimmed = text.trim();\n if (!trimmed || sessionId === null) return false;\n const store = sessionStoreFor(sessionId);\n const builtin = builtinCommandFrame(trimmed);\n const active = store.state.lifecycle === null ? store.state.streaming : store.state.lifecycle.operation !== null;\n const userImages = (builtin ? [] : images)\n .filter((image) => isSupportedImageMimeType(image.mimeType))\n .map(({ data, mimeType }) => ({ data, mimeType }));\n const localId = `u${store.state.nextId}`;\n // Echo before sending so even an early transcript publication reconciles this row.\n store.setState((state) => appendUserPrompt(state, trimmed, userImages));\n let accepted = false;\n try {\n const response = await sendFrameWithAck(\n sessionId,\n builtin ?? (active ? steerCommand(trimmed, images) : promptCommand(trimmed, images)),\n );\n accepted = response.success;\n if (!accepted && response.error?.includes('uncertain'))\n store.setState((state) => reduceSession(state, { type: 'error', message: response.error }));\n return accepted;\n } finally {\n if (!accepted)\n store.setState((state) =>\n state.pendingUserEntries.some(({ id }) => id === localId)\n ? {\n ...state,\n entries: state.entries.filter(({ id }) => id !== localId),\n pendingUserEntries: state.pendingUserEntries.filter(({ id }) => id !== localId),\n }\n : state,\n );\n }\n}\n\nexport function rewindToMessage(itemId: string, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null || itemId === '') return;\n sendFrame(sessionId, rewindCommand(itemId));\n}\n\nexport function queueFollowUp(\n text: string,\n images: RpcImage[] = [],\n sessionId: string | null = activeSessionId(),\n): void {\n const trimmed = text.trim();\n if (!trimmed || sessionId === null) return;\n sendFrame(sessionId, enqueueAutomaticCommand(trimmed, images));\n}\n\n/** A queued submission is acknowledged by the server; consumption is a later lifecycle event. */\nexport async function queueFollowUpWithAck(\n text: string,\n images: RpcImage[] = [],\n sessionId: string | null = activeSessionId(),\n): Promise<boolean> {\n const trimmed = text.trim();\n if (!trimmed || sessionId === null) return false;\n const response = await sendFrameWithAck(sessionId, enqueueAutomaticCommand(trimmed, images));\n if (!response.success && response.error?.includes('uncertain'))\n sessionStoreFor(sessionId).setState((state) => reduceSession(state, { type: 'error', message: response.error }));\n return response.success;\n}\n\nexport async function clearQueuedMessages(sessionId: string | null = activeSessionId()): Promise<void> {\n if (sessionId === null) throw new Error('The session protocol is not connected.');\n const response = await sendFrameWithAck(sessionId, clearQueueCommand());\n if (!response.success) throw new Error(response.error ?? 'Could not clear queued messages.');\n}\n\n/** Requests server-owned removal; the authoritative snapshot removes the row on success. */\nexport async function deleteQueuedMessage(\n id: string,\n _knownQueueCount: number,\n sessionId: string | null = activeSessionId(),\n): Promise<void> {\n if (sessionId === null) throw new Error('The session protocol is not connected.');\n const response = await sendFrameWithAck(sessionId, removeQueuedCommand(id));\n if (!response.success) throw new Error(response.error ?? 'Could not delete the queued message.');\n switch (response.data) {\n case 'removed':\n return;\n case 'in_flight':\n throw new Error('This message is already being delivered and cannot be deleted.');\n case 'already_consumed':\n throw new Error('This message has already been sent.');\n case 'not_found':\n throw new Error('This message is no longer queued. Refresh the session.');\n default:\n throw new Error('Deletion uncertain. Check the queue before trying again.');\n }\n}\n\n/** The caller captures the active target at click time; absent means expected idle. */\nexport async function promoteQueuedMessage(\n id: string,\n operationId?: string,\n sessionId: string | null = activeSessionId(),\n): Promise<void> {\n if (sessionId === null) throw new Error('The session protocol is not connected.');\n const response = await sendFrameWithAck(sessionId, promoteQueuedCommand(id, operationId));\n if (!response.success) throw new Error(response.error ?? 'Could not send the queued message.');\n switch (response.data) {\n case 'promoted':\n return;\n case 'target_changed':\n throw new Error('The active run changed. Check the session before sending this message.');\n case 'in_flight':\n throw new Error('This message is already being delivered.');\n case 'not_found':\n throw new Error('This message is no longer queued. Refresh the session.');\n default:\n throw new Error('Delivery uncertain. Check the conversation before trying again.');\n }\n}\n\nexport async function resumeQueuedMessages(sessionId: string | null = activeSessionId()): Promise<void> {\n if (sessionId === null) throw new Error('The session protocol is not connected.');\n const response = await sendFrameWithAck(sessionId, resumeQueueCommand());\n if (!response.success) throw new Error(response.error ?? 'Could not resume queued messages.');\n}\n\n/**\n * Renames the session where the name actually lives: in the agent. Pi keeps\n * it in the session file and reports it back through get_state, which is\n * what the hub folds into every page's rail card.\n */\nexport function renameSession(name: string, sessionId: string | null = activeSessionId()): void {\n const trimmed = name.trim();\n if (!trimmed || sessionId === null) return;\n sendFrame(sessionId, setSessionNameCommand(trimmed));\n sendFrame(sessionId, getStateCommand());\n}\n\nexport function abortRun(sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n sendFrame(sessionId, abortCommand(sessionStoreFor(sessionId).state.lifecycle?.operation?.id));\n}\n\nexport function runCommand(name: string, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n const slashed = name.startsWith('/') ? name : `/${name}`;\n sendFrame(sessionId, builtinCommandFrame(slashed) ?? promptCommand(slashed));\n}\n\nexport function answerDialogValue(id: string, value: string, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n sendFrame(sessionId, dialogValue(id, value));\n sessionStoreFor(sessionId).setState(clearDialog);\n}\n\nexport function answerDialogConfirm(\n id: string,\n confirmed: boolean,\n sessionId: string | null = activeSessionId(),\n): void {\n if (sessionId === null) return;\n sendFrame(sessionId, dialogConfirmed(id, confirmed));\n sessionStoreFor(sessionId).setState(clearDialog);\n}\n\nexport function cancelDialog(id: string, sessionId: string | null = activeSessionId()): void {\n if (sessionId === null) return;\n sendFrame(sessionId, dialogCancelled(id));\n sessionStoreFor(sessionId).setState(clearDialog);\n}\n"],"mappings":"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"}