@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,109 @@
1
+ import { DirectoryListing, PiSessionHistoryItem, SessionSummary, WorkspaceSummary } from "../../types/hub.mjs";
2
+ import { TranscriptPage, TranscriptPageRequest } from "@agimon-ai/po-core/sessionProtocol";
3
+ //#region src/web/lib/hubApi.d.ts
4
+ export type CreateSessionResult = {
5
+ sessionId: string;
6
+ session?: SessionSummary;
7
+ } | {
8
+ error: string;
9
+ };
10
+ export type WorkspaceResult = {
11
+ workspace: WorkspaceSummary;
12
+ } | {
13
+ error: string;
14
+ };
15
+ export type WorkspacesResult = {
16
+ workspaces: WorkspaceSummary[];
17
+ } | {
18
+ error: string;
19
+ };
20
+ /** Lists one server folder's visible child directories for the workspace folder browser. */
21
+ export declare function listDirectory(folder?: string): Promise<DirectoryListing | {
22
+ error: string;
23
+ }>;
24
+ export declare function listWorkspaces(): Promise<WorkspacesResult>;
25
+ /**
26
+ * Admits a server-side repository root without starting a session. A name alone
27
+ * asks the server to create the workspace in its default folder.
28
+ */
29
+ export declare function admitWorkspace(input: {
30
+ root?: string;
31
+ name?: string;
32
+ }): Promise<WorkspaceResult>;
33
+ export type RemoveWorkspaceResult = {
34
+ ok: true;
35
+ } | {
36
+ error: string;
37
+ };
38
+ /** Unregisters a workspace from Po without touching its files on disk. */
39
+ export declare function removeWorkspace(workspaceId: string): Promise<RemoveWorkspaceResult>;
40
+ /** Starts a session in an already admitted workspace. */
41
+ export declare function createWorkspaceSession(workspaceId: string, input?: {
42
+ name?: string;
43
+ }): Promise<CreateSessionResult>;
44
+ /** Compatibility flow for callers that have not admitted a workspace yet. */
45
+ export declare function createSession(input: {
46
+ cwd: string;
47
+ name?: string;
48
+ }): Promise<CreateSessionResult>;
49
+ export type StopSessionResult = {
50
+ ok: true;
51
+ } | {
52
+ error: string;
53
+ };
54
+ /** Asks the hub to stop a session's server; the rail card leaves once the server withdraws its record. */
55
+ export declare function stopSession(sessionId: string): Promise<StopSessionResult>;
56
+ export type RestartSessionResult = {
57
+ ok: true;
58
+ } | {
59
+ error: string;
60
+ };
61
+ /**
62
+ * Asks the hub to replace a session's server, keeping its id.
63
+ *
64
+ * A running server reads the composition once. Restart syncs workspace changes
65
+ * before reopening the session, so changed extensions and APIs take effect.
66
+ */
67
+ export declare function restartSession(sessionId: string): Promise<RestartSessionResult>;
68
+ export type ReviveSessionResult = {
69
+ ok: true;
70
+ } | {
71
+ error: string;
72
+ };
73
+ /**
74
+ * Asks the hub to reopen a recorded session it has not started yet.
75
+ *
76
+ * Step-up gated like creating one, because it is the same act: an agent begins
77
+ * running in a directory. The card turns live when the resulting upsert lands.
78
+ */
79
+ export declare function reviveSession(sessionId: string): Promise<ReviveSessionResult>;
80
+ export declare function readDormantTranscriptPage(sessionId: string, request: TranscriptPageRequest, signal?: AbortSignal): Promise<TranscriptPage>;
81
+ export type SessionHistoryResult = {
82
+ sessions: PiSessionHistoryItem[];
83
+ } | {
84
+ error: string;
85
+ };
86
+ /** Lists the Pi threads saved for a live session's workspace. */
87
+ export declare function listSessionHistory(sessionId: string): Promise<SessionHistoryResult>;
88
+ export type ResumeSessionResult = {
89
+ sessionId: string;
90
+ session?: SessionSummary;
91
+ } | {
92
+ error: string;
93
+ };
94
+ /** Lists saved history without requiring a live session in the workspace. */
95
+ export declare function listWorkspaceHistory(workspaceId: string): Promise<SessionHistoryResult>;
96
+ /** Starts one saved thread without replacing another live session. */
97
+ export declare function resumeWorkspaceSession(workspaceId: string, targetSessionId: string): Promise<ResumeSessionResult>;
98
+ /** Replaces one live card with a selected Pi thread from the same workspace. */
99
+ export declare function resumeSession(sessionId: string, targetSessionId: string): Promise<ResumeSessionResult>;
100
+ /** File paths under a session's cwd matching the query, for @ completion. */
101
+ export declare function searchSessionFiles(sessionId: string, query: string): Promise<string[]>;
102
+ /**
103
+ * Directories the typed path could complete to, for the new-session picker.
104
+ * The hub lists the parent directory's children and filters them by the
105
+ * trailing segment as a regular expression.
106
+ */
107
+ export declare function searchDirectories(query: string): Promise<string[]>;
108
+ //#endregion
109
+ //# sourceMappingURL=hubApi.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubApi.d.mts","names":[],"sources":["../../../src/web/lib/hubApi.ts"],"mappings":";;;YAeY;EAAwB;EAAmB,UAAU;;EAAqB;;YAC1E;EAAoB,WAAW;;EAAuB;;YACtD;EAAqB,YAAY;;EAAyB;;;wBAOhD,cAAc,kBAAkB,QAAQ;EAAqB;;wBA+B7D,kBAAkB,QAAQ;;;;;wBAqB1B,eAAe;EAAS;EAAe;IAAkB,QAAQ;YAkB3E;EAA0B;;EAAe;;;wBAG/B,gBAAgB,sBAAsB,QAAQ;;wBAgB9C,uBACpB,qBACA;EAAS;IACR,QAAQ;;wBAiCW,cAAc;EAAS;EAAa;IAAkB,QAAQ;YAMxE;EAAsB;;EAAe;;;wBAG3B,YAAY,oBAAoB,QAAQ;YAoBlD;EAAyB;;EAAe;;;;;;;;wBAQ9B,eAAe,oBAAoB,QAAQ;YAoBrD;EAAwB;;EAAe;;;;;;;;wBAQ7B,cAAc,oBAAoB,QAAQ;wBAkB1C,0BACpB,mBACA,SAAS,uBACT,SAAS,cACR,QAAQ;YAmBC;EAAyB,UAAU;;EAA6B;;;wBAG5D,mBAAmB,oBAAoB,QAAQ;YAInD;EAAwB;EAAmB,UAAU;;EAAqB;;;wBA6BtE,qBAAqB,sBAAsB,QAAQ;;wBAK7C,uBACpB,qBACA,0BACC,QAAQ;;wBAgCW,cAAc,mBAAmB,0BAA0B,QAAQ;;wBAiBnE,mBAAmB,mBAAmB,gBAAgB;;;;;;wBAkBtD,kBAAkB,gBAAgB"}
@@ -0,0 +1,268 @@
1
+ import { sealedHttpSession } from "./sealedSession.mjs";
2
+ import { fetchWithStepUp } from "./stepUp.mjs";
3
+ import { DIRECTORIES_API_ROUTE, DIRECTORY_CHILDREN_API_ROUTE, WORKSPACES_API_ROUTE } from "../../types/hub.mjs";
4
+ import { sessionApiPath } from "@agimon-ai/po-core/web";
5
+ //#region src/web/lib/hubApi.ts
6
+ function isRecord(value) {
7
+ return typeof value === "object" && value !== null && !Array.isArray(value);
8
+ }
9
+ /** Lists one server folder's visible child directories for the workspace folder browser. */
10
+ async function listDirectory(folder) {
11
+ try {
12
+ const query = folder === void 0 ? "" : `?path=${encodeURIComponent(folder)}`;
13
+ const response = await sealedHttpSession.fetch(`${DIRECTORY_CHILDREN_API_ROUTE}${query}`);
14
+ const body = await response.json().catch(() => void 0);
15
+ if (response.ok && isRecord(body) && typeof body.path === "string" && Array.isArray(body.directories)) return {
16
+ path: body.path,
17
+ ...typeof body.parent === "string" ? { parent: body.parent } : {},
18
+ directories: body.directories.filter((entry) => typeof entry === "string")
19
+ };
20
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
21
+ } catch {
22
+ return { error: "The cockpit hub is unreachable." };
23
+ }
24
+ }
25
+ function asWorkspace(value) {
26
+ if (!isRecord(value) || typeof value.id !== "string" || typeof value.root !== "string") return void 0;
27
+ return {
28
+ id: value.id,
29
+ root: value.root,
30
+ ...typeof value.name === "string" && value.name !== "" ? { name: value.name } : {},
31
+ ...typeof value.available === "boolean" ? { available: value.available } : {},
32
+ ...typeof value.error === "string" ? { error: value.error } : {}
33
+ };
34
+ }
35
+ async function listWorkspaces() {
36
+ try {
37
+ const response = await sealedHttpSession.fetch(WORKSPACES_API_ROUTE);
38
+ const body = await response.json().catch(() => void 0);
39
+ if (response.ok && isRecord(body) && Array.isArray(body.workspaces)) return { workspaces: body.workspaces.map(asWorkspace).filter((entry) => entry !== void 0) };
40
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
41
+ } catch {
42
+ return { error: "The cockpit hub is unreachable." };
43
+ }
44
+ }
45
+ /**
46
+ * Admits a server-side repository root without starting a session. A name alone
47
+ * asks the server to create the workspace in its default folder.
48
+ */
49
+ async function admitWorkspace(input) {
50
+ try {
51
+ const response = await fetchWithStepUp(WORKSPACES_API_ROUTE, {
52
+ method: "POST",
53
+ headers: { "Content-Type": "application/json" },
54
+ body: JSON.stringify(input)
55
+ });
56
+ const body = await response.json().catch(() => void 0);
57
+ const workspace = isRecord(body) ? asWorkspace(body.workspace) : void 0;
58
+ if (response.ok && workspace !== void 0) return { workspace };
59
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
60
+ } catch {
61
+ return { error: "The cockpit hub is unreachable." };
62
+ }
63
+ }
64
+ /** Unregisters a workspace from Po without touching its files on disk. */
65
+ async function removeWorkspace(workspaceId) {
66
+ try {
67
+ const response = await sealedHttpSession.fetch(`${WORKSPACES_API_ROUTE}/${encodeURIComponent(workspaceId)}`, { method: "DELETE" });
68
+ if (response.ok) return { ok: true };
69
+ const body = await response.json().catch(() => void 0);
70
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
71
+ } catch {
72
+ return { error: "The cockpit hub is unreachable." };
73
+ }
74
+ }
75
+ /** Starts a session in an already admitted workspace. */
76
+ async function createWorkspaceSession(workspaceId, input = {}) {
77
+ let response;
78
+ try {
79
+ response = await fetchWithStepUp(`/api/workspaces/${encodeURIComponent(workspaceId)}/sessions`, {
80
+ method: "POST",
81
+ headers: { "Content-Type": "application/json" },
82
+ body: JSON.stringify({ name: input.name })
83
+ });
84
+ } catch {
85
+ return { error: "The cockpit hub is unreachable." };
86
+ }
87
+ const body = await response.json().catch(() => void 0);
88
+ if (!response.ok || !isRecord(body) || typeof body.sessionId !== "string") return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
89
+ const sessionId = body.sessionId;
90
+ try {
91
+ const detail = await sealedHttpSession.fetch(`/api/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}`);
92
+ const session = await detail.json().catch(() => void 0);
93
+ if (detail.ok && isRecord(session) && session.id === sessionId) return {
94
+ sessionId,
95
+ session
96
+ };
97
+ } catch {}
98
+ return { sessionId };
99
+ }
100
+ /** Compatibility flow for callers that have not admitted a workspace yet. */
101
+ async function createSession(input) {
102
+ const admission = await admitWorkspace({ root: input.cwd });
103
+ if ("error" in admission) return admission;
104
+ return createWorkspaceSession(admission.workspace.id, { name: input.name });
105
+ }
106
+ /** Asks the hub to stop a session's server; the rail card leaves once the server withdraws its record. */
107
+ async function stopSession(sessionId) {
108
+ let response;
109
+ try {
110
+ response = await sealedHttpSession.fetch(`${sessionApiPath(sessionId)}`, { method: "DELETE" });
111
+ } catch {
112
+ return { error: "The cockpit hub is unreachable." };
113
+ }
114
+ if (response.ok) return { ok: true };
115
+ let body;
116
+ try {
117
+ body = await response.json();
118
+ } catch {
119
+ body = void 0;
120
+ }
121
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
122
+ }
123
+ /**
124
+ * Asks the hub to replace a session's server, keeping its id.
125
+ *
126
+ * A running server reads the composition once. Restart syncs workspace changes
127
+ * before reopening the session, so changed extensions and APIs take effect.
128
+ */
129
+ async function restartSession(sessionId) {
130
+ let response;
131
+ try {
132
+ response = await sealedHttpSession.fetch(`${sessionApiPath(sessionId)}/restart`, { method: "POST" });
133
+ } catch {
134
+ return { error: "The cockpit hub is unreachable." };
135
+ }
136
+ if (response.ok) return { ok: true };
137
+ let body;
138
+ try {
139
+ body = await response.json();
140
+ } catch {
141
+ body = void 0;
142
+ }
143
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
144
+ }
145
+ /**
146
+ * Asks the hub to reopen a recorded session it has not started yet.
147
+ *
148
+ * Step-up gated like creating one, because it is the same act: an agent begins
149
+ * running in a directory. The card turns live when the resulting upsert lands.
150
+ */
151
+ async function reviveSession(sessionId) {
152
+ let response;
153
+ try {
154
+ response = await fetchWithStepUp(`${sessionApiPath(sessionId)}/revive`, { method: "POST" });
155
+ } catch {
156
+ return { error: "The cockpit hub is unreachable." };
157
+ }
158
+ if (response.ok) return { ok: true };
159
+ let body;
160
+ try {
161
+ body = await response.json();
162
+ } catch {
163
+ body = void 0;
164
+ }
165
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
166
+ }
167
+ async function readDormantTranscriptPage(sessionId, request, signal) {
168
+ const params = new URLSearchParams();
169
+ if (request.cursor !== void 0) params.set("cursor", request.cursor);
170
+ if (request.direction !== void 0) params.set("direction", request.direction);
171
+ if (request.limit !== void 0) params.set("limit", String(request.limit));
172
+ const query = params.toString();
173
+ const response = await sealedHttpSession.fetch(`${sessionApiPath(sessionId)}/transcript${query === "" ? "" : `?${query}`}`, signal === void 0 ? {} : { signal });
174
+ const body = await response.json().catch(() => void 0);
175
+ if (!response.ok) {
176
+ const message = isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.`;
177
+ throw new Error(message);
178
+ }
179
+ if (!isRecord(body) || !Array.isArray(body.entries)) throw new Error("The saved transcript response was invalid.");
180
+ return body;
181
+ }
182
+ /** Lists the Pi threads saved for a live session's workspace. */
183
+ function listSessionHistory(sessionId) {
184
+ return listHistoryAt(`${sessionApiPath(sessionId)}/history`);
185
+ }
186
+ async function listHistoryAt(path) {
187
+ try {
188
+ const response = await sealedHttpSession.fetch(path);
189
+ const body = await response.json();
190
+ if (response.ok && isRecord(body) && Array.isArray(body.sessions)) return { sessions: body.sessions.filter((session) => isRecord(session) && typeof session.id === "string" && (session.name === void 0 || typeof session.name === "string") && typeof session.firstMessage === "string" && typeof session.createdAt === "string" && typeof session.updatedAt === "string" && typeof session.messageCount === "number") };
191
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
192
+ } catch {
193
+ return { error: "The cockpit hub is unreachable." };
194
+ }
195
+ }
196
+ /** Lists saved history without requiring a live session in the workspace. */
197
+ function listWorkspaceHistory(workspaceId) {
198
+ return listHistoryAt(`/api/workspaces/${encodeURIComponent(workspaceId)}/history`);
199
+ }
200
+ /** Starts one saved thread without replacing another live session. */
201
+ async function resumeWorkspaceSession(workspaceId, targetSessionId) {
202
+ try {
203
+ const response = await fetchWithStepUp(`/api/workspaces/${encodeURIComponent(workspaceId)}/resume`, {
204
+ method: "POST",
205
+ headers: { "Content-Type": "application/json" },
206
+ body: JSON.stringify({ targetSessionId })
207
+ });
208
+ const body = await response.json();
209
+ if (!response.ok || !isRecord(body) || typeof body.sessionId !== "string") return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
210
+ const sessionId = body.sessionId;
211
+ try {
212
+ const detail = await sealedHttpSession.fetch(`/api/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}`);
213
+ const session = await detail.json().catch(() => void 0);
214
+ if (detail.ok && isRecord(session) && session.id === sessionId) return {
215
+ sessionId,
216
+ session
217
+ };
218
+ } catch {}
219
+ return { sessionId };
220
+ } catch {
221
+ return { error: "The cockpit hub is unreachable." };
222
+ }
223
+ }
224
+ /** Replaces one live card with a selected Pi thread from the same workspace. */
225
+ async function resumeSession(sessionId, targetSessionId) {
226
+ try {
227
+ const response = await fetchWithStepUp(`${sessionApiPath(sessionId)}/resume`, {
228
+ method: "POST",
229
+ headers: { "Content-Type": "application/json" },
230
+ body: JSON.stringify({ targetSessionId })
231
+ });
232
+ const body = await response.json();
233
+ if (response.ok && isRecord(body) && typeof body.sessionId === "string") return { sessionId: body.sessionId };
234
+ return { error: isRecord(body) && typeof body.error === "string" ? body.error : `The hub answered ${response.status}.` };
235
+ } catch {
236
+ return { error: "The cockpit hub is unreachable." };
237
+ }
238
+ }
239
+ /** File paths under a session's cwd matching the query, for @ completion. */
240
+ async function searchSessionFiles(sessionId, query) {
241
+ try {
242
+ const response = await sealedHttpSession.fetch(`${sessionApiPath(sessionId)}/plugins/files/?q=${encodeURIComponent(query)}`);
243
+ if (!response.ok) return [];
244
+ const body = await response.json();
245
+ return Array.isArray(body.files) ? body.files.filter((file) => typeof file === "string") : [];
246
+ } catch {
247
+ return [];
248
+ }
249
+ }
250
+ /**
251
+ * Directories the typed path could complete to, for the new-session picker.
252
+ * The hub lists the parent directory's children and filters them by the
253
+ * trailing segment as a regular expression.
254
+ */
255
+ async function searchDirectories(query) {
256
+ try {
257
+ const response = await sealedHttpSession.fetch(`${DIRECTORIES_API_ROUTE}?q=${encodeURIComponent(query)}`);
258
+ if (!response.ok) return [];
259
+ const body = await response.json();
260
+ return Array.isArray(body.directories) ? body.directories.filter((directory) => typeof directory === "string") : [];
261
+ } catch {
262
+ return [];
263
+ }
264
+ }
265
+ //#endregion
266
+ export { admitWorkspace, createSession, createWorkspaceSession, listDirectory, listSessionHistory, listWorkspaceHistory, listWorkspaces, readDormantTranscriptPage, removeWorkspace, restartSession, resumeSession, resumeWorkspaceSession, reviveSession, searchDirectories, searchSessionFiles, stopSession };
267
+
268
+ //# sourceMappingURL=hubApi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubApi.mjs","names":[],"sources":["../../../src/web/lib/hubApi.ts"],"sourcesContent":["import type { TranscriptPage, TranscriptPageRequest } from '@agimon-ai/po-core/sessionProtocol';\nimport { sessionApiPath } from '@agimon-ai/po-core/web';\n\nimport {\n DIRECTORIES_API_ROUTE,\n DIRECTORY_CHILDREN_API_ROUTE,\n WORKSPACES_API_ROUTE,\n type DirectoryListing,\n type PiSessionHistoryItem,\n type SessionSummary,\n type WorkspaceSummary,\n} from '../../types/hub';\nimport { sealedHttpSession } from './sealedSession';\nimport { fetchWithStepUp } from './stepUp';\n\nexport type CreateSessionResult = { sessionId: string; session?: SessionSummary } | { error: string };\nexport type WorkspaceResult = { workspace: WorkspaceSummary } | { error: string };\nexport type WorkspacesResult = { workspaces: WorkspaceSummary[] } | { error: string };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Lists one server folder's visible child directories for the workspace folder browser. */\nexport async function listDirectory(folder?: string): Promise<DirectoryListing | { error: string }> {\n try {\n const query = folder === undefined ? '' : `?path=${encodeURIComponent(folder)}`;\n const response = await sealedHttpSession.fetch(`${DIRECTORY_CHILDREN_API_ROUTE}${query}`);\n const body: unknown = await response.json().catch(() => undefined);\n if (response.ok && isRecord(body) && typeof body.path === 'string' && Array.isArray(body.directories)) {\n return {\n path: body.path,\n ...(typeof body.parent === 'string' ? { parent: body.parent } : {}),\n directories: body.directories.filter((entry): entry is string => typeof entry === 'string'),\n };\n }\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n}\n\nfunction asWorkspace(value: unknown): WorkspaceSummary | undefined {\n if (!isRecord(value) || typeof value.id !== 'string' || typeof value.root !== 'string') return undefined;\n return {\n id: value.id,\n root: value.root,\n ...(typeof value.name === 'string' && value.name !== '' ? { name: value.name } : {}),\n ...(typeof value.available === 'boolean' ? { available: value.available } : {}),\n ...(typeof value.error === 'string' ? { error: value.error } : {}),\n };\n}\n\nexport async function listWorkspaces(): Promise<WorkspacesResult> {\n try {\n const response = await sealedHttpSession.fetch(WORKSPACES_API_ROUTE);\n const body: unknown = await response.json().catch(() => undefined);\n if (response.ok && isRecord(body) && Array.isArray(body.workspaces)) {\n return {\n workspaces: body.workspaces.map(asWorkspace).filter((entry): entry is WorkspaceSummary => entry !== undefined),\n };\n }\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n}\n\n/**\n * Admits a server-side repository root without starting a session. A name alone\n * asks the server to create the workspace in its default folder.\n */\nexport async function admitWorkspace(input: { root?: string; name?: string }): Promise<WorkspaceResult> {\n try {\n const response = await fetchWithStepUp(WORKSPACES_API_ROUTE, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input),\n });\n const body: unknown = await response.json().catch(() => undefined);\n const workspace = isRecord(body) ? asWorkspace(body.workspace) : undefined;\n if (response.ok && workspace !== undefined) return { workspace };\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n}\n\nexport type RemoveWorkspaceResult = { ok: true } | { error: string };\n\n/** Unregisters a workspace from Po without touching its files on disk. */\nexport async function removeWorkspace(workspaceId: string): Promise<RemoveWorkspaceResult> {\n try {\n const response = await sealedHttpSession.fetch(`${WORKSPACES_API_ROUTE}/${encodeURIComponent(workspaceId)}`, {\n method: 'DELETE',\n });\n if (response.ok) return { ok: true };\n const body: unknown = await response.json().catch(() => undefined);\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n}\n\n/** Starts a session in an already admitted workspace. */\nexport async function createWorkspaceSession(\n workspaceId: string,\n input: { name?: string } = {},\n): Promise<CreateSessionResult> {\n let response: Response;\n try {\n response = await fetchWithStepUp(`/api/workspaces/${encodeURIComponent(workspaceId)}/sessions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ name: input.name }),\n });\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n const body: unknown = await response.json().catch(() => undefined);\n if (!response.ok || !isRecord(body) || typeof body.sessionId !== 'string') {\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n }\n const sessionId = body.sessionId;\n try {\n const detail = await sealedHttpSession.fetch(\n `/api/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}`,\n );\n const session: unknown = await detail.json().catch(() => undefined);\n if (detail.ok && isRecord(session) && session.id === sessionId) {\n return { sessionId, session: session as unknown as SessionSummary };\n }\n } catch {\n // The socket can still deliver the summary; this read only closes a missed-event race.\n }\n return { sessionId };\n}\n\n/** Compatibility flow for callers that have not admitted a workspace yet. */\nexport async function createSession(input: { cwd: string; name?: string }): Promise<CreateSessionResult> {\n const admission = await admitWorkspace({ root: input.cwd });\n if ('error' in admission) return admission;\n return createWorkspaceSession(admission.workspace.id, { name: input.name });\n}\n\nexport type StopSessionResult = { ok: true } | { error: string };\n\n/** Asks the hub to stop a session's server; the rail card leaves once the server withdraws its record. */\nexport async function stopSession(sessionId: string): Promise<StopSessionResult> {\n let response: Response;\n try {\n response = await sealedHttpSession.fetch(`${sessionApiPath(sessionId)}`, {\n method: 'DELETE',\n });\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n if (response.ok) return { ok: true };\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = undefined;\n }\n const error = isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`;\n return { error };\n}\n\nexport type RestartSessionResult = { ok: true } | { error: string };\n\n/**\n * Asks the hub to replace a session's server, keeping its id.\n *\n * A running server reads the composition once. Restart syncs workspace changes\n * before reopening the session, so changed extensions and APIs take effect.\n */\nexport async function restartSession(sessionId: string): Promise<RestartSessionResult> {\n let response: Response;\n try {\n response = await sealedHttpSession.fetch(`${sessionApiPath(sessionId)}/restart`, {\n method: 'POST',\n });\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n if (response.ok) return { ok: true };\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = undefined;\n }\n const error = isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`;\n return { error };\n}\n\nexport type ReviveSessionResult = { ok: true } | { error: string };\n\n/**\n * Asks the hub to reopen a recorded session it has not started yet.\n *\n * Step-up gated like creating one, because it is the same act: an agent begins\n * running in a directory. The card turns live when the resulting upsert lands.\n */\nexport async function reviveSession(sessionId: string): Promise<ReviveSessionResult> {\n let response: Response;\n try {\n response = await fetchWithStepUp(`${sessionApiPath(sessionId)}/revive`, { method: 'POST' });\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n if (response.ok) return { ok: true };\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = undefined;\n }\n const error = isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`;\n return { error };\n}\n\nexport async function readDormantTranscriptPage(\n sessionId: string,\n request: TranscriptPageRequest,\n signal?: AbortSignal,\n): Promise<TranscriptPage> {\n const params = new URLSearchParams();\n if (request.cursor !== undefined) params.set('cursor', request.cursor);\n if (request.direction !== undefined) params.set('direction', request.direction);\n if (request.limit !== undefined) params.set('limit', String(request.limit));\n const query = params.toString();\n const response = await sealedHttpSession.fetch(\n `${sessionApiPath(sessionId)}/transcript${query === '' ? '' : `?${query}`}`,\n signal === undefined ? {} : { signal },\n );\n const body: unknown = await response.json().catch(() => undefined);\n if (!response.ok) {\n const message =\n isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`;\n throw new Error(message);\n }\n if (!isRecord(body) || !Array.isArray(body.entries)) throw new Error('The saved transcript response was invalid.');\n return body as unknown as TranscriptPage;\n}\nexport type SessionHistoryResult = { sessions: PiSessionHistoryItem[] } | { error: string };\n\n/** Lists the Pi threads saved for a live session's workspace. */\nexport function listSessionHistory(sessionId: string): Promise<SessionHistoryResult> {\n return listHistoryAt(`${sessionApiPath(sessionId)}/history`);\n}\n\nexport type ResumeSessionResult = { sessionId: string; session?: SessionSummary } | { error: string };\n\nasync function listHistoryAt(path: string): Promise<SessionHistoryResult> {\n try {\n const response = await sealedHttpSession.fetch(path);\n const body = (await response.json()) as unknown;\n if (response.ok && isRecord(body) && Array.isArray(body.sessions)) {\n return {\n sessions: body.sessions.filter(\n (session): session is PiSessionHistoryItem =>\n isRecord(session) &&\n typeof session.id === 'string' &&\n (session.name === undefined || typeof session.name === 'string') &&\n typeof session.firstMessage === 'string' &&\n typeof session.createdAt === 'string' &&\n typeof session.updatedAt === 'string' &&\n typeof session.messageCount === 'number',\n ),\n };\n }\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n}\n\n/** Lists saved history without requiring a live session in the workspace. */\nexport function listWorkspaceHistory(workspaceId: string): Promise<SessionHistoryResult> {\n return listHistoryAt(`/api/workspaces/${encodeURIComponent(workspaceId)}/history`);\n}\n\n/** Starts one saved thread without replacing another live session. */\nexport async function resumeWorkspaceSession(\n workspaceId: string,\n targetSessionId: string,\n): Promise<ResumeSessionResult> {\n try {\n const response = await fetchWithStepUp(`/api/workspaces/${encodeURIComponent(workspaceId)}/resume`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ targetSessionId }),\n });\n const body = (await response.json()) as unknown;\n if (!response.ok || !isRecord(body) || typeof body.sessionId !== 'string') {\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n }\n const sessionId = body.sessionId;\n try {\n const detail = await sealedHttpSession.fetch(\n `/api/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}`,\n );\n const session: unknown = await detail.json().catch(() => undefined);\n if (detail.ok && isRecord(session) && session.id === sessionId) {\n return { sessionId, session: session as unknown as SessionSummary };\n }\n } catch {\n // The socket can still deliver the summary; this read only closes a missed-event race.\n }\n return { sessionId };\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n}\n\n/** Replaces one live card with a selected Pi thread from the same workspace. */\nexport async function resumeSession(sessionId: string, targetSessionId: string): Promise<ResumeSessionResult> {\n try {\n const response = await fetchWithStepUp(`${sessionApiPath(sessionId)}/resume`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ targetSessionId }),\n });\n const body = (await response.json()) as unknown;\n if (response.ok && isRecord(body) && typeof body.sessionId === 'string') return { sessionId: body.sessionId };\n return {\n error: isRecord(body) && typeof body.error === 'string' ? body.error : `The hub answered ${response.status}.`,\n };\n } catch {\n return { error: 'The cockpit hub is unreachable.' };\n }\n}\n/** File paths under a session's cwd matching the query, for @ completion. */\nexport async function searchSessionFiles(sessionId: string, query: string): Promise<string[]> {\n try {\n const response = await sealedHttpSession.fetch(\n `${sessionApiPath(sessionId)}/plugins/files/?q=${encodeURIComponent(query)}`,\n );\n if (!response.ok) return [];\n const body = (await response.json()) as { files?: unknown };\n return Array.isArray(body.files) ? body.files.filter((file): file is string => typeof file === 'string') : [];\n } catch {\n return []; // Completion is a convenience; a failed lookup just shows nothing.\n }\n}\n\n/**\n * Directories the typed path could complete to, for the new-session picker.\n * The hub lists the parent directory's children and filters them by the\n * trailing segment as a regular expression.\n */\nexport async function searchDirectories(query: string): Promise<string[]> {\n try {\n const response = await sealedHttpSession.fetch(`${DIRECTORIES_API_ROUTE}?q=${encodeURIComponent(query)}`);\n if (!response.ok) return [];\n const body = (await response.json()) as { directories?: unknown };\n return Array.isArray(body.directories)\n ? body.directories.filter((directory): directory is string => typeof directory === 'string')\n : [];\n } catch {\n return []; // Suggestions are a convenience; a failed lookup just shows nothing.\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ //#region src/web/lib/leaderTree.ts
2
+ const ROOT_LABEL = "leader";
3
+ /**
4
+ * Inserts one binding the way the TUI registry does: a group segment keeps
5
+ * the label of whoever registered it first (adopting a detail if it had
6
+ * none), and a leaf that is already bound is taken over by the newcomer,
7
+ * along with any group that stood where the leaf now goes.
8
+ */
9
+ function insert(root, binding) {
10
+ let current = root;
11
+ for (const [index, segment] of binding.path.entries()) {
12
+ const isLeaf = index === binding.path.length - 1;
13
+ let node = current.children.get(segment.key);
14
+ if (!node) {
15
+ node = {
16
+ key: segment.key,
17
+ label: segment.label,
18
+ detail: segment.detail ?? "",
19
+ children: /* @__PURE__ */ new Map()
20
+ };
21
+ current.children.set(segment.key, node);
22
+ } else if (!node.detail && segment.detail) node.detail = segment.detail;
23
+ if (isLeaf) {
24
+ node.children.clear();
25
+ node.binding = binding;
26
+ node.label = segment.label;
27
+ node.detail = segment.detail ?? "";
28
+ } else if (node.binding) delete node.binding;
29
+ current = node;
30
+ }
31
+ }
32
+ function leavesUnder(node) {
33
+ const leaves = [];
34
+ if (node.binding) leaves.push(node.binding);
35
+ for (const child of node.children.values()) leaves.push(...leavesUnder(child));
36
+ return leaves;
37
+ }
38
+ /**
39
+ * Every place `insert` would silently prefer one binding over another, in
40
+ * the same order insert walks them: a leaf landing on a bound leaf or over a
41
+ * group displaces those bindings, a group segment crossing a bound leaf
42
+ * displaces it, and a group segment worded differently from the first namer
43
+ * keeps the first wording.
44
+ */
45
+ function leaderConflicts(bindings) {
46
+ const conflicts = [];
47
+ const root = {
48
+ key: "",
49
+ label: ROOT_LABEL,
50
+ detail: "",
51
+ children: /* @__PURE__ */ new Map()
52
+ };
53
+ const namers = /* @__PURE__ */ new Map();
54
+ for (const binding of bindings) {
55
+ let current = root;
56
+ const keys = [];
57
+ for (const [index, segment] of binding.path.entries()) {
58
+ keys.push(segment.key);
59
+ const path = keys.join(" ");
60
+ const isLeaf = index === binding.path.length - 1;
61
+ let node = current.children.get(segment.key);
62
+ if (node) {
63
+ if (isLeaf) {
64
+ for (const loser of leavesUnder(node)) if (loser !== binding) conflicts.push({
65
+ kind: "leaf-override",
66
+ path,
67
+ winner: binding,
68
+ loser
69
+ });
70
+ } else {
71
+ if (node.binding && node.binding !== binding) conflicts.push({
72
+ kind: "leaf-override",
73
+ path,
74
+ winner: binding,
75
+ loser: node.binding
76
+ });
77
+ const namer = namers.get(node);
78
+ if (namer !== void 0 && namer !== binding && node.label !== segment.label) conflicts.push({
79
+ kind: "group-label",
80
+ path,
81
+ winner: namer,
82
+ loser: binding
83
+ });
84
+ }
85
+ } else {
86
+ node = {
87
+ key: segment.key,
88
+ label: segment.label,
89
+ detail: "",
90
+ children: /* @__PURE__ */ new Map()
91
+ };
92
+ current.children.set(segment.key, node);
93
+ namers.set(node, binding);
94
+ }
95
+ if (isLeaf) {
96
+ node.children.clear();
97
+ node.binding = binding;
98
+ node.label = segment.label;
99
+ namers.set(node, binding);
100
+ } else if (node.binding) delete node.binding;
101
+ current = node;
102
+ }
103
+ }
104
+ return conflicts;
105
+ }
106
+ function toOption(node) {
107
+ const children = [...node.children.values()].sort((left, right) => left.key.localeCompare(right.key)).map((child) => ({
108
+ key: child.key,
109
+ label: child.label,
110
+ detail: child.detail,
111
+ children: []
112
+ }));
113
+ return {
114
+ key: node.key,
115
+ label: node.label,
116
+ detail: node.detail,
117
+ ...node.binding ? { binding: node.binding } : {},
118
+ children
119
+ };
120
+ }
121
+ /**
122
+ * The options one level of Leader Space offers, keyed by what the reader
123
+ * would press, sorted by key. Undefined when the path runs off the tree or
124
+ * lands on a leaf, which is how the palette knows a path is no longer a group.
125
+ */
126
+ function leaderGroup(bindings, path) {
127
+ const root = {
128
+ key: "",
129
+ label: ROOT_LABEL,
130
+ detail: "",
131
+ children: /* @__PURE__ */ new Map()
132
+ };
133
+ for (const binding of bindings) insert(root, binding);
134
+ let current = root;
135
+ for (const key of path) {
136
+ const next = current.children.get(key);
137
+ if (!next || next.binding) return void 0;
138
+ current = next;
139
+ }
140
+ const options = [...current.children.values()].sort((left, right) => left.key.localeCompare(right.key)).map(toOption);
141
+ return {
142
+ label: current.label,
143
+ options
144
+ };
145
+ }
146
+ //#endregion
147
+ exports.leaderConflicts = leaderConflicts;
148
+ exports.leaderGroup = leaderGroup;
149
+
150
+ //# sourceMappingURL=leaderTree.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderTree.cjs","names":[],"sources":["../../../src/web/lib/leaderTree.ts"],"sourcesContent":["import type { LeaderBindingContribution } from '@agimon-ai/po-core/web';\n\nexport interface LeaderOption {\n key: string;\n label: string;\n detail: string;\n /** A group opens the next level; a leaf carries the binding that fires. */\n binding?: LeaderBindingContribution;\n /** The keys one level down, for a group's preview; empty for a leaf. */\n children: LeaderOption[];\n}\n\nexport interface LeaderGroup {\n /** The label of the segment that opened this level; 'leader' at the root. */\n label: string;\n options: LeaderOption[];\n}\n\ninterface LeaderNode {\n key: string;\n label: string;\n detail: string;\n binding?: LeaderBindingContribution;\n children: Map<string, LeaderNode>;\n}\n\nconst ROOT_LABEL = 'leader';\n\n/**\n * Inserts one binding the way the TUI registry does: a group segment keeps\n * the label of whoever registered it first (adopting a detail if it had\n * none), and a leaf that is already bound is taken over by the newcomer,\n * along with any group that stood where the leaf now goes.\n */\nfunction insert(root: LeaderNode, binding: LeaderBindingContribution): void {\n let current = root;\n for (const [index, segment] of binding.path.entries()) {\n const isLeaf = index === binding.path.length - 1;\n let node = current.children.get(segment.key);\n if (!node) {\n node = { key: segment.key, label: segment.label, detail: segment.detail ?? '', children: new Map() };\n current.children.set(segment.key, node);\n } else if (!node.detail && segment.detail) {\n node.detail = segment.detail;\n }\n if (isLeaf) {\n node.children.clear();\n node.binding = binding;\n node.label = segment.label;\n node.detail = segment.detail ?? '';\n } else if (node.binding) {\n delete node.binding;\n }\n current = node;\n }\n}\n\nexport interface LeaderConflict {\n /** A later binding took a bound leaf (or a whole group) over, or a group segment was worded differently. */\n kind: 'leaf-override' | 'group-label';\n /** The keys of the contested segment, space separated. */\n path: string;\n /** The binding the tree keeps: the later one for a leaf, the first namer for a group label. */\n winner: LeaderBindingContribution;\n loser: LeaderBindingContribution;\n}\n\nfunction leavesUnder(node: LeaderNode): LeaderBindingContribution[] {\n const leaves: LeaderBindingContribution[] = [];\n if (node.binding) leaves.push(node.binding);\n for (const child of node.children.values()) leaves.push(...leavesUnder(child));\n return leaves;\n}\n\n/**\n * Every place `insert` would silently prefer one binding over another, in\n * the same order insert walks them: a leaf landing on a bound leaf or over a\n * group displaces those bindings, a group segment crossing a bound leaf\n * displaces it, and a group segment worded differently from the first namer\n * keeps the first wording.\n */\nexport function leaderConflicts(bindings: readonly LeaderBindingContribution[]): LeaderConflict[] {\n const conflicts: LeaderConflict[] = [];\n const root: LeaderNode = { key: '', label: ROOT_LABEL, detail: '', children: new Map() };\n const namers = new Map<LeaderNode, LeaderBindingContribution>();\n for (const binding of bindings) {\n let current = root;\n const keys: string[] = [];\n for (const [index, segment] of binding.path.entries()) {\n keys.push(segment.key);\n const path = keys.join(' ');\n const isLeaf = index === binding.path.length - 1;\n let node = current.children.get(segment.key);\n if (node) {\n if (isLeaf) {\n for (const loser of leavesUnder(node)) {\n if (loser !== binding) conflicts.push({ kind: 'leaf-override', path, winner: binding, loser });\n }\n } else {\n if (node.binding && node.binding !== binding) {\n conflicts.push({ kind: 'leaf-override', path, winner: binding, loser: node.binding });\n }\n const namer = namers.get(node);\n if (namer !== undefined && namer !== binding && node.label !== segment.label) {\n conflicts.push({ kind: 'group-label', path, winner: namer, loser: binding });\n }\n }\n } else {\n node = { key: segment.key, label: segment.label, detail: '', children: new Map() };\n current.children.set(segment.key, node);\n namers.set(node, binding);\n }\n if (isLeaf) {\n node.children.clear();\n node.binding = binding;\n node.label = segment.label;\n namers.set(node, binding);\n } else if (node.binding) {\n delete node.binding;\n }\n current = node;\n }\n }\n return conflicts;\n}\n\nfunction toOption(node: LeaderNode): LeaderOption {\n const children = [...node.children.values()]\n .sort((left, right) => left.key.localeCompare(right.key))\n .map((child) => ({ key: child.key, label: child.label, detail: child.detail, children: [] }));\n return {\n key: node.key,\n label: node.label,\n detail: node.detail,\n ...(node.binding ? { binding: node.binding } : {}),\n children,\n };\n}\n\n/**\n * The options one level of Leader Space offers, keyed by what the reader\n * would press, sorted by key. Undefined when the path runs off the tree or\n * lands on a leaf, which is how the palette knows a path is no longer a group.\n */\nexport function leaderGroup(\n bindings: readonly LeaderBindingContribution[],\n path: readonly string[],\n): LeaderGroup | undefined {\n const root: LeaderNode = { key: '', label: ROOT_LABEL, detail: '', children: new Map() };\n for (const binding of bindings) insert(root, binding);\n let current = root;\n for (const key of path) {\n const next = current.children.get(key);\n if (!next || next.binding) return undefined;\n current = next;\n }\n const options = [...current.children.values()].sort((left, right) => left.key.localeCompare(right.key)).map(toOption);\n return { label: current.label, options };\n}\n"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { LeaderBindingContribution } from "@agimon-ai/po-core/web";
2
+ //#region src/web/lib/leaderTree.d.ts
3
+ export interface LeaderOption {
4
+ key: string;
5
+ label: string;
6
+ detail: string;
7
+ /** A group opens the next level; a leaf carries the binding that fires. */
8
+ binding?: LeaderBindingContribution;
9
+ /** The keys one level down, for a group's preview; empty for a leaf. */
10
+ children: LeaderOption[];
11
+ }
12
+ export interface LeaderGroup {
13
+ /** The label of the segment that opened this level; 'leader' at the root. */
14
+ label: string;
15
+ options: LeaderOption[];
16
+ }
17
+ export interface LeaderConflict {
18
+ /** A later binding took a bound leaf (or a whole group) over, or a group segment was worded differently. */
19
+ kind: 'leaf-override' | 'group-label';
20
+ /** The keys of the contested segment, space separated. */
21
+ path: string;
22
+ /** The binding the tree keeps: the later one for a leaf, the first namer for a group label. */
23
+ winner: LeaderBindingContribution;
24
+ loser: LeaderBindingContribution;
25
+ }
26
+ /**
27
+ * Every place `insert` would silently prefer one binding over another, in
28
+ * the same order insert walks them: a leaf landing on a bound leaf or over a
29
+ * group displaces those bindings, a group segment crossing a bound leaf
30
+ * displaces it, and a group segment worded differently from the first namer
31
+ * keeps the first wording.
32
+ */
33
+ export declare function leaderConflicts(bindings: readonly LeaderBindingContribution[]): LeaderConflict[];
34
+ /**
35
+ * The options one level of Leader Space offers, keyed by what the reader
36
+ * would press, sorted by key. Undefined when the path runs off the tree or
37
+ * lands on a leaf, which is how the palette knows a path is no longer a group.
38
+ */
39
+ export declare function leaderGroup(bindings: readonly LeaderBindingContribution[], path: readonly string[]): LeaderGroup | undefined;
40
+ //#endregion
41
+ //# sourceMappingURL=leaderTree.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderTree.d.mts","names":[],"sources":["../../../src/web/lib/leaderTree.ts"],"mappings":";;iBAEiB;EACf;EACA;EACA;;EAEA,UAAU;;EAEV,UAAU;;iBAGK;;EAEf;EACA,SAAS;;iBA0CM;;EAEf;;EAEA;;EAEA,QAAQ;EACR,OAAO;;;;;;;;;wBAiBO,gBAAgB,mBAAmB,8BAA8B;;;;;;wBA+DjE,YACd,mBAAmB,6BACnB,0BACC"}