@burdenoff/microfe-vibecontrols 2026.511.1 → 2026.513.1

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 (1025) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +2 -5
  2. package/dist/components/agent-manager/AgentManagerAdminBar.js +69 -61
  3. package/dist/components/agent-manager/AgentManagerAdminBar.js.map +1 -1
  4. package/dist/components/agent-manager/AgentManagerCenter.js +56 -50
  5. package/dist/components/agent-manager/AgentManagerCenter.js.map +1 -1
  6. package/dist/components/agent-manager/AgentManagerChatPane.js +87 -74
  7. package/dist/components/agent-manager/AgentManagerChatPane.js.map +1 -1
  8. package/dist/components/agent-manager/AgentManagerDetailPanel.js +5 -5
  9. package/dist/components/agent-manager/AgentManagerDetailPanel.js.map +1 -1
  10. package/dist/components/agent-manager/AgentManagerInputArea.js +159 -157
  11. package/dist/components/agent-manager/AgentManagerInputArea.js.map +1 -1
  12. package/dist/components/agent-manager/AgentManagerMessageItem.js +32 -28
  13. package/dist/components/agent-manager/AgentManagerMessageItem.js.map +1 -1
  14. package/dist/components/agent-manager/AgentManagerSessionItem.js +24 -24
  15. package/dist/components/agent-manager/AgentManagerSessionItem.js.map +1 -1
  16. package/dist/components/agent-manager/AgentManagerSessionList.js +32 -24
  17. package/dist/components/agent-manager/AgentManagerSessionList.js.map +1 -1
  18. package/dist/components/agent-manager/AgentManagerSidebar.js +3 -3
  19. package/dist/components/agent-manager/AgentManagerSidebar.js.map +1 -1
  20. package/dist/components/agent-manager/AgentManagerTabBar.js +2 -2
  21. package/dist/components/agent-manager/AgentManagerTabBar.js.map +1 -1
  22. package/dist/components/agent-manager/BridleConfigPanel.js +1 -1
  23. package/dist/components/agent-manager/BridleConfigPanel.js.map +1 -1
  24. package/dist/components/agent-manager/ProfilesPanel.js +260 -0
  25. package/dist/components/agent-manager/ProfilesPanel.js.map +1 -0
  26. package/dist/components/agent-manager/controls/ModelSelector.js +75 -58
  27. package/dist/components/agent-manager/controls/ModelSelector.js.map +1 -1
  28. package/dist/components/agent-manager/controls/SdkSelector.js +85 -61
  29. package/dist/components/agent-manager/controls/SdkSelector.js.map +1 -1
  30. package/dist/components/agent-manager/detail/SessionConfigPanel.js +2 -2
  31. package/dist/components/agent-manager/detail/SessionConfigPanel.js.map +1 -1
  32. package/dist/components/agent-manager/detail/SessionLogsPanel.js +1 -1
  33. package/dist/components/agent-manager/detail/SessionLogsPanel.js.map +1 -1
  34. package/dist/components/agent-manager/detail/SessionStatsPanel.js +1 -1
  35. package/dist/components/agent-manager/detail/SessionStatsPanel.js.map +1 -1
  36. package/dist/components/agent-manager/detail/SessionToolsPanel.js +1 -1
  37. package/dist/components/agent-manager/detail/SessionToolsPanel.js.map +1 -1
  38. package/dist/components/agent-manager/dialogs/ExportSessionDialog.js +1 -1
  39. package/dist/components/agent-manager/dialogs/ExportSessionDialog.js.map +1 -1
  40. package/dist/components/agent-manager/dialogs/NewSessionDialog.js +129 -108
  41. package/dist/components/agent-manager/dialogs/NewSessionDialog.js.map +1 -1
  42. package/dist/components/agent-manager/dialogs/SessionSearchDialog.js +1 -1
  43. package/dist/components/agent-manager/dialogs/SessionSearchDialog.js.map +1 -1
  44. package/dist/components/agent-manager/index.js +16 -0
  45. package/dist/components/agent-manager/modelDefaults.js +10 -0
  46. package/dist/components/agent-manager/modelDefaults.js.map +1 -0
  47. package/dist/components/agents/AgentCard.js +33 -30
  48. package/dist/components/agents/AgentCard.js.map +1 -1
  49. package/dist/components/agents/AgentForm.js +277 -239
  50. package/dist/components/agents/AgentForm.js.map +1 -1
  51. package/dist/components/agents/AgentStatusBadge.js +19 -8
  52. package/dist/components/agents/AgentStatusBadge.js.map +1 -1
  53. package/dist/components/agents/OpenInBrowserEditorButton.js +67 -65
  54. package/dist/components/agents/OpenInBrowserEditorButton.js.map +1 -1
  55. package/dist/components/agents/backup/AgentBackupTab.js +186 -185
  56. package/dist/components/agents/backup/AgentBackupTab.js.map +1 -1
  57. package/dist/components/ai/AIContextsTab.js +1 -1
  58. package/dist/components/ai/AIContextsTab.js.map +1 -1
  59. package/dist/components/ai/AIOverviewTab.js +2 -2
  60. package/dist/components/ai/AIOverviewTab.js.map +1 -1
  61. package/dist/components/ai/AIPlaygroundTab.js +97 -97
  62. package/dist/components/ai/AIPlaygroundTab.js.map +1 -1
  63. package/dist/components/ai/AIPromptsTab.js +4 -4
  64. package/dist/components/ai/AIPromptsTab.js.map +1 -1
  65. package/dist/components/ai/AIProviderCredentialsCard.js +234 -0
  66. package/dist/components/ai/AIProviderCredentialsCard.js.map +1 -0
  67. package/dist/components/ai/AISessionsTab.js +17 -1
  68. package/dist/components/ai/AISessionsTab.js.map +1 -1
  69. package/dist/components/ai/AIStatsTab.js +1 -1
  70. package/dist/components/ai/AIStatsTab.js.map +1 -1
  71. package/dist/components/ai/ClaudeCredentialsCard.js +1 -1
  72. package/dist/components/ai/ClaudeCredentialsCard.js.map +1 -1
  73. package/dist/components/ai/PluginHarnessPicker.js +84 -53
  74. package/dist/components/ai/PluginHarnessPicker.js.map +1 -1
  75. package/dist/components/aliases/AliasManager.js +386 -0
  76. package/dist/components/aliases/AliasManager.js.map +1 -0
  77. package/dist/components/aliases/aliasReservedNames.js +32 -0
  78. package/dist/components/aliases/aliasReservedNames.js.map +1 -0
  79. package/dist/components/gitops/CIDurationChart.js +11 -11
  80. package/dist/components/gitops/VibeGitOpsTab.js +128 -100
  81. package/dist/components/gitops/VibeGitOpsTab.js.map +1 -1
  82. package/dist/components/graph/AgentGraphView.js +61 -62
  83. package/dist/components/graph/AgentGraphView.js.map +1 -1
  84. package/dist/components/graph/AgentNode.js +17 -18
  85. package/dist/components/graph/AgentNode.js.map +1 -1
  86. package/dist/components/graph/TargetNode.js +31 -32
  87. package/dist/components/graph/TargetNode.js.map +1 -1
  88. package/dist/components/logs/LogViewer.js +121 -119
  89. package/dist/components/logs/LogViewer.js.map +1 -1
  90. package/dist/components/sessions/TerminalPanel.js +449 -458
  91. package/dist/components/sessions/TerminalPanel.js.map +1 -1
  92. package/dist/components/shared/AgentSelector.js +87 -67
  93. package/dist/components/shared/AgentSelector.js.map +1 -1
  94. package/dist/components/shared/AgentSetupBanner.js +64 -61
  95. package/dist/components/shared/AgentSetupBanner.js.map +1 -1
  96. package/dist/components/vibecalendar/expandOccurrences.js.map +1 -1
  97. package/dist/constants/pluginCatalog.js +29 -1
  98. package/dist/constants/pluginCatalog.js.map +1 -1
  99. package/dist/generated/wspace-operations.js +126 -103
  100. package/dist/generated/wspace-operations.js.map +1 -1
  101. package/dist/generated/wspace-types.js.map +1 -1
  102. package/dist/hooks/useActiveAgentProfile.js +51 -0
  103. package/dist/hooks/useActiveAgentProfile.js.map +1 -0
  104. package/dist/hooks/useAgentEvents.js +1 -0
  105. package/dist/hooks/useAgentEvents.js.map +1 -1
  106. package/dist/hooks/useAgentManagerStreaming.js +1 -1
  107. package/dist/hooks/useAgentManagerStreaming.js.map +1 -1
  108. package/dist/hooks/useCachedInitialData.js +4 -2
  109. package/dist/hooks/useCachedInitialData.js.map +1 -1
  110. package/dist/hooks/usePluginAvailability.js +93 -61
  111. package/dist/hooks/usePluginAvailability.js.map +1 -1
  112. package/dist/index.js +10 -10
  113. package/dist/microfe-vibecontrols.css +1 -1
  114. package/dist/node_modules/d3-scale/src/continuous.js +20 -20
  115. package/dist/node_modules/d3-scale/src/diverging.js +30 -30
  116. package/dist/node_modules/d3-scale/src/sequential.js +25 -25
  117. package/dist/pages/AgentDetailsPage.js +801 -736
  118. package/dist/pages/AgentDetailsPage.js.map +1 -1
  119. package/dist/pages/AgentsLandingPage.js +60 -47
  120. package/dist/pages/AgentsLandingPage.js.map +1 -1
  121. package/dist/pages/AgentsPage.js +351 -295
  122. package/dist/pages/AgentsPage.js.map +1 -1
  123. package/dist/pages/SessionsPage.js +618 -615
  124. package/dist/pages/SessionsPage.js.map +1 -1
  125. package/dist/pages/TargetsPage.js +5 -2
  126. package/dist/pages/TargetsPage.js.map +1 -1
  127. package/dist/pages/VibeDetailsPage.js +582 -555
  128. package/dist/pages/VibeDetailsPage.js.map +1 -1
  129. package/dist/pages/ai/AIPage.js +107 -103
  130. package/dist/pages/ai/AIPage.js.map +1 -1
  131. package/dist/pages/ai/AISessionDetailPage.js +167 -163
  132. package/dist/pages/ai/AISessionDetailPage.js.map +1 -1
  133. package/dist/pages/ai/AgentManagerPage.js +94 -90
  134. package/dist/pages/ai/AgentManagerPage.js.map +1 -1
  135. package/dist/pages/tunnels/TunnelDetailsPage.js.map +1 -1
  136. package/dist/services/aiApi.js +119 -112
  137. package/dist/services/aiApi.js.map +1 -1
  138. package/dist/services/iframeToken.js +29 -0
  139. package/dist/services/iframeToken.js.map +1 -0
  140. package/dist/services/schedulerApi.js +14 -13
  141. package/dist/services/schedulerApi.js.map +1 -1
  142. package/dist/store/agentManagerStore.js +61 -14
  143. package/dist/store/agentManagerStore.js.map +1 -1
  144. package/dist/store/vibeControlsStore.js +21 -1
  145. package/dist/store/vibeControlsStore.js.map +1 -1
  146. package/dist/translations/en.js.map +1 -1
  147. package/dist/utils/agentApiPath.js +9 -0
  148. package/dist/utils/agentApiPath.js.map +1 -0
  149. package/package.json +3 -3
  150. package/dist/VibeControlsRoot.d.ts +0 -36
  151. package/dist/VibeControlsRoot.d.ts.map +0 -1
  152. package/dist/VibeControlsRoutes.d.ts +0 -2
  153. package/dist/VibeControlsRoutes.d.ts.map +0 -1
  154. package/dist/components/actions/ActionCard.d.ts +0 -32
  155. package/dist/components/actions/ActionCard.d.ts.map +0 -1
  156. package/dist/components/actions/ActionForm.d.ts +0 -39
  157. package/dist/components/actions/ActionForm.d.ts.map +0 -1
  158. package/dist/components/actions/ActionTypeBadge.d.ts +0 -9
  159. package/dist/components/actions/ActionTypeBadge.d.ts.map +0 -1
  160. package/dist/components/actions/ExecutionHistory.d.ts +0 -23
  161. package/dist/components/actions/ExecutionHistory.d.ts.map +0 -1
  162. package/dist/components/actions/index.d.ts +0 -6
  163. package/dist/components/actions/index.d.ts.map +0 -1
  164. package/dist/components/agent-manager/AgentManagerAdminBar.d.ts +0 -13
  165. package/dist/components/agent-manager/AgentManagerAdminBar.d.ts.map +0 -1
  166. package/dist/components/agent-manager/AgentManagerBulkActions.d.ts +0 -13
  167. package/dist/components/agent-manager/AgentManagerBulkActions.d.ts.map +0 -1
  168. package/dist/components/agent-manager/AgentManagerCenter.d.ts +0 -8
  169. package/dist/components/agent-manager/AgentManagerCenter.d.ts.map +0 -1
  170. package/dist/components/agent-manager/AgentManagerChatPane.d.ts +0 -9
  171. package/dist/components/agent-manager/AgentManagerChatPane.d.ts.map +0 -1
  172. package/dist/components/agent-manager/AgentManagerDetailPanel.d.ts +0 -13
  173. package/dist/components/agent-manager/AgentManagerDetailPanel.d.ts.map +0 -1
  174. package/dist/components/agent-manager/AgentManagerInputArea.d.ts +0 -14
  175. package/dist/components/agent-manager/AgentManagerInputArea.d.ts.map +0 -1
  176. package/dist/components/agent-manager/AgentManagerLayout.d.ts +0 -10
  177. package/dist/components/agent-manager/AgentManagerLayout.d.ts.map +0 -1
  178. package/dist/components/agent-manager/AgentManagerMessageItem.d.ts +0 -10
  179. package/dist/components/agent-manager/AgentManagerMessageItem.d.ts.map +0 -1
  180. package/dist/components/agent-manager/AgentManagerMessageList.d.ts +0 -12
  181. package/dist/components/agent-manager/AgentManagerMessageList.d.ts.map +0 -1
  182. package/dist/components/agent-manager/AgentManagerSessionItem.d.ts +0 -12
  183. package/dist/components/agent-manager/AgentManagerSessionItem.d.ts.map +0 -1
  184. package/dist/components/agent-manager/AgentManagerSessionList.d.ts +0 -16
  185. package/dist/components/agent-manager/AgentManagerSessionList.d.ts.map +0 -1
  186. package/dist/components/agent-manager/AgentManagerSidebar.d.ts +0 -14
  187. package/dist/components/agent-manager/AgentManagerSidebar.d.ts.map +0 -1
  188. package/dist/components/agent-manager/AgentManagerStreamingIndicator.d.ts +0 -8
  189. package/dist/components/agent-manager/AgentManagerStreamingIndicator.d.ts.map +0 -1
  190. package/dist/components/agent-manager/AgentManagerTab.d.ts +0 -15
  191. package/dist/components/agent-manager/AgentManagerTab.d.ts.map +0 -1
  192. package/dist/components/agent-manager/AgentManagerTabBar.d.ts +0 -10
  193. package/dist/components/agent-manager/AgentManagerTabBar.d.ts.map +0 -1
  194. package/dist/components/agent-manager/BridleConfigPanel.d.ts +0 -13
  195. package/dist/components/agent-manager/BridleConfigPanel.d.ts.map +0 -1
  196. package/dist/components/agent-manager/PluginInstallModal.d.ts +0 -9
  197. package/dist/components/agent-manager/PluginInstallModal.d.ts.map +0 -1
  198. package/dist/components/agent-manager/controls/ContextLevelToggle.d.ts +0 -23
  199. package/dist/components/agent-manager/controls/ContextLevelToggle.d.ts.map +0 -1
  200. package/dist/components/agent-manager/controls/FileAttachButton.d.ts +0 -13
  201. package/dist/components/agent-manager/controls/FileAttachButton.d.ts.map +0 -1
  202. package/dist/components/agent-manager/controls/McpServerSelector.d.ts +0 -10
  203. package/dist/components/agent-manager/controls/McpServerSelector.d.ts.map +0 -1
  204. package/dist/components/agent-manager/controls/ModelSelector.d.ts +0 -10
  205. package/dist/components/agent-manager/controls/ModelSelector.d.ts.map +0 -1
  206. package/dist/components/agent-manager/controls/SdkSelector.d.ts +0 -13
  207. package/dist/components/agent-manager/controls/SdkSelector.d.ts.map +0 -1
  208. package/dist/components/agent-manager/controls/VoiceToggle.d.ts +0 -13
  209. package/dist/components/agent-manager/controls/VoiceToggle.d.ts.map +0 -1
  210. package/dist/components/agent-manager/detail/SessionConfigPanel.d.ts +0 -14
  211. package/dist/components/agent-manager/detail/SessionConfigPanel.d.ts.map +0 -1
  212. package/dist/components/agent-manager/detail/SessionLogsPanel.d.ts +0 -13
  213. package/dist/components/agent-manager/detail/SessionLogsPanel.d.ts.map +0 -1
  214. package/dist/components/agent-manager/detail/SessionStatsPanel.d.ts +0 -12
  215. package/dist/components/agent-manager/detail/SessionStatsPanel.d.ts.map +0 -1
  216. package/dist/components/agent-manager/detail/SessionToolsPanel.d.ts +0 -12
  217. package/dist/components/agent-manager/detail/SessionToolsPanel.d.ts.map +0 -1
  218. package/dist/components/agent-manager/dialogs/ExportSessionDialog.d.ts +0 -15
  219. package/dist/components/agent-manager/dialogs/ExportSessionDialog.d.ts.map +0 -1
  220. package/dist/components/agent-manager/dialogs/NewSessionDialog.d.ts +0 -14
  221. package/dist/components/agent-manager/dialogs/NewSessionDialog.d.ts.map +0 -1
  222. package/dist/components/agent-manager/dialogs/RenameSessionDialog.d.ts +0 -15
  223. package/dist/components/agent-manager/dialogs/RenameSessionDialog.d.ts.map +0 -1
  224. package/dist/components/agent-manager/dialogs/SessionSearchDialog.d.ts +0 -15
  225. package/dist/components/agent-manager/dialogs/SessionSearchDialog.d.ts.map +0 -1
  226. package/dist/components/agent-manager/index.d.ts +0 -16
  227. package/dist/components/agent-manager/index.d.ts.map +0 -1
  228. package/dist/components/agents/AgentCard.d.ts +0 -30
  229. package/dist/components/agents/AgentCard.d.ts.map +0 -1
  230. package/dist/components/agents/AgentForm.d.ts +0 -29
  231. package/dist/components/agents/AgentForm.d.ts.map +0 -1
  232. package/dist/components/agents/AgentList.d.ts +0 -19
  233. package/dist/components/agents/AgentList.d.ts.map +0 -1
  234. package/dist/components/agents/AgentStatusBadge.d.ts +0 -12
  235. package/dist/components/agents/AgentStatusBadge.d.ts.map +0 -1
  236. package/dist/components/agents/OpenInBrowserEditorButton.d.ts +0 -16
  237. package/dist/components/agents/OpenInBrowserEditorButton.d.ts.map +0 -1
  238. package/dist/components/agents/PluginUIPanel.d.ts +0 -38
  239. package/dist/components/agents/PluginUIPanel.d.ts.map +0 -1
  240. package/dist/components/agents/backup/AgentBackupTab.d.ts +0 -11
  241. package/dist/components/agents/backup/AgentBackupTab.d.ts.map +0 -1
  242. package/dist/components/agents/index.d.ts +0 -8
  243. package/dist/components/agents/index.d.ts.map +0 -1
  244. package/dist/components/agents/types.d.ts +0 -72
  245. package/dist/components/agents/types.d.ts.map +0 -1
  246. package/dist/components/ai/AIAssistantPanel.d.ts +0 -8
  247. package/dist/components/ai/AIAssistantPanel.d.ts.map +0 -1
  248. package/dist/components/ai/AIContextsTab.d.ts +0 -6
  249. package/dist/components/ai/AIContextsTab.d.ts.map +0 -1
  250. package/dist/components/ai/AIOverviewTab.d.ts +0 -7
  251. package/dist/components/ai/AIOverviewTab.d.ts.map +0 -1
  252. package/dist/components/ai/AIPlaygroundTab.d.ts +0 -6
  253. package/dist/components/ai/AIPlaygroundTab.d.ts.map +0 -1
  254. package/dist/components/ai/AIPromptsTab.d.ts +0 -6
  255. package/dist/components/ai/AIPromptsTab.d.ts.map +0 -1
  256. package/dist/components/ai/AISessionsTab.d.ts +0 -7
  257. package/dist/components/ai/AISessionsTab.d.ts.map +0 -1
  258. package/dist/components/ai/AIStatsTab.d.ts +0 -6
  259. package/dist/components/ai/AIStatsTab.d.ts.map +0 -1
  260. package/dist/components/ai/AITasksTab.d.ts +0 -5
  261. package/dist/components/ai/AITasksTab.d.ts.map +0 -1
  262. package/dist/components/ai/AITemplatesTab.d.ts +0 -6
  263. package/dist/components/ai/AITemplatesTab.d.ts.map +0 -1
  264. package/dist/components/ai/ClaudeCredentialsCard.d.ts +0 -6
  265. package/dist/components/ai/ClaudeCredentialsCard.d.ts.map +0 -1
  266. package/dist/components/ai/PluginHarnessPicker.d.ts +0 -31
  267. package/dist/components/ai/PluginHarnessPicker.d.ts.map +0 -1
  268. package/dist/components/analytics/AnalyticsBreakdownChart.d.ts +0 -12
  269. package/dist/components/analytics/AnalyticsBreakdownChart.d.ts.map +0 -1
  270. package/dist/components/analytics/AnalyticsBreakdownTable.d.ts +0 -13
  271. package/dist/components/analytics/AnalyticsBreakdownTable.d.ts.map +0 -1
  272. package/dist/components/analytics/AnalyticsEntityTabs.d.ts +0 -9
  273. package/dist/components/analytics/AnalyticsEntityTabs.d.ts.map +0 -1
  274. package/dist/components/analytics/AnalyticsFilterBar.d.ts +0 -15
  275. package/dist/components/analytics/AnalyticsFilterBar.d.ts.map +0 -1
  276. package/dist/components/analytics/AnalyticsKpiGrid.d.ts +0 -10
  277. package/dist/components/analytics/AnalyticsKpiGrid.d.ts.map +0 -1
  278. package/dist/components/analytics/AnalyticsTimeSeriesChart.d.ts +0 -16
  279. package/dist/components/analytics/AnalyticsTimeSeriesChart.d.ts.map +0 -1
  280. package/dist/components/analytics/SandboxAnalyticsSection.d.ts +0 -9
  281. package/dist/components/analytics/SandboxAnalyticsSection.d.ts.map +0 -1
  282. package/dist/components/analytics/index.d.ts +0 -9
  283. package/dist/components/analytics/index.d.ts.map +0 -1
  284. package/dist/components/analytics/types.d.ts +0 -28
  285. package/dist/components/analytics/types.d.ts.map +0 -1
  286. package/dist/components/assistant/AIAssistantPanel.d.ts +0 -5
  287. package/dist/components/assistant/AIAssistantPanel.d.ts.map +0 -1
  288. package/dist/components/assistant/AssistantChatArea.d.ts +0 -4
  289. package/dist/components/assistant/AssistantChatArea.d.ts.map +0 -1
  290. package/dist/components/assistant/AssistantChatInput.d.ts +0 -10
  291. package/dist/components/assistant/AssistantChatInput.d.ts.map +0 -1
  292. package/dist/components/assistant/AssistantConversationList.d.ts +0 -4
  293. package/dist/components/assistant/AssistantConversationList.d.ts.map +0 -1
  294. package/dist/components/assistant/AssistantExportMenu.d.ts +0 -4
  295. package/dist/components/assistant/AssistantExportMenu.d.ts.map +0 -1
  296. package/dist/components/assistant/AssistantMarkdownRenderer.d.ts +0 -8
  297. package/dist/components/assistant/AssistantMarkdownRenderer.d.ts.map +0 -1
  298. package/dist/components/assistant/AssistantMessageItem.d.ts +0 -10
  299. package/dist/components/assistant/AssistantMessageItem.d.ts.map +0 -1
  300. package/dist/components/assistant/AssistantMessageList.d.ts +0 -10
  301. package/dist/components/assistant/AssistantMessageList.d.ts.map +0 -1
  302. package/dist/components/assistant/AssistantModeSelector.d.ts +0 -10
  303. package/dist/components/assistant/AssistantModeSelector.d.ts.map +0 -1
  304. package/dist/components/assistant/AssistantWelcome.d.ts +0 -10
  305. package/dist/components/assistant/AssistantWelcome.d.ts.map +0 -1
  306. package/dist/components/assistant/index.d.ts +0 -11
  307. package/dist/components/assistant/index.d.ts.map +0 -1
  308. package/dist/components/audit/AuditDeleteDialog.d.ts +0 -12
  309. package/dist/components/audit/AuditDeleteDialog.d.ts.map +0 -1
  310. package/dist/components/audit/AuditExportButton.d.ts +0 -8
  311. package/dist/components/audit/AuditExportButton.d.ts.map +0 -1
  312. package/dist/components/audit/AuditLogDetail.d.ts +0 -9
  313. package/dist/components/audit/AuditLogDetail.d.ts.map +0 -1
  314. package/dist/components/audit/AuditLogFilters.d.ts +0 -15
  315. package/dist/components/audit/AuditLogFilters.d.ts.map +0 -1
  316. package/dist/components/audit/AuditLogStats.d.ts +0 -9
  317. package/dist/components/audit/AuditLogStats.d.ts.map +0 -1
  318. package/dist/components/audit/AuditLogTable.d.ts +0 -21
  319. package/dist/components/audit/AuditLogTable.d.ts.map +0 -1
  320. package/dist/components/audit/index.d.ts +0 -7
  321. package/dist/components/audit/index.d.ts.map +0 -1
  322. package/dist/components/catalog/CatalogCard.d.ts +0 -22
  323. package/dist/components/catalog/CatalogCard.d.ts.map +0 -1
  324. package/dist/components/catalog/CatalogForm.d.ts +0 -18
  325. package/dist/components/catalog/CatalogForm.d.ts.map +0 -1
  326. package/dist/components/catalog/index.d.ts +0 -5
  327. package/dist/components/catalog/index.d.ts.map +0 -1
  328. package/dist/components/docs/DocsCompileStatus.d.ts +0 -9
  329. package/dist/components/docs/DocsCompileStatus.d.ts.map +0 -1
  330. package/dist/components/docs/DocsEditPanel.d.ts +0 -26
  331. package/dist/components/docs/DocsEditPanel.d.ts.map +0 -1
  332. package/dist/components/docs/DocsEmptyState.d.ts +0 -7
  333. package/dist/components/docs/DocsEmptyState.d.ts.map +0 -1
  334. package/dist/components/docs/DocsPageEditor.d.ts +0 -13
  335. package/dist/components/docs/DocsPageEditor.d.ts.map +0 -1
  336. package/dist/components/docs/DocsPageTree.d.ts +0 -12
  337. package/dist/components/docs/DocsPageTree.d.ts.map +0 -1
  338. package/dist/components/docs/DocsPreviewPanel.d.ts +0 -17
  339. package/dist/components/docs/DocsPreviewPanel.d.ts.map +0 -1
  340. package/dist/components/docs/DocsSettingsPanel.d.ts +0 -15
  341. package/dist/components/docs/DocsSettingsPanel.d.ts.map +0 -1
  342. package/dist/components/docs/DocsTabPanel.d.ts +0 -8
  343. package/dist/components/docs/DocsTabPanel.d.ts.map +0 -1
  344. package/dist/components/docs/index.d.ts +0 -10
  345. package/dist/components/docs/index.d.ts.map +0 -1
  346. package/dist/components/docs/previewHtml.d.ts +0 -2
  347. package/dist/components/docs/previewHtml.d.ts.map +0 -1
  348. package/dist/components/docs/types.d.ts +0 -59
  349. package/dist/components/docs/types.d.ts.map +0 -1
  350. package/dist/components/gitops/CIDurationChart.d.ts +0 -12
  351. package/dist/components/gitops/CIDurationChart.d.ts.map +0 -1
  352. package/dist/components/gitops/CIFailedRuns.d.ts +0 -13
  353. package/dist/components/gitops/CIFailedRuns.d.ts.map +0 -1
  354. package/dist/components/gitops/CIPipelineRunsTable.d.ts +0 -13
  355. package/dist/components/gitops/CIPipelineRunsTable.d.ts.map +0 -1
  356. package/dist/components/gitops/CISuccessRateChart.d.ts +0 -13
  357. package/dist/components/gitops/CISuccessRateChart.d.ts.map +0 -1
  358. package/dist/components/gitops/CITab.d.ts +0 -15
  359. package/dist/components/gitops/CITab.d.ts.map +0 -1
  360. package/dist/components/gitops/CIWorkflowList.d.ts +0 -13
  361. package/dist/components/gitops/CIWorkflowList.d.ts.map +0 -1
  362. package/dist/components/gitops/GitOpsProviderCard.d.ts +0 -14
  363. package/dist/components/gitops/GitOpsProviderCard.d.ts.map +0 -1
  364. package/dist/components/gitops/GitOpsSetup.d.ts +0 -16
  365. package/dist/components/gitops/GitOpsSetup.d.ts.map +0 -1
  366. package/dist/components/gitops/GitOpsSkeleton.d.ts +0 -12
  367. package/dist/components/gitops/GitOpsSkeleton.d.ts.map +0 -1
  368. package/dist/components/gitops/GitOpsStatusBadge.d.ts +0 -14
  369. package/dist/components/gitops/GitOpsStatusBadge.d.ts.map +0 -1
  370. package/dist/components/gitops/ProviderIcon.d.ts +0 -14
  371. package/dist/components/gitops/ProviderIcon.d.ts.map +0 -1
  372. package/dist/components/gitops/RepoActivityCard.d.ts +0 -12
  373. package/dist/components/gitops/RepoActivityCard.d.ts.map +0 -1
  374. package/dist/components/gitops/RepoIssuesCard.d.ts +0 -12
  375. package/dist/components/gitops/RepoIssuesCard.d.ts.map +0 -1
  376. package/dist/components/gitops/RepoLanguagesCard.d.ts +0 -13
  377. package/dist/components/gitops/RepoLanguagesCard.d.ts.map +0 -1
  378. package/dist/components/gitops/RepoOverviewCard.d.ts +0 -13
  379. package/dist/components/gitops/RepoOverviewCard.d.ts.map +0 -1
  380. package/dist/components/gitops/RepoPullRequestsCard.d.ts +0 -12
  381. package/dist/components/gitops/RepoPullRequestsCard.d.ts.map +0 -1
  382. package/dist/components/gitops/RepoSecurityCard.d.ts +0 -12
  383. package/dist/components/gitops/RepoSecurityCard.d.ts.map +0 -1
  384. package/dist/components/gitops/RepoStatsTab.d.ts +0 -15
  385. package/dist/components/gitops/RepoStatsTab.d.ts.map +0 -1
  386. package/dist/components/gitops/VibeGitOpsTab.d.ts +0 -12
  387. package/dist/components/gitops/VibeGitOpsTab.d.ts.map +0 -1
  388. package/dist/components/gitops/index.d.ts +0 -21
  389. package/dist/components/gitops/index.d.ts.map +0 -1
  390. package/dist/components/gitops/types.d.ts +0 -90
  391. package/dist/components/gitops/types.d.ts.map +0 -1
  392. package/dist/components/graph/AgentGraphView.d.ts +0 -44
  393. package/dist/components/graph/AgentGraphView.d.ts.map +0 -1
  394. package/dist/components/graph/AgentNode.d.ts +0 -6
  395. package/dist/components/graph/AgentNode.d.ts.map +0 -1
  396. package/dist/components/graph/ConnectionPermissionsDialog.d.ts +0 -26
  397. package/dist/components/graph/ConnectionPermissionsDialog.d.ts.map +0 -1
  398. package/dist/components/graph/TargetNode.d.ts +0 -6
  399. package/dist/components/graph/TargetNode.d.ts.map +0 -1
  400. package/dist/components/health/AgentHealthCard.d.ts +0 -9
  401. package/dist/components/health/AgentHealthCard.d.ts.map +0 -1
  402. package/dist/components/health/HealthDashboard.d.ts +0 -10
  403. package/dist/components/health/HealthDashboard.d.ts.map +0 -1
  404. package/dist/components/health/SystemStatus.d.ts +0 -11
  405. package/dist/components/health/SystemStatus.d.ts.map +0 -1
  406. package/dist/components/health/index.d.ts +0 -5
  407. package/dist/components/health/index.d.ts.map +0 -1
  408. package/dist/components/health/types.d.ts +0 -50
  409. package/dist/components/health/types.d.ts.map +0 -1
  410. package/dist/components/idp-components/ComponentCard.d.ts +0 -24
  411. package/dist/components/idp-components/ComponentCard.d.ts.map +0 -1
  412. package/dist/components/idp-components/ComponentForm.d.ts +0 -22
  413. package/dist/components/idp-components/ComponentForm.d.ts.map +0 -1
  414. package/dist/components/idp-components/index.d.ts +0 -5
  415. package/dist/components/idp-components/index.d.ts.map +0 -1
  416. package/dist/components/logs/LogViewer.d.ts +0 -13
  417. package/dist/components/logs/LogViewer.d.ts.map +0 -1
  418. package/dist/components/notes/NoteCard.d.ts +0 -13
  419. package/dist/components/notes/NoteCard.d.ts.map +0 -1
  420. package/dist/components/notes/NoteEditor.d.ts +0 -31
  421. package/dist/components/notes/NoteEditor.d.ts.map +0 -1
  422. package/dist/components/notes/NoteList.d.ts +0 -15
  423. package/dist/components/notes/NoteList.d.ts.map +0 -1
  424. package/dist/components/notes/NotesTabPanel.d.ts +0 -18
  425. package/dist/components/notes/NotesTabPanel.d.ts.map +0 -1
  426. package/dist/components/notes/index.d.ts +0 -7
  427. package/dist/components/notes/index.d.ts.map +0 -1
  428. package/dist/components/notes/types.d.ts +0 -58
  429. package/dist/components/notes/types.d.ts.map +0 -1
  430. package/dist/components/scorecard/ScorecardPanel.d.ts +0 -9
  431. package/dist/components/scorecard/ScorecardPanel.d.ts.map +0 -1
  432. package/dist/components/scorecard/index.d.ts +0 -3
  433. package/dist/components/scorecard/index.d.ts.map +0 -1
  434. package/dist/components/sessions/CollaboratorsList.d.ts +0 -18
  435. package/dist/components/sessions/CollaboratorsList.d.ts.map +0 -1
  436. package/dist/components/sessions/ControlStatusBar.d.ts +0 -31
  437. package/dist/components/sessions/ControlStatusBar.d.ts.map +0 -1
  438. package/dist/components/sessions/SessionCard.d.ts +0 -24
  439. package/dist/components/sessions/SessionCard.d.ts.map +0 -1
  440. package/dist/components/sessions/SessionForm.d.ts +0 -20
  441. package/dist/components/sessions/SessionForm.d.ts.map +0 -1
  442. package/dist/components/sessions/SessionList.d.ts +0 -25
  443. package/dist/components/sessions/SessionList.d.ts.map +0 -1
  444. package/dist/components/sessions/SessionShareDialog.d.ts +0 -15
  445. package/dist/components/sessions/SessionShareDialog.d.ts.map +0 -1
  446. package/dist/components/sessions/SessionStatusBadge.d.ts +0 -9
  447. package/dist/components/sessions/SessionStatusBadge.d.ts.map +0 -1
  448. package/dist/components/sessions/SharedTerminalPanel.d.ts +0 -72
  449. package/dist/components/sessions/SharedTerminalPanel.d.ts.map +0 -1
  450. package/dist/components/sessions/TerminalPanel.d.ts +0 -69
  451. package/dist/components/sessions/TerminalPanel.d.ts.map +0 -1
  452. package/dist/components/sessions/index.d.ts +0 -11
  453. package/dist/components/sessions/index.d.ts.map +0 -1
  454. package/dist/components/sessions/types.d.ts +0 -67
  455. package/dist/components/sessions/types.d.ts.map +0 -1
  456. package/dist/components/settings/AdvancedSection.d.ts +0 -22
  457. package/dist/components/settings/AdvancedSection.d.ts.map +0 -1
  458. package/dist/components/settings/ConfigEditor.d.ts +0 -14
  459. package/dist/components/settings/ConfigEditor.d.ts.map +0 -1
  460. package/dist/components/settings/ConfigSection.d.ts +0 -12
  461. package/dist/components/settings/ConfigSection.d.ts.map +0 -1
  462. package/dist/components/settings/NotificationsSection.d.ts +0 -14
  463. package/dist/components/settings/NotificationsSection.d.ts.map +0 -1
  464. package/dist/components/settings/PreferencesSection.d.ts +0 -14
  465. package/dist/components/settings/PreferencesSection.d.ts.map +0 -1
  466. package/dist/components/settings/ProfileSection.d.ts +0 -14
  467. package/dist/components/settings/ProfileSection.d.ts.map +0 -1
  468. package/dist/components/settings/SecuritySection.d.ts +0 -11
  469. package/dist/components/settings/SecuritySection.d.ts.map +0 -1
  470. package/dist/components/settings/SettingsForm.d.ts +0 -58
  471. package/dist/components/settings/SettingsForm.d.ts.map +0 -1
  472. package/dist/components/settings/WorkspaceDefaultsSection.d.ts +0 -27
  473. package/dist/components/settings/WorkspaceDefaultsSection.d.ts.map +0 -1
  474. package/dist/components/settings/index.d.ts +0 -4
  475. package/dist/components/settings/index.d.ts.map +0 -1
  476. package/dist/components/settings/types.d.ts +0 -55
  477. package/dist/components/settings/types.d.ts.map +0 -1
  478. package/dist/components/shared/AgentEventsConnector.d.ts +0 -6
  479. package/dist/components/shared/AgentEventsConnector.d.ts.map +0 -1
  480. package/dist/components/shared/AgentSelector.d.ts +0 -25
  481. package/dist/components/shared/AgentSelector.d.ts.map +0 -1
  482. package/dist/components/shared/AgentSetupBanner.d.ts +0 -21
  483. package/dist/components/shared/AgentSetupBanner.d.ts.map +0 -1
  484. package/dist/components/shared/Card.d.ts +0 -29
  485. package/dist/components/shared/Card.d.ts.map +0 -1
  486. package/dist/components/shared/ConfirmDialog.d.ts +0 -14
  487. package/dist/components/shared/ConfirmDialog.d.ts.map +0 -1
  488. package/dist/components/shared/EmptyState.d.ts +0 -11
  489. package/dist/components/shared/EmptyState.d.ts.map +0 -1
  490. package/dist/components/shared/EntityTagPicker.d.ts +0 -8
  491. package/dist/components/shared/EntityTagPicker.d.ts.map +0 -1
  492. package/dist/components/shared/ErrorState.d.ts +0 -11
  493. package/dist/components/shared/ErrorState.d.ts.map +0 -1
  494. package/dist/components/shared/FilterDropdown.d.ts +0 -20
  495. package/dist/components/shared/FilterDropdown.d.ts.map +0 -1
  496. package/dist/components/shared/GetHelpButton.d.ts +0 -27
  497. package/dist/components/shared/GetHelpButton.d.ts.map +0 -1
  498. package/dist/components/shared/InstallTabs.d.ts +0 -18
  499. package/dist/components/shared/InstallTabs.d.ts.map +0 -1
  500. package/dist/components/shared/LoadingState.d.ts +0 -7
  501. package/dist/components/shared/LoadingState.d.ts.map +0 -1
  502. package/dist/components/shared/NotificationToast.d.ts +0 -40
  503. package/dist/components/shared/NotificationToast.d.ts.map +0 -1
  504. package/dist/components/shared/PageHeader.d.ts +0 -14
  505. package/dist/components/shared/PageHeader.d.ts.map +0 -1
  506. package/dist/components/shared/PluginGate.d.ts +0 -35
  507. package/dist/components/shared/PluginGate.d.ts.map +0 -1
  508. package/dist/components/shared/QuotaExhaustedDialog.d.ts +0 -12
  509. package/dist/components/shared/QuotaExhaustedDialog.d.ts.map +0 -1
  510. package/dist/components/shared/RequireAgentReachable.d.ts +0 -14
  511. package/dist/components/shared/RequireAgentReachable.d.ts.map +0 -1
  512. package/dist/components/shared/SearchInput.d.ts +0 -9
  513. package/dist/components/shared/SearchInput.d.ts.map +0 -1
  514. package/dist/components/shared/SearchableSelect.d.ts +0 -48
  515. package/dist/components/shared/SearchableSelect.d.ts.map +0 -1
  516. package/dist/components/shared/SelectionCheckbox.d.ts +0 -11
  517. package/dist/components/shared/SelectionCheckbox.d.ts.map +0 -1
  518. package/dist/components/shared/SessionNotificationBanner.d.ts +0 -47
  519. package/dist/components/shared/SessionNotificationBanner.d.ts.map +0 -1
  520. package/dist/components/shared/StatCard.d.ts +0 -17
  521. package/dist/components/shared/StatCard.d.ts.map +0 -1
  522. package/dist/components/shared/StatusBadge.d.ts +0 -11
  523. package/dist/components/shared/StatusBadge.d.ts.map +0 -1
  524. package/dist/components/shared/TagFilter.d.ts +0 -11
  525. package/dist/components/shared/TagFilter.d.ts.map +0 -1
  526. package/dist/components/shared/index.d.ts +0 -32
  527. package/dist/components/shared/index.d.ts.map +0 -1
  528. package/dist/components/targets/TargetCard.d.ts +0 -45
  529. package/dist/components/targets/TargetCard.d.ts.map +0 -1
  530. package/dist/components/targets/index.d.ts +0 -3
  531. package/dist/components/targets/index.d.ts.map +0 -1
  532. package/dist/components/templates/TemplateCard.d.ts +0 -19
  533. package/dist/components/templates/TemplateCard.d.ts.map +0 -1
  534. package/dist/components/templates/index.d.ts +0 -3
  535. package/dist/components/templates/index.d.ts.map +0 -1
  536. package/dist/components/tunnels/DomainVerificationBadge.d.ts +0 -6
  537. package/dist/components/tunnels/DomainVerificationBadge.d.ts.map +0 -1
  538. package/dist/components/tunnels/ProviderBadge.d.ts +0 -6
  539. package/dist/components/tunnels/ProviderBadge.d.ts.map +0 -1
  540. package/dist/components/tunnels/TunnelCard.d.ts +0 -13
  541. package/dist/components/tunnels/TunnelCard.d.ts.map +0 -1
  542. package/dist/components/tunnels/TunnelCreateWizard.d.ts +0 -2
  543. package/dist/components/tunnels/TunnelCreateWizard.d.ts.map +0 -1
  544. package/dist/components/tunnels/TunnelStatusBadge.d.ts +0 -6
  545. package/dist/components/tunnels/TunnelStatusBadge.d.ts.map +0 -1
  546. package/dist/components/vibe/VibeAgentEmptyState.d.ts +0 -8
  547. package/dist/components/vibe/VibeAgentEmptyState.d.ts.map +0 -1
  548. package/dist/components/vibecalendar/LogsDrawer.d.ts +0 -12
  549. package/dist/components/vibecalendar/LogsDrawer.d.ts.map +0 -1
  550. package/dist/components/vibecalendar/ScheduleTaskModal.d.ts +0 -33
  551. package/dist/components/vibecalendar/ScheduleTaskModal.d.ts.map +0 -1
  552. package/dist/components/vibecalendar/VibeCalAgendaView.d.ts +0 -11
  553. package/dist/components/vibecalendar/VibeCalAgendaView.d.ts.map +0 -1
  554. package/dist/components/vibecalendar/VibeCalDayView.d.ts +0 -12
  555. package/dist/components/vibecalendar/VibeCalDayView.d.ts.map +0 -1
  556. package/dist/components/vibecalendar/VibeCalMonthView.d.ts +0 -12
  557. package/dist/components/vibecalendar/VibeCalMonthView.d.ts.map +0 -1
  558. package/dist/components/vibecalendar/VibeCalWeekView.d.ts +0 -12
  559. package/dist/components/vibecalendar/VibeCalWeekView.d.ts.map +0 -1
  560. package/dist/components/vibecalendar/VibeCalendarHeader.d.ts +0 -12
  561. package/dist/components/vibecalendar/VibeCalendarHeader.d.ts.map +0 -1
  562. package/dist/components/vibecalendar/VibeTaskBlock.d.ts +0 -12
  563. package/dist/components/vibecalendar/VibeTaskBlock.d.ts.map +0 -1
  564. package/dist/components/vibecalendar/expandOccurrences.d.ts +0 -37
  565. package/dist/components/vibecalendar/expandOccurrences.d.ts.map +0 -1
  566. package/dist/components/vibecalendar/index.d.ts +0 -11
  567. package/dist/components/vibecalendar/index.d.ts.map +0 -1
  568. package/dist/components/vibecalendar/types.d.ts +0 -53
  569. package/dist/components/vibecalendar/types.d.ts.map +0 -1
  570. package/dist/components/vibedeck/VibeDeckButtonForm.d.ts +0 -54
  571. package/dist/components/vibedeck/VibeDeckButtonForm.d.ts.map +0 -1
  572. package/dist/components/vibedeck/VibeDeckButtonTile.d.ts +0 -48
  573. package/dist/components/vibedeck/VibeDeckButtonTile.d.ts.map +0 -1
  574. package/dist/components/vibedeck/VibeDeckExecutionLog.d.ts +0 -25
  575. package/dist/components/vibedeck/VibeDeckExecutionLog.d.ts.map +0 -1
  576. package/dist/components/vibedeck/VibeDeckForm.d.ts +0 -21
  577. package/dist/components/vibedeck/VibeDeckForm.d.ts.map +0 -1
  578. package/dist/components/vibedeck/VibeDeckGrid.d.ts +0 -51
  579. package/dist/components/vibedeck/VibeDeckGrid.d.ts.map +0 -1
  580. package/dist/components/vibedeck/VibeDeckShareDialog.d.ts +0 -10
  581. package/dist/components/vibedeck/VibeDeckShareDialog.d.ts.map +0 -1
  582. package/dist/components/vibedeck/VibeDeckSwitcher.d.ts +0 -28
  583. package/dist/components/vibedeck/VibeDeckSwitcher.d.ts.map +0 -1
  584. package/dist/components/vibedeck/index.d.ts +0 -9
  585. package/dist/components/vibedeck/index.d.ts.map +0 -1
  586. package/dist/components/vibes/VibeCard.d.ts +0 -19
  587. package/dist/components/vibes/VibeCard.d.ts.map +0 -1
  588. package/dist/components/vibes/VibeForm.d.ts +0 -15
  589. package/dist/components/vibes/VibeForm.d.ts.map +0 -1
  590. package/dist/components/vibes/VibeList.d.ts +0 -20
  591. package/dist/components/vibes/VibeList.d.ts.map +0 -1
  592. package/dist/components/vibes/icons.d.ts +0 -6
  593. package/dist/components/vibes/icons.d.ts.map +0 -1
  594. package/dist/components/vibes/index.d.ts +0 -5
  595. package/dist/components/vibes/index.d.ts.map +0 -1
  596. package/dist/components/vibes/types.d.ts +0 -71
  597. package/dist/components/vibes/types.d.ts.map +0 -1
  598. package/dist/components/webhooks/WebhookCard.d.ts +0 -12
  599. package/dist/components/webhooks/WebhookCard.d.ts.map +0 -1
  600. package/dist/components/webhooks/WebhookForm.d.ts +0 -11
  601. package/dist/components/webhooks/WebhookForm.d.ts.map +0 -1
  602. package/dist/components/webhooks/WebhookList.d.ts +0 -14
  603. package/dist/components/webhooks/WebhookList.d.ts.map +0 -1
  604. package/dist/components/webhooks/index.d.ts +0 -5
  605. package/dist/components/webhooks/index.d.ts.map +0 -1
  606. package/dist/components/webhooks/types.d.ts +0 -58
  607. package/dist/components/webhooks/types.d.ts.map +0 -1
  608. package/dist/config/assistantUsecases.d.ts +0 -18
  609. package/dist/config/assistantUsecases.d.ts.map +0 -1
  610. package/dist/config/index.d.ts +0 -24
  611. package/dist/config/index.d.ts.map +0 -1
  612. package/dist/constants/permissions.d.ts +0 -112
  613. package/dist/constants/permissions.d.ts.map +0 -1
  614. package/dist/constants/pluginCatalog.d.ts +0 -36
  615. package/dist/constants/pluginCatalog.d.ts.map +0 -1
  616. package/dist/dev/main.d.ts +0 -2
  617. package/dist/dev/main.d.ts.map +0 -1
  618. package/dist/generated/global-operations.d.ts +0 -2
  619. package/dist/generated/global-operations.d.ts.map +0 -1
  620. package/dist/generated/global-types.d.ts +0 -21253
  621. package/dist/generated/global-types.d.ts.map +0 -1
  622. package/dist/generated/wspace-operations.d.ts +0 -15218
  623. package/dist/generated/wspace-operations.d.ts.map +0 -1
  624. package/dist/generated/wspace-types.d.ts +0 -55252
  625. package/dist/generated/wspace-types.d.ts.map +0 -1
  626. package/dist/hooks/index.d.ts +0 -7
  627. package/dist/hooks/index.d.ts.map +0 -1
  628. package/dist/hooks/useAgentConnectivity.d.ts +0 -47
  629. package/dist/hooks/useAgentConnectivity.d.ts.map +0 -1
  630. package/dist/hooks/useAgentEvents.d.ts +0 -36
  631. package/dist/hooks/useAgentEvents.d.ts.map +0 -1
  632. package/dist/hooks/useAgentManagerKeyboard.d.ts +0 -17
  633. package/dist/hooks/useAgentManagerKeyboard.d.ts.map +0 -1
  634. package/dist/hooks/useAgentManagerStreaming.d.ts +0 -19
  635. package/dist/hooks/useAgentManagerStreaming.d.ts.map +0 -1
  636. package/dist/hooks/useAssistantHeartbeat.d.ts +0 -4
  637. package/dist/hooks/useAssistantHeartbeat.d.ts.map +0 -1
  638. package/dist/hooks/useAssistantKeyboardShortcuts.d.ts +0 -18
  639. package/dist/hooks/useAssistantKeyboardShortcuts.d.ts.map +0 -1
  640. package/dist/hooks/useCachedInitialData.d.ts +0 -120
  641. package/dist/hooks/useCachedInitialData.d.ts.map +0 -1
  642. package/dist/hooks/useEntityTags.d.ts +0 -24
  643. package/dist/hooks/useEntityTags.d.ts.map +0 -1
  644. package/dist/hooks/useFileUpload.d.ts +0 -15
  645. package/dist/hooks/useFileUpload.d.ts.map +0 -1
  646. package/dist/hooks/useInitialDataLoader.d.ts +0 -48
  647. package/dist/hooks/useInitialDataLoader.d.ts.map +0 -1
  648. package/dist/hooks/useMcpServers.d.ts +0 -14
  649. package/dist/hooks/useMcpServers.d.ts.map +0 -1
  650. package/dist/hooks/useOpenAssistantHelp.d.ts +0 -2
  651. package/dist/hooks/useOpenAssistantHelp.d.ts.map +0 -1
  652. package/dist/hooks/usePluginAvailability.d.ts +0 -35
  653. package/dist/hooks/usePluginAvailability.d.ts.map +0 -1
  654. package/dist/hooks/useQueryBackedTab.d.ts +0 -2
  655. package/dist/hooks/useQueryBackedTab.d.ts.map +0 -1
  656. package/dist/hooks/useSessionSearch.d.ts +0 -24
  657. package/dist/hooks/useSessionSearch.d.ts.map +0 -1
  658. package/dist/hooks/useVoiceMode.d.ts +0 -17
  659. package/dist/hooks/useVoiceMode.d.ts.map +0 -1
  660. package/dist/index.d.ts +0 -17
  661. package/dist/index.d.ts.map +0 -1
  662. package/dist/lib/vibeFeatures.d.ts +0 -29
  663. package/dist/lib/vibeFeatures.d.ts.map +0 -1
  664. package/dist/node_modules/@xyflow/react/dist/esm/index.js +0 -3281
  665. package/dist/node_modules/@xyflow/react/dist/esm/index.js.map +0 -1
  666. package/dist/node_modules/@xyflow/system/dist/esm/index.js +0 -1845
  667. package/dist/node_modules/@xyflow/system/dist/esm/index.js.map +0 -1
  668. package/dist/node_modules/classcat/index.js +0 -12
  669. package/dist/node_modules/classcat/index.js.map +0 -1
  670. package/dist/node_modules/d3-dispatch/src/dispatch.js +0 -67
  671. package/dist/node_modules/d3-dispatch/src/dispatch.js.map +0 -1
  672. package/dist/node_modules/d3-drag/src/constant.js +0 -6
  673. package/dist/node_modules/d3-drag/src/constant.js.map +0 -1
  674. package/dist/node_modules/d3-drag/src/drag.js +0 -116
  675. package/dist/node_modules/d3-drag/src/drag.js.map +0 -1
  676. package/dist/node_modules/d3-drag/src/event.js +0 -64
  677. package/dist/node_modules/d3-drag/src/event.js.map +0 -1
  678. package/dist/node_modules/d3-drag/src/nodrag.js +0 -17
  679. package/dist/node_modules/d3-drag/src/nodrag.js.map +0 -1
  680. package/dist/node_modules/d3-drag/src/noevent.js +0 -15
  681. package/dist/node_modules/d3-drag/src/noevent.js.map +0 -1
  682. package/dist/node_modules/d3-ease/src/cubic.js +0 -8
  683. package/dist/node_modules/d3-ease/src/cubic.js.map +0 -1
  684. package/dist/node_modules/d3-interpolate/src/transform/decompose.js +0 -24
  685. package/dist/node_modules/d3-interpolate/src/transform/decompose.js.map +0 -1
  686. package/dist/node_modules/d3-interpolate/src/transform/index.js +0 -56
  687. package/dist/node_modules/d3-interpolate/src/transform/index.js.map +0 -1
  688. package/dist/node_modules/d3-interpolate/src/transform/parse.js +0 -14
  689. package/dist/node_modules/d3-interpolate/src/transform/parse.js.map +0 -1
  690. package/dist/node_modules/d3-interpolate/src/zoom.js +0 -43
  691. package/dist/node_modules/d3-interpolate/src/zoom.js.map +0 -1
  692. package/dist/node_modules/d3-selection/src/array.js +0 -8
  693. package/dist/node_modules/d3-selection/src/array.js.map +0 -1
  694. package/dist/node_modules/d3-selection/src/constant.js +0 -10
  695. package/dist/node_modules/d3-selection/src/constant.js.map +0 -1
  696. package/dist/node_modules/d3-selection/src/creator.js +0 -22
  697. package/dist/node_modules/d3-selection/src/creator.js.map +0 -1
  698. package/dist/node_modules/d3-selection/src/matcher.js +0 -15
  699. package/dist/node_modules/d3-selection/src/matcher.js.map +0 -1
  700. package/dist/node_modules/d3-selection/src/namespace.js +0 -13
  701. package/dist/node_modules/d3-selection/src/namespace.js.map +0 -1
  702. package/dist/node_modules/d3-selection/src/namespaces.js +0 -12
  703. package/dist/node_modules/d3-selection/src/namespaces.js.map +0 -1
  704. package/dist/node_modules/d3-selection/src/pointer.js +0 -20
  705. package/dist/node_modules/d3-selection/src/pointer.js.map +0 -1
  706. package/dist/node_modules/d3-selection/src/select.js +0 -9
  707. package/dist/node_modules/d3-selection/src/select.js.map +0 -1
  708. package/dist/node_modules/d3-selection/src/selection/append.js +0 -12
  709. package/dist/node_modules/d3-selection/src/selection/append.js.map +0 -1
  710. package/dist/node_modules/d3-selection/src/selection/attr.js +0 -46
  711. package/dist/node_modules/d3-selection/src/selection/attr.js.map +0 -1
  712. package/dist/node_modules/d3-selection/src/selection/call.js +0 -9
  713. package/dist/node_modules/d3-selection/src/selection/call.js.map +0 -1
  714. package/dist/node_modules/d3-selection/src/selection/classed.js +0 -55
  715. package/dist/node_modules/d3-selection/src/selection/classed.js.map +0 -1
  716. package/dist/node_modules/d3-selection/src/selection/clone.js +0 -16
  717. package/dist/node_modules/d3-selection/src/selection/clone.js.map +0 -1
  718. package/dist/node_modules/d3-selection/src/selection/data.js +0 -38
  719. package/dist/node_modules/d3-selection/src/selection/data.js.map +0 -1
  720. package/dist/node_modules/d3-selection/src/selection/datum.js +0 -8
  721. package/dist/node_modules/d3-selection/src/selection/datum.js.map +0 -1
  722. package/dist/node_modules/d3-selection/src/selection/dispatch.js +0 -23
  723. package/dist/node_modules/d3-selection/src/selection/dispatch.js.map +0 -1
  724. package/dist/node_modules/d3-selection/src/selection/each.js +0 -9
  725. package/dist/node_modules/d3-selection/src/selection/each.js.map +0 -1
  726. package/dist/node_modules/d3-selection/src/selection/empty.js +0 -8
  727. package/dist/node_modules/d3-selection/src/selection/empty.js.map +0 -1
  728. package/dist/node_modules/d3-selection/src/selection/enter.js +0 -28
  729. package/dist/node_modules/d3-selection/src/selection/enter.js.map +0 -1
  730. package/dist/node_modules/d3-selection/src/selection/exit.js +0 -10
  731. package/dist/node_modules/d3-selection/src/selection/exit.js.map +0 -1
  732. package/dist/node_modules/d3-selection/src/selection/filter.js +0 -12
  733. package/dist/node_modules/d3-selection/src/selection/filter.js.map +0 -1
  734. package/dist/node_modules/d3-selection/src/selection/html.js +0 -21
  735. package/dist/node_modules/d3-selection/src/selection/html.js.map +0 -1
  736. package/dist/node_modules/d3-selection/src/selection/index.js +0 -87
  737. package/dist/node_modules/d3-selection/src/selection/index.js.map +0 -1
  738. package/dist/node_modules/d3-selection/src/selection/insert.js +0 -16
  739. package/dist/node_modules/d3-selection/src/selection/insert.js.map +0 -1
  740. package/dist/node_modules/d3-selection/src/selection/iterator.js +0 -8
  741. package/dist/node_modules/d3-selection/src/selection/iterator.js.map +0 -1
  742. package/dist/node_modules/d3-selection/src/selection/join.js +0 -9
  743. package/dist/node_modules/d3-selection/src/selection/join.js.map +0 -1
  744. package/dist/node_modules/d3-selection/src/selection/lower.js +0 -11
  745. package/dist/node_modules/d3-selection/src/selection/lower.js.map +0 -1
  746. package/dist/node_modules/d3-selection/src/selection/merge.js +0 -11
  747. package/dist/node_modules/d3-selection/src/selection/merge.js.map +0 -1
  748. package/dist/node_modules/d3-selection/src/selection/node.js +0 -12
  749. package/dist/node_modules/d3-selection/src/selection/node.js.map +0 -1
  750. package/dist/node_modules/d3-selection/src/selection/nodes.js +0 -8
  751. package/dist/node_modules/d3-selection/src/selection/nodes.js.map +0 -1
  752. package/dist/node_modules/d3-selection/src/selection/on.js +0 -58
  753. package/dist/node_modules/d3-selection/src/selection/on.js.map +0 -1
  754. package/dist/node_modules/d3-selection/src/selection/order.js +0 -9
  755. package/dist/node_modules/d3-selection/src/selection/order.js.map +0 -1
  756. package/dist/node_modules/d3-selection/src/selection/property.js +0 -24
  757. package/dist/node_modules/d3-selection/src/selection/property.js.map +0 -1
  758. package/dist/node_modules/d3-selection/src/selection/raise.js +0 -11
  759. package/dist/node_modules/d3-selection/src/selection/raise.js.map +0 -1
  760. package/dist/node_modules/d3-selection/src/selection/remove.js +0 -12
  761. package/dist/node_modules/d3-selection/src/selection/remove.js.map +0 -1
  762. package/dist/node_modules/d3-selection/src/selection/select.js +0 -12
  763. package/dist/node_modules/d3-selection/src/selection/select.js.map +0 -1
  764. package/dist/node_modules/d3-selection/src/selection/selectAll.js +0 -18
  765. package/dist/node_modules/d3-selection/src/selection/selectAll.js.map +0 -1
  766. package/dist/node_modules/d3-selection/src/selection/selectChild.js +0 -18
  767. package/dist/node_modules/d3-selection/src/selection/selectChild.js.map +0 -1
  768. package/dist/node_modules/d3-selection/src/selection/selectChildren.js +0 -18
  769. package/dist/node_modules/d3-selection/src/selection/selectChildren.js.map +0 -1
  770. package/dist/node_modules/d3-selection/src/selection/size.js +0 -10
  771. package/dist/node_modules/d3-selection/src/selection/size.js.map +0 -1
  772. package/dist/node_modules/d3-selection/src/selection/sort.js +0 -20
  773. package/dist/node_modules/d3-selection/src/selection/sort.js.map +0 -1
  774. package/dist/node_modules/d3-selection/src/selection/sparse.js +0 -8
  775. package/dist/node_modules/d3-selection/src/selection/sparse.js.map +0 -1
  776. package/dist/node_modules/d3-selection/src/selection/style.js +0 -28
  777. package/dist/node_modules/d3-selection/src/selection/style.js.map +0 -1
  778. package/dist/node_modules/d3-selection/src/selection/text.js +0 -21
  779. package/dist/node_modules/d3-selection/src/selection/text.js.map +0 -1
  780. package/dist/node_modules/d3-selection/src/selector.js +0 -11
  781. package/dist/node_modules/d3-selection/src/selector.js.map +0 -1
  782. package/dist/node_modules/d3-selection/src/selectorAll.js +0 -13
  783. package/dist/node_modules/d3-selection/src/selectorAll.js.map +0 -1
  784. package/dist/node_modules/d3-selection/src/sourceEvent.js +0 -10
  785. package/dist/node_modules/d3-selection/src/sourceEvent.js.map +0 -1
  786. package/dist/node_modules/d3-selection/src/window.js +0 -8
  787. package/dist/node_modules/d3-selection/src/window.js.map +0 -1
  788. package/dist/node_modules/d3-timer/src/timeout.js +0 -12
  789. package/dist/node_modules/d3-timer/src/timeout.js.map +0 -1
  790. package/dist/node_modules/d3-timer/src/timer.js +0 -55
  791. package/dist/node_modules/d3-timer/src/timer.js.map +0 -1
  792. package/dist/node_modules/d3-transition/src/index.js +0 -3
  793. package/dist/node_modules/d3-transition/src/interrupt.js +0 -18
  794. package/dist/node_modules/d3-transition/src/interrupt.js.map +0 -1
  795. package/dist/node_modules/d3-transition/src/selection/index.js +0 -7
  796. package/dist/node_modules/d3-transition/src/selection/index.js.map +0 -1
  797. package/dist/node_modules/d3-transition/src/selection/interrupt.js +0 -11
  798. package/dist/node_modules/d3-transition/src/selection/interrupt.js.map +0 -1
  799. package/dist/node_modules/d3-transition/src/selection/transition.js +0 -25
  800. package/dist/node_modules/d3-transition/src/selection/transition.js.map +0 -1
  801. package/dist/node_modules/d3-transition/src/transition/attr.js +0 -51
  802. package/dist/node_modules/d3-transition/src/transition/attr.js.map +0 -1
  803. package/dist/node_modules/d3-transition/src/transition/attrTween.js +0 -40
  804. package/dist/node_modules/d3-transition/src/transition/attrTween.js.map +0 -1
  805. package/dist/node_modules/d3-transition/src/transition/delay.js +0 -20
  806. package/dist/node_modules/d3-transition/src/transition/delay.js.map +0 -1
  807. package/dist/node_modules/d3-transition/src/transition/duration.js +0 -20
  808. package/dist/node_modules/d3-transition/src/transition/duration.js.map +0 -1
  809. package/dist/node_modules/d3-transition/src/transition/ease.js +0 -16
  810. package/dist/node_modules/d3-transition/src/transition/ease.js.map +0 -1
  811. package/dist/node_modules/d3-transition/src/transition/easeVarying.js +0 -17
  812. package/dist/node_modules/d3-transition/src/transition/easeVarying.js.map +0 -1
  813. package/dist/node_modules/d3-transition/src/transition/end.js +0 -18
  814. package/dist/node_modules/d3-transition/src/transition/end.js.map +0 -1
  815. package/dist/node_modules/d3-transition/src/transition/filter.js +0 -12
  816. package/dist/node_modules/d3-transition/src/transition/filter.js.map +0 -1
  817. package/dist/node_modules/d3-transition/src/transition/index.js +0 -69
  818. package/dist/node_modules/d3-transition/src/transition/index.js.map +0 -1
  819. package/dist/node_modules/d3-transition/src/transition/interpolate.js +0 -13
  820. package/dist/node_modules/d3-transition/src/transition/interpolate.js.map +0 -1
  821. package/dist/node_modules/d3-transition/src/transition/merge.js +0 -12
  822. package/dist/node_modules/d3-transition/src/transition/merge.js.map +0 -1
  823. package/dist/node_modules/d3-transition/src/transition/on.js +0 -23
  824. package/dist/node_modules/d3-transition/src/transition/on.js.map +0 -1
  825. package/dist/node_modules/d3-transition/src/transition/remove.js +0 -15
  826. package/dist/node_modules/d3-transition/src/transition/remove.js.map +0 -1
  827. package/dist/node_modules/d3-transition/src/transition/schedule.js +0 -71
  828. package/dist/node_modules/d3-transition/src/transition/schedule.js.map +0 -1
  829. package/dist/node_modules/d3-transition/src/transition/select.js +0 -14
  830. package/dist/node_modules/d3-transition/src/transition/select.js.map +0 -1
  831. package/dist/node_modules/d3-transition/src/transition/selectAll.js +0 -17
  832. package/dist/node_modules/d3-transition/src/transition/selectAll.js.map +0 -1
  833. package/dist/node_modules/d3-transition/src/transition/selection.js +0 -10
  834. package/dist/node_modules/d3-transition/src/transition/selection.js.map +0 -1
  835. package/dist/node_modules/d3-transition/src/transition/style.js +0 -47
  836. package/dist/node_modules/d3-transition/src/transition/style.js.map +0 -1
  837. package/dist/node_modules/d3-transition/src/transition/styleTween.js +0 -25
  838. package/dist/node_modules/d3-transition/src/transition/styleTween.js.map +0 -1
  839. package/dist/node_modules/d3-transition/src/transition/text.js +0 -19
  840. package/dist/node_modules/d3-transition/src/transition/text.js.map +0 -1
  841. package/dist/node_modules/d3-transition/src/transition/textTween.js +0 -25
  842. package/dist/node_modules/d3-transition/src/transition/textTween.js.map +0 -1
  843. package/dist/node_modules/d3-transition/src/transition/transition.js +0 -19
  844. package/dist/node_modules/d3-transition/src/transition/transition.js.map +0 -1
  845. package/dist/node_modules/d3-transition/src/transition/tween.js +0 -56
  846. package/dist/node_modules/d3-transition/src/transition/tween.js.map +0 -1
  847. package/dist/node_modules/d3-zoom/src/constant.js +0 -6
  848. package/dist/node_modules/d3-zoom/src/constant.js.map +0 -1
  849. package/dist/node_modules/d3-zoom/src/event.js +0 -30
  850. package/dist/node_modules/d3-zoom/src/event.js.map +0 -1
  851. package/dist/node_modules/d3-zoom/src/index.js +0 -2
  852. package/dist/node_modules/d3-zoom/src/noevent.js +0 -11
  853. package/dist/node_modules/d3-zoom/src/noevent.js.map +0 -1
  854. package/dist/node_modules/d3-zoom/src/transform.js +0 -50
  855. package/dist/node_modules/d3-zoom/src/transform.js.map +0 -1
  856. package/dist/node_modules/d3-zoom/src/zoom.js +0 -219
  857. package/dist/node_modules/d3-zoom/src/zoom.js.map +0 -1
  858. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +0 -56
  859. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +0 -1
  860. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +0 -54
  861. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js.map +0 -1
  862. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +0 -54
  863. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +0 -1
  864. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +0 -46
  865. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +0 -1
  866. package/dist/node_modules/use-sync-external-store/shim/index.js +0 -12
  867. package/dist/node_modules/use-sync-external-store/shim/index.js.map +0 -1
  868. package/dist/node_modules/use-sync-external-store/shim/with-selector.js +0 -12
  869. package/dist/node_modules/use-sync-external-store/shim/with-selector.js.map +0 -1
  870. package/dist/node_modules/zustand/esm/traditional.js +0 -17
  871. package/dist/node_modules/zustand/esm/traditional.js.map +0 -1
  872. package/dist/node_modules/zustand/esm/vanilla/shallow.js +0 -21
  873. package/dist/node_modules/zustand/esm/vanilla/shallow.js.map +0 -1
  874. package/dist/node_modules/zustand/esm/vanilla.js +0 -20
  875. package/dist/node_modules/zustand/esm/vanilla.js.map +0 -1
  876. package/dist/pages/ActionsPage.d.ts +0 -2
  877. package/dist/pages/ActionsPage.d.ts.map +0 -1
  878. package/dist/pages/AgentDetailsPage.d.ts +0 -5
  879. package/dist/pages/AgentDetailsPage.d.ts.map +0 -1
  880. package/dist/pages/AgentGraphPage.d.ts +0 -9
  881. package/dist/pages/AgentGraphPage.d.ts.map +0 -1
  882. package/dist/pages/AgentsLandingPage.d.ts +0 -12
  883. package/dist/pages/AgentsLandingPage.d.ts.map +0 -1
  884. package/dist/pages/AgentsPage.d.ts +0 -5
  885. package/dist/pages/AgentsPage.d.ts.map +0 -1
  886. package/dist/pages/AnalyticsPage.d.ts +0 -2
  887. package/dist/pages/AnalyticsPage.d.ts.map +0 -1
  888. package/dist/pages/CatalogDetailPage.d.ts +0 -2
  889. package/dist/pages/CatalogDetailPage.d.ts.map +0 -1
  890. package/dist/pages/CatalogDocsPage.d.ts +0 -2
  891. package/dist/pages/CatalogDocsPage.d.ts.map +0 -1
  892. package/dist/pages/CatalogPage.d.ts +0 -2
  893. package/dist/pages/CatalogPage.d.ts.map +0 -1
  894. package/dist/pages/ComponentDetailPage.d.ts +0 -2
  895. package/dist/pages/ComponentDetailPage.d.ts.map +0 -1
  896. package/dist/pages/ComponentDocsPage.d.ts +0 -2
  897. package/dist/pages/ComponentDocsPage.d.ts.map +0 -1
  898. package/dist/pages/ComponentsPage.d.ts +0 -2
  899. package/dist/pages/ComponentsPage.d.ts.map +0 -1
  900. package/dist/pages/GettingStartedPage.d.ts +0 -16
  901. package/dist/pages/GettingStartedPage.d.ts.map +0 -1
  902. package/dist/pages/HealthPage.d.ts +0 -2
  903. package/dist/pages/HealthPage.d.ts.map +0 -1
  904. package/dist/pages/LogsPage.d.ts +0 -2
  905. package/dist/pages/LogsPage.d.ts.map +0 -1
  906. package/dist/pages/NoteDetailsPage.d.ts +0 -2
  907. package/dist/pages/NoteDetailsPage.d.ts.map +0 -1
  908. package/dist/pages/OverviewPage.d.ts +0 -9
  909. package/dist/pages/OverviewPage.d.ts.map +0 -1
  910. package/dist/pages/SessionDetailsPage.d.ts +0 -6
  911. package/dist/pages/SessionDetailsPage.d.ts.map +0 -1
  912. package/dist/pages/SessionsPage.d.ts +0 -6
  913. package/dist/pages/SessionsPage.d.ts.map +0 -1
  914. package/dist/pages/SettingsPage.d.ts +0 -2
  915. package/dist/pages/SettingsPage.d.ts.map +0 -1
  916. package/dist/pages/SharedSessionPage.d.ts +0 -13
  917. package/dist/pages/SharedSessionPage.d.ts.map +0 -1
  918. package/dist/pages/SharedVibeDeckPage.d.ts +0 -8
  919. package/dist/pages/SharedVibeDeckPage.d.ts.map +0 -1
  920. package/dist/pages/TargetDetailsPage.d.ts +0 -13
  921. package/dist/pages/TargetDetailsPage.d.ts.map +0 -1
  922. package/dist/pages/TargetsPage.d.ts +0 -8
  923. package/dist/pages/TargetsPage.d.ts.map +0 -1
  924. package/dist/pages/TemplateDetailPage.d.ts +0 -2
  925. package/dist/pages/TemplateDetailPage.d.ts.map +0 -1
  926. package/dist/pages/TemplatesPage.d.ts +0 -2
  927. package/dist/pages/TemplatesPage.d.ts.map +0 -1
  928. package/dist/pages/TunnelsLandingPage.d.ts +0 -8
  929. package/dist/pages/TunnelsLandingPage.d.ts.map +0 -1
  930. package/dist/pages/VibeAuditPage.d.ts +0 -2
  931. package/dist/pages/VibeAuditPage.d.ts.map +0 -1
  932. package/dist/pages/VibeCalendarPage.d.ts +0 -9
  933. package/dist/pages/VibeCalendarPage.d.ts.map +0 -1
  934. package/dist/pages/VibeDeckPage.d.ts +0 -2
  935. package/dist/pages/VibeDeckPage.d.ts.map +0 -1
  936. package/dist/pages/VibeDetailsPage.d.ts +0 -5
  937. package/dist/pages/VibeDetailsPage.d.ts.map +0 -1
  938. package/dist/pages/VibeDocsPage.d.ts +0 -2
  939. package/dist/pages/VibeDocsPage.d.ts.map +0 -1
  940. package/dist/pages/VibeTaskDetailPage.d.ts +0 -9
  941. package/dist/pages/VibeTaskDetailPage.d.ts.map +0 -1
  942. package/dist/pages/VibesPage.d.ts +0 -5
  943. package/dist/pages/VibesPage.d.ts.map +0 -1
  944. package/dist/pages/WebhooksPage.d.ts +0 -5
  945. package/dist/pages/WebhooksPage.d.ts.map +0 -1
  946. package/dist/pages/ai/AIPage.d.ts +0 -6
  947. package/dist/pages/ai/AIPage.d.ts.map +0 -1
  948. package/dist/pages/ai/AISessionDetailPage.d.ts +0 -5
  949. package/dist/pages/ai/AISessionDetailPage.d.ts.map +0 -1
  950. package/dist/pages/ai/AgentManagerPage.d.ts +0 -9
  951. package/dist/pages/ai/AgentManagerPage.d.ts.map +0 -1
  952. package/dist/pages/index.d.ts +0 -17
  953. package/dist/pages/index.d.ts.map +0 -1
  954. package/dist/pages/tunnels/AuditTab.d.ts +0 -8
  955. package/dist/pages/tunnels/AuditTab.d.ts.map +0 -1
  956. package/dist/pages/tunnels/DomainsTab.d.ts +0 -2
  957. package/dist/pages/tunnels/DomainsTab.d.ts.map +0 -1
  958. package/dist/pages/tunnels/ProvidersTab.d.ts +0 -2
  959. package/dist/pages/tunnels/ProvidersTab.d.ts.map +0 -1
  960. package/dist/pages/tunnels/SessionsTab.d.ts +0 -8
  961. package/dist/pages/tunnels/SessionsTab.d.ts.map +0 -1
  962. package/dist/pages/tunnels/TunnelDetailsPage.d.ts +0 -2
  963. package/dist/pages/tunnels/TunnelDetailsPage.d.ts.map +0 -1
  964. package/dist/pages/tunnels/TunnelsTab.d.ts +0 -2
  965. package/dist/pages/tunnels/TunnelsTab.d.ts.map +0 -1
  966. package/dist/pages/tunnels/UsageTab.d.ts +0 -8
  967. package/dist/pages/tunnels/UsageTab.d.ts.map +0 -1
  968. package/dist/pages/tunnels/tabs/TunnelAuditTab.d.ts +0 -4
  969. package/dist/pages/tunnels/tabs/TunnelAuditTab.d.ts.map +0 -1
  970. package/dist/pages/tunnels/tabs/TunnelCliTab.d.ts +0 -8
  971. package/dist/pages/tunnels/tabs/TunnelCliTab.d.ts.map +0 -1
  972. package/dist/pages/tunnels/tabs/TunnelDomainsTab.d.ts +0 -8
  973. package/dist/pages/tunnels/tabs/TunnelDomainsTab.d.ts.map +0 -1
  974. package/dist/pages/tunnels/tabs/TunnelEndpointsTab.d.ts +0 -8
  975. package/dist/pages/tunnels/tabs/TunnelEndpointsTab.d.ts.map +0 -1
  976. package/dist/pages/tunnels/tabs/TunnelOverviewTab.d.ts +0 -8
  977. package/dist/pages/tunnels/tabs/TunnelOverviewTab.d.ts.map +0 -1
  978. package/dist/pages/tunnels/tabs/TunnelSessionsTab.d.ts +0 -4
  979. package/dist/pages/tunnels/tabs/TunnelSessionsTab.d.ts.map +0 -1
  980. package/dist/pages/tunnels/tabs/TunnelSettingsTab.d.ts +0 -9
  981. package/dist/pages/tunnels/tabs/TunnelSettingsTab.d.ts.map +0 -1
  982. package/dist/pages/tunnels/tabs/TunnelUsageTab.d.ts +0 -4
  983. package/dist/pages/tunnels/tabs/TunnelUsageTab.d.ts.map +0 -1
  984. package/dist/plugin.d.ts +0 -4
  985. package/dist/plugin.d.ts.map +0 -1
  986. package/dist/providers/AgentEventsProvider.d.ts +0 -79
  987. package/dist/providers/AgentEventsProvider.d.ts.map +0 -1
  988. package/dist/providers/VibeControlsProvider.d.ts +0 -29
  989. package/dist/providers/VibeControlsProvider.d.ts.map +0 -1
  990. package/dist/services/aiApi.d.ts +0 -310
  991. package/dist/services/aiApi.d.ts.map +0 -1
  992. package/dist/services/assistantApi.d.ts +0 -71
  993. package/dist/services/assistantApi.d.ts.map +0 -1
  994. package/dist/services/assistantExportService.d.ts +0 -9
  995. package/dist/services/assistantExportService.d.ts.map +0 -1
  996. package/dist/services/schedulerApi.d.ts +0 -18
  997. package/dist/services/schedulerApi.d.ts.map +0 -1
  998. package/dist/shared/hooks/useTr.d.ts +0 -17
  999. package/dist/shared/hooks/useTr.d.ts.map +0 -1
  1000. package/dist/store/agentManagerStore.d.ts +0 -65
  1001. package/dist/store/agentManagerStore.d.ts.map +0 -1
  1002. package/dist/store/assistantStore.d.ts +0 -56
  1003. package/dist/store/assistantStore.d.ts.map +0 -1
  1004. package/dist/store/vibeControlsStore.d.ts +0 -68
  1005. package/dist/store/vibeControlsStore.d.ts.map +0 -1
  1006. package/dist/translations/en.d.ts +0 -2174
  1007. package/dist/translations/en.d.ts.map +0 -1
  1008. package/dist/types/agentManager.d.ts +0 -72
  1009. package/dist/types/agentManager.d.ts.map +0 -1
  1010. package/dist/types/assistant.d.ts +0 -58
  1011. package/dist/types/assistant.d.ts.map +0 -1
  1012. package/dist/types/index.d.ts +0 -134
  1013. package/dist/types/index.d.ts.map +0 -1
  1014. package/dist/utils/agentStatus.d.ts +0 -42
  1015. package/dist/utils/agentStatus.d.ts.map +0 -1
  1016. package/dist/utils/aiSessionNotFound.d.ts +0 -2
  1017. package/dist/utils/aiSessionNotFound.d.ts.map +0 -1
  1018. package/dist/utils/nativeBridge.d.ts +0 -3
  1019. package/dist/utils/nativeBridge.d.ts.map +0 -1
  1020. package/dist/utils/pageContext.d.ts +0 -23
  1021. package/dist/utils/pageContext.d.ts.map +0 -1
  1022. package/dist/utils/quotaUtils.d.ts +0 -8
  1023. package/dist/utils/quotaUtils.d.ts.map +0 -1
  1024. package/dist/utils/relativeTime.d.ts +0 -3
  1025. package/dist/utils/relativeTime.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AISessionDetailPage.js","names":[],"sources":["../../../src/pages/ai/AISessionDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n MessageSquare,\n ScrollText,\n BarChart3,\n Settings,\n Send,\n ArrowLeft,\n XCircle,\n RefreshCw,\n} from 'lucide-react';\nimport { MotionPage } from '@burdenoff/fe-libs/shared/motion';\nimport {\n PageHeader,\n Card,\n LoadingState,\n ErrorState,\n EmptyState,\n StatCard,\n RequireAgentReachable,\n} from '@/components/shared';\nimport { useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport { useQueryBackedTab } from '@/hooks/useQueryBackedTab';\nimport { useCachedInitialData } from '@/hooks/useCachedInitialData';\nimport type { AISessionLog, AISessionStats } from '@/services/aiApi';\nimport { useTr } from '../../shared/hooks/useTr';\nimport {\n sendPromptToSession,\n fetchSessionLogs,\n fetchSessionStats,\n updateSessionConfig,\n terminateSession,\n} from '@/services/aiApi';\nimport { isSessionNotFoundError } from '@/utils/aiSessionNotFound';\n\ntype SessionTab = 'chat' | 'logs' | 'stats' | 'config';\nconst SESSION_TABS: readonly SessionTab[] = ['chat', 'logs', 'stats', 'config'];\n\nconst sessionTabs: { id: SessionTab; label: string; icon: typeof MessageSquare }[] = [\n { id: 'chat', label: 'Chat', icon: MessageSquare },\n { id: 'logs', label: 'Logs', icon: ScrollText },\n { id: 'stats', label: 'Stats', icon: BarChart3 },\n { id: 'config', label: 'Config', icon: Settings },\n];\n\nconst logTypeColors: Record<string, string> = {\n info: 'bg-action-primary-bg/10 text-action-primary-bg',\n warn: 'bg-status-warning-bg text-status-warning-text',\n error: 'bg-status-error-bg text-status-error-text',\n debug: 'bg-bg-sunken text-text-secondary',\n prompt: 'bg-status-success-bg text-status-success-text',\n response: 'bg-action-primary-bg/20 text-action-primary-bg',\n};\n\ninterface ChatMessage {\n role: 'user' | 'assistant';\n content: string;\n tokens?: { input: number; output: number };\n timestamp: string;\n}\n\n/**\n * AI session detail page with Chat, Logs, Stats, and Config tabs.\n */\nexport function AISessionDetailPage() {\n const tr = useTr();\n const { sessionId } = useParams<{ sessionId: string }>();\n const handleNavigate = useVibeNavigate();\n\n const { agents, loading: agentsLoading } = useCachedInitialData();\n const activeAgent = useMemo(\n () => agents.find((agent) => agent.isActive && agent.tunnelUrl && agent.agentApiKey) ?? null,\n [agents]\n );\n const agentId = activeAgent?.id ?? '';\n const hasAgent = !!agentId;\n\n const [activeTab, setActiveTab] = useQueryBackedTab<SessionTab>(SESSION_TABS, 'chat');\n\n // ── Chat state ──────────────────────────────────────────────────────\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [promptInput, setPromptInput] = useState('');\n const [sending, setSending] = useState(false);\n\n const handleSendPrompt = async () => {\n if (!promptInput.trim() || !sessionId || !hasAgent) return;\n const userMessage: ChatMessage = {\n role: 'user',\n content: promptInput,\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, userMessage]);\n setPromptInput('');\n setSending(true);\n try {\n const result = await sendPromptToSession(agentId, sessionId, userMessage.content);\n const content =\n ((result as Record<string, unknown>).content as string) ||\n ((result as Record<string, unknown>).response as string) ||\n JSON.stringify(result);\n const inputTokens = (result as Record<string, unknown>).inputTokens as number | undefined;\n const outputTokens = (result as Record<string, unknown>).outputTokens as number | undefined;\n const assistantMessage: ChatMessage = {\n role: 'assistant',\n content,\n tokens:\n inputTokens !== undefined ? { input: inputTokens, output: outputTokens ?? 0 } : undefined,\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, assistantMessage]);\n } catch (err) {\n const errorMessage: ChatMessage = {\n role: 'assistant',\n content: `Error: ${err instanceof Error ? err.message : 'Failed to get response'}`,\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, errorMessage]);\n } finally {\n setSending(false);\n }\n };\n\n // ── Logs state ──────────────────────────────────────────────────────\n const [logs, setLogs] = useState<AISessionLog[]>([]);\n const [logsLoading, setLogsLoading] = useState(false);\n const [logsError, setLogsError] = useState<string | null>(null);\n const [logTypeFilter, setLogTypeFilter] = useState('all');\n\n const loadLogs = useCallback(async () => {\n if (!sessionId || !hasAgent) return;\n setLogsLoading(true);\n setLogsError(null);\n try {\n const params: Record<string, unknown> = {};\n if (logTypeFilter !== 'all') params.type = logTypeFilter;\n const result = await fetchSessionLogs(agentId, sessionId, params);\n setLogs(result);\n } catch (err) {\n // Pre-first-message: agent has no record of this session yet —\n // render an empty list, not an error.\n if (isSessionNotFoundError(err)) {\n setLogs([]);\n } else {\n setLogsError(err instanceof Error ? err.message : 'Failed to load logs');\n }\n } finally {\n setLogsLoading(false);\n }\n }, [agentId, sessionId, logTypeFilter, hasAgent]);\n\n useEffect(() => {\n if (activeTab === 'logs') loadLogs();\n }, [activeTab, loadLogs]);\n\n // ── Stats state ─────────────────────────────────────────────────────\n const [stats, setStats] = useState<AISessionStats | null>(null);\n const [statsLoading, setStatsLoading] = useState(false);\n const [statsError, setStatsError] = useState<string | null>(null);\n\n const loadStats = useCallback(async () => {\n if (!sessionId || !hasAgent) return;\n setStatsLoading(true);\n setStatsError(null);\n try {\n const result = await fetchSessionStats(agentId, sessionId);\n setStats(result);\n } catch (err) {\n if (isSessionNotFoundError(err)) {\n setStats(null);\n } else {\n setStatsError(err instanceof Error ? err.message : 'Failed to load stats');\n }\n } finally {\n setStatsLoading(false);\n }\n }, [agentId, sessionId, hasAgent]);\n\n useEffect(() => {\n if (activeTab === 'stats') loadStats();\n }, [activeTab, loadStats]);\n\n // ── Config state ────────────────────────────────────────────────────\n const [configJson, setConfigJson] = useState('{}');\n const [savingConfig, setSavingConfig] = useState(false);\n const [configSaved, setConfigSaved] = useState(false);\n const [terminating, setTerminating] = useState(false);\n\n const handleSaveConfig = async () => {\n if (!sessionId || !hasAgent) return;\n setSavingConfig(true);\n try {\n const config = JSON.parse(configJson);\n await updateSessionConfig(agentId, sessionId, config);\n setConfigSaved(true);\n setTimeout(() => setConfigSaved(false), 3000);\n } catch (err) {\n console.error('Failed to save config:', err);\n } finally {\n setSavingConfig(false);\n }\n };\n\n const handleTerminate = async () => {\n if (!sessionId || !hasAgent) return;\n if (!window.confirm('Are you sure you want to terminate this session? This cannot be undone.'))\n return;\n setTerminating(true);\n try {\n await terminateSession(agentId, sessionId);\n handleNavigate('/ai/sessions');\n } catch (err) {\n console.error('Failed to terminate session:', err);\n } finally {\n setTerminating(false);\n }\n };\n\n if (agentsLoading) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <LoadingState message=\"Loading...\" />\n </MotionPage>\n );\n }\n\n if (!hasAgent) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <EmptyState\n icon={<MessageSquare className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibecontrols.pages.ai.noActiveAgent', 'No active agent')}\n description={tr(\n 'vibecontrols.pages.ai.noActiveAgentDescription',\n 'An active agent with a tunnel is required to view session details.'\n )}\n action={\n <button\n onClick={() => handleNavigate('/agents')}\n className=\"px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm\"\n >\n {tr('vibecontrols.pages.ai.goToAgents', 'Go to Agents')}\n </button>\n }\n />\n </MotionPage>\n );\n }\n\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <PageHeader\n title={`Session ${sessionId?.substring(0, 8) ?? ''}...`}\n description={tr(\n 'vibecontrols.pages.ai.sessionDescription',\n 'AI session details and interaction'\n )}\n breadcrumb={[\n { label: 'AI', path: '#' },\n { label: 'Sessions', path: '#' },\n { label: sessionId?.substring(0, 8) ?? '' },\n ]}\n actions={\n <button\n onClick={() => handleNavigate('/ai/sessions')}\n className=\"flex items-center gap-2 px-3 py-2 text-text-secondary hover:bg-bg-sunken rounded-md transition-colors text-sm\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibecontrols.pages.ai.back', 'Back')}\n </button>\n }\n />\n\n {/* Tab Navigation */}\n <div className=\"-mx-4 border-b border-border-default px-4 sm:-mx-6 sm:px-6\">\n <nav className=\"flex gap-1 overflow-x-auto pb-1\" role=\"tablist\">\n {sessionTabs.map((tab) => {\n const Icon = tab.icon;\n const isActive = activeTab === tab.id;\n return (\n <button\n key={tab.id}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => setActiveTab(tab.id)}\n className={`flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-t-md border-b-2 px-2.5 py-2 text-xs font-medium transition-colors sm:px-3 sm:py-2.5 sm:text-sm ${\n isActive\n ? 'border-action-primary-bg text-action-primary-bg'\n : 'border-transparent text-text-secondary hover:text-text-primary hover:border-border-default'\n }`}\n >\n <Icon className=\"h-3.5 w-3.5 sm:h-4 sm:w-4\" />\n {tab.label}\n </button>\n );\n })}\n </nav>\n </div>\n\n {/* Tab Content */}\n <RequireAgentReachable agentId={agentId || null}>\n {activeTab === 'chat' && (\n <div className=\"space-y-4\">\n {/* Messages */}\n <Card className=\"p-0\">\n <div className=\"divide-y divide-border-default min-h-[200px] max-h-[50vh] overflow-y-auto\">\n {messages.length === 0 ? (\n <div className=\"flex items-center justify-center h-48 text-sm text-text-secondary\">\n {tr(\n 'vibecontrols.pages.ai.sendPromptToStart',\n 'Send a prompt to start the conversation'\n )}\n </div>\n ) : (\n messages.map((msg, idx) => (\n <div\n key={idx}\n className={`px-4 py-3 ${msg.role === 'assistant' ? 'bg-bg-sunken/50' : ''}`}\n >\n <div className=\"mb-1 flex flex-wrap items-center gap-2\">\n <span className=\"text-xs font-semibold text-text-primary uppercase\">\n {msg.role}\n </span>\n <span className=\"text-xs text-text-muted\">\n {new Date(msg.timestamp).toLocaleTimeString()}\n </span>\n {msg.tokens && (\n <span className=\"text-xs text-text-muted sm:ml-auto\">\n {msg.tokens.input + msg.tokens.output} tokens\n </span>\n )}\n </div>\n <div className=\"text-sm text-text-primary whitespace-pre-wrap\">\n {msg.content}\n </div>\n </div>\n ))\n )}\n {sending && (\n <div className=\"px-4 py-3 bg-bg-sunken/50\">\n <div className=\"flex items-center gap-2\">\n <RefreshCw className=\"w-3.5 h-3.5 text-text-secondary animate-spin\" />\n <span className=\"text-sm text-text-secondary\">\n {tr('vibecontrols.pages.ai.thinking', 'Thinking...')}\n </span>\n </div>\n </div>\n )}\n </div>\n </Card>\n\n {/* Prompt Input */}\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <textarea\n value={promptInput}\n onChange={(e) => setPromptInput(e.target.value)}\n rows={3}\n className=\"min-h-[7rem] flex-1 rounded-md border border-border-default bg-bg-sunken px-3 py-2 text-sm font-mono text-text-primary resize-none focus:outline-none focus:border-border-strong\"\n placeholder=\"Type your prompt...\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleSendPrompt();\n }\n }}\n />\n <button\n onClick={handleSendPrompt}\n disabled={sending || !promptInput.trim()}\n className=\"flex items-center justify-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50 sm:self-end\"\n >\n <Send className=\"w-4 h-4\" />\n {tr('vibecontrols.pages.ai.send', 'Send')}\n </button>\n </div>\n </div>\n )}\n\n {activeTab === 'logs' && (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <select\n value={logTypeFilter}\n onChange={(e) => setLogTypeFilter(e.target.value)}\n className=\"px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary text-sm\"\n >\n <option value=\"all\">All Types</option>\n <option value=\"info\">Info</option>\n <option value=\"warn\">Warning</option>\n <option value=\"error\">Error</option>\n <option value=\"debug\">Debug</option>\n <option value=\"prompt\">Prompt</option>\n <option value=\"response\">Response</option>\n </select>\n <button\n onClick={loadLogs}\n disabled={logsLoading}\n className=\"p-2 hover:bg-bg-sunken rounded-md transition-colors\"\n >\n <RefreshCw\n className={`w-4 h-4 text-text-secondary ${logsLoading ? 'animate-spin' : ''}`}\n />\n </button>\n </div>\n\n {logsLoading ? (\n <LoadingState message=\"Loading logs...\" />\n ) : logsError ? (\n <ErrorState title=\"Failed to load logs\" message={logsError} onRetry={loadLogs} />\n ) : logs.length === 0 ? (\n <EmptyState\n icon={<ScrollText className=\"w-6 h-6 text-text-secondary\" />}\n title=\"No logs\"\n description=\"Session logs will appear here\"\n />\n ) : (\n <Card className=\"p-0\">\n <div className=\"divide-y divide-border-default max-h-[60vh] overflow-y-auto\">\n {logs.map((log) => (\n <div key={log.id} className=\"px-4 py-2 flex items-start gap-3 text-sm\">\n <span\n className={`px-1.5 py-0.5 text-xs rounded font-medium flex-shrink-0 mt-0.5 ${logTypeColors[log.type] ?? 'bg-bg-sunken text-text-secondary'}`}\n >\n {log.type}\n </span>\n <div className=\"flex-1 min-w-0\">\n <span className=\"text-text-primary\">{log.message}</span>\n </div>\n <span className=\"text-xs text-text-muted flex-shrink-0\">\n {new Date(log.timestamp).toLocaleTimeString()}\n </span>\n </div>\n ))}\n </div>\n </Card>\n )}\n </div>\n )}\n\n {activeTab === 'stats' && (\n <div className=\"space-y-4\">\n {statsLoading ? (\n <LoadingState message=\"Loading stats...\" />\n ) : statsError ? (\n <ErrorState title=\"Failed to load stats\" message={statsError} onRetry={loadStats} />\n ) : stats ? (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n <StatCard title=\"Total Tokens\" value={stats.totalTokens.toLocaleString()} />\n <StatCard\n title=\"Input Tokens\"\n value={stats.inputTokens.toLocaleString()}\n variant=\"success\"\n />\n <StatCard\n title=\"Output Tokens\"\n value={stats.outputTokens.toLocaleString()}\n variant=\"warning\"\n />\n <StatCard title=\"Prompts\" value={stats.promptCount} />\n {stats.averageLatency !== undefined && (\n <StatCard title=\"Avg Latency\" value={`${stats.averageLatency.toFixed(0)}ms`} />\n )}\n </div>\n ) : (\n <EmptyState\n icon={<BarChart3 className=\"w-6 h-6 text-text-secondary\" />}\n title=\"No stats\"\n description=\"Stats will appear after the session processes prompts\"\n />\n )}\n </div>\n )}\n\n {activeTab === 'config' && (\n <div className=\"space-y-4\">\n <Card className=\"p-4\">\n <h3 className=\"font-semibold text-text-primary mb-3\">\n {tr('vibecontrols.pages.ai.sessionConfig', 'Session Configuration')}\n </h3>\n <textarea\n value={configJson}\n onChange={(e) => setConfigJson(e.target.value)}\n rows={10}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary text-sm font-mono focus:outline-none focus:border-border-strong\"\n placeholder='{\"model\": \"claude-3\", \"temperature\": 0.7, ...}'\n />\n <div className=\"mt-4 flex flex-col gap-3 sm:flex-row sm:items-center\">\n <button\n onClick={handleSaveConfig}\n disabled={savingConfig}\n className=\"flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 text-sm\"\n >\n <Settings className=\"w-4 h-4\" />\n {savingConfig\n ? tr('vibecontrols.pages.ai.saving', 'Saving...')\n : tr('vibecontrols.pages.ai.saveConfig', 'Save Config')}\n </button>\n {configSaved && (\n <span className=\"text-sm text-status-success-text\">\n {tr('vibecontrols.pages.ai.savedSuccessfully', 'Saved successfully')}\n </span>\n )}\n </div>\n </Card>\n\n <Card className=\"p-4 border-status-error-text/20\">\n <h3 className=\"font-semibold text-status-error-text mb-2\">\n {tr('vibecontrols.pages.ai.dangerZone', 'Danger Zone')}\n </h3>\n <p className=\"text-sm text-text-secondary mb-3\">\n {tr(\n 'vibecontrols.pages.ai.terminateWarning',\n 'Terminating a session is permanent. All state will be lost.'\n )}\n </p>\n <button\n onClick={handleTerminate}\n disabled={terminating}\n className=\"flex items-center gap-2 px-4 py-2 bg-status-error-bg text-status-error-text border border-status-error-text/20 rounded-md hover:bg-status-error-bg/80 transition-colors disabled:opacity-50 text-sm\"\n >\n <XCircle className=\"w-4 h-4\" />\n {terminating\n ? tr('vibecontrols.pages.ai.terminating', 'Terminating...')\n : tr('vibecontrols.pages.ai.terminateSession', 'Terminate Session')}\n </button>\n </Card>\n </div>\n )}\n </RequireAgentReachable>\n </MotionPage>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AISessionDetailPage.js","names":[],"sources":["../../../src/pages/ai/AISessionDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n MessageSquare,\n ScrollText,\n BarChart3,\n Settings,\n Send,\n ArrowLeft,\n XCircle,\n RefreshCw,\n} from 'lucide-react';\nimport { MotionPage } from '@burdenoff/fe-libs/shared/motion';\nimport {\n PageHeader,\n Card,\n LoadingState,\n ErrorState,\n EmptyState,\n StatCard,\n RequireAgentReachable,\n} from '@/components/shared';\nimport { useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport { useQueryBackedTab } from '@/hooks/useQueryBackedTab';\nimport { useCachedInitialData } from '@/hooks/useCachedInitialData';\nimport { useActiveAgentProfile } from '@/hooks/useActiveAgentProfile';\nimport type { AISessionLog, AISessionStats } from '@/services/aiApi';\nimport { useTr } from '../../shared/hooks/useTr';\nimport {\n sendPromptToSession,\n fetchSessionLogs,\n fetchSessionStats,\n updateSessionConfig,\n terminateSession,\n} from '@/services/aiApi';\nimport { isSessionNotFoundError } from '@/utils/aiSessionNotFound';\n\ntype SessionTab = 'chat' | 'logs' | 'stats' | 'config';\nconst SESSION_TABS: readonly SessionTab[] = ['chat', 'logs', 'stats', 'config'];\n\nconst sessionTabs: { id: SessionTab; label: string; icon: typeof MessageSquare }[] = [\n { id: 'chat', label: 'Chat', icon: MessageSquare },\n { id: 'logs', label: 'Logs', icon: ScrollText },\n { id: 'stats', label: 'Stats', icon: BarChart3 },\n { id: 'config', label: 'Config', icon: Settings },\n];\n\nconst logTypeColors: Record<string, string> = {\n info: 'bg-action-primary-bg/10 text-action-primary-bg',\n warn: 'bg-status-warning-bg text-status-warning-text',\n error: 'bg-status-error-bg text-status-error-text',\n debug: 'bg-bg-sunken text-text-secondary',\n prompt: 'bg-status-success-bg text-status-success-text',\n response: 'bg-action-primary-bg/20 text-action-primary-bg',\n};\n\ninterface ChatMessage {\n role: 'user' | 'assistant';\n content: string;\n tokens?: { input: number; output: number };\n timestamp: string;\n}\n\n/**\n * AI session detail page with Chat, Logs, Stats, and Config tabs.\n */\nexport function AISessionDetailPage() {\n const tr = useTr();\n const { sessionId } = useParams<{ sessionId: string }>();\n const handleNavigate = useVibeNavigate();\n\n const { agents, loading: agentsLoading } = useCachedInitialData();\n const activeAgent = useMemo(\n () => agents.find((agent) => agent.isActive && agent.tunnelUrl && agent.agentApiKey) ?? null,\n [agents]\n );\n const agentId = activeAgent?.id ?? '';\n const hasAgent = !!agentId;\n // Canonical agent → profile → plugins/data hierarchy. Every aiApi call\n // takes an AgentRef = { id, profile } so the path can be constructed\n // explicitly at the callsite.\n const { active: activeProfile } = useActiveAgentProfile(activeAgent?.id ?? null);\n const agentRef = useMemo(\n () => ({ id: agentId, profile: activeProfile }),\n [agentId, activeProfile]\n );\n\n const [activeTab, setActiveTab] = useQueryBackedTab<SessionTab>(SESSION_TABS, 'chat');\n\n // ── Chat state ──────────────────────────────────────────────────────\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [promptInput, setPromptInput] = useState('');\n const [sending, setSending] = useState(false);\n\n const handleSendPrompt = async () => {\n if (!promptInput.trim() || !sessionId || !hasAgent) return;\n const userMessage: ChatMessage = {\n role: 'user',\n content: promptInput,\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, userMessage]);\n setPromptInput('');\n setSending(true);\n try {\n const result = await sendPromptToSession(agentRef, sessionId, userMessage.content);\n const content =\n ((result as Record<string, unknown>).content as string) ||\n ((result as Record<string, unknown>).response as string) ||\n JSON.stringify(result);\n const inputTokens = (result as Record<string, unknown>).inputTokens as number | undefined;\n const outputTokens = (result as Record<string, unknown>).outputTokens as number | undefined;\n const assistantMessage: ChatMessage = {\n role: 'assistant',\n content,\n tokens:\n inputTokens !== undefined ? { input: inputTokens, output: outputTokens ?? 0 } : undefined,\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, assistantMessage]);\n } catch (err) {\n const errorMessage: ChatMessage = {\n role: 'assistant',\n content: `Error: ${err instanceof Error ? err.message : 'Failed to get response'}`,\n timestamp: new Date().toISOString(),\n };\n setMessages((prev) => [...prev, errorMessage]);\n } finally {\n setSending(false);\n }\n };\n\n // ── Logs state ──────────────────────────────────────────────────────\n const [logs, setLogs] = useState<AISessionLog[]>([]);\n const [logsLoading, setLogsLoading] = useState(false);\n const [logsError, setLogsError] = useState<string | null>(null);\n const [logTypeFilter, setLogTypeFilter] = useState('all');\n\n const loadLogs = useCallback(async () => {\n if (!sessionId || !hasAgent) return;\n setLogsLoading(true);\n setLogsError(null);\n try {\n const params: Record<string, unknown> = {};\n if (logTypeFilter !== 'all') params.type = logTypeFilter;\n const result = await fetchSessionLogs(agentRef, sessionId, params);\n setLogs(result);\n } catch (err) {\n // Pre-first-message: agent has no record of this session yet —\n // render an empty list, not an error.\n if (isSessionNotFoundError(err)) {\n setLogs([]);\n } else {\n setLogsError(err instanceof Error ? err.message : 'Failed to load logs');\n }\n } finally {\n setLogsLoading(false);\n }\n }, [agentRef, sessionId, logTypeFilter, hasAgent]);\n\n useEffect(() => {\n if (activeTab === 'logs') loadLogs();\n }, [activeTab, loadLogs]);\n\n // ── Stats state ─────────────────────────────────────────────────────\n const [stats, setStats] = useState<AISessionStats | null>(null);\n const [statsLoading, setStatsLoading] = useState(false);\n const [statsError, setStatsError] = useState<string | null>(null);\n\n const loadStats = useCallback(async () => {\n if (!sessionId || !hasAgent) return;\n setStatsLoading(true);\n setStatsError(null);\n try {\n const result = await fetchSessionStats(agentRef, sessionId);\n setStats(result);\n } catch (err) {\n if (isSessionNotFoundError(err)) {\n setStats(null);\n } else {\n setStatsError(err instanceof Error ? err.message : 'Failed to load stats');\n }\n } finally {\n setStatsLoading(false);\n }\n }, [agentRef, sessionId, hasAgent]);\n\n useEffect(() => {\n if (activeTab === 'stats') loadStats();\n }, [activeTab, loadStats]);\n\n // ── Config state ────────────────────────────────────────────────────\n const [configJson, setConfigJson] = useState('{}');\n const [savingConfig, setSavingConfig] = useState(false);\n const [configSaved, setConfigSaved] = useState(false);\n const [terminating, setTerminating] = useState(false);\n\n const handleSaveConfig = async () => {\n if (!sessionId || !hasAgent) return;\n setSavingConfig(true);\n try {\n const config = JSON.parse(configJson);\n await updateSessionConfig(agentRef, sessionId, config);\n setConfigSaved(true);\n setTimeout(() => setConfigSaved(false), 3000);\n } catch (err) {\n console.error('Failed to save config:', err);\n } finally {\n setSavingConfig(false);\n }\n };\n\n const handleTerminate = async () => {\n if (!sessionId || !hasAgent) return;\n if (!window.confirm('Are you sure you want to terminate this session? This cannot be undone.'))\n return;\n setTerminating(true);\n try {\n await terminateSession(agentRef, sessionId);\n handleNavigate('/ai/sessions');\n } catch (err) {\n console.error('Failed to terminate session:', err);\n } finally {\n setTerminating(false);\n }\n };\n\n if (agentsLoading) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <LoadingState message=\"Loading...\" />\n </MotionPage>\n );\n }\n\n if (!hasAgent) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <EmptyState\n icon={<MessageSquare className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibecontrols.pages.ai.noActiveAgent', 'No active agent')}\n description={tr(\n 'vibecontrols.pages.ai.noActiveAgentDescription',\n 'An active agent with a tunnel is required to view session details.'\n )}\n action={\n <button\n onClick={() => handleNavigate('/agents')}\n className=\"px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm\"\n >\n {tr('vibecontrols.pages.ai.goToAgents', 'Go to Agents')}\n </button>\n }\n />\n </MotionPage>\n );\n }\n\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <PageHeader\n title={`Session ${sessionId?.substring(0, 8) ?? ''}...`}\n description={tr(\n 'vibecontrols.pages.ai.sessionDescription',\n 'AI session details and interaction'\n )}\n breadcrumb={[\n { label: 'AI', path: '#' },\n { label: 'Sessions', path: '#' },\n { label: sessionId?.substring(0, 8) ?? '' },\n ]}\n actions={\n <button\n onClick={() => handleNavigate('/ai/sessions')}\n className=\"flex items-center gap-2 px-3 py-2 text-text-secondary hover:bg-bg-sunken rounded-md transition-colors text-sm\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibecontrols.pages.ai.back', 'Back')}\n </button>\n }\n />\n\n {/* Tab Navigation */}\n <div className=\"-mx-4 border-b border-border-default px-4 sm:-mx-6 sm:px-6\">\n <nav className=\"flex gap-1 overflow-x-auto pb-1\" role=\"tablist\">\n {sessionTabs.map((tab) => {\n const Icon = tab.icon;\n const isActive = activeTab === tab.id;\n return (\n <button\n key={tab.id}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => setActiveTab(tab.id)}\n className={`flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-t-md border-b-2 px-2.5 py-2 text-xs font-medium transition-colors sm:px-3 sm:py-2.5 sm:text-sm ${\n isActive\n ? 'border-action-primary-bg text-action-primary-bg'\n : 'border-transparent text-text-secondary hover:text-text-primary hover:border-border-default'\n }`}\n >\n <Icon className=\"h-3.5 w-3.5 sm:h-4 sm:w-4\" />\n {tab.label}\n </button>\n );\n })}\n </nav>\n </div>\n\n {/* Tab Content */}\n <RequireAgentReachable agentId={agentId || null}>\n {activeTab === 'chat' && (\n <div className=\"space-y-4\">\n {/* Messages */}\n <Card className=\"p-0\">\n <div className=\"divide-y divide-border-default min-h-[200px] max-h-[50vh] overflow-y-auto\">\n {messages.length === 0 ? (\n <div className=\"flex items-center justify-center h-48 text-sm text-text-secondary\">\n {tr(\n 'vibecontrols.pages.ai.sendPromptToStart',\n 'Send a prompt to start the conversation'\n )}\n </div>\n ) : (\n messages.map((msg, idx) => (\n <div\n key={idx}\n className={`px-4 py-3 ${msg.role === 'assistant' ? 'bg-bg-sunken/50' : ''}`}\n >\n <div className=\"mb-1 flex flex-wrap items-center gap-2\">\n <span className=\"text-xs font-semibold text-text-primary uppercase\">\n {msg.role}\n </span>\n <span className=\"text-xs text-text-muted\">\n {new Date(msg.timestamp).toLocaleTimeString()}\n </span>\n {msg.tokens && (\n <span className=\"text-xs text-text-muted sm:ml-auto\">\n {msg.tokens.input + msg.tokens.output} tokens\n </span>\n )}\n </div>\n <div className=\"text-sm text-text-primary whitespace-pre-wrap\">\n {msg.content}\n </div>\n </div>\n ))\n )}\n {sending && (\n <div className=\"px-4 py-3 bg-bg-sunken/50\">\n <div className=\"flex items-center gap-2\">\n <RefreshCw className=\"w-3.5 h-3.5 text-text-secondary animate-spin\" />\n <span className=\"text-sm text-text-secondary\">\n {tr('vibecontrols.pages.ai.thinking', 'Thinking...')}\n </span>\n </div>\n </div>\n )}\n </div>\n </Card>\n\n {/* Prompt Input */}\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <textarea\n value={promptInput}\n onChange={(e) => setPromptInput(e.target.value)}\n rows={3}\n className=\"min-h-[7rem] flex-1 rounded-md border border-border-default bg-bg-sunken px-3 py-2 text-sm font-mono text-text-primary resize-none focus:outline-none focus:border-border-strong\"\n placeholder=\"Type your prompt...\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleSendPrompt();\n }\n }}\n />\n <button\n onClick={handleSendPrompt}\n disabled={sending || !promptInput.trim()}\n className=\"flex items-center justify-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50 sm:self-end\"\n >\n <Send className=\"w-4 h-4\" />\n {tr('vibecontrols.pages.ai.send', 'Send')}\n </button>\n </div>\n </div>\n )}\n\n {activeTab === 'logs' && (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <select\n value={logTypeFilter}\n onChange={(e) => setLogTypeFilter(e.target.value)}\n className=\"px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary text-sm\"\n >\n <option value=\"all\">All Types</option>\n <option value=\"info\">Info</option>\n <option value=\"warn\">Warning</option>\n <option value=\"error\">Error</option>\n <option value=\"debug\">Debug</option>\n <option value=\"prompt\">Prompt</option>\n <option value=\"response\">Response</option>\n </select>\n <button\n onClick={loadLogs}\n disabled={logsLoading}\n className=\"p-2 hover:bg-bg-sunken rounded-md transition-colors\"\n >\n <RefreshCw\n className={`w-4 h-4 text-text-secondary ${logsLoading ? 'animate-spin' : ''}`}\n />\n </button>\n </div>\n\n {logsLoading ? (\n <LoadingState message=\"Loading logs...\" />\n ) : logsError ? (\n <ErrorState title=\"Failed to load logs\" message={logsError} onRetry={loadLogs} />\n ) : logs.length === 0 ? (\n <EmptyState\n icon={<ScrollText className=\"w-6 h-6 text-text-secondary\" />}\n title=\"No logs\"\n description=\"Session logs will appear here\"\n />\n ) : (\n <Card className=\"p-0\">\n <div className=\"divide-y divide-border-default max-h-[60vh] overflow-y-auto\">\n {logs.map((log) => (\n <div key={log.id} className=\"px-4 py-2 flex items-start gap-3 text-sm\">\n <span\n className={`px-1.5 py-0.5 text-xs rounded font-medium flex-shrink-0 mt-0.5 ${logTypeColors[log.type] ?? 'bg-bg-sunken text-text-secondary'}`}\n >\n {log.type}\n </span>\n <div className=\"flex-1 min-w-0\">\n <span className=\"text-text-primary\">{log.message}</span>\n </div>\n <span className=\"text-xs text-text-muted flex-shrink-0\">\n {new Date(log.timestamp).toLocaleTimeString()}\n </span>\n </div>\n ))}\n </div>\n </Card>\n )}\n </div>\n )}\n\n {activeTab === 'stats' && (\n <div className=\"space-y-4\">\n {statsLoading ? (\n <LoadingState message=\"Loading stats...\" />\n ) : statsError ? (\n <ErrorState title=\"Failed to load stats\" message={statsError} onRetry={loadStats} />\n ) : stats ? (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n <StatCard title=\"Total Tokens\" value={stats.totalTokens.toLocaleString()} />\n <StatCard\n title=\"Input Tokens\"\n value={stats.inputTokens.toLocaleString()}\n variant=\"success\"\n />\n <StatCard\n title=\"Output Tokens\"\n value={stats.outputTokens.toLocaleString()}\n variant=\"warning\"\n />\n <StatCard title=\"Prompts\" value={stats.promptCount} />\n {stats.averageLatency !== undefined && (\n <StatCard title=\"Avg Latency\" value={`${stats.averageLatency.toFixed(0)}ms`} />\n )}\n </div>\n ) : (\n <EmptyState\n icon={<BarChart3 className=\"w-6 h-6 text-text-secondary\" />}\n title=\"No stats\"\n description=\"Stats will appear after the session processes prompts\"\n />\n )}\n </div>\n )}\n\n {activeTab === 'config' && (\n <div className=\"space-y-4\">\n <Card className=\"p-4\">\n <h3 className=\"font-semibold text-text-primary mb-3\">\n {tr('vibecontrols.pages.ai.sessionConfig', 'Session Configuration')}\n </h3>\n <textarea\n value={configJson}\n onChange={(e) => setConfigJson(e.target.value)}\n rows={10}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary text-sm font-mono focus:outline-none focus:border-border-strong\"\n placeholder='{\"model\": \"claude-3\", \"temperature\": 0.7, ...}'\n />\n <div className=\"mt-4 flex flex-col gap-3 sm:flex-row sm:items-center\">\n <button\n onClick={handleSaveConfig}\n disabled={savingConfig}\n className=\"flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 text-sm\"\n >\n <Settings className=\"w-4 h-4\" />\n {savingConfig\n ? tr('vibecontrols.pages.ai.saving', 'Saving...')\n : tr('vibecontrols.pages.ai.saveConfig', 'Save Config')}\n </button>\n {configSaved && (\n <span className=\"text-sm text-status-success-text\">\n {tr('vibecontrols.pages.ai.savedSuccessfully', 'Saved successfully')}\n </span>\n )}\n </div>\n </Card>\n\n <Card className=\"p-4 border-status-error-text/20\">\n <h3 className=\"font-semibold text-status-error-text mb-2\">\n {tr('vibecontrols.pages.ai.dangerZone', 'Danger Zone')}\n </h3>\n <p className=\"text-sm text-text-secondary mb-3\">\n {tr(\n 'vibecontrols.pages.ai.terminateWarning',\n 'Terminating a session is permanent. All state will be lost.'\n )}\n </p>\n <button\n onClick={handleTerminate}\n disabled={terminating}\n className=\"flex items-center gap-2 px-4 py-2 bg-status-error-bg text-status-error-text border border-status-error-text/20 rounded-md hover:bg-status-error-bg/80 transition-colors disabled:opacity-50 text-sm\"\n >\n <XCircle className=\"w-4 h-4\" />\n {terminating\n ? tr('vibecontrols.pages.ai.terminating', 'Terminating...')\n : tr('vibecontrols.pages.ai.terminateSession', 'Terminate Session')}\n </button>\n </Card>\n </div>\n )}\n </RequireAgentReachable>\n </MotionPage>\n );\n}\n"],"mappings":"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"}
@@ -10,142 +10,146 @@ import { usePluginAvailability as l } from "../../hooks/usePluginAvailability.js
10
10
  import { AI_CORE_PACKAGE as u, AI_PROVIDER_PACKAGES as d } from "../../constants/pluginCatalog.js";
11
11
  import { PluginGate as f } from "../../components/shared/PluginGate.js";
12
12
  import { RequireAgentReachable as p } from "../../components/shared/RequireAgentReachable.js";
13
- import { AgentSelector as m } from "../../components/shared/AgentSelector.js";
13
+ import { useActiveAgentProfile as m } from "../../hooks/useActiveAgentProfile.js";
14
+ import { AgentSelector as h } from "../../components/shared/AgentSelector.js";
14
15
  import "../../components/shared/index.js";
15
- import { bulkDeleteSessions as h, terminateSession as g } from "../../services/aiApi.js";
16
- import { ClaudeCredentialsCard as _ } from "../../components/ai/ClaudeCredentialsCard.js";
17
- import { BridleConfigPanel as v } from "../../components/agent-manager/BridleConfigPanel.js";
18
- import { useAgentManagerStore as y } from "../../store/agentManagerStore.js";
19
- import { useAgentManagerKeyboard as b } from "../../hooks/useAgentManagerKeyboard.js";
20
- import { AgentManagerLayout as x } from "../../components/agent-manager/AgentManagerLayout.js";
21
- import { AgentManagerSidebar as S } from "../../components/agent-manager/AgentManagerSidebar.js";
22
- import { AgentManagerCenter as C } from "../../components/agent-manager/AgentManagerCenter.js";
23
- import { AgentManagerDetailPanel as w } from "../../components/agent-manager/AgentManagerDetailPanel.js";
24
- import { Suspense as T, useCallback as E, useEffect as D, useMemo as O } from "react";
25
- import { MessagesSquare as k } from "lucide-react";
26
- import { useParams as A } from "react-router-dom";
27
- import { jsx as j, jsxs as M } from "react/jsx-runtime";
28
- import { MotionPage as N } from "@burdenoff/fe-libs/shared/motion";
16
+ import { bulkDeleteSessions as g, terminateSession as _ } from "../../services/aiApi.js";
17
+ import { useAgentManagerStore as v } from "../../store/agentManagerStore.js";
18
+ import { AgentManagerLayout as y } from "../../components/agent-manager/AgentManagerLayout.js";
19
+ import { AgentManagerSidebar as b } from "../../components/agent-manager/AgentManagerSidebar.js";
20
+ import { BridleConfigPanel as x } from "../../components/agent-manager/BridleConfigPanel.js";
21
+ import { AgentManagerCenter as S } from "../../components/agent-manager/AgentManagerCenter.js";
22
+ import { AgentManagerDetailPanel as C } from "../../components/agent-manager/AgentManagerDetailPanel.js";
23
+ import { ClaudeCredentialsCard as w } from "../../components/ai/ClaudeCredentialsCard.js";
24
+ import { useAgentManagerKeyboard as T } from "../../hooks/useAgentManagerKeyboard.js";
25
+ import { Suspense as E, useCallback as D, useEffect as O, useMemo as k } from "react";
26
+ import { MessagesSquare as A } from "lucide-react";
27
+ import { useParams as j } from "react-router-dom";
28
+ import { jsx as M, jsxs as N } from "react/jsx-runtime";
29
+ import { MotionPage as P } from "@burdenoff/fe-libs/shared/motion";
29
30
  //#region src/pages/ai/AgentManagerPage.tsx
30
- function P() {
31
- let { tab: P, sessionId: F } = A(), I = e(), L = t(), { agents: R, loading: z, error: B } = r(), V = n((e) => e.activeAgentId), H = O(() => {
32
- if (V) {
33
- let e = R.find((e) => e.id === V);
31
+ function F() {
32
+ let { tab: F, sessionId: I } = j(), L = e(), R = t(), { agents: z, loading: B, error: V } = r(), H = n((e) => e.activeAgentId), U = k(() => {
33
+ if (H) {
34
+ let e = z.find((e) => e.id === H);
34
35
  if (e) return e;
35
36
  }
36
- return R.find((e) => e.isActive && e.tunnelUrl && e.agentApiKey) ?? null;
37
- }, [R, V])?.id ?? "", U = y((e) => e.openSession), W = y((e) => e.activeTabSessionId), { initialLoading: G } = l(O(() => [u, ...d], []), H || null);
38
- D(() => {
39
- F && H && U(F, `Session ${F.slice(0, 8)}`);
37
+ return z.find((e) => e.isActive && e.tunnelUrl && e.agentApiKey) ?? null;
38
+ }, [z, H]), W = U?.id ?? "", { active: G } = m(U?.id ?? null), K = k(() => ({
39
+ id: W,
40
+ profile: G
41
+ }), [W, G]), q = v((e) => e.openSession), J = v((e) => e.activeTabSessionId), { initialLoading: Y } = l(k(() => [u, ...d], []), W || null);
42
+ O(() => {
43
+ I && W && q(I, `Session ${I.slice(0, 8)}`);
40
44
  }, [
41
- F,
42
- H,
43
- U
45
+ I,
46
+ W,
47
+ q
44
48
  ]);
45
- let K = E(async (e) => {
46
- if (H) try {
47
- await g(H, e), o() && s("success");
49
+ let X = D(async (e) => {
50
+ if (W) try {
51
+ await _(K, e), o() && s("success");
48
52
  } catch {
49
53
  o() && s("error");
50
54
  }
51
- }, [H]), q = E(async (e) => {
52
- if (H) try {
53
- await h(H, e), o() && s("success");
55
+ }, [K]), Z = D(async (e) => {
56
+ if (W) try {
57
+ await g(K, e), o() && s("success");
54
58
  } catch {
55
59
  o() && s("error");
56
60
  }
57
- }, [H]);
58
- return b(), z || H && G ? /* @__PURE__ */ j(N, {
61
+ }, [K]);
62
+ return T(), B || W && Y ? /* @__PURE__ */ M(P, {
59
63
  className: "flex items-center justify-center h-full bg-bg-surface",
60
- children: /* @__PURE__ */ j(i, { message: I("vibecontrols.pages.ai.detectingAgent", "Detecting agent and plugin availability…") })
61
- }) : B ? /* @__PURE__ */ j(N, {
64
+ children: /* @__PURE__ */ M(i, { message: L("vibecontrols.pages.ai.detectingAgent", "Detecting agent and plugin availability…") })
65
+ }) : V ? /* @__PURE__ */ M(P, {
62
66
  className: "flex items-center justify-center h-full bg-bg-surface",
63
- children: /* @__PURE__ */ j(a, {
67
+ children: /* @__PURE__ */ M(a, {
64
68
  title: "Failed to load agents",
65
- message: B.message
69
+ message: V.message
66
70
  })
67
- }) : R.length === 0 ? /* @__PURE__ */ j(N, {
71
+ }) : z.length === 0 ? /* @__PURE__ */ M(P, {
68
72
  className: "flex items-center justify-center h-full bg-bg-surface p-8",
69
- children: /* @__PURE__ */ j(c, {
70
- icon: /* @__PURE__ */ j(k, { className: "w-8 h-8 text-text-secondary" }),
71
- title: I("vibecontrols.pages.ai.noActiveAgentAvailable", "No agents available"),
72
- description: I("vibecontrols.pages.ai.agentManagerRequiresAgent", "The Agent Manager needs at least one vibecontrols agent. Add one or start an existing one."),
73
- action: /* @__PURE__ */ j("button", {
74
- onClick: () => L("/agents"),
73
+ children: /* @__PURE__ */ M(c, {
74
+ icon: /* @__PURE__ */ M(A, { className: "w-8 h-8 text-text-secondary" }),
75
+ title: L("vibecontrols.pages.ai.noActiveAgentAvailable", "No agents available"),
76
+ description: L("vibecontrols.pages.ai.agentManagerRequiresAgent", "The Agent Manager needs at least one vibecontrols agent. Add one or start an existing one."),
77
+ action: /* @__PURE__ */ M("button", {
78
+ onClick: () => R("/agents"),
75
79
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm",
76
- children: I("vibecontrols.pages.ai.goToAgents", "Go to Agents")
80
+ children: L("vibecontrols.pages.ai.goToAgents", "Go to Agents")
77
81
  })
78
82
  })
79
- }) : P === "config" ? /* @__PURE__ */ M(N, {
83
+ }) : F === "config" ? /* @__PURE__ */ N(P, {
80
84
  className: "flex flex-col h-[calc(100vh-6.5rem)] bg-bg-surface overflow-hidden",
81
- children: [/* @__PURE__ */ M("div", {
85
+ children: [/* @__PURE__ */ N("div", {
82
86
  className: "flex items-center justify-between gap-3 border-b border-border-default px-4 sm:px-6 py-3",
83
- children: [/* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
87
+ children: [/* @__PURE__ */ N("div", { children: [/* @__PURE__ */ M("p", {
84
88
  className: "text-xs uppercase tracking-wide text-text-secondary",
85
- children: I("vibecontrols.pages.ai.contextLabel", "Active context")
86
- }), /* @__PURE__ */ j("h2", {
89
+ children: L("vibecontrols.pages.ai.contextLabel", "Active context")
90
+ }), /* @__PURE__ */ M("h2", {
87
91
  className: "text-sm font-semibold text-text-primary mt-0.5",
88
- children: I("vibecontrols.pages.ai.configHeading", "AI configuration")
89
- })] }), /* @__PURE__ */ j(m, {
90
- label: I("vibecontrols.pages.ai.agentSelectorLabel", "Agent"),
92
+ children: L("vibecontrols.pages.ai.configHeading", "AI configuration")
93
+ })] }), /* @__PURE__ */ M(h, {
94
+ label: L("vibecontrols.pages.ai.agentSelectorLabel", "Agent"),
91
95
  compact: !0
92
96
  })]
93
- }), /* @__PURE__ */ j("div", {
97
+ }), /* @__PURE__ */ M("div", {
94
98
  className: "flex-1 overflow-auto p-4 sm:p-6 space-y-6",
95
- children: /* @__PURE__ */ M(p, {
96
- agentId: H || null,
97
- children: [/* @__PURE__ */ j(_, { agentId: H }), /* @__PURE__ */ j(v, { agentId: H })]
99
+ children: /* @__PURE__ */ N(p, {
100
+ agentId: W || null,
101
+ children: [/* @__PURE__ */ M(w, { agent: K }), /* @__PURE__ */ M(x, { agent: K })]
98
102
  })
99
103
  })]
100
- }) : /* @__PURE__ */ M(N, {
104
+ }) : /* @__PURE__ */ N(P, {
101
105
  className: "flex flex-col h-[calc(100vh-6.5rem)] bg-bg-surface overflow-hidden",
102
- children: [/* @__PURE__ */ M("div", {
106
+ children: [/* @__PURE__ */ N("div", {
103
107
  className: "flex items-center justify-between gap-3 border-b border-border-default px-4 sm:px-6 py-3",
104
- children: [/* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
108
+ children: [/* @__PURE__ */ N("div", { children: [/* @__PURE__ */ M("p", {
105
109
  className: "text-xs uppercase tracking-wide text-text-secondary",
106
- children: I("vibecontrols.pages.ai.contextLabel", "Active context")
107
- }), /* @__PURE__ */ j("h2", {
110
+ children: L("vibecontrols.pages.ai.contextLabel", "Active context")
111
+ }), /* @__PURE__ */ M("h2", {
108
112
  className: "text-sm font-semibold text-text-primary mt-0.5",
109
- children: I("vibecontrols.pages.ai.contextHeading", "AI workbench")
110
- })] }), /* @__PURE__ */ j(m, {
111
- label: I("vibecontrols.pages.ai.agentSelectorLabel", "Agent"),
113
+ children: L("vibecontrols.pages.ai.contextHeading", "AI workbench")
114
+ })] }), /* @__PURE__ */ M(h, {
115
+ label: L("vibecontrols.pages.ai.agentSelectorLabel", "Agent"),
112
116
  compact: !0
113
117
  })]
114
- }), /* @__PURE__ */ j("div", {
118
+ }), /* @__PURE__ */ M("div", {
115
119
  className: "flex-1 min-h-0 overflow-auto p-4 sm:p-6 lg:p-0",
116
- children: /* @__PURE__ */ j(p, {
117
- agentId: H || null,
118
- children: /* @__PURE__ */ j(f, {
119
- agentId: H || null,
120
+ children: /* @__PURE__ */ M(p, {
121
+ agentId: W || null,
122
+ children: /* @__PURE__ */ M(f, {
123
+ agentId: W || null,
120
124
  requirements: [{
121
125
  packages: [u],
122
126
  mode: "all",
123
- eyebrow: I("vibecontrols.pages.ai.pluginRequiredEyebrow", "AI plugin required"),
124
- title: I("vibecontrols.pages.ai.coreTitle", "Install the AI orchestrator"),
125
- description: I("vibecontrols.pages.ai.coreDescription", "The AI page routes prompts and sessions through the AI orchestrator plugin on your agent. Install it to continue.")
127
+ eyebrow: L("vibecontrols.pages.ai.pluginRequiredEyebrow", "AI plugin required"),
128
+ title: L("vibecontrols.pages.ai.coreTitle", "Install the AI orchestrator"),
129
+ description: L("vibecontrols.pages.ai.coreDescription", "The AI page routes prompts and sessions through the AI orchestrator plugin on your agent. Install it to continue.")
126
130
  }, {
127
131
  packages: d,
128
132
  mode: "any",
129
- eyebrow: I("vibecontrols.pages.ai.providerEyebrow", "AI provider required"),
130
- title: I("vibecontrols.pages.ai.providerTitle", "Install at least one AI provider"),
131
- description: I("vibecontrols.pages.ai.providerDescription", "Pick the AI harness you want to use. You can install more providers later from the Plugins tab on your agent.")
133
+ eyebrow: L("vibecontrols.pages.ai.providerEyebrow", "AI provider required"),
134
+ title: L("vibecontrols.pages.ai.providerTitle", "Install at least one AI provider"),
135
+ description: L("vibecontrols.pages.ai.providerDescription", "Pick the AI harness you want to use. You can install more providers later from the Plugins tab on your agent.")
132
136
  }],
133
- children: /* @__PURE__ */ j(T, {
134
- fallback: /* @__PURE__ */ j("div", {
137
+ children: /* @__PURE__ */ M(E, {
138
+ fallback: /* @__PURE__ */ M("div", {
135
139
  className: "flex items-center justify-center h-full",
136
- children: /* @__PURE__ */ j(i, { message: "Loading..." })
140
+ children: /* @__PURE__ */ M(i, { message: "Loading..." })
137
141
  }),
138
- children: /* @__PURE__ */ j(x, {
139
- sidebar: /* @__PURE__ */ j(S, {
140
- agentId: H,
141
- onDeleteSession: K,
142
- onDeleteSelected: q
142
+ children: /* @__PURE__ */ M(y, {
143
+ sidebar: /* @__PURE__ */ M(b, {
144
+ agent: K,
145
+ onDeleteSession: X,
146
+ onDeleteSelected: Z
143
147
  }),
144
- detailPanel: W ? /* @__PURE__ */ j(w, {
145
- sessionId: W,
146
- agentId: H
148
+ detailPanel: J ? /* @__PURE__ */ M(C, {
149
+ sessionId: J,
150
+ agent: K
147
151
  }) : void 0,
148
- children: /* @__PURE__ */ j(C, { agentId: H })
152
+ children: /* @__PURE__ */ M(S, { agent: K })
149
153
  })
150
154
  })
151
155
  })
@@ -154,6 +158,6 @@ function P() {
154
158
  });
155
159
  }
156
160
  //#endregion
157
- export { P as AgentManagerPage };
161
+ export { F as AgentManagerPage };
158
162
 
159
163
  //# sourceMappingURL=AgentManagerPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentManagerPage.js","names":[],"sources":["../../../src/pages/ai/AgentManagerPage.tsx"],"sourcesContent":["/**\n * AgentManagerPage — top-level page for the multi-session Agent Manager.\n *\n * Reads URL params (:tab, :sessionId), resolves the active agent via\n * useCachedInitialData(), auto-opens a session tab if the URL has a\n * sessionId, and renders the three-pane layout.\n */\n\nimport { Suspense, useCallback, useEffect, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { MessagesSquare } from 'lucide-react';\nimport { isNative, nativeNotify } from '../../utils/nativeBridge';\nimport { MotionPage } from '@burdenoff/fe-libs/shared/motion';\nimport {\n LoadingState,\n EmptyState,\n ErrorState,\n PluginGate,\n AgentSelector,\n RequireAgentReachable,\n} from '@/components/shared';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport { useCachedInitialData } from '@/hooks/useCachedInitialData';\nimport { usePluginAvailability } from '@/hooks/usePluginAvailability';\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\nimport { useAgentManagerStore } from '@/store/agentManagerStore';\nimport { useAgentManagerKeyboard } from '@/hooks/useAgentManagerKeyboard';\nimport { terminateSession, bulkDeleteSessions } from '@/services/aiApi';\nimport { AgentManagerLayout } from '@/components/agent-manager/AgentManagerLayout';\nimport { AgentManagerSidebar } from '@/components/agent-manager/AgentManagerSidebar';\nimport { AgentManagerCenter } from '@/components/agent-manager/AgentManagerCenter';\nimport { AgentManagerDetailPanel } from '@/components/agent-manager/AgentManagerDetailPanel';\nimport { BridleConfigPanel } from '@/components/agent-manager/BridleConfigPanel';\nimport { ClaudeCredentialsCard } from '@/components/ai/ClaudeCredentialsCard';\nimport { AI_CORE_PACKAGE, AI_PROVIDER_PACKAGES } from '@/constants/pluginCatalog';\n\ninterface AgentManagerParams {\n tab?: string;\n sessionId?: string;\n}\n\nexport function AgentManagerPage() {\n const { tab: tabParam, sessionId: sessionIdParam } = useParams<\n AgentManagerParams & Record<string, string | undefined>\n >();\n const tr = useTr();\n const handleNavigate = useVibeNavigate();\n\n const { agents, loading: agentsLoading, error: agentsError } = useCachedInitialData();\n const selectedAgentId = useVibeControlsStore((s) => s.activeAgentId);\n\n // Prefer the user-selected agent from the store; fall back to the first\n // healthy one so the page works on first visit before the selector commits.\n const activeAgent = useMemo(() => {\n if (selectedAgentId) {\n const match = agents.find((a) => a.id === selectedAgentId);\n if (match) return match;\n }\n return agents.find((a) => a.isActive && a.tunnelUrl && a.agentApiKey) ?? null;\n }, [agents, selectedAgentId]);\n\n const agentId = activeAgent?.id ?? '';\n const openSession = useAgentManagerStore((s) => s.openSession);\n const activeTabSessionId = useAgentManagerStore((s) => s.activeTabSessionId);\n\n // Pre-fetch plugin availability at the page level so the detection phase\n // overlaps with the agents query's resolution. This collapses the two\n // sequential loading states (\"Loading agents...\" → \"Checking plugin\n // availability...\") into one unified wait, eliminating the flicker the\n // user saw between them.\n const detectionPackages = useMemo(() => [AI_CORE_PACKAGE, ...AI_PROVIDER_PACKAGES], []);\n const { initialLoading: pluginsInitialLoading } = usePluginAvailability(\n detectionPackages,\n agentId || null\n );\n\n // Auto-open session from URL param\n useEffect(() => {\n if (sessionIdParam && agentId) {\n openSession(sessionIdParam, `Session ${sessionIdParam.slice(0, 8)}`);\n }\n }, [sessionIdParam, agentId, openSession]);\n\n const handleDeleteSession = useCallback(\n async (sessionId: string) => {\n if (!agentId) return;\n try {\n await terminateSession(agentId, sessionId);\n if (isNative()) void nativeNotify('success');\n } catch {\n if (isNative()) void nativeNotify('error');\n }\n },\n [agentId]\n );\n\n const handleDeleteSelected = useCallback(\n async (sessionIds: string[]) => {\n if (!agentId) return;\n try {\n await bulkDeleteSessions(agentId, sessionIds);\n if (isNative()) void nativeNotify('success');\n } catch {\n if (isNative()) void nativeNotify('error');\n }\n },\n [agentId]\n );\n\n // Activate keyboard shortcuts (Ctrl+Shift+N, Ctrl+K, Ctrl+F, Escape)\n useAgentManagerKeyboard();\n\n // Single unified wait: show one LoadingState while either the agents\n // query or the plugin-availability probe is still in flight. Prevents\n // the two-step \"Loading agents...\" → \"Checking plugin availability...\"\n // cascade. `agentId && pluginsInitialLoading` also catches the case\n // where agents resolved but the plugin probe hasn't fired/settled yet.\n if (agentsLoading || (agentId && pluginsInitialLoading)) {\n return (\n <MotionPage className=\"flex items-center justify-center h-full bg-bg-surface\">\n <LoadingState\n message={tr(\n 'vibecontrols.pages.ai.detectingAgent',\n 'Detecting agent and plugin availability…'\n )}\n />\n </MotionPage>\n );\n }\n\n if (agentsError) {\n return (\n <MotionPage className=\"flex items-center justify-center h-full bg-bg-surface\">\n <ErrorState title=\"Failed to load agents\" message={agentsError.message} />\n </MotionPage>\n );\n }\n\n if (agents.length === 0) {\n return (\n <MotionPage className=\"flex items-center justify-center h-full bg-bg-surface p-8\">\n <EmptyState\n icon={<MessagesSquare className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibecontrols.pages.ai.noActiveAgentAvailable', 'No agents available')}\n description={tr(\n 'vibecontrols.pages.ai.agentManagerRequiresAgent',\n 'The Agent Manager needs at least one vibecontrols agent. Add one or start an existing one.'\n )}\n action={\n <button\n onClick={() => handleNavigate('/agents')}\n className=\"px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm\"\n >\n {tr('vibecontrols.pages.ai.goToAgents', 'Go to Agents')}\n </button>\n }\n />\n </MotionPage>\n );\n }\n\n if (tabParam === 'config') {\n return (\n <MotionPage className=\"flex flex-col h-[calc(100vh-6.5rem)] bg-bg-surface overflow-hidden\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border-default px-4 sm:px-6 py-3\">\n <div>\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">\n {tr('vibecontrols.pages.ai.contextLabel', 'Active context')}\n </p>\n <h2 className=\"text-sm font-semibold text-text-primary mt-0.5\">\n {tr('vibecontrols.pages.ai.configHeading', 'AI configuration')}\n </h2>\n </div>\n <AgentSelector label={tr('vibecontrols.pages.ai.agentSelectorLabel', 'Agent')} compact />\n </div>\n\n <div className=\"flex-1 overflow-auto p-4 sm:p-6 space-y-6\">\n <RequireAgentReachable agentId={agentId || null}>\n <ClaudeCredentialsCard agentId={agentId} />\n <BridleConfigPanel agentId={agentId} />\n </RequireAgentReachable>\n </div>\n </MotionPage>\n );\n }\n\n return (\n <MotionPage className=\"flex flex-col h-[calc(100vh-6.5rem)] bg-bg-surface overflow-hidden\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border-default px-4 sm:px-6 py-3\">\n <div>\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">\n {tr('vibecontrols.pages.ai.contextLabel', 'Active context')}\n </p>\n <h2 className=\"text-sm font-semibold text-text-primary mt-0.5\">\n {tr('vibecontrols.pages.ai.contextHeading', 'AI workbench')}\n </h2>\n </div>\n <AgentSelector label={tr('vibecontrols.pages.ai.agentSelectorLabel', 'Agent')} compact />\n </div>\n\n <div className=\"flex-1 min-h-0 overflow-auto p-4 sm:p-6 lg:p-0\">\n <RequireAgentReachable agentId={agentId || null}>\n <PluginGate\n agentId={agentId || null}\n requirements={[\n {\n packages: [AI_CORE_PACKAGE],\n mode: 'all',\n eyebrow: tr('vibecontrols.pages.ai.pluginRequiredEyebrow', 'AI plugin required'),\n title: tr('vibecontrols.pages.ai.coreTitle', 'Install the AI orchestrator'),\n description: tr(\n 'vibecontrols.pages.ai.coreDescription',\n 'The AI page routes prompts and sessions through the AI orchestrator plugin on your agent. Install it to continue.'\n ),\n },\n {\n packages: AI_PROVIDER_PACKAGES,\n mode: 'any',\n eyebrow: tr('vibecontrols.pages.ai.providerEyebrow', 'AI provider required'),\n title: tr(\n 'vibecontrols.pages.ai.providerTitle',\n 'Install at least one AI provider'\n ),\n description: tr(\n 'vibecontrols.pages.ai.providerDescription',\n 'Pick the AI harness you want to use. You can install more providers later from the Plugins tab on your agent.'\n ),\n },\n ]}\n >\n <Suspense\n fallback={\n <div className=\"flex items-center justify-center h-full\">\n <LoadingState message=\"Loading...\" />\n </div>\n }\n >\n <AgentManagerLayout\n sidebar={\n <AgentManagerSidebar\n agentId={agentId}\n onDeleteSession={handleDeleteSession}\n onDeleteSelected={handleDeleteSelected}\n />\n }\n detailPanel={\n activeTabSessionId ? (\n <AgentManagerDetailPanel sessionId={activeTabSessionId} agentId={agentId} />\n ) : undefined\n }\n >\n <AgentManagerCenter agentId={agentId} />\n </AgentManagerLayout>\n </Suspense>\n </PluginGate>\n </RequireAgentReachable>\n </div>\n </MotionPage>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AgentManagerPage.js","names":[],"sources":["../../../src/pages/ai/AgentManagerPage.tsx"],"sourcesContent":["/**\n * AgentManagerPage — top-level page for the multi-session Agent Manager.\n *\n * Reads URL params (:tab, :sessionId), resolves the active agent via\n * useCachedInitialData(), auto-opens a session tab if the URL has a\n * sessionId, and renders the three-pane layout.\n */\n\nimport { Suspense, useCallback, useEffect, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { MessagesSquare } from 'lucide-react';\nimport { isNative, nativeNotify } from '../../utils/nativeBridge';\nimport { MotionPage } from '@burdenoff/fe-libs/shared/motion';\nimport {\n LoadingState,\n EmptyState,\n ErrorState,\n PluginGate,\n AgentSelector,\n RequireAgentReachable,\n} from '@/components/shared';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport { useCachedInitialData } from '@/hooks/useCachedInitialData';\nimport { useActiveAgentProfile } from '@/hooks/useActiveAgentProfile';\nimport { usePluginAvailability } from '@/hooks/usePluginAvailability';\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\nimport { useAgentManagerStore } from '@/store/agentManagerStore';\nimport { useAgentManagerKeyboard } from '@/hooks/useAgentManagerKeyboard';\nimport { terminateSession, bulkDeleteSessions } from '@/services/aiApi';\nimport { AgentManagerLayout } from '@/components/agent-manager/AgentManagerLayout';\nimport { AgentManagerSidebar } from '@/components/agent-manager/AgentManagerSidebar';\nimport { AgentManagerCenter } from '@/components/agent-manager/AgentManagerCenter';\nimport { AgentManagerDetailPanel } from '@/components/agent-manager/AgentManagerDetailPanel';\nimport { BridleConfigPanel } from '@/components/agent-manager/BridleConfigPanel';\nimport { ClaudeCredentialsCard } from '@/components/ai/ClaudeCredentialsCard';\nimport { AI_CORE_PACKAGE, AI_PROVIDER_PACKAGES } from '@/constants/pluginCatalog';\n\ninterface AgentManagerParams {\n tab?: string;\n sessionId?: string;\n}\n\nexport function AgentManagerPage() {\n const { tab: tabParam, sessionId: sessionIdParam } = useParams<\n AgentManagerParams & Record<string, string | undefined>\n >();\n const tr = useTr();\n const handleNavigate = useVibeNavigate();\n\n const { agents, loading: agentsLoading, error: agentsError } = useCachedInitialData();\n const selectedAgentId = useVibeControlsStore((s) => s.activeAgentId);\n\n // Prefer the user-selected agent from the store; fall back to the first\n // healthy one so the page works on first visit before the selector commits.\n const activeAgent = useMemo(() => {\n if (selectedAgentId) {\n const match = agents.find((a) => a.id === selectedAgentId);\n if (match) return match;\n }\n return agents.find((a) => a.isActive && a.tunnelUrl && a.agentApiKey) ?? null;\n }, [agents, selectedAgentId]);\n\n const agentId = activeAgent?.id ?? '';\n // AgentRef for canonical aiApi calls — agent → profile → plugins/data.\n const { active: activeProfile } = useActiveAgentProfile(activeAgent?.id ?? null);\n const agentRef = useMemo(\n () => ({ id: agentId, profile: activeProfile }),\n [agentId, activeProfile]\n );\n const openSession = useAgentManagerStore((s) => s.openSession);\n const activeTabSessionId = useAgentManagerStore((s) => s.activeTabSessionId);\n\n // Pre-fetch plugin availability at the page level so the detection phase\n // overlaps with the agents query's resolution. This collapses the two\n // sequential loading states (\"Loading agents...\" → \"Checking plugin\n // availability...\") into one unified wait, eliminating the flicker the\n // user saw between them.\n const detectionPackages = useMemo(() => [AI_CORE_PACKAGE, ...AI_PROVIDER_PACKAGES], []);\n const { initialLoading: pluginsInitialLoading } = usePluginAvailability(\n detectionPackages,\n agentId || null\n );\n\n // Auto-open session from URL param\n useEffect(() => {\n if (sessionIdParam && agentId) {\n openSession(sessionIdParam, `Session ${sessionIdParam.slice(0, 8)}`);\n }\n }, [sessionIdParam, agentId, openSession]);\n\n const handleDeleteSession = useCallback(\n async (sessionId: string) => {\n if (!agentId) return;\n try {\n await terminateSession(agentRef, sessionId);\n if (isNative()) void nativeNotify('success');\n } catch {\n if (isNative()) void nativeNotify('error');\n }\n },\n [agentRef]\n );\n\n const handleDeleteSelected = useCallback(\n async (sessionIds: string[]) => {\n if (!agentId) return;\n try {\n await bulkDeleteSessions(agentRef, sessionIds);\n if (isNative()) void nativeNotify('success');\n } catch {\n if (isNative()) void nativeNotify('error');\n }\n },\n [agentRef]\n );\n\n // Activate keyboard shortcuts (Ctrl+Shift+N, Ctrl+K, Ctrl+F, Escape)\n useAgentManagerKeyboard();\n\n // Single unified wait: show one LoadingState while either the agents\n // query or the plugin-availability probe is still in flight. Prevents\n // the two-step \"Loading agents...\" → \"Checking plugin availability...\"\n // cascade. `agentId && pluginsInitialLoading` also catches the case\n // where agents resolved but the plugin probe hasn't fired/settled yet.\n if (agentsLoading || (agentId && pluginsInitialLoading)) {\n return (\n <MotionPage className=\"flex items-center justify-center h-full bg-bg-surface\">\n <LoadingState\n message={tr(\n 'vibecontrols.pages.ai.detectingAgent',\n 'Detecting agent and plugin availability…'\n )}\n />\n </MotionPage>\n );\n }\n\n if (agentsError) {\n return (\n <MotionPage className=\"flex items-center justify-center h-full bg-bg-surface\">\n <ErrorState title=\"Failed to load agents\" message={agentsError.message} />\n </MotionPage>\n );\n }\n\n if (agents.length === 0) {\n return (\n <MotionPage className=\"flex items-center justify-center h-full bg-bg-surface p-8\">\n <EmptyState\n icon={<MessagesSquare className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibecontrols.pages.ai.noActiveAgentAvailable', 'No agents available')}\n description={tr(\n 'vibecontrols.pages.ai.agentManagerRequiresAgent',\n 'The Agent Manager needs at least one vibecontrols agent. Add one or start an existing one.'\n )}\n action={\n <button\n onClick={() => handleNavigate('/agents')}\n className=\"px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm\"\n >\n {tr('vibecontrols.pages.ai.goToAgents', 'Go to Agents')}\n </button>\n }\n />\n </MotionPage>\n );\n }\n\n if (tabParam === 'config') {\n return (\n <MotionPage className=\"flex flex-col h-[calc(100vh-6.5rem)] bg-bg-surface overflow-hidden\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border-default px-4 sm:px-6 py-3\">\n <div>\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">\n {tr('vibecontrols.pages.ai.contextLabel', 'Active context')}\n </p>\n <h2 className=\"text-sm font-semibold text-text-primary mt-0.5\">\n {tr('vibecontrols.pages.ai.configHeading', 'AI configuration')}\n </h2>\n </div>\n <AgentSelector label={tr('vibecontrols.pages.ai.agentSelectorLabel', 'Agent')} compact />\n </div>\n\n <div className=\"flex-1 overflow-auto p-4 sm:p-6 space-y-6\">\n <RequireAgentReachable agentId={agentId || null}>\n <ClaudeCredentialsCard agent={agentRef} />\n <BridleConfigPanel agent={agentRef} />\n </RequireAgentReachable>\n </div>\n </MotionPage>\n );\n }\n\n return (\n <MotionPage className=\"flex flex-col h-[calc(100vh-6.5rem)] bg-bg-surface overflow-hidden\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border-default px-4 sm:px-6 py-3\">\n <div>\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">\n {tr('vibecontrols.pages.ai.contextLabel', 'Active context')}\n </p>\n <h2 className=\"text-sm font-semibold text-text-primary mt-0.5\">\n {tr('vibecontrols.pages.ai.contextHeading', 'AI workbench')}\n </h2>\n </div>\n <AgentSelector label={tr('vibecontrols.pages.ai.agentSelectorLabel', 'Agent')} compact />\n </div>\n\n <div className=\"flex-1 min-h-0 overflow-auto p-4 sm:p-6 lg:p-0\">\n <RequireAgentReachable agentId={agentId || null}>\n <PluginGate\n agentId={agentId || null}\n requirements={[\n {\n packages: [AI_CORE_PACKAGE],\n mode: 'all',\n eyebrow: tr('vibecontrols.pages.ai.pluginRequiredEyebrow', 'AI plugin required'),\n title: tr('vibecontrols.pages.ai.coreTitle', 'Install the AI orchestrator'),\n description: tr(\n 'vibecontrols.pages.ai.coreDescription',\n 'The AI page routes prompts and sessions through the AI orchestrator plugin on your agent. Install it to continue.'\n ),\n },\n {\n packages: AI_PROVIDER_PACKAGES,\n mode: 'any',\n eyebrow: tr('vibecontrols.pages.ai.providerEyebrow', 'AI provider required'),\n title: tr(\n 'vibecontrols.pages.ai.providerTitle',\n 'Install at least one AI provider'\n ),\n description: tr(\n 'vibecontrols.pages.ai.providerDescription',\n 'Pick the AI harness you want to use. You can install more providers later from the Plugins tab on your agent.'\n ),\n },\n ]}\n >\n <Suspense\n fallback={\n <div className=\"flex items-center justify-center h-full\">\n <LoadingState message=\"Loading...\" />\n </div>\n }\n >\n <AgentManagerLayout\n sidebar={\n <AgentManagerSidebar\n agent={agentRef}\n onDeleteSession={handleDeleteSession}\n onDeleteSelected={handleDeleteSelected}\n />\n }\n detailPanel={\n activeTabSessionId ? (\n <AgentManagerDetailPanel sessionId={activeTabSessionId} agent={agentRef} />\n ) : undefined\n }\n >\n <AgentManagerCenter agent={agentRef} />\n </AgentManagerLayout>\n </Suspense>\n </PluginGate>\n </RequireAgentReachable>\n </div>\n </MotionPage>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TunnelDetailsPage.js","names":[],"sources":["../../../src/pages/tunnels/TunnelDetailsPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { Tabs, type TabItem } from '@burdenoff/fe-libs/chrome';\n\nimport { PageHeader } from '@/components/shared/PageHeader';\nimport { LoadingState } from '@/components/shared/LoadingState';\nimport { ErrorState } from '@/components/shared/ErrorState';\nimport { TunnelStatusBadge } from '@/components/tunnels/TunnelStatusBadge';\nimport { ProviderBadge } from '@/components/tunnels/ProviderBadge';\nimport { useGetTunnelQuery } from '@/generated/wspace-operations';\nimport { useTr } from '../../shared/hooks/useTr';\n\nimport { TunnelOverviewTab } from './tabs/TunnelOverviewTab';\nimport { TunnelEndpointsTab } from './tabs/TunnelEndpointsTab';\nimport { TunnelSessionsTab } from './tabs/TunnelSessionsTab';\nimport { TunnelDomainsTab } from './tabs/TunnelDomainsTab';\nimport { TunnelUsageTab } from './tabs/TunnelUsageTab';\nimport { TunnelCliTab } from './tabs/TunnelCliTab';\nimport { TunnelAuditTab } from './tabs/TunnelAuditTab';\nimport { TunnelSettingsTab } from './tabs/TunnelSettingsTab';\n\nexport function TunnelDetailsPage() {\n const tr = useTr();\n const { tunnelId = '' } = useParams();\n const navigate = useNavigate();\n const [params, setParams] = useSearchParams();\n\n // 30s safety-net poll — primary signal will be a tunnel-status\n // subscription once the tunnel-svc exposes one (TODO). 5s is too\n // aggressive for a detail page; 30s + manual refresh covers rare\n // flips without burning gateway CPU. Keep cache-and-network so the\n // first paint is instant from cache.\n const { data, loading, error, refetch } = useGetTunnelQuery({\n variables: { id: tunnelId },\n pollInterval: 30_000,\n fetchPolicy: 'cache-and-network',\n skip: !tunnelId,\n });\n\n const tabs: TabItem[] = useMemo(\n () => [\n { id: 'overview', label: tr('vibecontrols.tunnels.detail.overview', 'Overview') },\n { id: 'endpoints', label: tr('vibecontrols.tunnels.detail.endpoints', 'Endpoints') },\n { id: 'sessions', label: tr('vibecontrols.tunnels.detail.sessions', 'Sessions') },\n { id: 'domains', label: tr('vibecontrols.tunnels.detail.domains', 'Domains') },\n { id: 'usage', label: tr('vibecontrols.tunnels.detail.usage', 'Usage') },\n { id: 'cli', label: tr('vibecontrols.tunnels.detail.cli', 'CLI') },\n { id: 'audit', label: tr('vibecontrols.tunnels.detail.audit', 'Audit') },\n { id: 'settings', label: tr('vibecontrols.tunnels.detail.settings', 'Settings') },\n ],\n [tr]\n );\n\n const activeId = params.get('tab') ?? tabs[0].id;\n\n const handleTabChange = (id: string) => {\n const next = new URLSearchParams(params);\n if (id === tabs[0].id) next.delete('tab');\n else next.set('tab', id);\n setParams(next, { replace: true });\n };\n\n if (loading && !data) return <LoadingState message=\"Loading tunnel\" />;\n if (error) {\n return (\n <ErrorState title=\"Failed to load tunnel\" message={error.message} onRetry={() => refetch()} />\n );\n }\n if (!data?.tunnel) {\n return (\n <ErrorState\n title=\"Tunnel not found\"\n message=\"This tunnel may have been deleted.\"\n onRetry={() => navigate('/vibecontrols/tunnels')}\n />\n );\n }\n\n const tunnel = data.tunnel;\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"px-6 pt-6 pb-2 border-b border-border-subtle\">\n <PageHeader\n breadcrumb={[{ label: 'Tunnels', path: '/vibecontrols/tunnels' }, { label: tunnel.name }]}\n title={tunnel.name}\n description={\n tunnel.description ?? `${tunnel.protocol}:${tunnel.localPort} on ${tunnel.localHost}`\n }\n actions={\n <div className=\"flex items-center gap-2\">\n <TunnelStatusBadge status={tunnel.status} />\n <ProviderBadge providerKey={tunnel.providerKey} />\n </div>\n }\n />\n <div className=\"mt-2\">\n <Tabs\n items={tabs}\n activeTabId={activeId}\n onTabChange={handleTabChange}\n variant=\"underline\"\n />\n </div>\n </div>\n <div className=\"flex-1 min-h-0 overflow-auto p-6\">\n {activeId === 'overview' && <TunnelOverviewTab tunnel={tunnel} />}\n {activeId === 'endpoints' && <TunnelEndpointsTab tunnel={tunnel} />}\n {activeId === 'sessions' && <TunnelSessionsTab tunnelId={tunnel.id} />}\n {activeId === 'domains' && <TunnelDomainsTab tunnel={tunnel} />}\n {activeId === 'usage' && <TunnelUsageTab tunnelId={tunnel.id} />}\n {activeId === 'cli' && <TunnelCliTab tunnel={tunnel} />}\n {activeId === 'audit' && <TunnelAuditTab tunnelId={tunnel.id} />}\n {activeId === 'settings' && (\n <TunnelSettingsTab tunnel={tunnel} onDeleted={() => navigate('/vibecontrols/tunnels')} />\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TunnelDetailsPage.js","names":[],"sources":["../../../src/pages/tunnels/TunnelDetailsPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { Tabs, type TabItem } from '@burdenoff/fe-libs/chrome';\n\nimport { PageHeader } from '@/components/shared/PageHeader';\nimport { LoadingState } from '@/components/shared/LoadingState';\nimport { ErrorState } from '@/components/shared/ErrorState';\nimport { TunnelStatusBadge } from '@/components/tunnels/TunnelStatusBadge';\nimport { ProviderBadge } from '@/components/tunnels/ProviderBadge';\nimport { useGetTunnelQuery } from '@/generated/wspace-operations';\nimport { useTr } from '../../shared/hooks/useTr';\n\nimport { TunnelOverviewTab } from './tabs/TunnelOverviewTab';\nimport { TunnelEndpointsTab } from './tabs/TunnelEndpointsTab';\nimport { TunnelSessionsTab } from './tabs/TunnelSessionsTab';\nimport { TunnelDomainsTab } from './tabs/TunnelDomainsTab';\nimport { TunnelUsageTab } from './tabs/TunnelUsageTab';\nimport { TunnelCliTab } from './tabs/TunnelCliTab';\nimport { TunnelAuditTab } from './tabs/TunnelAuditTab';\nimport { TunnelSettingsTab } from './tabs/TunnelSettingsTab';\n\nexport function TunnelDetailsPage() {\n const tr = useTr();\n const { tunnelId = '' } = useParams();\n const navigate = useNavigate();\n const [params, setParams] = useSearchParams();\n\n // 30s safety-net poll — primary signal will be a tunnel-status\n // subscription once tunnel-svc exposes one (tracked in tunnel-svc\n // backlog). 5s is too aggressive for a detail page; 30s + manual\n // refresh covers rare flips without burning gateway CPU. Keep\n // cache-and-network so the first paint is instant from cache.\n const { data, loading, error, refetch } = useGetTunnelQuery({\n variables: { id: tunnelId },\n pollInterval: 30_000,\n fetchPolicy: 'cache-and-network',\n skip: !tunnelId,\n });\n\n const tabs: TabItem[] = useMemo(\n () => [\n { id: 'overview', label: tr('vibecontrols.tunnels.detail.overview', 'Overview') },\n { id: 'endpoints', label: tr('vibecontrols.tunnels.detail.endpoints', 'Endpoints') },\n { id: 'sessions', label: tr('vibecontrols.tunnels.detail.sessions', 'Sessions') },\n { id: 'domains', label: tr('vibecontrols.tunnels.detail.domains', 'Domains') },\n { id: 'usage', label: tr('vibecontrols.tunnels.detail.usage', 'Usage') },\n { id: 'cli', label: tr('vibecontrols.tunnels.detail.cli', 'CLI') },\n { id: 'audit', label: tr('vibecontrols.tunnels.detail.audit', 'Audit') },\n { id: 'settings', label: tr('vibecontrols.tunnels.detail.settings', 'Settings') },\n ],\n [tr]\n );\n\n const activeId = params.get('tab') ?? tabs[0].id;\n\n const handleTabChange = (id: string) => {\n const next = new URLSearchParams(params);\n if (id === tabs[0].id) next.delete('tab');\n else next.set('tab', id);\n setParams(next, { replace: true });\n };\n\n if (loading && !data) return <LoadingState message=\"Loading tunnel\" />;\n if (error) {\n return (\n <ErrorState title=\"Failed to load tunnel\" message={error.message} onRetry={() => refetch()} />\n );\n }\n if (!data?.tunnel) {\n return (\n <ErrorState\n title=\"Tunnel not found\"\n message=\"This tunnel may have been deleted.\"\n onRetry={() => navigate('/vibecontrols/tunnels')}\n />\n );\n }\n\n const tunnel = data.tunnel;\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"px-6 pt-6 pb-2 border-b border-border-subtle\">\n <PageHeader\n breadcrumb={[{ label: 'Tunnels', path: '/vibecontrols/tunnels' }, { label: tunnel.name }]}\n title={tunnel.name}\n description={\n tunnel.description ?? `${tunnel.protocol}:${tunnel.localPort} on ${tunnel.localHost}`\n }\n actions={\n <div className=\"flex items-center gap-2\">\n <TunnelStatusBadge status={tunnel.status} />\n <ProviderBadge providerKey={tunnel.providerKey} />\n </div>\n }\n />\n <div className=\"mt-2\">\n <Tabs\n items={tabs}\n activeTabId={activeId}\n onTabChange={handleTabChange}\n variant=\"underline\"\n />\n </div>\n </div>\n <div className=\"flex-1 min-h-0 overflow-auto p-6\">\n {activeId === 'overview' && <TunnelOverviewTab tunnel={tunnel} />}\n {activeId === 'endpoints' && <TunnelEndpointsTab tunnel={tunnel} />}\n {activeId === 'sessions' && <TunnelSessionsTab tunnelId={tunnel.id} />}\n {activeId === 'domains' && <TunnelDomainsTab tunnel={tunnel} />}\n {activeId === 'usage' && <TunnelUsageTab tunnelId={tunnel.id} />}\n {activeId === 'cli' && <TunnelCliTab tunnel={tunnel} />}\n {activeId === 'audit' && <TunnelAuditTab tunnelId={tunnel.id} />}\n {activeId === 'settings' && (\n <TunnelSettingsTab tunnel={tunnel} onDeleted={() => navigate('/vibecontrols/tunnels')} />\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}