@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,271 @@
1
+ import { HOST_SLOTS, activityGroupSlot, slotFills } from "../../lib/pluginRegistry.mjs";
2
+ import { useActivityGroups, useDockFaces } from "../../lib/composition.mjs";
3
+ import { retryWebPluginCompositions, webPluginCompositionStore, webPluginMountState } from "../../lib/pluginCompositions.mjs";
4
+ import { sessionsStore } from "../../stores/sessionsStore.mjs";
5
+ import { useActiveSession } from "../../stores/sessionStore.mjs";
6
+ import { setDockTab, uiStore } from "../../stores/uiStore.mjs";
7
+ import { usePluginSlotProps } from "../../stores/usePluginSlotProps.mjs";
8
+ import { PluginSurface } from "../../components/PluginSurface.mjs";
9
+ import { SessionMcpTools } from "../../components/SessionMcp.mjs";
10
+ import { ContextPanel } from "./ContextPanel.mjs";
11
+ import { DockTabs } from "./DockTabs.mjs";
12
+ import { useEffect, useRef } from "react";
13
+ import { useStore } from "@tanstack/react-store";
14
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
15
+ import { ActivityIcon, Button, ChevronRightIcon, CloseIcon, Kbd, LightbulbIcon, LoaderIcon, SparklesIcon } from "@agimon-ai/po-web-components";
16
+ //#region src/web/features/activity/ActivityDock.tsx
17
+ /**
18
+ * The column for everything that is not the transcript.
19
+ *
20
+ * `activity` is asynchronous work that outlives the turn that started it.
21
+ * `context` is the composition that work runs under, and what carrying it costs.
22
+ * `mcp` lists capabilities granted to this session's remote connections.
23
+ *
24
+ * On the activity face the host owns only the frame: which groups exist, their
25
+ * key chips, and what they render come from the packages that declare them.
26
+ * Each declared group opens the keyed slot activity.<name>; the sections any
27
+ * plugin registers under that name render there, in slot order, and a group
28
+ * nobody fills shows the one-line summary the session's footer publishes.
29
+ */
30
+ function ActivityDock({ onClose, onOpenContent, mcp }) {
31
+ const activeId = useStore(sessionsStore, (state) => state.activeId);
32
+ const connection = useStore(sessionsStore, (state) => state.activeId === null ? void 0 : state.byId[state.activeId]);
33
+ const statuses = useActiveSession((state) => state.statuses);
34
+ const widgets = useActiveSession((state) => state.widgets);
35
+ const slotProps = usePluginSlotProps(activeId, onOpenContent);
36
+ const tab = useStore(uiStore, (state) => state.dockTab);
37
+ const dockFaces = useDockFaces(activeId).filter((face) => face.requiredMinorMode === void 0 || slotProps.activeMinorModes?.includes(face.requiredMinorMode));
38
+ const selectedFace = dockFaces.find((face) => face.id === tab);
39
+ const mcpEnabled = mcp?.snapshot?.enabled === true;
40
+ const resolvedTab = tab === "context" || tab === "activity" || tab === "mcp" && mcpEnabled || selectedFace !== void 0 ? tab : "activity";
41
+ const DockPanel = selectedFace?.panel;
42
+ const automaticFace = dockFaces.find((face) => face.autoSelect === true);
43
+ const automaticFaceKey = `${activeId ?? ""}:${automaticFace?.id ?? ""}`;
44
+ const lastAutomaticFaceKey = useRef(void 0);
45
+ const workspaceId = useStore(sessionsStore, (state) => state.activeId === null ? void 0 : state.byId[state.activeId]?.summary.workspaceId);
46
+ const compositionSnapshot = useStore(webPluginCompositionStore);
47
+ const compositionState = webPluginMountState(activeId === null ? { scope: "global" } : {
48
+ scope: "session",
49
+ sessionId: activeId,
50
+ workspaceId: workspaceId ?? ""
51
+ }, compositionSnapshot);
52
+ const groups = useActivityGroups(statuses, widgets, activeId);
53
+ const ordinaryGroups = groups.filter((group) => group.placement !== "bottom");
54
+ const pinnedGroups = groups.filter((group) => group.placement === "bottom");
55
+ const busy = groups.filter((group) => group.active).length;
56
+ useEffect(() => {
57
+ if (lastAutomaticFaceKey.current === automaticFaceKey) return;
58
+ lastAutomaticFaceKey.current = automaticFaceKey;
59
+ if (automaticFace !== void 0) setDockTab(automaticFace.id);
60
+ }, [automaticFace, automaticFaceKey]);
61
+ useEffect(() => {
62
+ if (resolvedTab !== tab) setDockTab(resolvedTab);
63
+ }, [resolvedTab, tab]);
64
+ return /* @__PURE__ */ jsxs("aside", {
65
+ "data-testid": "activity-dock",
66
+ className: "flex w-[min(360px,calc(100vw-48px))] shrink-0 flex-col overflow-hidden border-l border-doom-border-soft bg-doom-rail sm:w-[360px]",
67
+ children: [/* @__PURE__ */ jsxs("div", {
68
+ className: "flex h-16 shrink-0 items-end gap-6 border-b border-doom-border-soft px-5",
69
+ children: [
70
+ /* @__PURE__ */ jsx(DockTabs, {
71
+ contributed: dockFaces,
72
+ mcpEnabled
73
+ }),
74
+ /* @__PURE__ */ jsx("span", { className: "flex-1" }),
75
+ /* @__PURE__ */ jsx(Button, {
76
+ variant: "ghost",
77
+ size: "icon",
78
+ "data-testid": "activity-close",
79
+ "aria-label": "Hide activity",
80
+ title: "Hide activity",
81
+ onClick: onClose,
82
+ className: "mb-4 text-doom-dim",
83
+ children: /* @__PURE__ */ jsx(CloseIcon, {
84
+ "aria-hidden": true,
85
+ className: "size-3.5"
86
+ })
87
+ })
88
+ ]
89
+ }), resolvedTab === "mcp" && mcp !== void 0 ? /* @__PURE__ */ jsx(SessionMcpTools, { state: mcp }, activeId) : DockPanel !== void 0 ? /* @__PURE__ */ jsx(DockPanel, { ...slotProps }) : resolvedTab === "context" ? /* @__PURE__ */ jsx(ContextPanel, {}) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
90
+ /* @__PURE__ */ jsxs("div", {
91
+ "data-testid": "activity-scroll",
92
+ className: "flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-4",
93
+ children: [
94
+ connection?.attach === "offline" ? /* @__PURE__ */ jsx("output", {
95
+ "data-testid": "activity-offline",
96
+ className: "block px-1 text-sm text-doom-dim",
97
+ children: connection.reason || "Reconnecting"
98
+ }) : null,
99
+ busy > 0 ? /* @__PURE__ */ jsxs("output", {
100
+ "data-testid": "activity-busy",
101
+ className: "flex items-center gap-2 rounded-lg bg-doom-tint-yellow px-3 py-2 text-sm text-doom-yellow",
102
+ children: [
103
+ /* @__PURE__ */ jsx(LoaderIcon, {
104
+ "aria-hidden": true,
105
+ className: "size-3.5 animate-spin"
106
+ }),
107
+ busy,
108
+ " running in the background"
109
+ ]
110
+ }) : null,
111
+ compositionState.phase === "error" ? /* @__PURE__ */ jsxs("div", {
112
+ "data-testid": "activity-error",
113
+ role: "alert",
114
+ className: "flex items-center justify-between gap-3 rounded-lg border border-doom-border-soft px-4 py-3",
115
+ children: [/* @__PURE__ */ jsx("span", {
116
+ className: "text-sm text-doom-dim",
117
+ children: "Activity failed to load"
118
+ }), /* @__PURE__ */ jsx(Button, {
119
+ variant: "outline",
120
+ size: "xs",
121
+ "data-testid": "activity-retry",
122
+ onClick: () => void retryWebPluginCompositions().catch((error) => console.error(error)),
123
+ children: "Retry"
124
+ })]
125
+ }) : null,
126
+ groups.length === 0 && compositionState.phase === "loading" ? /* @__PURE__ */ jsx(Placeholder, {
127
+ testId: "activity-loading",
128
+ title: "Loading activity",
129
+ description: "Loading the package extensions that supervise work."
130
+ }) : null,
131
+ groups.length === 0 && compositionState.phase !== "loading" && compositionState.phase !== "error" ? /* @__PURE__ */ jsx(Placeholder, {
132
+ testId: "activity-empty",
133
+ title: "Nothing supervised yet",
134
+ description: "A package's group appears here once its extension reports in."
135
+ }) : null,
136
+ ordinaryGroups.map((group) => /* @__PURE__ */ jsx(ActivityGroupView, {
137
+ group,
138
+ slotProps
139
+ }, group.name)),
140
+ /* @__PURE__ */ jsx(PluginSurface, {
141
+ slot: HOST_SLOTS.activity,
142
+ sessionId: activeId
143
+ }),
144
+ /* @__PURE__ */ jsx(PromoPanel, {})
145
+ ]
146
+ }),
147
+ pinnedGroups.length > 0 ? /* @__PURE__ */ jsx("div", {
148
+ "data-testid": "activity-pinned",
149
+ className: "flex shrink-0 flex-col gap-3 px-4 pb-4",
150
+ children: pinnedGroups.map((group) => /* @__PURE__ */ jsx(ActivityGroupView, {
151
+ group,
152
+ slotProps
153
+ }, group.name))
154
+ }) : null,
155
+ /* @__PURE__ */ jsxs("p", {
156
+ className: "flex shrink-0 gap-2 border-t border-doom-border-soft px-5 py-3 text-sm leading-relaxed text-doom-dim",
157
+ children: [/* @__PURE__ */ jsx(LightbulbIcon, {
158
+ "aria-hidden": true,
159
+ className: "size-3.5 shrink-0"
160
+ }), "Each group is rendered by the package that owns it. The session's summary line stands in until that package publishes per-run detail."]
161
+ })
162
+ ] })]
163
+ });
164
+ }
165
+ /** Plugin group names are lowercase identifiers; the heading reads in sentence case. */
166
+ function sentenceCase(name) {
167
+ return name.charAt(0).toUpperCase() + name.slice(1);
168
+ }
169
+ function Placeholder({ testId, title, description }) {
170
+ return /* @__PURE__ */ jsxs("div", {
171
+ "data-testid": testId,
172
+ className: "flex flex-col gap-1 rounded-lg border border-dashed border-doom-border px-4 py-5",
173
+ children: [/* @__PURE__ */ jsx("span", {
174
+ className: "text-base font-semibold text-doom-hi",
175
+ children: title
176
+ }), /* @__PURE__ */ jsx("span", {
177
+ className: "text-sm text-doom-dim",
178
+ children: description
179
+ })]
180
+ });
181
+ }
182
+ /** Static and decorative: it names what the dock is for and offers no action. */
183
+ function PromoPanel() {
184
+ return /* @__PURE__ */ jsxs("div", {
185
+ className: "relative shrink-0 overflow-hidden rounded-lg border border-doom-border-soft px-4 pt-3.5 pb-16",
186
+ children: [/* @__PURE__ */ jsxs("span", {
187
+ className: "flex items-start gap-3",
188
+ children: [/* @__PURE__ */ jsx(SparklesIcon, {
189
+ "aria-hidden": true,
190
+ className: "mt-0.5 size-5 shrink-0 text-doom-green"
191
+ }), /* @__PURE__ */ jsxs("span", {
192
+ className: "flex flex-col gap-1",
193
+ children: [/* @__PURE__ */ jsx("span", {
194
+ className: "text-base font-semibold text-doom-hi",
195
+ children: "A more capable you"
196
+ }), /* @__PURE__ */ jsx("span", {
197
+ className: "text-sm text-doom-dim",
198
+ children: "Agents, tools, and your codebase. All in one place."
199
+ })]
200
+ })]
201
+ }), /* @__PURE__ */ jsxs("svg", {
202
+ "aria-hidden": true,
203
+ viewBox: "0 0 320 80",
204
+ preserveAspectRatio: "none",
205
+ className: "absolute inset-x-0 bottom-0 h-16 w-full",
206
+ children: [
207
+ /* @__PURE__ */ jsx("path", {
208
+ d: "M0 50 C60 30 110 70 170 46 S280 18 320 34 V80 H0Z",
209
+ className: "fill-doom-tint-green"
210
+ }),
211
+ /* @__PURE__ */ jsx("path", {
212
+ d: "M0 64 C70 46 120 78 190 58 S290 44 320 52 V80 H0Z",
213
+ className: "fill-doom-edge-green opacity-40"
214
+ }),
215
+ /* @__PURE__ */ jsx("path", {
216
+ d: "M0 74 C80 62 150 82 220 70 S300 64 320 68 V80 H0Z",
217
+ className: "fill-doom-green opacity-20"
218
+ })
219
+ ]
220
+ })]
221
+ });
222
+ }
223
+ function ActivityGroupView({ group, slotProps }) {
224
+ const GroupIcon = group.icon ?? ActivityIcon;
225
+ const label = sentenceCase(group.name);
226
+ const heading = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
227
+ className: "min-w-0 flex-1 truncate text-left text-base font-semibold text-doom-hi",
228
+ children: label
229
+ }), group.keys ? /* @__PURE__ */ jsx(Kbd, {
230
+ "data-testid": `activity-keys-${group.name}`,
231
+ className: "bg-doom-bg",
232
+ children: group.keys
233
+ }) : null] });
234
+ return /* @__PURE__ */ jsxs("div", {
235
+ "data-testid": `activity-${group.name}`,
236
+ "data-active": group.active,
237
+ className: "flex shrink-0 gap-3 rounded-lg border border-doom-border-soft px-4 py-4",
238
+ children: [/* @__PURE__ */ jsx(GroupIcon, {
239
+ "aria-hidden": true,
240
+ className: `mt-0.5 size-5 shrink-0 ${group.active ? "text-doom-yellow" : "text-doom-hi"}`
241
+ }), /* @__PURE__ */ jsxs("div", {
242
+ className: "flex min-w-0 flex-1 flex-col gap-2",
243
+ children: [group.transientTab === void 0 ? /* @__PURE__ */ jsx("span", {
244
+ className: "flex min-w-0 items-center gap-2",
245
+ children: heading
246
+ }) : /* @__PURE__ */ jsxs(Button, {
247
+ variant: "ghost",
248
+ size: "xs",
249
+ "data-testid": `activity-open-${group.name}`,
250
+ title: `Open ${group.name}`,
251
+ onClick: () => {
252
+ const tab = group.transientTab?.();
253
+ if (tab !== void 0) slotProps.openTransientTab(tab);
254
+ },
255
+ className: "group/heading h-auto min-w-0 justify-start gap-2 px-0 py-0 hover:bg-transparent",
256
+ children: [heading, /* @__PURE__ */ jsx(ChevronRightIcon, {
257
+ "aria-hidden": true,
258
+ className: "size-4 shrink-0 text-doom-faint group-hover/heading:text-doom-dim"
259
+ })]
260
+ }), slotFills(activityGroupSlot(group.name)).length > 0 ? slotProps.renderSlot(activityGroupSlot(group.name)) : /* @__PURE__ */ jsx("p", {
261
+ "data-testid": `activity-summary-${group.name}`,
262
+ className: `text-sm first-letter:uppercase ${group.active ? "text-doom-yellow" : "text-doom-dim"}`,
263
+ children: group.summary || "Idle"
264
+ })]
265
+ })]
266
+ });
267
+ }
268
+ //#endregion
269
+ export { ActivityDock };
270
+
271
+ //# sourceMappingURL=ActivityDock.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityDock.mjs","names":[],"sources":["../../../../src/web/features/activity/ActivityDock.tsx"],"sourcesContent":["import {\n ActivityIcon,\n Button,\n ChevronRightIcon,\n CloseIcon,\n Kbd,\n LightbulbIcon,\n LoaderIcon,\n SparklesIcon,\n} from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\nimport { useEffect, useRef } from 'react';\n\nimport { PluginSurface } from '../../components/PluginSurface';\nimport { SessionMcpTools } from '../../components/SessionMcp';\nimport { type ActivityGroup, useActivityGroups, useDockFaces } from '../../lib/composition';\nimport {\n retryWebPluginCompositions,\n webPluginCompositionStore,\n webPluginMountState,\n} from '../../lib/pluginCompositions';\nimport { activityGroupSlot, HOST_SLOTS, slotFills } from '../../lib/pluginRegistry';\nimport type { SessionMcpViewState } from '../../lib/useSessionMcp';\nimport { sessionsStore } from '../../stores/sessionsStore';\nimport { useActiveSession } from '../../stores/sessionStore';\nimport { setDockTab, uiStore } from '../../stores/uiStore';\nimport { usePluginSlotProps } from '../../stores/usePluginSlotProps';\nimport { ContextPanel } from './ContextPanel';\nimport { DockTabs } from './DockTabs';\n\n/**\n * The column for everything that is not the transcript.\n *\n * `activity` is asynchronous work that outlives the turn that started it.\n * `context` is the composition that work runs under, and what carrying it costs.\n * `mcp` lists capabilities granted to this session's remote connections.\n *\n * On the activity face the host owns only the frame: which groups exist, their\n * key chips, and what they render come from the packages that declare them.\n * Each declared group opens the keyed slot activity.<name>; the sections any\n * plugin registers under that name render there, in slot order, and a group\n * nobody fills shows the one-line summary the session's footer publishes.\n */\nexport function ActivityDock({\n onClose,\n onOpenContent,\n mcp,\n}: {\n onClose: () => void;\n onOpenContent: () => void;\n mcp?: SessionMcpViewState;\n}) {\n const activeId = useStore(sessionsStore, (state) => state.activeId);\n const connection = useStore(sessionsStore, (state) =>\n state.activeId === null ? undefined : state.byId[state.activeId],\n );\n const statuses = useActiveSession((state) => state.statuses);\n const widgets = useActiveSession((state) => state.widgets);\n const slotProps = usePluginSlotProps(activeId, onOpenContent);\n const tab = useStore(uiStore, (state) => state.dockTab);\n const dockFaces = useDockFaces(activeId).filter(\n (face) => face.requiredMinorMode === undefined || slotProps.activeMinorModes?.includes(face.requiredMinorMode),\n );\n const selectedFace = dockFaces.find((face) => face.id === tab);\n const mcpEnabled = mcp?.snapshot?.enabled === true;\n const resolvedTab =\n tab === 'context' || tab === 'activity' || (tab === 'mcp' && mcpEnabled) || selectedFace !== undefined\n ? tab\n : 'activity';\n const DockPanel = selectedFace?.panel;\n const automaticFace = dockFaces.find((face) => face.autoSelect === true);\n const automaticFaceKey = `${activeId ?? ''}:${automaticFace?.id ?? ''}`;\n const lastAutomaticFaceKey = useRef<string | undefined>(undefined);\n const workspaceId = useStore(sessionsStore, (state) =>\n state.activeId === null ? undefined : state.byId[state.activeId]?.summary.workspaceId,\n );\n const compositionSnapshot = useStore(webPluginCompositionStore);\n const compositionState = webPluginMountState(\n activeId === null ? { scope: 'global' } : { scope: 'session', sessionId: activeId, workspaceId: workspaceId ?? '' },\n compositionSnapshot,\n );\n const groups = useActivityGroups(statuses, widgets, activeId);\n const ordinaryGroups = groups.filter((group) => group.placement !== 'bottom');\n const pinnedGroups = groups.filter((group) => group.placement === 'bottom');\n const busy = groups.filter((group) => group.active).length;\n\n useEffect(() => {\n if (lastAutomaticFaceKey.current === automaticFaceKey) return;\n lastAutomaticFaceKey.current = automaticFaceKey;\n if (automaticFace !== undefined) setDockTab(automaticFace.id);\n }, [automaticFace, automaticFaceKey]);\n useEffect(() => {\n if (resolvedTab !== tab) setDockTab(resolvedTab);\n }, [resolvedTab, tab]);\n return (\n <aside\n data-testid=\"activity-dock\"\n className=\"flex w-[min(360px,calc(100vw-48px))] shrink-0 flex-col overflow-hidden border-l border-doom-border-soft bg-doom-rail sm:w-[360px]\"\n >\n <div className=\"flex h-16 shrink-0 items-end gap-6 border-b border-doom-border-soft px-5\">\n <DockTabs contributed={dockFaces} mcpEnabled={mcpEnabled} />\n <span className=\"flex-1\" />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n data-testid=\"activity-close\"\n aria-label=\"Hide activity\"\n title=\"Hide activity\"\n onClick={onClose}\n className=\"mb-4 text-doom-dim\"\n >\n <CloseIcon aria-hidden className=\"size-3.5\" />\n </Button>\n </div>\n\n {resolvedTab === 'mcp' && mcp !== undefined ? (\n <SessionMcpTools key={activeId} state={mcp} />\n ) : DockPanel !== undefined ? (\n <DockPanel {...slotProps} />\n ) : resolvedTab === 'context' ? (\n <ContextPanel />\n ) : (\n <>\n <div data-testid=\"activity-scroll\" className=\"flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-4\">\n {connection?.attach === 'offline' ? (\n <output data-testid=\"activity-offline\" className=\"block px-1 text-sm text-doom-dim\">\n {connection.reason || 'Reconnecting'}\n </output>\n ) : null}\n {/* The count belongs to the activity face; on the context face it\n would be a number about a list the reader is not looking at. */}\n {busy > 0 ? (\n <output\n data-testid=\"activity-busy\"\n className=\"flex items-center gap-2 rounded-lg bg-doom-tint-yellow px-3 py-2 text-sm text-doom-yellow\"\n >\n <LoaderIcon aria-hidden className=\"size-3.5 animate-spin\" />\n {busy} running in the background\n </output>\n ) : null}\n {compositionState.phase === 'error' ? (\n <div\n data-testid=\"activity-error\"\n role=\"alert\"\n className=\"flex items-center justify-between gap-3 rounded-lg border border-doom-border-soft px-4 py-3\"\n >\n <span className=\"text-sm text-doom-dim\">Activity failed to load</span>\n <Button\n variant=\"outline\"\n size=\"xs\"\n data-testid=\"activity-retry\"\n onClick={() => void retryWebPluginCompositions().catch((error: unknown) => console.error(error))}\n >\n Retry\n </Button>\n </div>\n ) : null}\n {groups.length === 0 && compositionState.phase === 'loading' ? (\n <Placeholder\n testId=\"activity-loading\"\n title=\"Loading activity\"\n description=\"Loading the package extensions that supervise work.\"\n />\n ) : null}\n {groups.length === 0 && compositionState.phase !== 'loading' && compositionState.phase !== 'error' ? (\n <Placeholder\n testId=\"activity-empty\"\n title=\"Nothing supervised yet\"\n description=\"A package's group appears here once its extension reports in.\"\n />\n ) : null}\n {ordinaryGroups.map((group) => (\n <ActivityGroupView key={group.name} group={group} slotProps={slotProps} />\n ))}\n\n <PluginSurface slot={HOST_SLOTS.activity} sessionId={activeId} />\n <PromoPanel />\n </div>\n\n {pinnedGroups.length > 0 ? (\n <div data-testid=\"activity-pinned\" className=\"flex shrink-0 flex-col gap-3 px-4 pb-4\">\n {pinnedGroups.map((group) => (\n <ActivityGroupView key={group.name} group={group} slotProps={slotProps} />\n ))}\n </div>\n ) : null}\n\n <p className=\"flex shrink-0 gap-2 border-t border-doom-border-soft px-5 py-3 text-sm leading-relaxed text-doom-dim\">\n <LightbulbIcon aria-hidden className=\"size-3.5 shrink-0\" />\n Each group is rendered by the package that owns it. The session's summary line stands in until that package\n publishes per-run detail.\n </p>\n </>\n )}\n </aside>\n );\n}\n\n/** Plugin group names are lowercase identifiers; the heading reads in sentence case. */\nfunction sentenceCase(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nfunction Placeholder({ testId, title, description }: { testId: string; title: string; description: string }) {\n return (\n <div\n data-testid={testId}\n className=\"flex flex-col gap-1 rounded-lg border border-dashed border-doom-border px-4 py-5\"\n >\n <span className=\"text-base font-semibold text-doom-hi\">{title}</span>\n <span className=\"text-sm text-doom-dim\">{description}</span>\n </div>\n );\n}\n\n/** Static and decorative: it names what the dock is for and offers no action. */\nfunction PromoPanel() {\n return (\n <div className=\"relative shrink-0 overflow-hidden rounded-lg border border-doom-border-soft px-4 pt-3.5 pb-16\">\n <span className=\"flex items-start gap-3\">\n <SparklesIcon aria-hidden className=\"mt-0.5 size-5 shrink-0 text-doom-green\" />\n <span className=\"flex flex-col gap-1\">\n <span className=\"text-base font-semibold text-doom-hi\">A more capable you</span>\n <span className=\"text-sm text-doom-dim\">Agents, tools, and your codebase. All in one place.</span>\n </span>\n </span>\n <svg\n aria-hidden\n viewBox=\"0 0 320 80\"\n preserveAspectRatio=\"none\"\n className=\"absolute inset-x-0 bottom-0 h-16 w-full\"\n >\n <path d=\"M0 50 C60 30 110 70 170 46 S280 18 320 34 V80 H0Z\" className=\"fill-doom-tint-green\" />\n <path d=\"M0 64 C70 46 120 78 190 58 S290 44 320 52 V80 H0Z\" className=\"fill-doom-edge-green opacity-40\" />\n <path d=\"M0 74 C80 62 150 82 220 70 S300 64 320 68 V80 H0Z\" className=\"fill-doom-green opacity-20\" />\n </svg>\n </div>\n );\n}\n\nfunction ActivityGroupView({\n group,\n slotProps,\n}: {\n group: ActivityGroup;\n slotProps: ReturnType<typeof usePluginSlotProps>;\n}) {\n // Plugins without icon metadata get the host's generic mark rather than nothing.\n const GroupIcon = group.icon ?? ActivityIcon;\n const label = sentenceCase(group.name);\n const heading = (\n <>\n <span className=\"min-w-0 flex-1 truncate text-left text-base font-semibold text-doom-hi\">{label}</span>\n {group.keys ? (\n <Kbd data-testid={`activity-keys-${group.name}`} className=\"bg-doom-bg\">\n {group.keys}\n </Kbd>\n ) : null}\n </>\n );\n return (\n <div\n data-testid={`activity-${group.name}`}\n data-active={group.active}\n className=\"flex shrink-0 gap-3 rounded-lg border border-doom-border-soft px-4 py-4\"\n >\n {/* One marker per head, carrying the busy colour. */}\n <GroupIcon\n aria-hidden\n className={`mt-0.5 size-5 shrink-0 ${group.active ? 'text-doom-yellow' : 'text-doom-hi'}`}\n />\n <div className=\"flex min-w-0 flex-1 flex-col gap-2\">\n {/* A group that owns a panel opens it from its own name: the tab is\n temporary, so the tab strip carries it only while the reader is\n using it. Only those headings get a chevron. */}\n {group.transientTab === undefined ? (\n <span className=\"flex min-w-0 items-center gap-2\">{heading}</span>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n data-testid={`activity-open-${group.name}`}\n title={`Open ${group.name}`}\n onClick={() => {\n const tab = group.transientTab?.();\n if (tab !== undefined) slotProps.openTransientTab(tab);\n }}\n className=\"group/heading h-auto min-w-0 justify-start gap-2 px-0 py-0 hover:bg-transparent\"\n >\n {heading}\n <ChevronRightIcon\n aria-hidden\n className=\"size-4 shrink-0 text-doom-faint group-hover/heading:text-doom-dim\"\n />\n </Button>\n )}\n {slotFills(activityGroupSlot(group.name)).length > 0 ? (\n slotProps.renderSlot(activityGroupSlot(group.name))\n ) : (\n <p\n data-testid={`activity-summary-${group.name}`}\n className={`text-sm first-letter:uppercase ${group.active ? 'text-doom-yellow' : 'text-doom-dim'}`}\n >\n {group.summary || 'Idle'}\n </p>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ const require_contextDetailApi = require("../../lib/contextDetailApi.cjs");
2
+ let react = require("react");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
5
+ //#region src/web/features/activity/ContextItemDialog.tsx
6
+ /**
7
+ * What one row of the composition actually is.
8
+ *
9
+ * The panel answers "what does this cost"; a reader who clicks a row is asking
10
+ * the follow-up, "and what am I paying for". That is the description the model
11
+ * reads, the schema it is handed, and for a tool the split between the two,
12
+ * because the two are cut differently: prose comes out with the package, a
13
+ * schema only with the tool.
14
+ *
15
+ * Fetched on open rather than carried by the projection. The full text of every
16
+ * tool in a composition is an order of magnitude larger than the figures, and
17
+ * is wanted one row at a time.
18
+ */
19
+ function tokens(value) {
20
+ return `~${value.toLocaleString()}`;
21
+ }
22
+ function ContextItemDialog({ sessionId, target, warnings, onClose }) {
23
+ const [detail, setDetail] = (0, react.useState)(null);
24
+ const [error, setError] = (0, react.useState)(null);
25
+ const itemKind = target?.itemKind ?? null;
26
+ const name = target?.name ?? null;
27
+ const request = sessionId === null || itemKind === null || name === null ? null : `${sessionId}\u0000${itemKind}\u0000${name}`;
28
+ const [shown, setShown] = (0, react.useState)(null);
29
+ if (shown !== request) {
30
+ setShown(request);
31
+ setDetail(null);
32
+ setError(null);
33
+ }
34
+ (0, react.useEffect)(() => {
35
+ if (sessionId === null || itemKind === null || name === null) return;
36
+ let live = true;
37
+ require_contextDetailApi.fetchContextItemDetail(sessionId, itemKind, name).then((result) => {
38
+ if (!live) return;
39
+ if (result.ok) setDetail(result.detail);
40
+ else setError(result.error);
41
+ });
42
+ return () => {
43
+ live = false;
44
+ };
45
+ }, [
46
+ sessionId,
47
+ itemKind,
48
+ name
49
+ ]);
50
+ if (target === null) return null;
51
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Dialog, {
52
+ open: true,
53
+ onOpenChange: (next) => {
54
+ if (!next) onClose();
55
+ },
56
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.DialogContent, {
57
+ width: "lg",
58
+ "data-testid": "context-item-dialog",
59
+ "aria-describedby": void 0,
60
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.DialogHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.DialogTitle, {
61
+ "data-testid": "context-item-title",
62
+ children: target.itemKind === "prompt" ? "system prompt" : target.name
63
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
64
+ className: "text-sm text-doom-dim",
65
+ children: [
66
+ target.itemKind,
67
+ " · ",
68
+ target.owner
69
+ ]
70
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.DialogBody, { children: [target.itemKind === "tool" && warnings && warnings.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
71
+ title: "warnings",
72
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
73
+ "data-testid": "context-item-warnings",
74
+ "aria-live": "polite",
75
+ className: "flex flex-col gap-3",
76
+ children: warnings.map((warning, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
77
+ className: "flex flex-col gap-1 text-sm break-words",
78
+ children: [
79
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
80
+ className: "text-doom-yellow",
81
+ children: warning.source
82
+ }),
83
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
84
+ className: "text-sm text-doom-dim",
85
+ children: warning.path
86
+ }),
87
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
88
+ className: "text-doom-text",
89
+ children: warning.message
90
+ })
91
+ ]
92
+ }, index))
93
+ })
94
+ }) : null, error !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
95
+ "data-testid": "context-item-error",
96
+ className: "text-sm text-doom-dim",
97
+ children: error
98
+ }) : detail === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
99
+ "data-testid": "context-item-loading",
100
+ className: "flex items-center gap-2 text-sm text-doom-dim",
101
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Spinner, {}), "reading the session's inventory"]
102
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContextItemBody, { detail })] })]
103
+ })
104
+ });
105
+ }
106
+ function ContextItemBody({ detail }) {
107
+ if (detail.itemKind === "prompt") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptBody, { detail });
108
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
109
+ className: "flex flex-col gap-3",
110
+ children: [
111
+ detail.itemKind === "tool" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolCost, { detail }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SkillFacts, { detail }),
112
+ detail.itemKind === "skill" || detail.description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
113
+ title: "description",
114
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
115
+ "data-testid": "context-item-description",
116
+ className: "text-base leading-relaxed whitespace-pre-wrap text-doom-text",
117
+ children: detail.description
118
+ })
119
+ }) : null,
120
+ detail.itemKind === "skill" && detail.body !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
121
+ title: "body",
122
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Pre, {
123
+ testId: "context-item-body",
124
+ children: detail.body
125
+ })
126
+ }) : null,
127
+ detail.itemKind === "tool" && detail.promptSnippet !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
128
+ title: "prompt snippet",
129
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Pre, {
130
+ testId: "context-item-snippet",
131
+ children: detail.promptSnippet
132
+ })
133
+ }) : null,
134
+ detail.itemKind === "tool" && detail.promptGuidelines !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
135
+ title: "prompt guidelines",
136
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
137
+ "data-testid": "context-item-guidelines",
138
+ className: "flex flex-col gap-1",
139
+ children: detail.promptGuidelines.map((line) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
140
+ className: "text-sm leading-relaxed text-doom-dim",
141
+ children: line
142
+ }, line))
143
+ })
144
+ }) : null,
145
+ detail.itemKind === "tool" && detail.parameters !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
146
+ title: "parameters",
147
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Pre, {
148
+ testId: "context-item-schema",
149
+ children: JSON.stringify(detail.parameters, null, 2)
150
+ })
151
+ }) : null
152
+ ]
153
+ });
154
+ }
155
+ function Section({ title, children }) {
156
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
157
+ className: "flex flex-col gap-1",
158
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
159
+ className: "text-lg font-semibold text-doom-hi",
160
+ children: title
161
+ }), children]
162
+ });
163
+ }
164
+ function Pre({ testId, children, tall = false }) {
165
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Panel, {
166
+ className: `overflow-auto bg-doom-deep px-3 py-2 ${tall ? "max-h-[60vh]" : "max-h-64"}`,
167
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
168
+ "data-testid": testId,
169
+ className: "text-sm leading-relaxed whitespace-pre-wrap text-doom-dim",
170
+ children
171
+ })
172
+ });
173
+ }
174
+ /**
175
+ * The whole prompt, and the two things a figure alone would mislead about.
176
+ *
177
+ * The count overlaps the panel's own total, because the tool prose and skill
178
+ * listings priced there are inside this text. And a session that has sent
179
+ * nothing has no built prompt to show: assembling one would fire the hooks that
180
+ * a real turn fires, so the pre-hook base is shown and named as such.
181
+ */
182
+ function PromptBody({ detail }) {
183
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
184
+ className: "flex flex-col gap-3",
185
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
186
+ "data-testid": "context-item-cost",
187
+ className: "flex flex-col gap-1",
188
+ children: [
189
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Row, {
190
+ label: "prompt",
191
+ value: tokens(detail.tokens),
192
+ strong: true
193
+ }),
194
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
195
+ className: "text-sm text-doom-dim",
196
+ children: "counted apart from the panel total: the tool and skill prose priced there is part of this text"
197
+ }),
198
+ detail.stage === "base" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
199
+ "data-testid": "context-item-stage",
200
+ className: "text-sm text-doom-dim",
201
+ children: "this session has sent nothing yet, so this is the prompt before packages add to it at the first message"
202
+ }) : null
203
+ ]
204
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Section, {
205
+ title: "text",
206
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Pre, {
207
+ testId: "context-item-prompt",
208
+ tall: true,
209
+ children: detail.text
210
+ })
211
+ })]
212
+ });
213
+ }
214
+ /** A tool is paid twice, so the split is the useful figure rather than the total. */
215
+ function ToolCost({ detail }) {
216
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
217
+ "data-testid": "context-item-cost",
218
+ className: "flex flex-col gap-1",
219
+ children: [
220
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Row, {
221
+ label: "schema",
222
+ value: tokens(detail.tokens.schemaTokens)
223
+ }),
224
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Row, {
225
+ label: "system prompt",
226
+ value: tokens(detail.tokens.promptTokens)
227
+ }),
228
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Row, {
229
+ label: "total",
230
+ value: tokens(detail.tokens.totalTokens),
231
+ strong: true
232
+ }),
233
+ detail.active ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
234
+ className: "text-sm text-doom-dim",
235
+ children: "not sent to the model; costs nothing until switched on"
236
+ })
237
+ ]
238
+ });
239
+ }
240
+ function SkillFacts({ detail }) {
241
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
242
+ "data-testid": "context-item-cost",
243
+ className: "flex flex-col gap-1",
244
+ children: [
245
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Row, {
246
+ label: "listing",
247
+ value: tokens(detail.tokens),
248
+ strong: true
249
+ }),
250
+ detail.filePath ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Row, {
251
+ label: "file",
252
+ value: detail.filePath
253
+ }) : null,
254
+ detail.modelInvocable ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
255
+ className: "text-sm text-doom-dim",
256
+ children: "not offered to the model"
257
+ })
258
+ ]
259
+ });
260
+ }
261
+ function Row({ label, value, strong = false }) {
262
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
263
+ className: "flex items-baseline justify-between gap-3",
264
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
265
+ className: "text-sm text-doom-dim",
266
+ children: label
267
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
268
+ className: `truncate text-sm ${strong ? "font-semibold text-doom-text" : "text-doom-dim"}`,
269
+ children: value
270
+ })]
271
+ });
272
+ }
273
+ //#endregion
274
+ exports.ContextItemDialog = ContextItemDialog;
275
+
276
+ //# sourceMappingURL=ContextItemDialog.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextItemDialog.cjs","names":["useState","fetchContextItemDetail","Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody","Spinner","Panel"],"sources":["../../../../src/web/features/activity/ContextItemDialog.tsx"],"sourcesContent":["import type { ContextItemDetail, ContextItemKind, ContextToolWarning } from '@agimon-ai/po-core/contextApi';\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogHeader,\n DialogTitle,\n Panel,\n Spinner,\n} from '@agimon-ai/po-web-components';\nimport { useEffect, useState } from 'react';\n\nimport { fetchContextItemDetail } from '../../lib/contextDetailApi';\n\n/**\n * What one row of the composition actually is.\n *\n * The panel answers \"what does this cost\"; a reader who clicks a row is asking\n * the follow-up, \"and what am I paying for\". That is the description the model\n * reads, the schema it is handed, and for a tool the split between the two,\n * because the two are cut differently: prose comes out with the package, a\n * schema only with the tool.\n *\n * Fetched on open rather than carried by the projection. The full text of every\n * tool in a composition is an order of magnitude larger than the figures, and\n * is wanted one row at a time.\n */\n\nfunction tokens(value: number): string {\n return `~${value.toLocaleString()}`;\n}\n\ninterface Target {\n itemKind: ContextItemKind;\n name: string;\n owner: string;\n}\n\nexport interface ContextItemDialogProps {\n sessionId: string | null;\n target: Target | null;\n warnings?: readonly ContextToolWarning[];\n onClose: () => void;\n}\n\nexport function ContextItemDialog({ sessionId, target, warnings, onClose }: ContextItemDialogProps) {\n const [detail, setDetail] = useState<ContextItemDetail | null>(null);\n const [error, setError] = useState<string | null>(null);\n const itemKind = target?.itemKind ?? null;\n const name = target?.name ?? null;\n\n // A second click must not show the first row's answer for a frame, so the\n // reset happens during render rather than in the effect that refetches.\n const request =\n sessionId === null || itemKind === null || name === null ? null : `${sessionId}\\u0000${itemKind}\\u0000${name}`;\n const [shown, setShown] = useState<string | null>(null);\n if (shown !== request) {\n setShown(request);\n setDetail(null);\n setError(null);\n }\n\n useEffect(() => {\n if (sessionId === null || itemKind === null || name === null) return;\n // A reply that lands after the reader moved on belongs to a row that is no\n // longer open, so it is dropped rather than painted.\n let live = true;\n void fetchContextItemDetail(sessionId, itemKind, name).then((result) => {\n if (!live) return;\n if (result.ok) setDetail(result.detail);\n else setError(result.error);\n });\n return () => {\n live = false;\n };\n }, [sessionId, itemKind, name]);\n\n if (target === null) return null;\n\n return (\n <Dialog\n open\n onOpenChange={(next) => {\n if (!next) onClose();\n }}\n >\n <DialogContent width=\"lg\" data-testid=\"context-item-dialog\" aria-describedby={undefined}>\n <DialogHeader>\n <DialogTitle data-testid=\"context-item-title\">\n {target.itemKind === 'prompt' ? 'system prompt' : target.name}\n </DialogTitle>\n <span className=\"text-sm text-doom-dim\">\n {target.itemKind} · {target.owner}\n </span>\n </DialogHeader>\n <DialogBody>\n {target.itemKind === 'tool' && warnings && warnings.length > 0 ? (\n <Section title=\"warnings\">\n <ul data-testid=\"context-item-warnings\" aria-live=\"polite\" className=\"flex flex-col gap-3\">\n {warnings.map((warning, index) => (\n <li key={index} className=\"flex flex-col gap-1 text-sm break-words\">\n <span className=\"text-doom-yellow\">{warning.source}</span>\n <span className=\"text-sm text-doom-dim\">{warning.path}</span>\n <p className=\"text-doom-text\">{warning.message}</p>\n </li>\n ))}\n </ul>\n </Section>\n ) : null}\n {error !== null ? (\n <p data-testid=\"context-item-error\" className=\"text-sm text-doom-dim\">\n {error}\n </p>\n ) : detail === null ? (\n <p data-testid=\"context-item-loading\" className=\"flex items-center gap-2 text-sm text-doom-dim\">\n <Spinner />\n reading the session's inventory\n </p>\n ) : (\n <ContextItemBody detail={detail} />\n )}\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction ContextItemBody({ detail }: { detail: ContextItemDetail }) {\n if (detail.itemKind === 'prompt') return <PromptBody detail={detail} />;\n return (\n <div className=\"flex flex-col gap-3\">\n {detail.itemKind === 'tool' ? <ToolCost detail={detail} /> : <SkillFacts detail={detail} />}\n\n {detail.itemKind === 'skill' || detail.description !== undefined ? (\n <Section title=\"description\">\n <p\n data-testid=\"context-item-description\"\n className=\"text-base leading-relaxed whitespace-pre-wrap text-doom-text\"\n >\n {detail.description}\n </p>\n </Section>\n ) : null}\n\n {detail.itemKind === 'skill' && detail.body !== undefined ? (\n <Section title=\"body\">\n <Pre testId=\"context-item-body\">{detail.body}</Pre>\n </Section>\n ) : null}\n\n {detail.itemKind === 'tool' && detail.promptSnippet !== undefined ? (\n <Section title=\"prompt snippet\">\n <Pre testId=\"context-item-snippet\">{detail.promptSnippet}</Pre>\n </Section>\n ) : null}\n\n {detail.itemKind === 'tool' && detail.promptGuidelines !== undefined ? (\n <Section title=\"prompt guidelines\">\n <ul data-testid=\"context-item-guidelines\" className=\"flex flex-col gap-1\">\n {detail.promptGuidelines.map((line) => (\n <li key={line} className=\"text-sm leading-relaxed text-doom-dim\">\n {line}\n </li>\n ))}\n </ul>\n </Section>\n ) : null}\n\n {detail.itemKind === 'tool' && detail.parameters !== undefined ? (\n <Section title=\"parameters\">\n <Pre testId=\"context-item-schema\">{JSON.stringify(detail.parameters, null, 2)}</Pre>\n </Section>\n ) : null}\n </div>\n );\n}\n\nfunction Section({ title, children }: { title: string; children: React.ReactNode }) {\n return (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-lg font-semibold text-doom-hi\">{title}</span>\n {children}\n </div>\n );\n}\n\nfunction Pre({ testId, children, tall = false }: { testId: string; children: string; tall?: boolean }) {\n return (\n <Panel className={`overflow-auto bg-doom-deep px-3 py-2 ${tall ? 'max-h-[60vh]' : 'max-h-64'}`}>\n <pre data-testid={testId} className=\"text-sm leading-relaxed whitespace-pre-wrap text-doom-dim\">\n {children}\n </pre>\n </Panel>\n );\n}\n\n/**\n * The whole prompt, and the two things a figure alone would mislead about.\n *\n * The count overlaps the panel's own total, because the tool prose and skill\n * listings priced there are inside this text. And a session that has sent\n * nothing has no built prompt to show: assembling one would fire the hooks that\n * a real turn fires, so the pre-hook base is shown and named as such.\n */\nfunction PromptBody({ detail }: { detail: Extract<ContextItemDetail, { itemKind: 'prompt' }> }) {\n return (\n <div className=\"flex flex-col gap-3\">\n <div data-testid=\"context-item-cost\" className=\"flex flex-col gap-1\">\n <Row label=\"prompt\" value={tokens(detail.tokens)} strong />\n <p className=\"text-sm text-doom-dim\">\n counted apart from the panel total: the tool and skill prose priced there is part of this text\n </p>\n {detail.stage === 'base' ? (\n <p data-testid=\"context-item-stage\" className=\"text-sm text-doom-dim\">\n this session has sent nothing yet, so this is the prompt before packages add to it at the first message\n </p>\n ) : null}\n </div>\n <Section title=\"text\">\n <Pre testId=\"context-item-prompt\" tall>\n {detail.text}\n </Pre>\n </Section>\n </div>\n );\n}\n\n/** A tool is paid twice, so the split is the useful figure rather than the total. */\nfunction ToolCost({ detail }: { detail: Extract<ContextItemDetail, { itemKind: 'tool' }> }) {\n return (\n <div data-testid=\"context-item-cost\" className=\"flex flex-col gap-1\">\n <Row label=\"schema\" value={tokens(detail.tokens.schemaTokens)} />\n <Row label=\"system prompt\" value={tokens(detail.tokens.promptTokens)} />\n <Row label=\"total\" value={tokens(detail.tokens.totalTokens)} strong />\n {detail.active ? null : (\n <p className=\"text-sm text-doom-dim\">not sent to the model; costs nothing until switched on</p>\n )}\n </div>\n );\n}\n\nfunction SkillFacts({ detail }: { detail: Extract<ContextItemDetail, { itemKind: 'skill' }> }) {\n return (\n <div data-testid=\"context-item-cost\" className=\"flex flex-col gap-1\">\n <Row label=\"listing\" value={tokens(detail.tokens)} strong />\n {detail.filePath ? <Row label=\"file\" value={detail.filePath} /> : null}\n {detail.modelInvocable ? null : <p className=\"text-sm text-doom-dim\">not offered to the model</p>}\n </div>\n );\n}\n\nfunction Row({ label, value, strong = false }: { label: string; value: string; strong?: boolean }) {\n return (\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"text-sm text-doom-dim\">{label}</span>\n <span className={`truncate text-sm ${strong ? 'font-semibold text-doom-text' : 'text-doom-dim'}`}>{value}</span>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ContextItemKind, ContextToolWarning } from "@agimon-ai/po-core/contextApi";
2
+ //#region src/web/features/activity/ContextItemDialog.d.ts
3
+ interface Target {
4
+ itemKind: ContextItemKind;
5
+ name: string;
6
+ owner: string;
7
+ }
8
+ export interface ContextItemDialogProps {
9
+ sessionId: string | null;
10
+ target: Target | null;
11
+ warnings?: readonly ContextToolWarning[];
12
+ onClose: () => void;
13
+ }
14
+ export declare function ContextItemDialog({ sessionId, target, warnings, onClose }: ContextItemDialogProps): import("react").JSX.Element | null;
15
+ //#endregion
16
+ //# sourceMappingURL=ContextItemDialog.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextItemDialog.d.mts","names":[],"sources":["../../../../src/web/features/activity/ContextItemDialog.tsx"],"mappings":";;UAgCU;EACR,UAAU;EACV;EACA;;iBAGe;EACf;EACA,QAAQ;EACR,oBAAoB;EACpB;;wBAGc,oBAAoB,WAAW,QAAQ,UAAU,WAAW,yCAAsB,IAAA"}