@agimon-ai/po-web-dashboard 0.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (924) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +10 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/core.cjs +222 -0
  5. package/dist/core.d.mts +21 -0
  6. package/dist/core.mjs +21 -0
  7. package/dist/index.cjs +546 -0
  8. package/dist/index.d.mts +81 -0
  9. package/dist/index.mjs +81 -0
  10. package/dist/testing.cjs +18 -0
  11. package/dist/testing.d.mts +6 -0
  12. package/dist/testing.mjs +6 -0
  13. package/dist/types/auth.cjs +20 -0
  14. package/dist/types/auth.cjs.map +1 -0
  15. package/dist/types/auth.d.mts +160 -0
  16. package/dist/types/auth.d.mts.map +1 -0
  17. package/dist/types/auth.mjs +19 -0
  18. package/dist/types/auth.mjs.map +1 -0
  19. package/dist/types/bridge.d.mts +18 -0
  20. package/dist/types/bridge.d.mts.map +1 -0
  21. package/dist/types/devProxy.cjs +41 -0
  22. package/dist/types/devProxy.cjs.map +1 -0
  23. package/dist/types/devProxy.d.mts +54 -0
  24. package/dist/types/devProxy.d.mts.map +1 -0
  25. package/dist/types/devProxy.mjs +39 -0
  26. package/dist/types/devProxy.mjs.map +1 -0
  27. package/dist/types/hub.cjs +220 -0
  28. package/dist/types/hub.cjs.map +1 -0
  29. package/dist/types/hub.d.mts +447 -0
  30. package/dist/types/hub.d.mts.map +1 -0
  31. package/dist/types/hub.mjs +179 -0
  32. package/dist/types/hub.mjs.map +1 -0
  33. package/dist/types/media.cjs +75 -0
  34. package/dist/types/media.cjs.map +1 -0
  35. package/dist/types/media.d.mts +22 -0
  36. package/dist/types/media.d.mts.map +1 -0
  37. package/dist/types/media.mjs +70 -0
  38. package/dist/types/media.mjs.map +1 -0
  39. package/dist/types/notification.cjs +19 -0
  40. package/dist/types/notification.cjs.map +1 -0
  41. package/dist/types/notification.d.mts +10 -0
  42. package/dist/types/notification.d.mts.map +1 -0
  43. package/dist/types/notification.mjs +19 -0
  44. package/dist/types/notification.mjs.map +1 -0
  45. package/dist/types/remoteAccess.cjs +92 -0
  46. package/dist/types/remoteAccess.cjs.map +1 -0
  47. package/dist/types/remoteAccess.d.mts +214 -0
  48. package/dist/types/remoteAccess.d.mts.map +1 -0
  49. package/dist/types/remoteAccess.mjs +68 -0
  50. package/dist/types/remoteAccess.mjs.map +1 -0
  51. package/dist/types/session.cjs +23 -0
  52. package/dist/types/session.cjs.map +1 -0
  53. package/dist/types/session.d.mts +29 -0
  54. package/dist/types/session.d.mts.map +1 -0
  55. package/dist/types/session.mjs +18 -0
  56. package/dist/types/session.mjs.map +1 -0
  57. package/dist/types/sessionMcp.d.mts +56 -0
  58. package/dist/types/sessionMcp.d.mts.map +1 -0
  59. package/dist/types/settings.cjs +18 -0
  60. package/dist/types/settings.cjs.map +1 -0
  61. package/dist/types/settings.d.mts +126 -0
  62. package/dist/types/settings.d.mts.map +1 -0
  63. package/dist/types/settings.mjs +12 -0
  64. package/dist/types/settings.mjs.map +1 -0
  65. package/dist/types.cjs +101 -0
  66. package/dist/types.d.mts +11 -0
  67. package/dist/types.mjs +9 -0
  68. package/dist/views.cjs +120 -0
  69. package/dist/views.d.mts +56 -0
  70. package/dist/views.mjs +56 -0
  71. package/dist/web/components/MascotMark.cjs +18 -0
  72. package/dist/web/components/MascotMark.cjs.map +1 -0
  73. package/dist/web/components/MascotMark.d.mts +9 -0
  74. package/dist/web/components/MascotMark.d.mts.map +1 -0
  75. package/dist/web/components/MascotMark.mjs +18 -0
  76. package/dist/web/components/MascotMark.mjs.map +1 -0
  77. package/dist/web/components/PluginSurface.cjs +15 -0
  78. package/dist/web/components/PluginSurface.cjs.map +1 -0
  79. package/dist/web/components/PluginSurface.d.mts +13 -0
  80. package/dist/web/components/PluginSurface.d.mts.map +1 -0
  81. package/dist/web/components/PluginSurface.mjs +15 -0
  82. package/dist/web/components/PluginSurface.mjs.map +1 -0
  83. package/dist/web/components/QrCode.cjs +37 -0
  84. package/dist/web/components/QrCode.cjs.map +1 -0
  85. package/dist/web/components/QrCode.d.mts +22 -0
  86. package/dist/web/components/QrCode.d.mts.map +1 -0
  87. package/dist/web/components/QrCode.mjs +37 -0
  88. package/dist/web/components/QrCode.mjs.map +1 -0
  89. package/dist/web/components/Remote.fixture.cjs +73 -0
  90. package/dist/web/components/Remote.fixture.cjs.map +1 -0
  91. package/dist/web/components/Remote.fixture.mjs +72 -0
  92. package/dist/web/components/Remote.fixture.mjs.map +1 -0
  93. package/dist/web/components/SessionMcp.cjs +279 -0
  94. package/dist/web/components/SessionMcp.cjs.map +1 -0
  95. package/dist/web/components/SessionMcp.d.mts +12 -0
  96. package/dist/web/components/SessionMcp.d.mts.map +1 -0
  97. package/dist/web/components/SessionMcp.mjs +278 -0
  98. package/dist/web/components/SessionMcp.mjs.map +1 -0
  99. package/dist/web/components/Story.fixture.cjs +124 -0
  100. package/dist/web/components/Story.fixture.cjs.map +1 -0
  101. package/dist/web/components/Story.fixture.d.mts +19 -0
  102. package/dist/web/components/Story.fixture.d.mts.map +1 -0
  103. package/dist/web/components/Story.fixture.mjs +119 -0
  104. package/dist/web/components/Story.fixture.mjs.map +1 -0
  105. package/dist/web/components/Template.fixture.cjs +67 -0
  106. package/dist/web/components/Template.fixture.cjs.map +1 -0
  107. package/dist/web/components/Template.fixture.d.mts +7 -0
  108. package/dist/web/components/Template.fixture.d.mts.map +1 -0
  109. package/dist/web/components/Template.fixture.mjs +65 -0
  110. package/dist/web/components/Template.fixture.mjs.map +1 -0
  111. package/dist/web/components/ToolRendererBoundary.cjs +23 -0
  112. package/dist/web/components/ToolRendererBoundary.cjs.map +1 -0
  113. package/dist/web/components/ToolRendererBoundary.d.mts +23 -0
  114. package/dist/web/components/ToolRendererBoundary.d.mts.map +1 -0
  115. package/dist/web/components/ToolRendererBoundary.mjs +23 -0
  116. package/dist/web/components/ToolRendererBoundary.mjs.map +1 -0
  117. package/dist/web/features/activity/ActivityDock.cjs +271 -0
  118. package/dist/web/features/activity/ActivityDock.cjs.map +1 -0
  119. package/dist/web/features/activity/ActivityDock.d.mts +22 -0
  120. package/dist/web/features/activity/ActivityDock.d.mts.map +1 -0
  121. package/dist/web/features/activity/ActivityDock.mjs +271 -0
  122. package/dist/web/features/activity/ActivityDock.mjs.map +1 -0
  123. package/dist/web/features/activity/ContextItemDialog.cjs +276 -0
  124. package/dist/web/features/activity/ContextItemDialog.cjs.map +1 -0
  125. package/dist/web/features/activity/ContextItemDialog.d.mts +16 -0
  126. package/dist/web/features/activity/ContextItemDialog.d.mts.map +1 -0
  127. package/dist/web/features/activity/ContextItemDialog.mjs +276 -0
  128. package/dist/web/features/activity/ContextItemDialog.mjs.map +1 -0
  129. package/dist/web/features/activity/ContextPanel.cjs +248 -0
  130. package/dist/web/features/activity/ContextPanel.cjs.map +1 -0
  131. package/dist/web/features/activity/ContextPanel.d.mts +4 -0
  132. package/dist/web/features/activity/ContextPanel.d.mts.map +1 -0
  133. package/dist/web/features/activity/ContextPanel.mjs +248 -0
  134. package/dist/web/features/activity/ContextPanel.mjs.map +1 -0
  135. package/dist/web/features/activity/DockTabs.cjs +47 -0
  136. package/dist/web/features/activity/DockTabs.cjs.map +1 -0
  137. package/dist/web/features/activity/DockTabs.d.mts +9 -0
  138. package/dist/web/features/activity/DockTabs.d.mts.map +1 -0
  139. package/dist/web/features/activity/DockTabs.mjs +47 -0
  140. package/dist/web/features/activity/DockTabs.mjs.map +1 -0
  141. package/dist/web/features/connection/RefusedCard.cjs +76 -0
  142. package/dist/web/features/connection/RefusedCard.cjs.map +1 -0
  143. package/dist/web/features/connection/RefusedCard.d.mts +5 -0
  144. package/dist/web/features/connection/RefusedCard.d.mts.map +1 -0
  145. package/dist/web/features/connection/RefusedCard.mjs +76 -0
  146. package/dist/web/features/connection/RefusedCard.mjs.map +1 -0
  147. package/dist/web/features/dialogs/DialogOverlay.cjs +164 -0
  148. package/dist/web/features/dialogs/DialogOverlay.cjs.map +1 -0
  149. package/dist/web/features/dialogs/DialogOverlay.d.mts +15 -0
  150. package/dist/web/features/dialogs/DialogOverlay.d.mts.map +1 -0
  151. package/dist/web/features/dialogs/DialogOverlay.mjs +164 -0
  152. package/dist/web/features/dialogs/DialogOverlay.mjs.map +1 -0
  153. package/dist/web/features/leader/CommandPalette.cjs +390 -0
  154. package/dist/web/features/leader/CommandPalette.cjs.map +1 -0
  155. package/dist/web/features/leader/CommandPalette.d.mts +14 -0
  156. package/dist/web/features/leader/CommandPalette.d.mts.map +1 -0
  157. package/dist/web/features/leader/CommandPalette.mjs +390 -0
  158. package/dist/web/features/leader/CommandPalette.mjs.map +1 -0
  159. package/dist/web/features/remote/DevProxyTargets.cjs +122 -0
  160. package/dist/web/features/remote/DevProxyTargets.cjs.map +1 -0
  161. package/dist/web/features/remote/DevProxyTargets.d.mts +15 -0
  162. package/dist/web/features/remote/DevProxyTargets.d.mts.map +1 -0
  163. package/dist/web/features/remote/DevProxyTargets.mjs +122 -0
  164. package/dist/web/features/remote/DevProxyTargets.mjs.map +1 -0
  165. package/dist/web/features/remote/HandoverProgress.cjs +28 -0
  166. package/dist/web/features/remote/HandoverProgress.cjs.map +1 -0
  167. package/dist/web/features/remote/HandoverProgress.d.mts +12 -0
  168. package/dist/web/features/remote/HandoverProgress.d.mts.map +1 -0
  169. package/dist/web/features/remote/HandoverProgress.mjs +28 -0
  170. package/dist/web/features/remote/HandoverProgress.mjs.map +1 -0
  171. package/dist/web/features/remote/PairedDeviceList.cjs +37 -0
  172. package/dist/web/features/remote/PairedDeviceList.cjs.map +1 -0
  173. package/dist/web/features/remote/PairedDeviceList.d.mts +5 -0
  174. package/dist/web/features/remote/PairedDeviceList.d.mts.map +1 -0
  175. package/dist/web/features/remote/PairedDeviceList.mjs +37 -0
  176. package/dist/web/features/remote/PairedDeviceList.mjs.map +1 -0
  177. package/dist/web/features/remote/PairingApprovalDialog.cjs +65 -0
  178. package/dist/web/features/remote/PairingApprovalDialog.cjs.map +1 -0
  179. package/dist/web/features/remote/PairingApprovalDialog.d.mts +11 -0
  180. package/dist/web/features/remote/PairingApprovalDialog.d.mts.map +1 -0
  181. package/dist/web/features/remote/PairingApprovalDialog.mjs +65 -0
  182. package/dist/web/features/remote/PairingApprovalDialog.mjs.map +1 -0
  183. package/dist/web/features/remote/RemoteAccessDialog.cjs +83 -0
  184. package/dist/web/features/remote/RemoteAccessDialog.cjs.map +1 -0
  185. package/dist/web/features/remote/RemoteAccessDialog.d.mts +11 -0
  186. package/dist/web/features/remote/RemoteAccessDialog.d.mts.map +1 -0
  187. package/dist/web/features/remote/RemoteAccessDialog.mjs +83 -0
  188. package/dist/web/features/remote/RemoteAccessDialog.mjs.map +1 -0
  189. package/dist/web/features/remote/RemoteAccessOptions.cjs +154 -0
  190. package/dist/web/features/remote/RemoteAccessOptions.cjs.map +1 -0
  191. package/dist/web/features/remote/RemoteAccessOptions.d.mts +11 -0
  192. package/dist/web/features/remote/RemoteAccessOptions.d.mts.map +1 -0
  193. package/dist/web/features/remote/RemoteAccessOptions.mjs +154 -0
  194. package/dist/web/features/remote/RemoteAccessOptions.mjs.map +1 -0
  195. package/dist/web/features/remote/RemoteAccessPairing.cjs +93 -0
  196. package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -0
  197. package/dist/web/features/remote/RemoteAccessPairing.d.mts +5 -0
  198. package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -0
  199. package/dist/web/features/remote/RemoteAccessPairing.mjs +93 -0
  200. package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -0
  201. package/dist/web/features/remote/SandboxWorkspaces.cjs +87 -0
  202. package/dist/web/features/remote/SandboxWorkspaces.cjs.map +1 -0
  203. package/dist/web/features/remote/SandboxWorkspaces.d.mts +7 -0
  204. package/dist/web/features/remote/SandboxWorkspaces.d.mts.map +1 -0
  205. package/dist/web/features/remote/SandboxWorkspaces.mjs +87 -0
  206. package/dist/web/features/remote/SandboxWorkspaces.mjs.map +1 -0
  207. package/dist/web/features/remote/TrustedDeviceList.cjs +65 -0
  208. package/dist/web/features/remote/TrustedDeviceList.cjs.map +1 -0
  209. package/dist/web/features/remote/TrustedDeviceList.d.mts +13 -0
  210. package/dist/web/features/remote/TrustedDeviceList.d.mts.map +1 -0
  211. package/dist/web/features/remote/TrustedDeviceList.mjs +64 -0
  212. package/dist/web/features/remote/TrustedDeviceList.mjs.map +1 -0
  213. package/dist/web/features/selection/SelectionBar.cjs +401 -0
  214. package/dist/web/features/selection/SelectionBar.cjs.map +1 -0
  215. package/dist/web/features/selection/SelectionBar.d.mts +14 -0
  216. package/dist/web/features/selection/SelectionBar.d.mts.map +1 -0
  217. package/dist/web/features/selection/SelectionBar.mjs +400 -0
  218. package/dist/web/features/selection/SelectionBar.mjs.map +1 -0
  219. package/dist/web/features/session/AgentLockPanel.cjs +31 -0
  220. package/dist/web/features/session/AgentLockPanel.cjs.map +1 -0
  221. package/dist/web/features/session/AgentLockPanel.mjs +31 -0
  222. package/dist/web/features/session/AgentLockPanel.mjs.map +1 -0
  223. package/dist/web/features/session/Composer.cjs +808 -0
  224. package/dist/web/features/session/Composer.cjs.map +1 -0
  225. package/dist/web/features/session/Composer.d.mts +21 -0
  226. package/dist/web/features/session/Composer.d.mts.map +1 -0
  227. package/dist/web/features/session/Composer.mjs +806 -0
  228. package/dist/web/features/session/Composer.mjs.map +1 -0
  229. package/dist/web/features/session/ComposerPrompt.cjs +47 -0
  230. package/dist/web/features/session/ComposerPrompt.cjs.map +1 -0
  231. package/dist/web/features/session/ComposerPrompt.d.mts +16 -0
  232. package/dist/web/features/session/ComposerPrompt.d.mts.map +1 -0
  233. package/dist/web/features/session/ComposerPrompt.mjs +47 -0
  234. package/dist/web/features/session/ComposerPrompt.mjs.map +1 -0
  235. package/dist/web/features/session/DormantPanel.cjs +61 -0
  236. package/dist/web/features/session/DormantPanel.cjs.map +1 -0
  237. package/dist/web/features/session/DormantPanel.d.mts +8 -0
  238. package/dist/web/features/session/DormantPanel.d.mts.map +1 -0
  239. package/dist/web/features/session/DormantPanel.mjs +61 -0
  240. package/dist/web/features/session/DormantPanel.mjs.map +1 -0
  241. package/dist/web/features/session/MentionPreviews.cjs +128 -0
  242. package/dist/web/features/session/MentionPreviews.cjs.map +1 -0
  243. package/dist/web/features/session/MentionPreviews.d.mts +17 -0
  244. package/dist/web/features/session/MentionPreviews.d.mts.map +1 -0
  245. package/dist/web/features/session/MentionPreviews.mjs +127 -0
  246. package/dist/web/features/session/MentionPreviews.mjs.map +1 -0
  247. package/dist/web/features/session/MessageMarkdown.cjs +20 -0
  248. package/dist/web/features/session/MessageMarkdown.cjs.map +1 -0
  249. package/dist/web/features/session/MessageMarkdown.d.mts +19 -0
  250. package/dist/web/features/session/MessageMarkdown.d.mts.map +1 -0
  251. package/dist/web/features/session/MessageMarkdown.mjs +20 -0
  252. package/dist/web/features/session/MessageMarkdown.mjs.map +1 -0
  253. package/dist/web/features/session/QueueSheet.cjs +189 -0
  254. package/dist/web/features/session/QueueSheet.cjs.map +1 -0
  255. package/dist/web/features/session/QueueSheet.d.mts +16 -0
  256. package/dist/web/features/session/QueueSheet.d.mts.map +1 -0
  257. package/dist/web/features/session/QueueSheet.mjs +189 -0
  258. package/dist/web/features/session/QueueSheet.mjs.map +1 -0
  259. package/dist/web/features/session/SessionActivity.cjs +88 -0
  260. package/dist/web/features/session/SessionActivity.cjs.map +1 -0
  261. package/dist/web/features/session/SessionActivity.d.mts +16 -0
  262. package/dist/web/features/session/SessionActivity.d.mts.map +1 -0
  263. package/dist/web/features/session/SessionActivity.mjs +87 -0
  264. package/dist/web/features/session/SessionActivity.mjs.map +1 -0
  265. package/dist/web/features/session/SessionTranscriptView.cjs +34 -0
  266. package/dist/web/features/session/SessionTranscriptView.cjs.map +1 -0
  267. package/dist/web/features/session/SessionTranscriptView.d.mts +16 -0
  268. package/dist/web/features/session/SessionTranscriptView.d.mts.map +1 -0
  269. package/dist/web/features/session/SessionTranscriptView.mjs +34 -0
  270. package/dist/web/features/session/SessionTranscriptView.mjs.map +1 -0
  271. package/dist/web/features/session/ThreadView.cjs +40 -0
  272. package/dist/web/features/session/ThreadView.cjs.map +1 -0
  273. package/dist/web/features/session/ThreadView.d.mts +18 -0
  274. package/dist/web/features/session/ThreadView.d.mts.map +1 -0
  275. package/dist/web/features/session/ThreadView.mjs +40 -0
  276. package/dist/web/features/session/ThreadView.mjs.map +1 -0
  277. package/dist/web/features/session/Timeline.cjs +620 -0
  278. package/dist/web/features/session/Timeline.cjs.map +1 -0
  279. package/dist/web/features/session/Timeline.d.mts +28 -0
  280. package/dist/web/features/session/Timeline.d.mts.map +1 -0
  281. package/dist/web/features/session/Timeline.mjs +619 -0
  282. package/dist/web/features/session/Timeline.mjs.map +1 -0
  283. package/dist/web/features/session/ToolCard.cjs +210 -0
  284. package/dist/web/features/session/ToolCard.cjs.map +1 -0
  285. package/dist/web/features/session/ToolCard.d.mts +16 -0
  286. package/dist/web/features/session/ToolCard.d.mts.map +1 -0
  287. package/dist/web/features/session/ToolCard.mjs +210 -0
  288. package/dist/web/features/session/ToolCard.mjs.map +1 -0
  289. package/dist/web/features/session/session.fixture.cjs +76 -0
  290. package/dist/web/features/session/session.fixture.cjs.map +1 -0
  291. package/dist/web/features/session/session.fixture.d.mts +6 -0
  292. package/dist/web/features/session/session.fixture.d.mts.map +1 -0
  293. package/dist/web/features/session/session.fixture.mjs +74 -0
  294. package/dist/web/features/session/session.fixture.mjs.map +1 -0
  295. package/dist/web/features/sessions/NewSessionDialog.cjs +70 -0
  296. package/dist/web/features/sessions/NewSessionDialog.cjs.map +1 -0
  297. package/dist/web/features/sessions/NewSessionDialog.d.mts +9 -0
  298. package/dist/web/features/sessions/NewSessionDialog.d.mts.map +1 -0
  299. package/dist/web/features/sessions/NewSessionDialog.mjs +70 -0
  300. package/dist/web/features/sessions/NewSessionDialog.mjs.map +1 -0
  301. package/dist/web/features/sessions/ResumeSessionDialog.cjs +131 -0
  302. package/dist/web/features/sessions/ResumeSessionDialog.cjs.map +1 -0
  303. package/dist/web/features/sessions/ResumeSessionDialog.d.mts +14 -0
  304. package/dist/web/features/sessions/ResumeSessionDialog.d.mts.map +1 -0
  305. package/dist/web/features/sessions/ResumeSessionDialog.mjs +131 -0
  306. package/dist/web/features/sessions/ResumeSessionDialog.mjs.map +1 -0
  307. package/dist/web/features/sessions/SessionRailDialogs.cjs +62 -0
  308. package/dist/web/features/sessions/SessionRailDialogs.cjs.map +1 -0
  309. package/dist/web/features/sessions/SessionRailDialogs.d.mts +10 -0
  310. package/dist/web/features/sessions/SessionRailDialogs.d.mts.map +1 -0
  311. package/dist/web/features/sessions/SessionRailDialogs.mjs +62 -0
  312. package/dist/web/features/sessions/SessionRailDialogs.mjs.map +1 -0
  313. package/dist/web/features/sessions/WelcomePanel.cjs +42 -0
  314. package/dist/web/features/sessions/WelcomePanel.cjs.map +1 -0
  315. package/dist/web/features/sessions/WelcomePanel.d.mts +16 -0
  316. package/dist/web/features/sessions/WelcomePanel.d.mts.map +1 -0
  317. package/dist/web/features/sessions/WelcomePanel.mjs +42 -0
  318. package/dist/web/features/sessions/WelcomePanel.mjs.map +1 -0
  319. package/dist/web/features/sessions/useNewSessionActions.cjs +38 -0
  320. package/dist/web/features/sessions/useNewSessionActions.cjs.map +1 -0
  321. package/dist/web/features/sessions/useNewSessionActions.d.mts +12 -0
  322. package/dist/web/features/sessions/useNewSessionActions.d.mts.map +1 -0
  323. package/dist/web/features/sessions/useNewSessionActions.mjs +38 -0
  324. package/dist/web/features/sessions/useNewSessionActions.mjs.map +1 -0
  325. package/dist/web/features/sessions/useSessionRail.cjs +302 -0
  326. package/dist/web/features/sessions/useSessionRail.cjs.map +1 -0
  327. package/dist/web/features/sessions/useSessionRail.d.mts +14 -0
  328. package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -0
  329. package/dist/web/features/sessions/useSessionRail.mjs +302 -0
  330. package/dist/web/features/sessions/useSessionRail.mjs.map +1 -0
  331. package/dist/web/features/settings/AppearanceSettings.cjs +126 -0
  332. package/dist/web/features/settings/AppearanceSettings.cjs.map +1 -0
  333. package/dist/web/features/settings/AppearanceSettings.d.mts +12 -0
  334. package/dist/web/features/settings/AppearanceSettings.d.mts.map +1 -0
  335. package/dist/web/features/settings/AppearanceSettings.mjs +126 -0
  336. package/dist/web/features/settings/AppearanceSettings.mjs.map +1 -0
  337. package/dist/web/features/settings/ContributedSettings.cjs +257 -0
  338. package/dist/web/features/settings/ContributedSettings.cjs.map +1 -0
  339. package/dist/web/features/settings/ContributedSettings.d.mts +14 -0
  340. package/dist/web/features/settings/ContributedSettings.d.mts.map +1 -0
  341. package/dist/web/features/settings/ContributedSettings.mjs +257 -0
  342. package/dist/web/features/settings/ContributedSettings.mjs.map +1 -0
  343. package/dist/web/features/settings/ImageSettings.cjs +146 -0
  344. package/dist/web/features/settings/ImageSettings.cjs.map +1 -0
  345. package/dist/web/features/settings/ImageSettings.d.mts +12 -0
  346. package/dist/web/features/settings/ImageSettings.d.mts.map +1 -0
  347. package/dist/web/features/settings/ImageSettings.mjs +146 -0
  348. package/dist/web/features/settings/ImageSettings.mjs.map +1 -0
  349. package/dist/web/features/settings/LoginFlowDialog.cjs +226 -0
  350. package/dist/web/features/settings/LoginFlowDialog.cjs.map +1 -0
  351. package/dist/web/features/settings/LoginFlowDialog.d.mts +15 -0
  352. package/dist/web/features/settings/LoginFlowDialog.d.mts.map +1 -0
  353. package/dist/web/features/settings/LoginFlowDialog.mjs +225 -0
  354. package/dist/web/features/settings/LoginFlowDialog.mjs.map +1 -0
  355. package/dist/web/features/settings/NotificationSettings.cjs +69 -0
  356. package/dist/web/features/settings/NotificationSettings.cjs.map +1 -0
  357. package/dist/web/features/settings/NotificationSettings.d.mts +5 -0
  358. package/dist/web/features/settings/NotificationSettings.d.mts.map +1 -0
  359. package/dist/web/features/settings/NotificationSettings.mjs +69 -0
  360. package/dist/web/features/settings/NotificationSettings.mjs.map +1 -0
  361. package/dist/web/features/settings/PluginSettings.cjs +106 -0
  362. package/dist/web/features/settings/PluginSettings.cjs.map +1 -0
  363. package/dist/web/features/settings/PluginSettings.d.mts +10 -0
  364. package/dist/web/features/settings/PluginSettings.d.mts.map +1 -0
  365. package/dist/web/features/settings/PluginSettings.mjs +106 -0
  366. package/dist/web/features/settings/PluginSettings.mjs.map +1 -0
  367. package/dist/web/features/settings/ProviderSettings.cjs +323 -0
  368. package/dist/web/features/settings/ProviderSettings.cjs.map +1 -0
  369. package/dist/web/features/settings/ProviderSettings.d.mts +9 -0
  370. package/dist/web/features/settings/ProviderSettings.d.mts.map +1 -0
  371. package/dist/web/features/settings/ProviderSettings.mjs +323 -0
  372. package/dist/web/features/settings/ProviderSettings.mjs.map +1 -0
  373. package/dist/web/features/settings/RemoteControlSettings.cjs +50 -0
  374. package/dist/web/features/settings/RemoteControlSettings.cjs.map +1 -0
  375. package/dist/web/features/settings/RemoteControlSettings.d.mts +5 -0
  376. package/dist/web/features/settings/RemoteControlSettings.d.mts.map +1 -0
  377. package/dist/web/features/settings/RemoteControlSettings.mjs +50 -0
  378. package/dist/web/features/settings/RemoteControlSettings.mjs.map +1 -0
  379. package/dist/web/features/settings/RepositorySettings.cjs +318 -0
  380. package/dist/web/features/settings/RepositorySettings.cjs.map +1 -0
  381. package/dist/web/features/settings/RepositorySettings.d.mts +7 -0
  382. package/dist/web/features/settings/RepositorySettings.d.mts.map +1 -0
  383. package/dist/web/features/settings/RepositorySettings.mjs +318 -0
  384. package/dist/web/features/settings/RepositorySettings.mjs.map +1 -0
  385. package/dist/web/features/settings/RepositoryWorkspace.cjs +160 -0
  386. package/dist/web/features/settings/RepositoryWorkspace.cjs.map +1 -0
  387. package/dist/web/features/settings/RepositoryWorkspace.d.mts +10 -0
  388. package/dist/web/features/settings/RepositoryWorkspace.d.mts.map +1 -0
  389. package/dist/web/features/settings/RepositoryWorkspace.mjs +160 -0
  390. package/dist/web/features/settings/RepositoryWorkspace.mjs.map +1 -0
  391. package/dist/web/features/settings/SessionMcpSettings.cjs +488 -0
  392. package/dist/web/features/settings/SessionMcpSettings.cjs.map +1 -0
  393. package/dist/web/features/settings/SessionMcpSettings.d.mts +5 -0
  394. package/dist/web/features/settings/SessionMcpSettings.d.mts.map +1 -0
  395. package/dist/web/features/settings/SessionMcpSettings.mjs +488 -0
  396. package/dist/web/features/settings/SessionMcpSettings.mjs.map +1 -0
  397. package/dist/web/features/settings/SettingsMenu.cjs +135 -0
  398. package/dist/web/features/settings/SettingsMenu.cjs.map +1 -0
  399. package/dist/web/features/settings/SettingsMenu.d.mts +9 -0
  400. package/dist/web/features/settings/SettingsMenu.d.mts.map +1 -0
  401. package/dist/web/features/settings/SettingsMenu.mjs +135 -0
  402. package/dist/web/features/settings/SettingsMenu.mjs.map +1 -0
  403. package/dist/web/features/settings/SettingsPanelHost.cjs +32 -0
  404. package/dist/web/features/settings/SettingsPanelHost.cjs.map +1 -0
  405. package/dist/web/features/settings/SettingsPanelHost.d.mts +8 -0
  406. package/dist/web/features/settings/SettingsPanelHost.d.mts.map +1 -0
  407. package/dist/web/features/settings/SettingsPanelHost.mjs +32 -0
  408. package/dist/web/features/settings/SettingsPanelHost.mjs.map +1 -0
  409. package/dist/web/features/settings/TemplateSettings.cjs +177 -0
  410. package/dist/web/features/settings/TemplateSettings.cjs.map +1 -0
  411. package/dist/web/features/settings/TemplateSettings.d.mts +8 -0
  412. package/dist/web/features/settings/TemplateSettings.d.mts.map +1 -0
  413. package/dist/web/features/settings/TemplateSettings.mjs +177 -0
  414. package/dist/web/features/settings/TemplateSettings.mjs.map +1 -0
  415. package/dist/web/features/settings/TunnelSettings.cjs +182 -0
  416. package/dist/web/features/settings/TunnelSettings.cjs.map +1 -0
  417. package/dist/web/features/settings/TunnelSettings.d.mts +8 -0
  418. package/dist/web/features/settings/TunnelSettings.d.mts.map +1 -0
  419. package/dist/web/features/settings/TunnelSettings.mjs +182 -0
  420. package/dist/web/features/settings/TunnelSettings.mjs.map +1 -0
  421. package/dist/web/features/settings/settings.fixture.cjs +230 -0
  422. package/dist/web/features/settings/settings.fixture.cjs.map +1 -0
  423. package/dist/web/features/settings/settings.fixture.d.mts +6 -0
  424. package/dist/web/features/settings/settings.fixture.d.mts.map +1 -0
  425. package/dist/web/features/settings/settings.fixture.mjs +223 -0
  426. package/dist/web/features/settings/settings.fixture.mjs.map +1 -0
  427. package/dist/web/features/status/TopBar.cjs +200 -0
  428. package/dist/web/features/status/TopBar.cjs.map +1 -0
  429. package/dist/web/features/status/TopBar.d.mts +11 -0
  430. package/dist/web/features/status/TopBar.d.mts.map +1 -0
  431. package/dist/web/features/status/TopBar.mjs +200 -0
  432. package/dist/web/features/status/TopBar.mjs.map +1 -0
  433. package/dist/web/lib/authApi.cjs +77 -0
  434. package/dist/web/lib/authApi.cjs.map +1 -0
  435. package/dist/web/lib/authApi.d.mts +28 -0
  436. package/dist/web/lib/authApi.d.mts.map +1 -0
  437. package/dist/web/lib/authApi.mjs +72 -0
  438. package/dist/web/lib/authApi.mjs.map +1 -0
  439. package/dist/web/lib/browserNotifications.cjs +37 -0
  440. package/dist/web/lib/browserNotifications.cjs.map +1 -0
  441. package/dist/web/lib/browserNotifications.d.mts +12 -0
  442. package/dist/web/lib/browserNotifications.d.mts.map +1 -0
  443. package/dist/web/lib/browserNotifications.mjs +35 -0
  444. package/dist/web/lib/browserNotifications.mjs.map +1 -0
  445. package/dist/web/lib/browserTelemetry.cjs +158 -0
  446. package/dist/web/lib/browserTelemetry.cjs.map +1 -0
  447. package/dist/web/lib/browserTelemetry.d.mts +28 -0
  448. package/dist/web/lib/browserTelemetry.d.mts.map +1 -0
  449. package/dist/web/lib/browserTelemetry.mjs +154 -0
  450. package/dist/web/lib/browserTelemetry.mjs.map +1 -0
  451. package/dist/web/lib/commands.cjs +176 -0
  452. package/dist/web/lib/commands.cjs.map +1 -0
  453. package/dist/web/lib/commands.d.mts +53 -0
  454. package/dist/web/lib/commands.d.mts.map +1 -0
  455. package/dist/web/lib/commands.mjs +153 -0
  456. package/dist/web/lib/commands.mjs.map +1 -0
  457. package/dist/web/lib/composerSubmissions.cjs +20 -0
  458. package/dist/web/lib/composerSubmissions.cjs.map +1 -0
  459. package/dist/web/lib/composerSubmissions.d.mts +7 -0
  460. package/dist/web/lib/composerSubmissions.d.mts.map +1 -0
  461. package/dist/web/lib/composerSubmissions.mjs +19 -0
  462. package/dist/web/lib/composerSubmissions.mjs.map +1 -0
  463. package/dist/web/lib/composition.cjs +403 -0
  464. package/dist/web/lib/composition.cjs.map +1 -0
  465. package/dist/web/lib/composition.d.mts +137 -0
  466. package/dist/web/lib/composition.d.mts.map +1 -0
  467. package/dist/web/lib/composition.mjs +392 -0
  468. package/dist/web/lib/composition.mjs.map +1 -0
  469. package/dist/web/lib/contextComposition.cjs +132 -0
  470. package/dist/web/lib/contextComposition.cjs.map +1 -0
  471. package/dist/web/lib/contextComposition.d.mts +75 -0
  472. package/dist/web/lib/contextComposition.d.mts.map +1 -0
  473. package/dist/web/lib/contextComposition.mjs +127 -0
  474. package/dist/web/lib/contextComposition.mjs.map +1 -0
  475. package/dist/web/lib/contextDetailApi.cjs +61 -0
  476. package/dist/web/lib/contextDetailApi.cjs.map +1 -0
  477. package/dist/web/lib/contextDetailApi.d.mts +12 -0
  478. package/dist/web/lib/contextDetailApi.d.mts.map +1 -0
  479. package/dist/web/lib/contextDetailApi.mjs +61 -0
  480. package/dist/web/lib/contextDetailApi.mjs.map +1 -0
  481. package/dist/web/lib/dashboardRenderers.cjs +9 -0
  482. package/dist/web/lib/dashboardRenderers.cjs.map +1 -0
  483. package/dist/web/lib/dashboardRenderers.d.mts +12 -0
  484. package/dist/web/lib/dashboardRenderers.d.mts.map +1 -0
  485. package/dist/web/lib/dashboardRenderers.mjs +9 -0
  486. package/dist/web/lib/dashboardRenderers.mjs.map +1 -0
  487. package/dist/web/lib/dashboardRoute.cjs +27 -0
  488. package/dist/web/lib/dashboardRoute.cjs.map +1 -0
  489. package/dist/web/lib/dashboardRoute.d.mts +29 -0
  490. package/dist/web/lib/dashboardRoute.d.mts.map +1 -0
  491. package/dist/web/lib/dashboardRoute.mjs +26 -0
  492. package/dist/web/lib/dashboardRoute.mjs.map +1 -0
  493. package/dist/web/lib/dashboardTranscript.cjs +15 -0
  494. package/dist/web/lib/dashboardTranscript.cjs.map +1 -0
  495. package/dist/web/lib/dashboardTranscript.d.mts +6 -0
  496. package/dist/web/lib/dashboardTranscript.d.mts.map +1 -0
  497. package/dist/web/lib/dashboardTranscript.mjs +14 -0
  498. package/dist/web/lib/dashboardTranscript.mjs.map +1 -0
  499. package/dist/web/lib/devProxyApi.cjs +74 -0
  500. package/dist/web/lib/devProxyApi.cjs.map +1 -0
  501. package/dist/web/lib/devProxyApi.d.mts +21 -0
  502. package/dist/web/lib/devProxyApi.d.mts.map +1 -0
  503. package/dist/web/lib/devProxyApi.mjs +72 -0
  504. package/dist/web/lib/devProxyApi.mjs.map +1 -0
  505. package/dist/web/lib/fileMentions.cjs +30 -0
  506. package/dist/web/lib/fileMentions.cjs.map +1 -0
  507. package/dist/web/lib/fileMentions.d.mts +13 -0
  508. package/dist/web/lib/fileMentions.d.mts.map +1 -0
  509. package/dist/web/lib/fileMentions.mjs +29 -0
  510. package/dist/web/lib/fileMentions.mjs.map +1 -0
  511. package/dist/web/lib/hubApi.cjs +283 -0
  512. package/dist/web/lib/hubApi.cjs.map +1 -0
  513. package/dist/web/lib/hubApi.d.mts +109 -0
  514. package/dist/web/lib/hubApi.d.mts.map +1 -0
  515. package/dist/web/lib/hubApi.mjs +268 -0
  516. package/dist/web/lib/hubApi.mjs.map +1 -0
  517. package/dist/web/lib/leaderTree.cjs +150 -0
  518. package/dist/web/lib/leaderTree.cjs.map +1 -0
  519. package/dist/web/lib/leaderTree.d.mts +41 -0
  520. package/dist/web/lib/leaderTree.d.mts.map +1 -0
  521. package/dist/web/lib/leaderTree.mjs +149 -0
  522. package/dist/web/lib/leaderTree.mjs.map +1 -0
  523. package/dist/web/lib/livePush.cjs +97 -0
  524. package/dist/web/lib/livePush.cjs.map +1 -0
  525. package/dist/web/lib/livePush.d.mts +10 -0
  526. package/dist/web/lib/livePush.d.mts.map +1 -0
  527. package/dist/web/lib/livePush.mjs +94 -0
  528. package/dist/web/lib/livePush.mjs.map +1 -0
  529. package/dist/web/lib/modelContextAdapter.cjs +63 -0
  530. package/dist/web/lib/modelContextAdapter.cjs.map +1 -0
  531. package/dist/web/lib/modelContextAdapter.d.mts +11 -0
  532. package/dist/web/lib/modelContextAdapter.d.mts.map +1 -0
  533. package/dist/web/lib/modelContextAdapter.mjs +62 -0
  534. package/dist/web/lib/modelContextAdapter.mjs.map +1 -0
  535. package/dist/web/lib/piTransport.cjs +103 -0
  536. package/dist/web/lib/piTransport.cjs.map +1 -0
  537. package/dist/web/lib/piTransport.d.mts +8 -0
  538. package/dist/web/lib/piTransport.d.mts.map +1 -0
  539. package/dist/web/lib/piTransport.mjs +102 -0
  540. package/dist/web/lib/piTransport.mjs.map +1 -0
  541. package/dist/web/lib/pluginCompositions.cjs +57 -0
  542. package/dist/web/lib/pluginCompositions.cjs.map +1 -0
  543. package/dist/web/lib/pluginCompositions.d.mts +37 -0
  544. package/dist/web/lib/pluginCompositions.d.mts.map +1 -0
  545. package/dist/web/lib/pluginCompositions.mjs +52 -0
  546. package/dist/web/lib/pluginCompositions.mjs.map +1 -0
  547. package/dist/web/lib/pluginRegistry.cjs +675 -0
  548. package/dist/web/lib/pluginRegistry.cjs.map +1 -0
  549. package/dist/web/lib/pluginRegistry.d.mts +155 -0
  550. package/dist/web/lib/pluginRegistry.d.mts.map +1 -0
  551. package/dist/web/lib/pluginRegistry.mjs +633 -0
  552. package/dist/web/lib/pluginRegistry.mjs.map +1 -0
  553. package/dist/web/lib/pluginScopes.cjs +48 -0
  554. package/dist/web/lib/pluginScopes.cjs.map +1 -0
  555. package/dist/web/lib/pluginScopes.d.mts +8 -0
  556. package/dist/web/lib/pluginScopes.d.mts.map +1 -0
  557. package/dist/web/lib/pluginScopes.mjs +47 -0
  558. package/dist/web/lib/pluginScopes.mjs.map +1 -0
  559. package/dist/web/lib/pluginSlotProps.cjs +83 -0
  560. package/dist/web/lib/pluginSlotProps.cjs.map +1 -0
  561. package/dist/web/lib/pluginSlotProps.d.mts +21 -0
  562. package/dist/web/lib/pluginSlotProps.d.mts.map +1 -0
  563. package/dist/web/lib/pluginSlotProps.mjs +82 -0
  564. package/dist/web/lib/pluginSlotProps.mjs.map +1 -0
  565. package/dist/web/lib/promptFocus.cjs +30 -0
  566. package/dist/web/lib/promptFocus.cjs.map +1 -0
  567. package/dist/web/lib/promptFocus.d.mts +7 -0
  568. package/dist/web/lib/promptFocus.d.mts.map +1 -0
  569. package/dist/web/lib/promptFocus.mjs +29 -0
  570. package/dist/web/lib/promptFocus.mjs.map +1 -0
  571. package/dist/web/lib/protocolHubSocket.cjs +107 -0
  572. package/dist/web/lib/protocolHubSocket.cjs.map +1 -0
  573. package/dist/web/lib/protocolHubSocket.d.mts +18 -0
  574. package/dist/web/lib/protocolHubSocket.d.mts.map +1 -0
  575. package/dist/web/lib/protocolHubSocket.mjs +107 -0
  576. package/dist/web/lib/protocolHubSocket.mjs.map +1 -0
  577. package/dist/web/lib/protocolTimeline.cjs +86 -0
  578. package/dist/web/lib/protocolTimeline.cjs.map +1 -0
  579. package/dist/web/lib/protocolTimeline.d.mts +9 -0
  580. package/dist/web/lib/protocolTimeline.d.mts.map +1 -0
  581. package/dist/web/lib/protocolTimeline.mjs +85 -0
  582. package/dist/web/lib/protocolTimeline.mjs.map +1 -0
  583. package/dist/web/lib/qrMatrix.cjs +37 -0
  584. package/dist/web/lib/qrMatrix.cjs.map +1 -0
  585. package/dist/web/lib/qrMatrix.d.mts +5 -0
  586. package/dist/web/lib/qrMatrix.d.mts.map +1 -0
  587. package/dist/web/lib/qrMatrix.mjs +35 -0
  588. package/dist/web/lib/qrMatrix.mjs.map +1 -0
  589. package/dist/web/lib/remoteApi.cjs +100 -0
  590. package/dist/web/lib/remoteApi.cjs.map +1 -0
  591. package/dist/web/lib/remoteApi.d.mts +45 -0
  592. package/dist/web/lib/remoteApi.d.mts.map +1 -0
  593. package/dist/web/lib/remoteApi.mjs +92 -0
  594. package/dist/web/lib/remoteApi.mjs.map +1 -0
  595. package/dist/web/lib/sealedSession.cjs +81 -0
  596. package/dist/web/lib/sealedSession.cjs.map +1 -0
  597. package/dist/web/lib/sealedSession.d.mts +24 -0
  598. package/dist/web/lib/sealedSession.d.mts.map +1 -0
  599. package/dist/web/lib/sealedSession.mjs +75 -0
  600. package/dist/web/lib/sealedSession.mjs.map +1 -0
  601. package/dist/web/lib/sessionActivityRenderer.cjs +19 -0
  602. package/dist/web/lib/sessionActivityRenderer.cjs.map +1 -0
  603. package/dist/web/lib/sessionActivityRenderer.d.mts +10 -0
  604. package/dist/web/lib/sessionActivityRenderer.d.mts.map +1 -0
  605. package/dist/web/lib/sessionActivityRenderer.mjs +17 -0
  606. package/dist/web/lib/sessionActivityRenderer.mjs.map +1 -0
  607. package/dist/web/lib/sessionAsset.cjs +45 -0
  608. package/dist/web/lib/sessionAsset.cjs.map +1 -0
  609. package/dist/web/lib/sessionAsset.d.mts +17 -0
  610. package/dist/web/lib/sessionAsset.d.mts.map +1 -0
  611. package/dist/web/lib/sessionAsset.mjs +44 -0
  612. package/dist/web/lib/sessionAsset.mjs.map +1 -0
  613. package/dist/web/lib/sessionAvatar.cjs +18 -0
  614. package/dist/web/lib/sessionAvatar.cjs.map +1 -0
  615. package/dist/web/lib/sessionAvatar.d.mts +10 -0
  616. package/dist/web/lib/sessionAvatar.d.mts.map +1 -0
  617. package/dist/web/lib/sessionAvatar.mjs +18 -0
  618. package/dist/web/lib/sessionAvatar.mjs.map +1 -0
  619. package/dist/web/lib/sessionMcpApi.cjs +120 -0
  620. package/dist/web/lib/sessionMcpApi.cjs.map +1 -0
  621. package/dist/web/lib/sessionMcpApi.d.mts +27 -0
  622. package/dist/web/lib/sessionMcpApi.d.mts.map +1 -0
  623. package/dist/web/lib/sessionMcpApi.mjs +114 -0
  624. package/dist/web/lib/sessionMcpApi.mjs.map +1 -0
  625. package/dist/web/lib/sessionMcpPrompt.cjs +24 -0
  626. package/dist/web/lib/sessionMcpPrompt.cjs.map +1 -0
  627. package/dist/web/lib/sessionMcpPrompt.mjs +23 -0
  628. package/dist/web/lib/sessionMcpPrompt.mjs.map +1 -0
  629. package/dist/web/lib/sessionModel.cjs +970 -0
  630. package/dist/web/lib/sessionModel.cjs.map +1 -0
  631. package/dist/web/lib/sessionModel.d.mts +254 -0
  632. package/dist/web/lib/sessionModel.d.mts.map +1 -0
  633. package/dist/web/lib/sessionModel.mjs +958 -0
  634. package/dist/web/lib/sessionModel.mjs.map +1 -0
  635. package/dist/web/lib/sessionProtocolCommands.cjs +196 -0
  636. package/dist/web/lib/sessionProtocolCommands.cjs.map +1 -0
  637. package/dist/web/lib/sessionProtocolCommands.d.mts +15 -0
  638. package/dist/web/lib/sessionProtocolCommands.d.mts.map +1 -0
  639. package/dist/web/lib/sessionProtocolCommands.mjs +193 -0
  640. package/dist/web/lib/sessionProtocolCommands.mjs.map +1 -0
  641. package/dist/web/lib/sessionRailModel.cjs +107 -0
  642. package/dist/web/lib/sessionRailModel.cjs.map +1 -0
  643. package/dist/web/lib/sessionRailModel.d.mts +38 -0
  644. package/dist/web/lib/sessionRailModel.d.mts.map +1 -0
  645. package/dist/web/lib/sessionRailModel.mjs +104 -0
  646. package/dist/web/lib/sessionRailModel.mjs.map +1 -0
  647. package/dist/web/lib/sessionSummary.cjs +58 -0
  648. package/dist/web/lib/sessionSummary.cjs.map +1 -0
  649. package/dist/web/lib/sessionSummary.d.mts +39 -0
  650. package/dist/web/lib/sessionSummary.d.mts.map +1 -0
  651. package/dist/web/lib/sessionSummary.mjs +54 -0
  652. package/dist/web/lib/sessionSummary.mjs.map +1 -0
  653. package/dist/web/lib/sessionTranscriptRenderer.cjs +19 -0
  654. package/dist/web/lib/sessionTranscriptRenderer.cjs.map +1 -0
  655. package/dist/web/lib/sessionTranscriptRenderer.d.mts +11 -0
  656. package/dist/web/lib/sessionTranscriptRenderer.d.mts.map +1 -0
  657. package/dist/web/lib/sessionTranscriptRenderer.mjs +17 -0
  658. package/dist/web/lib/sessionTranscriptRenderer.mjs.map +1 -0
  659. package/dist/web/lib/settingsApi.cjs +237 -0
  660. package/dist/web/lib/settingsApi.cjs.map +1 -0
  661. package/dist/web/lib/settingsApi.d.mts +57 -0
  662. package/dist/web/lib/settingsApi.d.mts.map +1 -0
  663. package/dist/web/lib/settingsApi.mjs +230 -0
  664. package/dist/web/lib/settingsApi.mjs.map +1 -0
  665. package/dist/web/lib/settingsDraft.cjs +48 -0
  666. package/dist/web/lib/settingsDraft.cjs.map +1 -0
  667. package/dist/web/lib/settingsDraft.d.mts +28 -0
  668. package/dist/web/lib/settingsDraft.d.mts.map +1 -0
  669. package/dist/web/lib/settingsDraft.mjs +45 -0
  670. package/dist/web/lib/settingsDraft.mjs.map +1 -0
  671. package/dist/web/lib/settingsSections.cjs +108 -0
  672. package/dist/web/lib/settingsSections.cjs.map +1 -0
  673. package/dist/web/lib/settingsSections.d.mts +36 -0
  674. package/dist/web/lib/settingsSections.d.mts.map +1 -0
  675. package/dist/web/lib/settingsSections.mjs +105 -0
  676. package/dist/web/lib/settingsSections.mjs.map +1 -0
  677. package/dist/web/lib/statusLine.cjs +82 -0
  678. package/dist/web/lib/statusLine.cjs.map +1 -0
  679. package/dist/web/lib/statusLine.d.mts +27 -0
  680. package/dist/web/lib/statusLine.d.mts.map +1 -0
  681. package/dist/web/lib/statusLine.mjs +79 -0
  682. package/dist/web/lib/statusLine.mjs.map +1 -0
  683. package/dist/web/lib/stepUp.cjs +41 -0
  684. package/dist/web/lib/stepUp.cjs.map +1 -0
  685. package/dist/web/lib/stepUp.d.mts +18 -0
  686. package/dist/web/lib/stepUp.d.mts.map +1 -0
  687. package/dist/web/lib/stepUp.mjs +41 -0
  688. package/dist/web/lib/stepUp.mjs.map +1 -0
  689. package/dist/web/lib/templateCatalog.cjs +123 -0
  690. package/dist/web/lib/templateCatalog.cjs.map +1 -0
  691. package/dist/web/lib/templateCatalog.d.mts +38 -0
  692. package/dist/web/lib/templateCatalog.d.mts.map +1 -0
  693. package/dist/web/lib/templateCatalog.mjs +118 -0
  694. package/dist/web/lib/templateCatalog.mjs.map +1 -0
  695. package/dist/web/lib/threadRenderer.cjs +25 -0
  696. package/dist/web/lib/threadRenderer.cjs.map +1 -0
  697. package/dist/web/lib/threadRenderer.d.mts +17 -0
  698. package/dist/web/lib/threadRenderer.d.mts.map +1 -0
  699. package/dist/web/lib/threadRenderer.mjs +23 -0
  700. package/dist/web/lib/threadRenderer.mjs.map +1 -0
  701. package/dist/web/lib/timelineGroups.cjs +83 -0
  702. package/dist/web/lib/timelineGroups.cjs.map +1 -0
  703. package/dist/web/lib/timelineGroups.d.mts +36 -0
  704. package/dist/web/lib/timelineGroups.d.mts.map +1 -0
  705. package/dist/web/lib/timelineGroups.mjs +81 -0
  706. package/dist/web/lib/timelineGroups.mjs.map +1 -0
  707. package/dist/web/lib/toolCompletionTabs.cjs +98 -0
  708. package/dist/web/lib/toolCompletionTabs.cjs.map +1 -0
  709. package/dist/web/lib/toolCompletionTabs.d.mts +14 -0
  710. package/dist/web/lib/toolCompletionTabs.d.mts.map +1 -0
  711. package/dist/web/lib/toolCompletionTabs.mjs +98 -0
  712. package/dist/web/lib/toolCompletionTabs.mjs.map +1 -0
  713. package/dist/web/lib/toolMessageProps.cjs +19 -0
  714. package/dist/web/lib/toolMessageProps.cjs.map +1 -0
  715. package/dist/web/lib/toolMessageProps.d.mts +7 -0
  716. package/dist/web/lib/toolMessageProps.d.mts.map +1 -0
  717. package/dist/web/lib/toolMessageProps.mjs +19 -0
  718. package/dist/web/lib/toolMessageProps.mjs.map +1 -0
  719. package/dist/web/lib/toolPrompt.cjs +44 -0
  720. package/dist/web/lib/toolPrompt.cjs.map +1 -0
  721. package/dist/web/lib/toolPrompt.d.mts +34 -0
  722. package/dist/web/lib/toolPrompt.d.mts.map +1 -0
  723. package/dist/web/lib/toolPrompt.mjs +44 -0
  724. package/dist/web/lib/toolPrompt.mjs.map +1 -0
  725. package/dist/web/lib/transport.cjs +57 -0
  726. package/dist/web/lib/transport.cjs.map +1 -0
  727. package/dist/web/lib/transport.d.mts +40 -0
  728. package/dist/web/lib/transport.d.mts.map +1 -0
  729. package/dist/web/lib/transport.mjs +50 -0
  730. package/dist/web/lib/transport.mjs.map +1 -0
  731. package/dist/web/lib/useSessionMcp.cjs +65 -0
  732. package/dist/web/lib/useSessionMcp.cjs.map +1 -0
  733. package/dist/web/lib/useSessionMcp.d.mts +15 -0
  734. package/dist/web/lib/useSessionMcp.d.mts.map +1 -0
  735. package/dist/web/lib/useSessionMcp.mjs +65 -0
  736. package/dist/web/lib/useSessionMcp.mjs.map +1 -0
  737. package/dist/web/lib/webauthnClient.cjs +110 -0
  738. package/dist/web/lib/webauthnClient.cjs.map +1 -0
  739. package/dist/web/lib/webauthnClient.d.mts +32 -0
  740. package/dist/web/lib/webauthnClient.d.mts.map +1 -0
  741. package/dist/web/lib/webauthnClient.mjs +106 -0
  742. package/dist/web/lib/webauthnClient.mjs.map +1 -0
  743. package/dist/web/lib/webmcpSimulator.cjs +105 -0
  744. package/dist/web/lib/webmcpSimulator.cjs.map +1 -0
  745. package/dist/web/lib/webmcpSimulator.mjs +105 -0
  746. package/dist/web/lib/webmcpSimulator.mjs.map +1 -0
  747. package/dist/web/stores/captureStore.cjs +137 -0
  748. package/dist/web/stores/captureStore.cjs.map +1 -0
  749. package/dist/web/stores/captureStore.d.mts +13 -0
  750. package/dist/web/stores/captureStore.d.mts.map +1 -0
  751. package/dist/web/stores/captureStore.mjs +133 -0
  752. package/dist/web/stores/captureStore.mjs.map +1 -0
  753. package/dist/web/stores/composerStore.cjs +390 -0
  754. package/dist/web/stores/composerStore.cjs.map +1 -0
  755. package/dist/web/stores/composerStore.d.mts +101 -0
  756. package/dist/web/stores/composerStore.d.mts.map +1 -0
  757. package/dist/web/stores/composerStore.mjs +370 -0
  758. package/dist/web/stores/composerStore.mjs.map +1 -0
  759. package/dist/web/stores/composerSubmissionStore.cjs +88 -0
  760. package/dist/web/stores/composerSubmissionStore.cjs.map +1 -0
  761. package/dist/web/stores/composerSubmissionStore.d.mts +11 -0
  762. package/dist/web/stores/composerSubmissionStore.d.mts.map +1 -0
  763. package/dist/web/stores/composerSubmissionStore.mjs +87 -0
  764. package/dist/web/stores/composerSubmissionStore.mjs.map +1 -0
  765. package/dist/web/stores/dashboardStateStore.cjs +35 -0
  766. package/dist/web/stores/dashboardStateStore.cjs.map +1 -0
  767. package/dist/web/stores/dashboardStateStore.d.mts +11 -0
  768. package/dist/web/stores/dashboardStateStore.d.mts.map +1 -0
  769. package/dist/web/stores/dashboardStateStore.mjs +33 -0
  770. package/dist/web/stores/dashboardStateStore.mjs.map +1 -0
  771. package/dist/web/stores/devProxyStore.cjs +76 -0
  772. package/dist/web/stores/devProxyStore.cjs.map +1 -0
  773. package/dist/web/stores/devProxyStore.d.mts +25 -0
  774. package/dist/web/stores/devProxyStore.d.mts.map +1 -0
  775. package/dist/web/stores/devProxyStore.mjs +73 -0
  776. package/dist/web/stores/devProxyStore.mjs.map +1 -0
  777. package/dist/web/stores/dialogDraftStore.cjs +38 -0
  778. package/dist/web/stores/dialogDraftStore.cjs.map +1 -0
  779. package/dist/web/stores/dialogDraftStore.d.mts +13 -0
  780. package/dist/web/stores/dialogDraftStore.d.mts.map +1 -0
  781. package/dist/web/stores/dialogDraftStore.mjs +36 -0
  782. package/dist/web/stores/dialogDraftStore.mjs.map +1 -0
  783. package/dist/web/stores/fileLinkModesStore.cjs +20 -0
  784. package/dist/web/stores/fileLinkModesStore.cjs.map +1 -0
  785. package/dist/web/stores/fileLinkModesStore.d.mts +5 -0
  786. package/dist/web/stores/fileLinkModesStore.d.mts.map +1 -0
  787. package/dist/web/stores/fileLinkModesStore.mjs +20 -0
  788. package/dist/web/stores/fileLinkModesStore.mjs.map +1 -0
  789. package/dist/web/stores/menuStore.cjs +85 -0
  790. package/dist/web/stores/menuStore.cjs.map +1 -0
  791. package/dist/web/stores/menuStore.d.mts +42 -0
  792. package/dist/web/stores/menuStore.d.mts.map +1 -0
  793. package/dist/web/stores/menuStore.mjs +79 -0
  794. package/dist/web/stores/menuStore.mjs.map +1 -0
  795. package/dist/web/stores/newSessionStore.cjs +93 -0
  796. package/dist/web/stores/newSessionStore.cjs.map +1 -0
  797. package/dist/web/stores/newSessionStore.d.mts +30 -0
  798. package/dist/web/stores/newSessionStore.d.mts.map +1 -0
  799. package/dist/web/stores/newSessionStore.mjs +86 -0
  800. package/dist/web/stores/newSessionStore.mjs.map +1 -0
  801. package/dist/web/stores/pagedTranscriptStore.cjs +235 -0
  802. package/dist/web/stores/pagedTranscriptStore.cjs.map +1 -0
  803. package/dist/web/stores/pagedTranscriptStore.d.mts +12 -0
  804. package/dist/web/stores/pagedTranscriptStore.d.mts.map +1 -0
  805. package/dist/web/stores/pagedTranscriptStore.mjs +235 -0
  806. package/dist/web/stores/pagedTranscriptStore.mjs.map +1 -0
  807. package/dist/web/stores/paletteStore.cjs +37 -0
  808. package/dist/web/stores/paletteStore.cjs.map +1 -0
  809. package/dist/web/stores/paletteStore.d.mts +14 -0
  810. package/dist/web/stores/paletteStore.d.mts.map +1 -0
  811. package/dist/web/stores/paletteStore.mjs +34 -0
  812. package/dist/web/stores/paletteStore.mjs.map +1 -0
  813. package/dist/web/stores/railDialogStore.cjs +105 -0
  814. package/dist/web/stores/railDialogStore.cjs.map +1 -0
  815. package/dist/web/stores/railDialogStore.d.mts +32 -0
  816. package/dist/web/stores/railDialogStore.d.mts.map +1 -0
  817. package/dist/web/stores/railDialogStore.mjs +97 -0
  818. package/dist/web/stores/railDialogStore.mjs.map +1 -0
  819. package/dist/web/stores/remoteAccessStore.cjs +216 -0
  820. package/dist/web/stores/remoteAccessStore.cjs.map +1 -0
  821. package/dist/web/stores/remoteAccessStore.d.mts +48 -0
  822. package/dist/web/stores/remoteAccessStore.d.mts.map +1 -0
  823. package/dist/web/stores/remoteAccessStore.mjs +202 -0
  824. package/dist/web/stores/remoteAccessStore.mjs.map +1 -0
  825. package/dist/web/stores/sessionChannelHoldsStore.cjs +43 -0
  826. package/dist/web/stores/sessionChannelHoldsStore.cjs.map +1 -0
  827. package/dist/web/stores/sessionChannelHoldsStore.d.mts +9 -0
  828. package/dist/web/stores/sessionChannelHoldsStore.d.mts.map +1 -0
  829. package/dist/web/stores/sessionChannelHoldsStore.mjs +42 -0
  830. package/dist/web/stores/sessionChannelHoldsStore.mjs.map +1 -0
  831. package/dist/web/stores/sessionStore.cjs +610 -0
  832. package/dist/web/stores/sessionStore.cjs.map +1 -0
  833. package/dist/web/stores/sessionStore.d.mts +116 -0
  834. package/dist/web/stores/sessionStore.d.mts.map +1 -0
  835. package/dist/web/stores/sessionStore.mjs +568 -0
  836. package/dist/web/stores/sessionStore.mjs.map +1 -0
  837. package/dist/web/stores/sessionsStore.cjs +272 -0
  838. package/dist/web/stores/sessionsStore.cjs.map +1 -0
  839. package/dist/web/stores/sessionsStore.d.mts +74 -0
  840. package/dist/web/stores/sessionsStore.d.mts.map +1 -0
  841. package/dist/web/stores/sessionsStore.mjs +257 -0
  842. package/dist/web/stores/sessionsStore.mjs.map +1 -0
  843. package/dist/web/stores/settingsDraftStore.cjs +138 -0
  844. package/dist/web/stores/settingsDraftStore.cjs.map +1 -0
  845. package/dist/web/stores/settingsDraftStore.d.mts +27 -0
  846. package/dist/web/stores/settingsDraftStore.d.mts.map +1 -0
  847. package/dist/web/stores/settingsDraftStore.mjs +132 -0
  848. package/dist/web/stores/settingsDraftStore.mjs.map +1 -0
  849. package/dist/web/stores/templateStore.cjs +136 -0
  850. package/dist/web/stores/templateStore.cjs.map +1 -0
  851. package/dist/web/stores/templateStore.d.mts +20 -0
  852. package/dist/web/stores/templateStore.d.mts.map +1 -0
  853. package/dist/web/stores/templateStore.mjs +131 -0
  854. package/dist/web/stores/templateStore.mjs.map +1 -0
  855. package/dist/web/stores/themeStore.cjs +42 -0
  856. package/dist/web/stores/themeStore.cjs.map +1 -0
  857. package/dist/web/stores/themeStore.d.mts +20 -0
  858. package/dist/web/stores/themeStore.d.mts.map +1 -0
  859. package/dist/web/stores/themeStore.mjs +39 -0
  860. package/dist/web/stores/themeStore.mjs.map +1 -0
  861. package/dist/web/stores/threadStore.cjs +122 -0
  862. package/dist/web/stores/threadStore.cjs.map +1 -0
  863. package/dist/web/stores/threadStore.d.mts +24 -0
  864. package/dist/web/stores/threadStore.d.mts.map +1 -0
  865. package/dist/web/stores/threadStore.mjs +114 -0
  866. package/dist/web/stores/threadStore.mjs.map +1 -0
  867. package/dist/web/stores/toolPromptStore.cjs +15 -0
  868. package/dist/web/stores/toolPromptStore.cjs.map +1 -0
  869. package/dist/web/stores/toolPromptStore.d.mts +23 -0
  870. package/dist/web/stores/toolPromptStore.d.mts.map +1 -0
  871. package/dist/web/stores/toolPromptStore.mjs +14 -0
  872. package/dist/web/stores/toolPromptStore.mjs.map +1 -0
  873. package/dist/web/stores/transientTabsStore.cjs +66 -0
  874. package/dist/web/stores/transientTabsStore.cjs.map +1 -0
  875. package/dist/web/stores/transientTabsStore.d.mts +21 -0
  876. package/dist/web/stores/transientTabsStore.d.mts.map +1 -0
  877. package/dist/web/stores/transientTabsStore.mjs +59 -0
  878. package/dist/web/stores/transientTabsStore.mjs.map +1 -0
  879. package/dist/web/stores/uiStore.cjs +47 -0
  880. package/dist/web/stores/uiStore.cjs.map +1 -0
  881. package/dist/web/stores/uiStore.d.mts +18 -0
  882. package/dist/web/stores/uiStore.d.mts.map +1 -0
  883. package/dist/web/stores/uiStore.mjs +45 -0
  884. package/dist/web/stores/uiStore.mjs.map +1 -0
  885. package/dist/web/stores/useOpenTab.cjs +31 -0
  886. package/dist/web/stores/useOpenTab.cjs.map +1 -0
  887. package/dist/web/stores/useOpenTab.d.mts +9 -0
  888. package/dist/web/stores/useOpenTab.d.mts.map +1 -0
  889. package/dist/web/stores/useOpenTab.mjs +31 -0
  890. package/dist/web/stores/useOpenTab.mjs.map +1 -0
  891. package/dist/web/stores/usePluginSlotProps.cjs +115 -0
  892. package/dist/web/stores/usePluginSlotProps.cjs.map +1 -0
  893. package/dist/web/stores/usePluginSlotProps.d.mts +6 -0
  894. package/dist/web/stores/usePluginSlotProps.d.mts.map +1 -0
  895. package/dist/web/stores/usePluginSlotProps.mjs +115 -0
  896. package/dist/web/stores/usePluginSlotProps.mjs.map +1 -0
  897. package/dist/web/stores/useToolPrompt.cjs +42 -0
  898. package/dist/web/stores/useToolPrompt.cjs.map +1 -0
  899. package/dist/web/stores/useToolPrompt.d.mts +14 -0
  900. package/dist/web/stores/useToolPrompt.d.mts.map +1 -0
  901. package/dist/web/stores/useToolPrompt.mjs +42 -0
  902. package/dist/web/stores/useToolPrompt.mjs.map +1 -0
  903. package/dist/web/stores/useWebPluginRegistry.cjs +11 -0
  904. package/dist/web/stores/useWebPluginRegistry.cjs.map +1 -0
  905. package/dist/web/stores/useWebPluginRegistry.d.mts +5 -0
  906. package/dist/web/stores/useWebPluginRegistry.d.mts.map +1 -0
  907. package/dist/web/stores/useWebPluginRegistry.mjs +11 -0
  908. package/dist/web/stores/useWebPluginRegistry.mjs.map +1 -0
  909. package/dist/web/stores/workspaceAdmissionStore.cjs +67 -0
  910. package/dist/web/stores/workspaceAdmissionStore.cjs.map +1 -0
  911. package/dist/web/stores/workspaceAdmissionStore.d.mts +24 -0
  912. package/dist/web/stores/workspaceAdmissionStore.d.mts.map +1 -0
  913. package/dist/web/stores/workspaceAdmissionStore.mjs +64 -0
  914. package/dist/web/stores/workspaceAdmissionStore.mjs.map +1 -0
  915. package/dist/web/stores/workspacesStore.cjs +83 -0
  916. package/dist/web/stores/workspacesStore.cjs.map +1 -0
  917. package/dist/web/stores/workspacesStore.d.mts +17 -0
  918. package/dist/web/stores/workspacesStore.d.mts.map +1 -0
  919. package/dist/web/stores/workspacesStore.mjs +78 -0
  920. package/dist/web/stores/workspacesStore.mjs.map +1 -0
  921. package/llms.txt +3 -0
  922. package/package.json +107 -0
  923. package/styles/dashboard.css +2 -0
  924. package/styles/preview.css +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionModel.cjs","names":["BUILTIN_COMMANDS","DIALOG_ANSWERED_TYPE","parseDoomNotificationEntry"],"sources":["../../../src/web/lib/sessionModel.ts"],"sourcesContent":["import type { SessionLifecycle } from '@agimon-ai/po-core/sessionProtocol';\nimport type { ToolResultView } from '@agimon-ai/po-core/web';\n\nimport {\n AGENT_MODEL_ENTRY_TYPE,\n CONTEXT_ENTRY_TYPE,\n type ContextProjection,\n DIALOG_ANSWERED_TYPE,\n MINOR_MODE_ENTRY_TYPE,\n type MinorModeProjection,\n PROFILE_IDENTITY_ENTRY_TYPE,\n} from '../../types/hub';\nimport { parseDoomNotificationEntry } from '../../types/notification';\nimport { BUILTIN_COMMANDS } from './commands';\n\nexport type EntryKind = 'user' | 'assistant' | 'tool' | 'notice';\n\nexport interface UserImage {\n data: string;\n mimeType: string;\n}\n\nexport interface UserEntry {\n kind: 'user';\n id: string;\n text: string;\n images?: UserImage[];\n}\n\nexport interface AssistantEntry {\n kind: 'assistant';\n id: string;\n text: string;\n thinking: string;\n streaming: boolean;\n /** Provider model, used with the message timestamp to reconcile repeated starts. */\n model?: string;\n /**\n * The persona active when this message was written.\n *\n * Stamped at creation rather than read from current state, so a profile\n * switch leaves earlier messages showing who actually wrote them. Replay\n * reproduces it because the identity entry is folded in journal order.\n */\n identity?: ProfileIdentity;\n}\n\n/** Display name and avatar of the persona a message was written under. */\nexport interface ProfileIdentity {\n profile: string;\n name?: string;\n icon?: string;\n}\n\nexport interface ToolEntry {\n kind: 'tool';\n id: string;\n toolCallId: string;\n name: string;\n /** The call arguments as the frame carried them, for a plugin's own renderer. */\n args: Record<string, unknown>;\n argSummary: string;\n /** The newest result, partial while running; null before the tool produced any. */\n result: ToolResultView | null;\n output: string;\n isError: boolean;\n running: boolean;\n}\n\nexport interface NoticeEntry {\n kind: 'notice';\n id: string;\n text: string;\n tone: 'info' | 'error';\n}\n\nexport interface SettledEntry {\n kind: 'settled';\n id: string;\n tools: number;\n}\n\nexport interface QueuedEntry {\n kind: 'queued';\n id: string;\n text: string;\n delivery?: 'steer' | 'followUp' | 'nextRun';\n scheduling?: 'automatic' | 'held';\n disposition?: 'pending' | 'handoff' | 'uncertain';\n images?: UserImage[];\n}\n\nexport type TimelineEntry = (UserEntry | AssistantEntry | ToolEntry | NoticeEntry | SettledEntry | QueuedEntry) & {\n timestamp?: number;\n};\n\nexport interface SessionStats {\n cost: number;\n totalTokens: number;\n contextPercent: number | null;\n contextTokens: number | null;\n contextWindow: number | null;\n}\n\nexport interface AgentInfo {\n model: string;\n /** The provider Pi resolved the model under; set_model needs both halves. */\n provider: string;\n thinkingLevel: string;\n sessionId: string;\n sessionName: string;\n messageCount: number;\n isStreaming: boolean;\n}\n\nexport interface CommandInfo {\n name: string;\n description: string;\n}\n\n/** One model the session can switch to, as get_available_models lists it. */\nexport interface ModelChoice {\n provider: string;\n id: string;\n name: string;\n reasoning: boolean;\n}\n\nexport type DialogMethod = 'select' | 'confirm' | 'input' | 'editor';\n\nexport interface DialogRequest {\n id: string;\n method: DialogMethod;\n title: string;\n message: string;\n options: string[];\n placeholder: string;\n prefill: string;\n}\n\nexport interface EditorTextRequest {\n append?: boolean;\n id: string;\n text: string;\n}\n\nexport interface SessionState {\n entries: TimelineEntry[];\n hasNewerHistory: boolean;\n /** Running tool frames kept outside the protocol-owned transcript so prompt plugins can claim their dialogs. */\n activeTools: ToolEntry[];\n /**\n * Footer status entries keyed as the publishing extension named them, raw so\n * the colour survives. A key that is absent means the package is not in this\n * composition; a key holding an empty string means it is loaded but off.\n */\n statuses: Record<string, string>;\n /** Widget keys the session has announced, the only signal some modes give. */\n widgets: string[];\n streaming: boolean;\n settled: boolean;\n /** Latest authoritative server execution and retained-input snapshot. */\n lifecycle: SessionLifecycle | null;\n stats: SessionStats | null;\n /**\n * Cost the assistant message now streaming has run up, on top of `stats`.\n *\n * Pi answers `get_session_stats` once per message at best, so without this\n * the cost chip sits still for the length of a turn. Zero whenever no\n * message is streaming or the provider has not reported yet.\n */\n liveCost: number;\n agent: AgentInfo | null;\n commands: CommandInfo[];\n /** Models the session offered, empty until the picker asks. */\n models: ModelChoice[];\n /** Thinking levels the current model accepts, empty until the picker asks. */\n fastMode: boolean;\n /** True while the session's local agent is blocked from starting turns. */\n agentLocked: boolean;\n thinkingLevels: string[];\n dialog: DialogRequest | null;\n /** Latest fire-and-forget editor replacement requested by a session extension. */\n editorTextRequest: EditorTextRequest | null;\n /** The runtime's minor-mode catalog as last journaled, or null before it reports. */\n minorModes: MinorModeProjection | null;\n /** What the session is composed of, as last journaled, or null before it reports. */\n context: ContextProjection | null;\n /**\n * The persona most recently journaled, used to stamp assistant messages as\n * they are created. Not a projection: folding it forward in journal order is\n * what keeps a pre-switch message attributed to the persona that wrote it.\n */\n profileIdentity: ProfileIdentity | null;\n /** Tool calls seen since the current run began, reported when it settles. */\n toolsThisRun: number;\n /**\n * Journal entry ids already folded into the timeline. The hub re-reads the\n * journal on every attach, so a reconnect replays entries this page already\n * has; folding by id is what keeps a restored transcript from doubling.\n */\n restoredIds: string[];\n /**\n * Prompts this page put on screen before the journal recorded them, newest\n * last. The cockpit shows your message the moment you send it, but the\n * journal is what carries every message, including the ones an extension\n * sends on your behalf. Matching a journal message against this list is what\n * lets both appear exactly once.\n */\n pendingUserEntries: { id: string; text: string; images?: UserImage[] }[];\n /**\n * Prompts an authoritative transcript already folded into the entry this page\n * rendered, newest last.\n *\n * A prompt reaches the timeline from two directions, Pi's protocol snapshot\n * and the session journal, and whichever lands first consumes the pending\n * record. Without this the second arrival has nothing to match and appends a\n * second copy of the message, which is what a reader sees when transcript\n * ownership returns to the journal mid-session.\n */\n reconciledUserEntries: { id: string; text: string; images?: UserImage[] }[];\n /** Stable local ids for optimistic prompts after Pi publishes their canonical transcript entries. */\n protocolUserEntryIds: Record<string, string>;\n nextId: number;\n}\n\nexport const initialSessionState: SessionState = {\n hasNewerHistory: false,\n entries: [],\n activeTools: [],\n statuses: {},\n widgets: [],\n streaming: false,\n settled: false,\n lifecycle: null,\n stats: null,\n liveCost: 0,\n agent: null,\n commands: [],\n models: [],\n fastMode: false,\n agentLocked: false,\n thinkingLevels: [],\n dialog: null,\n editorTextRequest: null,\n minorModes: null,\n context: null,\n profileIdentity: null,\n toolsThisRun: 0,\n restoredIds: [],\n pendingUserEntries: [],\n reconciledUserEntries: [],\n protocolUserEntryIds: {},\n nextId: 1,\n};\n\ntype Frame = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is Frame {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction asString(value: unknown, fallback = ''): string {\n return typeof value === 'string' ? value : fallback;\n}\n\nfunction asNumber(value: unknown): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\n\n/** Joins the text blocks of a Pi content array, ignoring non-text parts. */\nexport function textFromContent(content: unknown): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n return content\n .map((block) => (isRecord(block) && block.type === 'text' ? asString(block.text) : ''))\n .filter(Boolean)\n .join('');\n}\n\nconst SUPPORTED_IMAGE_MIME_TYPES = new Set(['image/png', 'image/jpeg', 'image/gif', 'image/webp']);\n\nexport function isSupportedImageMimeType(mimeType: string): boolean {\n return SUPPORTED_IMAGE_MIME_TYPES.has(mimeType);\n}\n\n/** Keeps only image blocks the cockpit can safely render as data URLs. */\nexport function imagesFromContent(content: unknown): UserImage[] {\n if (!Array.isArray(content)) return [];\n return content.flatMap((block) => {\n if (!isRecord(block) || block.type !== 'image') return [];\n const data = asString(block.data);\n const mimeType = asString(block.mimeType);\n return data && isSupportedImageMimeType(mimeType) ? [{ data, mimeType }] : [];\n });\n}\n\n/** A one-line description of a tool call, good enough for a card header. */\nexport function summariseArgs(args: unknown): string {\n if (!isRecord(args)) return '';\n for (const key of ['command', 'file_path', 'filePath', 'path', 'pattern', 'query', 'url']) {\n const value = args[key];\n if (typeof value === 'string' && value.length > 0) return value;\n }\n const keys = Object.keys(args);\n return keys.length > 0 ? keys.join(', ') : '';\n}\n\nfunction withEntry(state: SessionState, entry: TimelineEntry): SessionState {\n return { ...state, entries: [...state.entries, entry], nextId: state.nextId + 1 };\n}\n\nfunction withChronologicalEntry(state: SessionState, entry: TimelineEntry): SessionState {\n const timestamp = entry.timestamp;\n if (timestamp === undefined) return withEntry(state, entry);\n const index = state.entries.findIndex(\n (existing) => existing.timestamp !== undefined && existing.timestamp > timestamp,\n );\n if (index === -1) return withEntry(state, entry);\n return {\n ...state,\n entries: [...state.entries.slice(0, index), entry, ...state.entries.slice(index)],\n nextId: state.nextId + 1,\n };\n}\n\nfunction replaceEntry(state: SessionState, id: string, next: TimelineEntry): SessionState {\n return { ...state, entries: state.entries.map((entry) => (entry.id === id ? next : entry)) };\n}\n\nfunction openAssistant(state: SessionState): { state: SessionState; entry: AssistantEntry } {\n const last = state.entries[state.entries.length - 1];\n if (last && last.kind === 'assistant' && last.streaming) return { state, entry: last };\n const entry: AssistantEntry = {\n kind: 'assistant',\n id: `a${state.nextId}`,\n text: '',\n thinking: '',\n streaming: true,\n ...(state.profileIdentity === null ? {} : { identity: state.profileIdentity }),\n };\n return { state: withEntry(state, entry), entry };\n}\n\nfunction applyAssistantDelta(state: SessionState, event: Frame): SessionState {\n const type = asString(event.type);\n if (type !== 'text_delta' && type !== 'thinking_delta' && type !== 'text_start' && type !== 'thinking_start') {\n return state;\n }\n const opened = openAssistant(state);\n const delta = asString(event.delta);\n if (!delta) return opened.state;\n const next: AssistantEntry =\n type === 'thinking_delta'\n ? { ...opened.entry, thinking: opened.entry.thinking + delta }\n : { ...opened.entry, text: opened.entry.text + delta };\n return replaceEntry(opened.state, opened.entry.id, next);\n}\n\nfunction closeAssistant(state: SessionState, message: unknown): SessionState {\n const index = state.entries.findLastIndex((entry) => entry.kind === 'assistant' && entry.streaming);\n if (index === -1) return state;\n const current = state.entries[index] as AssistantEntry;\n const content = isRecord(message) ? message.content : undefined;\n const hasContent = typeof content === 'string' || Array.isArray(content);\n const next: AssistantEntry = {\n ...current,\n text: hasContent ? textFromContent(content) : current.text,\n thinking: hasContent\n ? thinkingFromContent(Array.isArray(content) ? content.filter(isRecord) : [])\n : current.thinking,\n streaming: false,\n };\n const entries = [...state.entries];\n if (next.text || next.thinking) entries[index] = next;\n else entries.splice(index, 1);\n return { ...state, entries };\n}\n\nfunction toolEntryFromStart(frame: Frame, id: string): ToolEntry {\n return {\n kind: 'tool',\n id,\n toolCallId: asString(frame.toolCallId),\n name: asString(frame.toolName, 'tool'),\n args: isRecord(frame.args) ? frame.args : {},\n argSummary: summariseArgs(frame.args),\n result: null,\n output: '',\n isError: false,\n running: true,\n };\n}\n\nfunction applyToolStart(state: SessionState, frame: Frame): SessionState {\n const closed = closeAssistant(state, undefined);\n const toolCallId = asString(frame.toolCallId);\n if (toolCallId !== '' && closed.entries.some((entry) => entry.kind === 'tool' && entry.toolCallId === toolCallId)) {\n return { ...closed, toolsThisRun: closed.toolsThisRun + 1 };\n }\n const opened = withEntry(closed, toolEntryFromStart(frame, `t${state.nextId}`));\n return { ...opened, toolsThisRun: opened.toolsThisRun + 1 };\n}\n\n/**\n * The result a tool frame carries, kept whole: the text blocks feed the\n * default card, and the content plus details reach the owning plugin's\n * renderer untouched, the way Pi hands them to a TUI renderResult.\n */\nfunction toolResult(raw: unknown): ToolResultView | null {\n if (!isRecord(raw)) return null;\n return { content: Array.isArray(raw.content) ? raw.content : [], details: raw.details };\n}\n\nfunction updateTool(state: SessionState, toolCallId: string, patch: Partial<ToolEntry>): SessionState {\n const index = state.entries.findLastIndex((entry) => entry.kind === 'tool' && entry.toolCallId === toolCallId);\n if (index === -1) return state;\n const entries = [...state.entries];\n entries[index] = { ...(entries[index] as ToolEntry), ...patch };\n return { ...state, entries };\n}\n\nfunction modelChoice(value: unknown): ModelChoice | undefined {\n if (!isRecord(value) || typeof value.id !== 'string' || typeof value.provider !== 'string') return undefined;\n return {\n provider: value.provider,\n id: value.id,\n name: asString(value.name, value.id),\n reasoning: value.reasoning === true,\n };\n}\n\nfunction applyResponse(state: SessionState, frame: Frame): SessionState {\n const command = asString(frame.command);\n if (frame.success === false && command !== 'get_state' && command !== 'get_session_stats') {\n return withEntry(state, {\n kind: 'notice',\n id: `n${state.nextId}`,\n text: asString(frame.error, `The agent refused ${command}.`),\n tone: 'error',\n });\n }\n const data = frame.data;\n if (!isRecord(data)) return state;\n\n if (command === 'get_state') {\n const model = isRecord(data.model) ? asString(data.model.id ?? data.model.name, 'unknown') : 'unknown';\n const provider = isRecord(data.model) ? asString(data.model.provider) : '';\n // get_state is a separate RPC and can arrive after a newer replicated lifecycle snapshot.\n const streaming =\n state.lifecycle !== null\n ? state.lifecycle.operation !== null\n : data.isStreaming === undefined\n ? state.streaming\n : data.isStreaming === true;\n return {\n ...state,\n streaming,\n settled: !streaming,\n fastMode: data.fastMode === true,\n agentLocked: data.agentLocked === true,\n agent: {\n model,\n provider,\n thinkingLevel: asString(data.thinkingLevel, state.agent?.thinkingLevel ?? 'unknown'),\n sessionId: asString(data.sessionId, state.agent?.sessionId ?? ''),\n sessionName: asString(data.sessionName, state.agent?.sessionName ?? ''),\n messageCount: asNumber(data.messageCount) ?? state.agent?.messageCount ?? 0,\n isStreaming: streaming,\n },\n };\n }\n\n if (command === 'navigate_tree' && data.cancelled !== true) {\n const editorText = asString(data.editorText);\n return {\n ...state,\n editorTextRequest: {\n id: `rewind:${asString(data.leafId, 'root')}:${String(state.nextId)}`,\n text: editorText,\n },\n };\n }\n\n if (command === 'get_available_models') {\n const models = Array.isArray(data.models) ? data.models.map(modelChoice).filter((m) => m !== undefined) : [];\n return { ...state, models };\n }\n\n if (command === 'get_available_thinking_levels') {\n const levels = Array.isArray(data.levels) ? data.levels.filter((level) => typeof level === 'string') : [];\n return { ...state, thinkingLevels: levels };\n }\n\n // Pi echoes the model it switched to; get_state follows for the rest.\n if (command === 'set_model' && state.agent) {\n const chosen = modelChoice(data);\n return chosen ? { ...state, agent: { ...state.agent, model: chosen.id, provider: chosen.provider } } : state;\n }\n\n if (command === 'get_session_stats') {\n const tokens = isRecord(data.tokens) ? asNumber(data.tokens.total) : null;\n const usage = isRecord(data.contextUsage) ? data.contextUsage : undefined;\n return {\n ...state,\n stats: {\n cost: asNumber(data.cost) ?? 0,\n totalTokens: tokens ?? 0,\n contextPercent: usage ? asNumber(usage.percent) : null,\n contextTokens: usage ? asNumber(usage.tokens) : null,\n contextWindow: usage ? asNumber(usage.contextWindow) : null,\n },\n // This answer already counts the message the delta was tracking, so\n // keeping the delta would bill it twice. Clearing it here rather than at\n // `message_end` is what stops the chip dipping while the answer is in\n // flight.\n liveCost: 0,\n };\n }\n\n if (command === 'get_commands') {\n const raw = Array.isArray(data.commands) ? data.commands : [];\n const reported = raw\n .filter(isRecord)\n .map((entry) => ({ name: asString(entry.name), description: asString(entry.description) }))\n .filter((entry) => entry.name.length > 0);\n // Pi does not report its own built-ins here, so the cockpit adds the ones\n // it can run. An extension that claims the same name keeps it: that one\n // reaches the session through the prompt path and is what the user gets.\n const claimed = new Set(reported.map((entry) => entry.name));\n const commands = [...reported, ...BUILTIN_COMMANDS.filter((entry) => !claimed.has(entry.name))];\n return { ...state, commands };\n }\n\n return state;\n}\n\n/**\n * Folds the streaming message's own cost into the view model.\n *\n * Pi builds `message_update.usage` from the in-progress message's usage, not\n * from a session running total, so this is added to the last figure Pi\n * reported rather than replacing it. Providers that only price a message once\n * it completes report zero here, and the chip then steps at each message\n * instead of streaming, which is the provider's granularity showing through\n * rather than a fault.\n */\nfunction applyLiveUsage(state: SessionState, frame: Frame): SessionState {\n if (asString(frame.type) !== 'message_update') return state;\n const usage = isRecord(frame.usage) ? frame.usage : undefined;\n const cost = usage && isRecord(usage.cost) ? (asNumber(usage.cost.total) ?? 0) : 0;\n if (state.liveCost === cost) return state;\n return { ...state, liveCost: cost };\n}\n\nfunction applyStatus(state: SessionState, frame: Frame): SessionState {\n const key = asString(frame.statusKey);\n if (!key) return state;\n const text = typeof frame.statusText === 'string' ? frame.statusText : '';\n if (state.statuses[key] === text) return state;\n return { ...state, statuses: { ...state.statuses, [key]: text } };\n}\n\nfunction applyContextSelection(state: SessionState, projection: ContextProjection): SessionState {\n const selection = projection.selection;\n if (!selection || !selection.majorMode || !Array.isArray(selection.domains)) return { ...state, context: projection };\n const profile = typeof selection.profile === 'string' ? selection.profile : '';\n const status = [profile ? `*${profile}*` : undefined, `[${selection.majorMode}]`, selection.domains.join(',')]\n .filter(Boolean)\n .join(':');\n return {\n ...state,\n context: projection,\n statuses: {\n ...state.statuses,\n 'doom-major-mode': status,\n 'doom-domain': selection.domains.join(','),\n 'doom-profile': profile,\n },\n };\n}\n\nfunction applyWidget(state: SessionState, frame: Frame): SessionState {\n const key = asString(frame.widgetKey);\n if (!key) return state;\n const present = Array.isArray(frame.widgetLines) && frame.widgetLines.length > 0;\n if (!present) {\n if (!state.widgets.includes(key)) return state;\n return { ...state, widgets: state.widgets.filter((widget) => widget !== key) };\n }\n if (state.widgets.includes(key)) return state;\n return { ...state, widgets: [...state.widgets, key] };\n}\n\nfunction applyDialog(state: SessionState, frame: Frame): SessionState {\n const method = asString(frame.method);\n if (method === 'setStatus') return applyStatus(state, frame);\n if (method === 'setWidget') return applyWidget(state, frame);\n if (method === 'append_composer_text') {\n if (typeof frame.text !== 'string') return state;\n return { ...state, editorTextRequest: { id: asString(frame.id), text: frame.text, append: true } };\n }\n if (method === 'set_editor_text') {\n if (typeof frame.text !== 'string') return state;\n return { ...state, editorTextRequest: { id: asString(frame.id), text: frame.text } };\n }\n if (method !== 'select' && method !== 'confirm' && method !== 'input' && method !== 'editor') return state;\n const options = Array.isArray(frame.options) ? frame.options.map((option) => asString(option)).filter(Boolean) : [];\n return {\n ...state,\n dialog: {\n id: asString(frame.id),\n method,\n title: asString(frame.title, 'The agent needs an answer'),\n message: asString(frame.message),\n options,\n placeholder: asString(frame.placeholder),\n prefill: asString(frame.prefill),\n },\n };\n}\n\n/** The thinking blocks of a journalled assistant message, joined as one passage. */\nfunction thinkingFromContent(content: readonly Frame[]): string {\n return content\n .map((block) => (block.type === 'thinking' ? asString(block.thinking) : ''))\n .filter(Boolean)\n .join('');\n}\n\n/** Remembers a prompt this page rendered, so the journal's copy of it folds into the same entry. */\nfunction withPendingUser(state: SessionState, id: string, text: string, images: UserImage[] = []): SessionState {\n const pending = { id, text, ...(images.length > 0 ? { images } : {}) };\n return { ...state, pendingUserEntries: [...state.pendingUserEntries, pending] };\n}\n\n/**\n * Folds a journalled user message into the entry this page already rendered\n * for it, or returns undefined when no such entry exists.\n *\n * A message the cockpit sent is on screen before it reaches the journal, and a\n * queued one is on screen as queued until the run picks it up. Both are the\n * same message the journal later reports, so it settles the entry that stands\n * rather than adding a second copy of the text.\n *\n * A prompt Pi's protocol snapshot already claimed is matched here too. That\n * claim consumed the pending record, so without the second list a journalled\n * copy arriving after the run, which is what happens when transcript\n * ownership falls back to the journal, would read as a new message and be\n * appended below the settled divider.\n */\nfunction reconcilePendingUser(state: SessionState, text: string, images: UserImage[]): SessionState | undefined {\n const index = state.pendingUserEntries.findIndex((pending) => pending.text === text);\n const reconciledIndex = index === -1 ? state.reconciledUserEntries.findIndex((claimed) => claimed.text === text) : -1;\n if (index === -1 && reconciledIndex === -1) return undefined;\n const source = index === -1 ? state.reconciledUserEntries : state.pendingUserEntries;\n const at = index === -1 ? reconciledIndex : index;\n const pending = source[at] as { id: string; images?: UserImage[] };\n // A pending prompt is claimed once, because a second copy of the same text is\n // a second message. A claim already published is kept: the hub re-reads the\n // journal at every run boundary, and each of those copies has to fold into the\n // entry that stands rather than becoming a new one.\n const remaining = index === -1 ? state.reconciledUserEntries : source.filter((_, position) => position !== at);\n const entries = state.entries.map((entry) => {\n if (entry.id !== pending.id) return entry;\n const reconciledImages = images.length > 0 ? images : pending.images;\n if (entry.kind === 'queued') {\n return {\n kind: 'user' as const,\n id: entry.id,\n text: entry.text,\n ...(reconciledImages ? { images: reconciledImages } : {}),\n };\n }\n return entry.kind === 'user' && images.length > 0 ? { ...entry, images } : entry;\n });\n return index === -1\n ? { ...state, entries, reconciledUserEntries: remaining }\n : { ...state, entries, pendingUserEntries: remaining };\n}\n\n/**\n * Folds one journalled message into the timeline.\n *\n * The journal is the session's own record, so its shape is not the live frame\n * shape: a tool call is a block inside an assistant message (`id`,\n * `arguments`) rather than a tool_execution_start frame, and its result is a\n * message of its own. Mapping them here is what lets a transcript written\n * before this page existed read exactly like one it watched arrive.\n */\nfunction applyJournalMessage(state: SessionState, message: Frame, entryId?: string, timestamp?: number): SessionState {\n const role = asString(message.role);\n const content =\n typeof message.content === 'string'\n ? [{ type: 'text', text: message.content }]\n : Array.isArray(message.content)\n ? message.content.filter(isRecord)\n : [];\n\n if (role === 'user') {\n const text = textFromContent(content);\n const images = imagesFromContent(content);\n if (!text && images.length === 0) return state;\n return (\n reconcilePendingUser(state, text, images) ??\n withEntry(state, {\n kind: 'user',\n id: entryId ?? `u${state.nextId}`,\n text,\n ...(timestamp === undefined ? {} : { timestamp }),\n ...(images.length > 0 ? { images } : {}),\n })\n );\n }\n\n if (role === 'assistant') {\n timestamp ??= asNumber(message.timestamp) ?? undefined;\n const model = typeof message.model === 'string' ? message.model : undefined;\n const text = textFromContent(content);\n const thinking = thinkingFromContent(content);\n const draft = state.entries.findLast((item) => item.kind === 'assistant' && item.streaming);\n if (draft && entryId && !state.entries.some((item) => item.id === entryId)) {\n state = closeAssistant(state, message);\n state = {\n ...state,\n entries: state.entries.map((item) =>\n item.id === draft.id\n ? {\n ...item,\n id: entryId,\n ...(timestamp === undefined ? {} : { timestamp }),\n ...(model === undefined ? {} : { model }),\n }\n : item,\n ),\n };\n }\n let next =\n (text || thinking) && !state.entries.some((item) => item.id === entryId)\n ? withEntry(state, {\n kind: 'assistant',\n id: entryId ?? `a${state.nextId}`,\n ...(timestamp === undefined ? {} : { timestamp }),\n ...(model === undefined ? {} : { model }),\n text,\n thinking,\n streaming: false,\n ...(state.profileIdentity === null ? {} : { identity: state.profileIdentity }),\n })\n : state;\n for (const block of content) {\n if (block.type !== 'toolCall') continue;\n if (next.entries.some((item) => item.kind === 'tool' && item.toolCallId === asString(block.id))) continue;\n // The result is a later entry, so the card starts as running and the\n // result that follows settles it, exactly as a live run does.\n next = withEntry(next, {\n kind: 'tool',\n id: entryId ? `tool:${asString(block.id)}` : `t${next.nextId}`,\n ...(timestamp === undefined ? {} : { timestamp }),\n toolCallId: asString(block.id),\n name: asString(block.name, 'tool'),\n args: isRecord(block.arguments) ? block.arguments : {},\n argSummary: summariseArgs(block.arguments),\n result: null,\n output: '',\n isError: false,\n running: true,\n });\n }\n return next;\n }\n\n if (role === 'toolResult') {\n return updateTool(state, asString(message.toolCallId), {\n result: { content, details: message.details },\n output: textFromContent(content),\n isError: message.isError === true,\n running: false,\n });\n }\n\n return state;\n}\n\n/**\n * Folds one journal entry, once. Entries without an id are the runtime's own\n * bookkeeping and are left alone; a message already folded is skipped, which\n * is what makes a re-attach idempotent.\n */\nfunction applyJournalEntry(state: SessionState, entry: Frame): SessionState {\n if (entry.type !== 'message' || !isRecord(entry.message)) return state;\n const id = asString(entry.id);\n if (id === '' || state.restoredIds.includes(id)) return state;\n const next = applyJournalMessage(state, entry.message, id, asNumber(entry.timestamp) ?? undefined);\n return { ...next, restoredIds: [...next.restoredIds, id] };\n}\n\n/**\n * Records a journal entry the protocol already publishes, without folding it.\n *\n * The hub re-reads the journal at every run boundary and re-publishes user\n * messages, because no live frame carries one. Dropping those copies without a\n * trace left the page with no memory of them, so a copy arriving after protocol\n * ownership lapsed read as a new prompt and landed below the settled divider.\n * Keeping the id is what makes the drop idempotent.\n */\nfunction rememberJournalEntry(state: SessionState, entry: Frame): SessionState {\n if (entry.type !== 'message' || !isRecord(entry.message)) return state;\n const id = asString(entry.id);\n if (id === '' || state.restoredIds.includes(id)) return state;\n return { ...state, restoredIds: [...state.restoredIds, id] };\n}\n\n/**\n * Folds an older window of transcript above what the page already holds.\n *\n * The reducer is append-only by design: it builds the timeline as the session\n * produces it. Paging backwards is the one case that runs the other way, so\n * the window is reduced on its own and the result is prepended, rather than\n * teaching every case in the reducer about a second direction.\n *\n * Entry ids are positional, so a window reduced from scratch would collide\n * with the live entries. Prefixing by page keeps every key unique and stable\n * across re-renders, which is what a virtualised list needs to keep its\n * measurements.\n */\nexport function prependHistory(state: SessionState, frames: readonly Frame[], page: number): SessionState {\n // Wrapped: reduce would otherwise pass the index as the options argument.\n const older = frames.reduce((carried, frame) => reduceSession(carried, frame), initialSessionState);\n const known = new Set(state.restoredIds);\n const restored = older.restoredIds.filter((id) => !known.has(id));\n if (restored.length === 0) return state;\n const prefix = `h${page}-`;\n const entries = older.entries\n .filter((entry) => entry.kind !== 'notice')\n .map((entry) => ({ ...entry, id: `${prefix}${entry.id}` }) as TimelineEntry);\n return {\n ...state,\n entries: [...entries, ...state.entries],\n restoredIds: [...restored, ...state.restoredIds],\n };\n}\n\n/**\n * Folds one agent frame into the view model.\n *\n * Pure and total: an unrecognised frame returns the state unchanged, so a Pi\n * protocol addition cannot break the cockpit, it just is not rendered yet.\n */\n/** Frames whose only product is a timeline entry the protocol now publishes. */\nconst TRANSCRIPT_FRAMES = new Set([\n 'message_start',\n 'message_update',\n 'message_end',\n 'tool_execution_start',\n 'tool_execution_update',\n 'tool_execution_end',\n]);\n\nexport interface ReduceSessionOptions {\n /**\n * The protocol supplies the transcript, so this reducer must not build one.\n *\n * Both would otherwise write the same timeline from different sources: the\n * snapshot replaces it wholesale while these frames append to it, and the\n * result flickers between the two. The frames still reach here for\n * everything else they carry, which is why this is a filter rather than a\n * missing subscription.\n */\n transcriptFromProtocol?: boolean;\n}\n\nexport function reduceSession(state: SessionState, frame: Frame, options: ReduceSessionOptions = {}): SessionState {\n // Usage is read before the transcript filter below because a session whose\n // transcript the protocol owns still bills for its messages.\n return reduceFrame(applyLiveUsage(state, frame), frame, options);\n}\n\nfunction reduceFrame(state: SessionState, frame: Frame, options: ReduceSessionOptions): SessionState {\n const type = asString(frame.type);\n if (options.transcriptFromProtocol && TRANSCRIPT_FRAMES.has(type)) {\n if (type === 'tool_execution_start') {\n const active = toolEntryFromStart(frame, `active:${asString(frame.toolCallId)}`);\n const activeTools = [...state.activeTools.filter((entry) => entry.toolCallId !== active.toolCallId), active];\n return { ...state, activeTools, toolsThisRun: state.toolsThisRun + 1 };\n }\n if (type === 'tool_execution_end') {\n const toolCallId = asString(frame.toolCallId);\n return { ...state, activeTools: state.activeTools.filter((entry) => entry.toolCallId !== toolCallId) };\n }\n return state;\n }\n\n switch (type) {\n case 'replay':\n return isRecord(frame.frame) ? reduceSession(state, frame.frame, options) : state;\n\n case 'agent_start':\n return {\n ...state,\n activeTools: [],\n streaming: state.lifecycle === null ? true : state.lifecycle.operation !== null,\n settled: false,\n toolsThisRun: 0,\n };\n\n case 'message_start':\n case 'message_update': {\n const event = isRecord(frame.assistantMessageEvent) ? frame.assistantMessageEvent : undefined;\n const message = isRecord(frame.message)\n ? frame.message\n : event?.type === 'start' && isRecord(event.partial)\n ? event.partial\n : undefined;\n if (message?.role !== undefined && message.role !== 'assistant') return state;\n const timestamp = asNumber(message?.timestamp);\n const model = typeof message?.model === 'string' ? message.model : undefined;\n if (type === 'message_start' && timestamp !== null) {\n const previous = state.entries.findLast((entry) => entry.kind === 'assistant' && entry.timestamp !== undefined);\n if (previous?.kind === 'assistant' && previous.timestamp !== undefined) {\n if (\n previous.timestamp > timestamp ||\n (previous.timestamp === timestamp && (!model || !previous.model || previous.model === model))\n )\n return state;\n // A newer start belongs to a new bubble, even if completion was delayed.\n if (previous.streaming && previous.timestamp < timestamp) state = closeAssistant(state, undefined);\n }\n }\n if (message && (typeof message.content === 'string' || Array.isArray(message.content))) {\n const opened = openAssistant(state);\n return replaceEntry(opened.state, opened.entry.id, {\n ...opened.entry,\n ...(timestamp === null ? {} : { timestamp }),\n ...(model === undefined ? {} : { model }),\n text: textFromContent(message.content),\n thinking: thinkingFromContent(Array.isArray(message.content) ? message.content.filter(isRecord) : []),\n });\n }\n return isRecord(frame.assistantMessageEvent) ? applyAssistantDelta(state, frame.assistantMessageEvent) : state;\n }\n\n case 'message_end': {\n if (isRecord(frame.message) && frame.message.role !== undefined && frame.message.role !== 'assistant')\n return state;\n const id = asString(frame.entryId);\n if (id && state.entries.some((item) => item.id === id)) return state;\n const draft = state.entries.findLast((item) => item.kind === 'assistant' && item.streaming);\n const closed = closeAssistant(state, frame.message);\n if (!id || !draft) return closed;\n return { ...closed, entries: closed.entries.map((item) => (item.id === draft.id ? { ...item, id } : item)) };\n }\n\n case 'tool_execution_start':\n return applyToolStart(state, frame);\n\n case 'tool_execution_update':\n return updateTool(state, asString(frame.toolCallId), {\n result: toolResult(frame.partialResult),\n output: textFromContent(isRecord(frame.partialResult) ? frame.partialResult.content : undefined),\n });\n\n case 'tool_execution_end':\n return updateTool(state, asString(frame.toolCallId), {\n result: toolResult(frame.result),\n output: textFromContent(isRecord(frame.result) ? frame.result.content : undefined),\n isError: frame.isError === true,\n running: false,\n });\n\n case 'agent_settled': {\n const closed = options.transcriptFromProtocol ? state : closeAssistant(state, undefined);\n const timestamp = asNumber(frame.timestamp) ?? undefined;\n const id = typeof frame.runId === 'string' ? `settled:${frame.runId}` : `s${closed.nextId}`;\n const marked = closed.entries.some((entry) => entry.id === id)\n ? closed\n : withChronologicalEntry(closed, {\n kind: 'settled',\n id,\n tools: closed.toolsThisRun,\n ...(timestamp === undefined ? {} : { timestamp }),\n });\n return {\n ...marked,\n activeTools: [],\n dialog: null,\n streaming: state.lifecycle === null ? false : state.lifecycle.operation !== null,\n settled: state.lifecycle === null ? true : state.lifecycle.operation === null,\n };\n }\n\n case 'queue_update': {\n if (state.lifecycle !== null) return state;\n const steering = Array.isArray(frame.steering) ? frame.steering : [];\n const followUp = Array.isArray(frame.followUp) ? frame.followUp : [];\n const queue = [\n ...steering.map((entry) => ({ text: asString(entry), delivery: 'steer' as const })),\n ...followUp.map((entry) => ({ text: asString(entry), delivery: 'followUp' as const })),\n ]\n .map((entry, index) => ({ kind: 'queued' as const, id: `queue-${index}`, ...entry }))\n .filter((entry) => entry.text.length > 0);\n return replaceQueuedEntries(state, queue);\n }\n\n case 'extension_ui_request': {\n // Agent notifications carry the outcome a TUI user would see (a mode\n // switch pending a relaunch, a refused action); dropping them reads as\n // the agent doing nothing.\n if (frame.method === 'notify') {\n const text = asString(frame.message, '');\n if (text === '') return state;\n return withEntry(state, {\n kind: 'notice',\n id: `n${state.nextId}`,\n text,\n tone: frame.notifyType === 'error' ? 'error' : 'info',\n });\n }\n return applyDialog(state, frame);\n }\n\n // Hub-synthesized when any tab answers a dialog: closes it on other live\n // tabs, and on backlog replays keeps an answered request from reopening.\n case DIALOG_ANSWERED_TYPE:\n return state.dialog && state.dialog.id === asString(frame.id) ? { ...state, dialog: null } : state;\n\n // Pi announces a thinking level it switched on its own behalf: plan mode\n // applying its configured effort, or the /effort command. state.agent is\n // otherwise written only by a get_state this page asked for, so without\n // this the chip keeps whatever the last request reported.\n case 'fast_mode_changed':\n return typeof frame.enabled === 'boolean' ? { ...state, fastMode: frame.enabled } : state;\n\n case 'agent_lock_changed':\n return typeof frame.locked === 'boolean' ? { ...state, agentLocked: frame.locked } : state;\n\n case 'thinking_level_changed': {\n if (state.agent === null) return state;\n const level = asString(frame.level, state.agent.thinkingLevel);\n return { ...state, agent: { ...state.agent, thinkingLevel: level } };\n }\n\n // Journaled composition and notifications apply independently of protocol-owned messages.\n case 'entry_appended': {\n const entry = isRecord(frame.entry) ? frame.entry : undefined;\n if (!entry) return state;\n const notification = parseDoomNotificationEntry(frame);\n if (notification) {\n if (state.restoredIds.includes(notification.entryId)) return state;\n const timestamp = asNumber(entry.timestamp) ?? undefined;\n const next = withChronologicalEntry(state, {\n kind: 'notice',\n id: `n${state.nextId}`,\n text: notification.data.body,\n tone: notification.data.level === 'error' ? 'error' : 'info',\n ...(timestamp === undefined ? {} : { timestamp }),\n });\n return { ...next, restoredIds: [...next.restoredIds, notification.entryId] };\n }\n if (entry.type === 'custom' && entry.customType === MINOR_MODE_ENTRY_TYPE) {\n const data = isRecord(entry.data) ? entry.data : undefined;\n if (!data || !Array.isArray(data.modes)) return state;\n return { ...state, minorModes: data as unknown as MinorModeProjection };\n }\n if (entry.type === 'custom' && entry.customType === CONTEXT_ENTRY_TYPE) {\n const data = isRecord(entry.data) ? entry.data : undefined;\n if (!data || !Array.isArray(data.groups)) return state;\n return applyContextSelection(state, data as unknown as ContextProjection);\n }\n // Pi has no wire event for a model an extension chose, so the runtime\n // journals one. Guarded on agent because a get_state has to have named\n // the rest of the facts before a model can be swapped into them.\n if (entry.type === 'custom' && entry.customType === AGENT_MODEL_ENTRY_TYPE) {\n const data = isRecord(entry.data) ? entry.data : undefined;\n if (!data || state.agent === null) return state;\n const id = asString(data.id, '');\n const provider = asString(data.provider, '');\n if (id === '' || provider === '') return state;\n return { ...state, agent: { ...state.agent, model: id, provider } };\n }\n // Folded in journal order, never collapsed: assistant messages are stamped\n // with whatever was current when they were created, so a switch leaves the\n // messages before it attributed to the persona that wrote them.\n if (entry.type === 'custom' && entry.customType === PROFILE_IDENTITY_ENTRY_TYPE) {\n const data = isRecord(entry.data) ? entry.data : undefined;\n const profile = asString(data?.profile, '');\n if (profile === '') return state;\n const name = asString(data?.name, '');\n const icon = asString(data?.icon, '');\n return {\n ...state,\n profileIdentity: {\n profile,\n ...(name === '' ? {} : { name }),\n ...(icon === '' ? {} : { icon }),\n },\n };\n }\n if (entry.type === 'custom' && entry.customType === 'po.agent-settled') {\n const data = isRecord(entry.data) ? entry.data : {};\n const id = `settled:${asString(data.runId)}`;\n if (state.entries.some((item) => item.id === id)) return state;\n return withChronologicalEntry(state, {\n kind: 'settled',\n id,\n tools: asNumber(data.tools) ?? 0,\n timestamp: asNumber(data.timestamp) ?? asNumber(entry.timestamp) ?? undefined,\n });\n }\n // A journalled user message is a transcript entry the protocol already\n // publishes; the catalog above is Po's own and always applies.\n return options.transcriptFromProtocol ? rememberJournalEntry(state, entry) : applyJournalEntry(state, entry);\n }\n\n case 'response':\n return applyResponse(state, frame);\n\n case 'error':\n case 'extension_error':\n return withEntry(state, {\n kind: 'notice',\n id: `n${state.nextId}`,\n text: asString(frame.message ?? frame.error, 'The agent reported an error.'),\n tone: 'error',\n });\n\n default:\n return state;\n }\n}\n\n/** Records the prompt locally, because Pi does not echo it back as an event. */\nexport function appendUserPrompt(state: SessionState, text: string, images: UserImage[] = []): SessionState {\n const id = `u${state.nextId}`;\n const entry: UserEntry = { kind: 'user', id, text, ...(images.length > 0 ? { images } : {}) };\n return withPendingUser(withEntry(state, entry), id, text, images);\n}\n\n/** A follow-up waits for the current run, so it is marked rather than shown as sent. */\nexport function appendQueued(state: SessionState, text: string, images: UserImage[] = []): SessionState {\n const id = `q${state.nextId}`;\n const entry: QueuedEntry = {\n kind: 'queued',\n id,\n text,\n delivery: 'followUp',\n ...(images.length > 0 ? { images } : {}),\n };\n return withPendingUser(withEntry(state, entry), id, text, images);\n}\n\n/** Uses server IDs as-is: equal text or a snapshot revision is not an item identity. */\nexport function replaceQueuedEntries(state: SessionState, queue: readonly QueuedEntry[]): SessionState {\n return {\n ...state,\n entries: [...state.entries.filter((entry) => entry.kind !== 'queued'), ...queue],\n };\n}\n\n/** Removes queued rows and their reconciliation records after Pi clears the queue. */\nexport function clearQueuedEntries(state: SessionState): SessionState {\n const queuedIds = new Set(state.entries.filter((entry) => entry.kind === 'queued').map((entry) => entry.id));\n return {\n ...state,\n entries: state.entries.filter((entry) => entry.kind !== 'queued'),\n pendingUserEntries: state.pendingUserEntries.filter((entry) => !queuedIds.has(entry.id)),\n };\n}\n\n/** Removes one queued row and the optimistic reconciliation record tied to it. */\nexport function removeQueuedEntry(state: SessionState, id: string): SessionState {\n return {\n ...state,\n entries: state.entries.filter((entry) => entry.kind !== 'queued' || entry.id !== id),\n pendingUserEntries: state.pendingUserEntries.filter((entry) => entry.id !== id),\n };\n}\nexport function clearDialog(state: SessionState): SessionState {\n return { ...state, dialog: null };\n}\n"],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ import { ContextProjection, MinorModeProjection } from "../../types/hub.mjs";
2
+ import { ToolResultView } from "@agimon-ai/po-core/web";
3
+ import { SessionLifecycle } from "@agimon-ai/po-core/sessionProtocol";
4
+ //#region src/web/lib/sessionModel.d.ts
5
+ export type EntryKind = 'user' | 'assistant' | 'tool' | 'notice';
6
+ export interface UserImage {
7
+ data: string;
8
+ mimeType: string;
9
+ }
10
+ export interface UserEntry {
11
+ kind: 'user';
12
+ id: string;
13
+ text: string;
14
+ images?: UserImage[];
15
+ }
16
+ export interface AssistantEntry {
17
+ kind: 'assistant';
18
+ id: string;
19
+ text: string;
20
+ thinking: string;
21
+ streaming: boolean;
22
+ /** Provider model, used with the message timestamp to reconcile repeated starts. */
23
+ model?: string;
24
+ /**
25
+ * The persona active when this message was written.
26
+ *
27
+ * Stamped at creation rather than read from current state, so a profile
28
+ * switch leaves earlier messages showing who actually wrote them. Replay
29
+ * reproduces it because the identity entry is folded in journal order.
30
+ */
31
+ identity?: ProfileIdentity;
32
+ }
33
+ /** Display name and avatar of the persona a message was written under. */
34
+ export interface ProfileIdentity {
35
+ profile: string;
36
+ name?: string;
37
+ icon?: string;
38
+ }
39
+ export interface ToolEntry {
40
+ kind: 'tool';
41
+ id: string;
42
+ toolCallId: string;
43
+ name: string;
44
+ /** The call arguments as the frame carried them, for a plugin's own renderer. */
45
+ args: Record<string, unknown>;
46
+ argSummary: string;
47
+ /** The newest result, partial while running; null before the tool produced any. */
48
+ result: ToolResultView | null;
49
+ output: string;
50
+ isError: boolean;
51
+ running: boolean;
52
+ }
53
+ export interface NoticeEntry {
54
+ kind: 'notice';
55
+ id: string;
56
+ text: string;
57
+ tone: 'info' | 'error';
58
+ }
59
+ export interface SettledEntry {
60
+ kind: 'settled';
61
+ id: string;
62
+ tools: number;
63
+ }
64
+ export interface QueuedEntry {
65
+ kind: 'queued';
66
+ id: string;
67
+ text: string;
68
+ delivery?: 'steer' | 'followUp' | 'nextRun';
69
+ scheduling?: 'automatic' | 'held';
70
+ disposition?: 'pending' | 'handoff' | 'uncertain';
71
+ images?: UserImage[];
72
+ }
73
+ export type TimelineEntry = (UserEntry | AssistantEntry | ToolEntry | NoticeEntry | SettledEntry | QueuedEntry) & {
74
+ timestamp?: number;
75
+ };
76
+ export interface SessionStats {
77
+ cost: number;
78
+ totalTokens: number;
79
+ contextPercent: number | null;
80
+ contextTokens: number | null;
81
+ contextWindow: number | null;
82
+ }
83
+ export interface AgentInfo {
84
+ model: string;
85
+ /** The provider Pi resolved the model under; set_model needs both halves. */
86
+ provider: string;
87
+ thinkingLevel: string;
88
+ sessionId: string;
89
+ sessionName: string;
90
+ messageCount: number;
91
+ isStreaming: boolean;
92
+ }
93
+ export interface CommandInfo {
94
+ name: string;
95
+ description: string;
96
+ }
97
+ /** One model the session can switch to, as get_available_models lists it. */
98
+ export interface ModelChoice {
99
+ provider: string;
100
+ id: string;
101
+ name: string;
102
+ reasoning: boolean;
103
+ }
104
+ export type DialogMethod = 'select' | 'confirm' | 'input' | 'editor';
105
+ export interface DialogRequest {
106
+ id: string;
107
+ method: DialogMethod;
108
+ title: string;
109
+ message: string;
110
+ options: string[];
111
+ placeholder: string;
112
+ prefill: string;
113
+ }
114
+ export interface EditorTextRequest {
115
+ append?: boolean;
116
+ id: string;
117
+ text: string;
118
+ }
119
+ export interface SessionState {
120
+ entries: TimelineEntry[];
121
+ hasNewerHistory: boolean;
122
+ /** Running tool frames kept outside the protocol-owned transcript so prompt plugins can claim their dialogs. */
123
+ activeTools: ToolEntry[];
124
+ /**
125
+ * Footer status entries keyed as the publishing extension named them, raw so
126
+ * the colour survives. A key that is absent means the package is not in this
127
+ * composition; a key holding an empty string means it is loaded but off.
128
+ */
129
+ statuses: Record<string, string>;
130
+ /** Widget keys the session has announced, the only signal some modes give. */
131
+ widgets: string[];
132
+ streaming: boolean;
133
+ settled: boolean;
134
+ /** Latest authoritative server execution and retained-input snapshot. */
135
+ lifecycle: SessionLifecycle | null;
136
+ stats: SessionStats | null;
137
+ /**
138
+ * Cost the assistant message now streaming has run up, on top of `stats`.
139
+ *
140
+ * Pi answers `get_session_stats` once per message at best, so without this
141
+ * the cost chip sits still for the length of a turn. Zero whenever no
142
+ * message is streaming or the provider has not reported yet.
143
+ */
144
+ liveCost: number;
145
+ agent: AgentInfo | null;
146
+ commands: CommandInfo[];
147
+ /** Models the session offered, empty until the picker asks. */
148
+ models: ModelChoice[];
149
+ /** Thinking levels the current model accepts, empty until the picker asks. */
150
+ fastMode: boolean;
151
+ /** True while the session's local agent is blocked from starting turns. */
152
+ agentLocked: boolean;
153
+ thinkingLevels: string[];
154
+ dialog: DialogRequest | null;
155
+ /** Latest fire-and-forget editor replacement requested by a session extension. */
156
+ editorTextRequest: EditorTextRequest | null;
157
+ /** The runtime's minor-mode catalog as last journaled, or null before it reports. */
158
+ minorModes: MinorModeProjection | null;
159
+ /** What the session is composed of, as last journaled, or null before it reports. */
160
+ context: ContextProjection | null;
161
+ /**
162
+ * The persona most recently journaled, used to stamp assistant messages as
163
+ * they are created. Not a projection: folding it forward in journal order is
164
+ * what keeps a pre-switch message attributed to the persona that wrote it.
165
+ */
166
+ profileIdentity: ProfileIdentity | null;
167
+ /** Tool calls seen since the current run began, reported when it settles. */
168
+ toolsThisRun: number;
169
+ /**
170
+ * Journal entry ids already folded into the timeline. The hub re-reads the
171
+ * journal on every attach, so a reconnect replays entries this page already
172
+ * has; folding by id is what keeps a restored transcript from doubling.
173
+ */
174
+ restoredIds: string[];
175
+ /**
176
+ * Prompts this page put on screen before the journal recorded them, newest
177
+ * last. The cockpit shows your message the moment you send it, but the
178
+ * journal is what carries every message, including the ones an extension
179
+ * sends on your behalf. Matching a journal message against this list is what
180
+ * lets both appear exactly once.
181
+ */
182
+ pendingUserEntries: {
183
+ id: string;
184
+ text: string;
185
+ images?: UserImage[];
186
+ }[];
187
+ /**
188
+ * Prompts an authoritative transcript already folded into the entry this page
189
+ * rendered, newest last.
190
+ *
191
+ * A prompt reaches the timeline from two directions, Pi's protocol snapshot
192
+ * and the session journal, and whichever lands first consumes the pending
193
+ * record. Without this the second arrival has nothing to match and appends a
194
+ * second copy of the message, which is what a reader sees when transcript
195
+ * ownership returns to the journal mid-session.
196
+ */
197
+ reconciledUserEntries: {
198
+ id: string;
199
+ text: string;
200
+ images?: UserImage[];
201
+ }[];
202
+ /** Stable local ids for optimistic prompts after Pi publishes their canonical transcript entries. */
203
+ protocolUserEntryIds: Record<string, string>;
204
+ nextId: number;
205
+ }
206
+ export declare const initialSessionState: SessionState;
207
+ type Frame = Record<string, unknown>;
208
+ /** Joins the text blocks of a Pi content array, ignoring non-text parts. */
209
+ export declare function textFromContent(content: unknown): string;
210
+ export declare function isSupportedImageMimeType(mimeType: string): boolean;
211
+ /** Keeps only image blocks the cockpit can safely render as data URLs. */
212
+ export declare function imagesFromContent(content: unknown): UserImage[];
213
+ /** A one-line description of a tool call, good enough for a card header. */
214
+ export declare function summariseArgs(args: unknown): string;
215
+ /**
216
+ * Folds an older window of transcript above what the page already holds.
217
+ *
218
+ * The reducer is append-only by design: it builds the timeline as the session
219
+ * produces it. Paging backwards is the one case that runs the other way, so
220
+ * the window is reduced on its own and the result is prepended, rather than
221
+ * teaching every case in the reducer about a second direction.
222
+ *
223
+ * Entry ids are positional, so a window reduced from scratch would collide
224
+ * with the live entries. Prefixing by page keeps every key unique and stable
225
+ * across re-renders, which is what a virtualised list needs to keep its
226
+ * measurements.
227
+ */
228
+ export declare function prependHistory(state: SessionState, frames: readonly Frame[], page: number): SessionState;
229
+ export interface ReduceSessionOptions {
230
+ /**
231
+ * The protocol supplies the transcript, so this reducer must not build one.
232
+ *
233
+ * Both would otherwise write the same timeline from different sources: the
234
+ * snapshot replaces it wholesale while these frames append to it, and the
235
+ * result flickers between the two. The frames still reach here for
236
+ * everything else they carry, which is why this is a filter rather than a
237
+ * missing subscription.
238
+ */
239
+ transcriptFromProtocol?: boolean;
240
+ }
241
+ export declare function reduceSession(state: SessionState, frame: Frame, options?: ReduceSessionOptions): SessionState;
242
+ /** Records the prompt locally, because Pi does not echo it back as an event. */
243
+ export declare function appendUserPrompt(state: SessionState, text: string, images?: UserImage[]): SessionState;
244
+ /** A follow-up waits for the current run, so it is marked rather than shown as sent. */
245
+ export declare function appendQueued(state: SessionState, text: string, images?: UserImage[]): SessionState;
246
+ /** Uses server IDs as-is: equal text or a snapshot revision is not an item identity. */
247
+ export declare function replaceQueuedEntries(state: SessionState, queue: readonly QueuedEntry[]): SessionState;
248
+ /** Removes queued rows and their reconciliation records after Pi clears the queue. */
249
+ export declare function clearQueuedEntries(state: SessionState): SessionState;
250
+ /** Removes one queued row and the optimistic reconciliation record tied to it. */
251
+ export declare function removeQueuedEntry(state: SessionState, id: string): SessionState;
252
+ export declare function clearDialog(state: SessionState): SessionState;
253
+ //#endregion
254
+ //# sourceMappingURL=sessionModel.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionModel.d.mts","names":[],"sources":["../../../src/web/lib/sessionModel.ts"],"mappings":";;;;YAeY;iBAEK;EACf;EACA;;iBAGe;EACf;EACA;EACA;EACA,SAAS;;iBAGM;EACf;EACA;EACA;EACA;EACA;;EAEA;;;;;;;;EAQA,WAAW;;;iBAII;EACf;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA;;EAEA,MAAM;EACN;;EAEA,QAAQ;EACR;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA,SAAS;;YAGC,iBAAiB,YAAY,iBAAiB,YAAY,cAAc,eAAe;EACjG;;iBAGe;EACf;EACA;EACA;EACA;EACA;;iBAGe;EACf;;EAEA;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;;;iBAIe;EACf;EACA;EACA;EACA;;YAGU;iBAEK;EACf;EACA,QAAQ;EACR;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;;iBAGe;EACf,SAAS;EACT;;EAEA,aAAa;;;;;;EAMb,UAAU;;EAEV;EACA;EACA;;EAEA,WAAW;EACX,OAAO;;;;;;;;EAQP;EACA,OAAO;EACP,UAAU;;EAEV,QAAQ;;EAER;;EAEA;EACA;EACA,QAAQ;;EAER,mBAAmB;;EAEnB,YAAY;;EAEZ,SAAS;;;;;;EAMT,iBAAiB;;EAEjB;;;;;;EAMA;;;;;;;;EAQA;IAAsB;IAAY;IAAc,SAAS;;;;;;;;;;;;EAWzD;IAAyB;IAAY;IAAc,SAAS;;;EAE5D,sBAAsB;EACtB;;qBAGW,qBAAqB;KA8B7B,QAAQ;;wBAeG,gBAAgB;wBAWhB,yBAAyB;;wBAKzB,kBAAkB,mBAAmB;;wBAWrC,cAAc;;;;;;;;;;;;;;wBAghBd,eAAe,OAAO,cAAc,iBAAiB,SAAS,eAAe;iBAiC5E;;;;;;;;;;EAUf;;wBAGc,cAAc,OAAO,cAAc,OAAO,OAAO,UAAS,uBAA4B;;wBAoQtF,iBAAiB,OAAO,cAAc,cAAc,SAAQ,cAAmB;;wBAO/E,aAAa,OAAO,cAAc,cAAc,SAAQ,cAAmB;;wBAa3E,qBAAqB,OAAO,cAAc,gBAAgB,gBAAgB;;wBAQ1E,mBAAmB,OAAO,eAAe;;wBAUzC,kBAAkB,OAAO,cAAc,aAAa;wBAOpD,YAAY,OAAO,eAAe"}