@burdenoff/microfe-vibecontrols 2026.511.1 → 2026.512.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 +4 -4
  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":"VibeDetailsPage.js","names":[],"sources":["../../src/pages/VibeDetailsPage.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { EntityTagPicker } from '@/components/shared/EntityTagPicker';\nimport { useParams } from 'react-router-dom';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\nimport {\n ArrowLeft,\n Zap,\n Play,\n Pause,\n Archive,\n ExternalLink,\n Server,\n Terminal,\n GitBranch,\n Folder,\n Variable,\n Tag,\n Clock,\n Plus,\n RefreshCw,\n Info,\n Settings,\n Link2,\n FileText,\n BookOpen,\n BarChart3,\n Globe,\n Network,\n GitMerge,\n Library,\n X,\n Check,\n ExternalLink as ExternalLinkIcon,\n Loader2,\n} from 'lucide-react';\nimport {\n PageHeader,\n Card,\n StatusBadge,\n EmptyState,\n LoadingState,\n ErrorState,\n PluginGate,\n} from '@/components/shared';\nimport {\n GIT_PACKAGE,\n GRAPHQL_PLAYGROUND_PACKAGE,\n SESSION_MANAGER_PACKAGE,\n SESSION_PROVIDER_PACKAGES,\n} from '@/constants/pluginCatalog';\nimport { MotionPage, MotionList, MotionItem } from '@burdenoff/fe-libs/shared/motion';\nimport { OpenInBrowserEditorButton } from '@/components/agents';\nimport { NotesTabPanel } from '@/components/notes';\nimport { DocsTabPanel } from '@/components/docs';\nimport { ScorecardPanel } from '@/components/scorecard';\nimport { PermissionButton } from '@burdenoff/fe-libs/shared/components';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { VIBE_PERMISSIONS } from '@/constants/permissions';\nimport { useVibeControls, useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport { useQueryBackedTab } from '@/hooks/useQueryBackedTab';\nimport {\n useGetVibeQuery,\n useUpdateVibeStatusMutation,\n useArchiveVibeMutation,\n useCreateSessionMutation,\n useGetVibeCatalogsQuery,\n useAddVibeToCatalogMutation,\n useRemoveVibeFromCatalogMutation,\n useGetVibeFeatureCatalogQuery,\n useGetVibeFeatureFlagsQuery,\n useSetVibeFeatureFlagMutation,\n} from '@/generated/wspace-operations';\nimport { VibeGitOpsTab } from '@/components/gitops/VibeGitOpsTab';\nimport { VibeAgentEmptyState } from '@/components/vibe/VibeAgentEmptyState';\nimport {\n DEFAULT_VIBE_FEATURE_CATALOG,\n isVibeFeatureEnabled,\n type VibeFeatureDefinition,\n} from '@/lib/vibeFeatures';\nimport { useFeatureFlagDetails } from '@burdenoff/fe-libs/shared/feature-flags';\n\ntype VibeTab =\n | 'overview'\n | 'config'\n | 'git'\n | 'sessions'\n | 'notes'\n | 'docs'\n | 'scorecard'\n | 'catalogs'\n | 'graphqlPlayground'\n | 'gitops'\n | 'related';\n\nconst VIBE_TABS: readonly VibeTab[] = [\n 'overview',\n 'config',\n 'git',\n 'sessions',\n 'notes',\n 'docs',\n 'scorecard',\n 'catalogs',\n 'graphqlPlayground',\n 'gitops',\n 'related',\n];\n\n// Tabs that are always visible regardless of per-vibe feature flags.\nconst ALWAYS_VISIBLE_TABS: ReadonlySet<VibeTab> = new Set<VibeTab>(['overview', 'config']);\nconst HIDDEN_VIBE_FEATURE_IDS = new Set<string>(['apiPlayground']);\n// Tabs whose content can only be rendered against an attached agent. They are\n// hidden when `vibe.agentId` is null so the user is not stranded on a panel\n// that silently borrowed someone else's agent.\nconst AGENT_REQUIRED_TABS: ReadonlySet<VibeTab> = new Set<VibeTab>([\n 'sessions',\n 'gitops',\n 'graphqlPlayground',\n 'git',\n]);\n\n/**\n * Vibe details page - shows comprehensive information about a single vibe\n */\nexport function VibeDetailsPage() {\n const { t } = useI18n();\n const { id } = useParams<{ id: string }>();\n const { basePath: basePathProp } = useVibeControls();\n const basePath = basePathProp || '';\n const navigate = useVibeNavigate();\n\n const tr = useCallback(\n (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n },\n [t]\n );\n\n const [activeTab, setActiveTab] = useQueryBackedTab<VibeTab>(VIBE_TABS, 'overview');\n\n const [updateVibeStatus] = useUpdateVibeStatusMutation({ refetchQueries: ['GetVibe'] });\n const [archiveVibe] = useArchiveVibeMutation({ refetchQueries: ['GetVibe'] });\n const [createSession] = useCreateSessionMutation({ refetchQueries: ['GetVibe', 'ListSessions'] });\n\n // Per-vibe feature catalog (drives the toggles in the Config tab and the\n // tab visibility filter below). Falls back to the static catalog if the\n // query is still loading or the backend hasn't shipped this field yet.\n const { data: featureCatalogData } = useGetVibeFeatureCatalogQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'ignore',\n });\n const rawFeatureCatalog: readonly VibeFeatureDefinition[] = useMemo(() => {\n const merged = new Map<string, VibeFeatureDefinition>(\n DEFAULT_VIBE_FEATURE_CATALOG.map((feature) => [feature.id, feature])\n );\n\n for (const feature of featureCatalogData?.vibeFeatureCatalog ?? []) {\n merged.set(feature.id, feature);\n }\n\n return Array.from(merged.values());\n }, [featureCatalogData?.vibeFeatureCatalog]);\n const featureCatalog: readonly VibeFeatureDefinition[] = useMemo(\n () => rawFeatureCatalog.filter((feature) => !HIDDEN_VIBE_FEATURE_IDS.has(feature.id)),\n [rawFeatureCatalog]\n );\n\n const [setVibeFeatureFlagMutation, { loading: setFeatureFlagLoading }] =\n useSetVibeFeatureFlagMutation({ refetchQueries: ['GetVibe'] });\n\n // Session creation modal state\n const [showSessionModal, setShowSessionModal] = useState(false);\n const [sessionCreateError, setSessionCreateError] = useState<string | null>(null);\n const [sessionCreateLoading, setSessionCreateLoading] = useState(false);\n const [successMessage, setSuccessMessage] = useState<string | null>(null);\n\n // Session form refs\n const sessionNameRef = useRef<HTMLInputElement>(null);\n const sessionTypeRef = useRef<HTMLSelectElement>(null);\n const sessionCommandRef = useRef<HTMLInputElement>(null);\n const sessionWorkDirRef = useRef<HTMLInputElement>(null);\n\n // Fetch vibe by ID from GraphQL API\n const { data, loading, error, refetch } = useGetVibeQuery({\n variables: { id: id || '' },\n skip: !id,\n fetchPolicy: 'cache-and-network',\n });\n\n // Get vibe from response\n const vibe = data?.vibe;\n const { data: featureFlagsData } = useGetVibeFeatureFlagsQuery({\n variables: { id: id || '' },\n skip: !id,\n fetchPolicy: 'cache-first',\n errorPolicy: 'ignore',\n });\n // Feature flags live on the Vibe but may not be reflected in the generated\n // types until `bun run codegen` is re-run after the schema update — read\n // them through an untyped view so this file stays compilable in either state.\n const vibeFlagsView = vibe as\n | (typeof vibe & {\n featureFlags?: Record<string, boolean> | null;\n effectiveFeatureFlags?: Record<string, boolean> | null;\n })\n | undefined;\n const effectiveVibeFlags = featureFlagsData?.vibe ?? vibeFlagsView;\n\n // Per-vibe feature enablement check. Hoisted to the top of the component\n // (before any early-return guards) to keep React hook ordering stable.\n const isFeatureEnabled = useCallback(\n (featureId: string) =>\n isVibeFeatureEnabled(effectiveVibeFlags ?? null, featureId, featureCatalog),\n [effectiveVibeFlags, featureCatalog]\n );\n\n // Platform-level tab gates (component-level feature flags). Missing flag details\n // fail open so platform flag fetch gaps do not hide per-vibe enabled tabs.\n const gitTabDetails = useFeatureFlagDetails('vibes.tabs.git');\n const scorecardTabDetails = useFeatureFlagDetails('vibes.tabs.scorecard');\n const graphqlPlaygroundTabDetails = useFeatureFlagDetails('vibes.tabs.graphql-playground');\n\n // Returns false for platform-gated tabs when the flag is off; true for all other tabs.\n const isPlatformTabEnabled = useCallback(\n (tabId: string): boolean => {\n switch (tabId) {\n case 'git':\n return gitTabDetails ? Boolean(gitTabDetails.value) : true;\n case 'scorecard':\n return scorecardTabDetails ? Boolean(scorecardTabDetails.value) : true;\n case 'graphqlPlayground':\n return graphqlPlaygroundTabDetails ? Boolean(graphqlPlaygroundTabDetails.value) : true;\n default:\n return true; // No platform gate for other tabs\n }\n },\n [gitTabDetails, scorecardTabDetails, graphqlPlaygroundTabDetails]\n );\n\n // Get related data from the vibe response (already included in the query)\n const agent = vibe?.agent || null;\n const vibeSessions = vibe?.sessions || [];\n const childVibes = vibe?.children || [];\n const parentVibe = vibe?.parent || null;\n\n // Resolve tunnel URL and API key from the vibe's own agent. We deliberately\n // do NOT fall back to some other active agent — a vibe without an attached\n // agent should surface the empty-state CTA instead of silently borrowing\n // someone else's agent. Agent-dependent tabs are hidden via the tab filter\n // when `vibe.agentId` is null.\n type AgentLike = { tunnelUrl?: string | null; agentApiKey?: string | null; id: string } | null;\n const effectiveAgent: AgentLike = agent ?? null;\n const effectiveTunnelUrl: string | null = effectiveAgent?.tunnelUrl ?? null;\n const effectiveApiKey: string | null = effectiveAgent?.agentApiKey ?? null;\n\n // ── Sync active context ────────────────────────────────────────────────\n useEffect(() => {\n if (vibe) {\n useVibeControlsStore.setState({\n activeAgentId: agent?.id ?? null,\n selectedAgentId: agent?.id ?? null,\n activeVibeId: vibe.id,\n selectedVibeId: vibe.id,\n activeSessionId: null,\n selectedSessionId: null,\n });\n }\n // Only sync when vibe or agent identity changes, not on every field update.\n // useVibeControlsStore.setState is a stable Zustand reference.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [vibe?.id, agent?.id]);\n\n // If the currently selected tab is for a feature that just got disabled\n // (either per-vibe, platform-level, or because the vibe has no attached\n // agent), bounce back to overview so the user is not stranded on an empty\n // panel.\n const hasAttachedAgent = Boolean(vibe?.agentId);\n useEffect(() => {\n if (ALWAYS_VISIBLE_TABS.has(activeTab)) return;\n if (!isFeatureEnabled(activeTab) || !isPlatformTabEnabled(activeTab)) {\n setActiveTab('overview');\n return;\n }\n if (!hasAttachedAgent && AGENT_REQUIRED_TABS.has(activeTab)) {\n setActiveTab('overview');\n }\n }, [activeTab, isFeatureEnabled, isPlatformTabEnabled, hasAttachedAgent, setActiveTab]);\n\n const handleBack = () => {\n navigate('/vibes');\n };\n\n const handleActivateVibe = async () => {\n if (!vibe?.id) return;\n try {\n await updateVibeStatus({ variables: { id: vibe.id, status: 'ACTIVE' as const } });\n } catch (err) {\n console.error('Failed to activate vibe:', err);\n }\n };\n\n const handleDeactivateVibe = async () => {\n if (!vibe?.id) return;\n try {\n await updateVibeStatus({ variables: { id: vibe.id, status: 'INACTIVE' as const } });\n } catch (err) {\n console.error('Failed to deactivate vibe:', err);\n }\n };\n\n const handleArchiveVibe = async () => {\n if (!vibe?.id) return;\n try {\n await archiveVibe({ variables: { id: vibe.id } });\n } catch (err) {\n console.error('Failed to archive vibe:', err);\n }\n };\n\n const handleOpenInEditor = () => {\n if (vibe?.path) {\n // Use location.href instead of window.open to avoid popup blockers\n window.location.href = `vscode://file/${vibe.path}`;\n } else {\n setSuccessMessage(\n tr('vibesPage.openEditorPathMissing', 'No path available to open in editor')\n );\n setTimeout(() => setSuccessMessage(null), 3000);\n }\n };\n\n const handleStartSession = () => {\n setSessionCreateError(null);\n setShowSessionModal(true);\n };\n\n const handleSubmitCreateSession = async () => {\n const name = sessionNameRef.current?.value?.trim();\n const type = sessionTypeRef.current?.value as 'TERMINAL' | 'TMUX' | 'SSH' | 'SCRIPT' | 'CUSTOM';\n const command = sessionCommandRef.current?.value?.trim() || undefined;\n const workingDirectory = sessionWorkDirRef.current?.value?.trim() || undefined;\n\n if (!name) {\n setSessionCreateError(tr('vibeDetails.sessionNameRequired', 'Session name is required'));\n return;\n }\n\n // Refuse to silently fall back to some other agent — sessions belong to\n // the vibe's own agent. The Connect-an-Agent empty state handles UX for\n // the no-agent case.\n const agentId = vibe?.agentId;\n if (!agentId) {\n setSessionCreateError(\n tr(\n 'vibeDetails.noAgentAttached',\n 'This vibe has no agent attached. Connect an agent to this vibe before creating a session.'\n )\n );\n return;\n }\n\n setSessionCreateLoading(true);\n setSessionCreateError(null);\n try {\n await createSession({\n variables: {\n input: {\n name,\n type: type || 'TERMINAL',\n agentId,\n vibeId: vibe?.id,\n command,\n workingDirectory: workingDirectory || vibe?.path || undefined,\n },\n },\n });\n setShowSessionModal(false);\n // Clear form refs to prevent stale values on next open\n if (sessionNameRef.current) sessionNameRef.current.value = '';\n if (sessionTypeRef.current) sessionTypeRef.current.selectedIndex = 0;\n if (sessionCommandRef.current) sessionCommandRef.current.value = '';\n if (sessionWorkDirRef.current) sessionWorkDirRef.current.value = '';\n setSuccessMessage(tr('sessions.createdSuccess', 'Session created successfully'));\n setTimeout(() => setSuccessMessage(null), 3000);\n } catch (err) {\n setSessionCreateError(\n err instanceof Error ? err.message : tr('sessions.failedCreate', 'Failed to create session')\n );\n } finally {\n setSessionCreateLoading(false);\n }\n };\n\n const handleAgentClick = () => {\n if (!agent) return;\n navigate(`/agents/${agent.id}`);\n };\n\n const handleSessionClick = (sessionId: string) => {\n navigate(`/sessions/${sessionId}`);\n };\n\n const handleVibeClick = (vibeId: string) => {\n navigate(`/vibes/${vibeId}`);\n };\n\n const formatTimestamp = (timestamp: string | null | undefined) => {\n if (!timestamp) return tr('health.never', 'Never');\n const diff = Date.now() - new Date(timestamp).getTime();\n if (diff < 60000) return tr('health.justNow', 'Just now');\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n return new Date(timestamp).toLocaleDateString();\n };\n\n const getGitStatusColor = (status: string | null | undefined) => {\n switch (status) {\n case 'clean':\n return 'text-status-success-text';\n case 'modified':\n return 'text-status-warning-text';\n case 'ahead':\n return 'text-status-info-text';\n default:\n return 'text-text-secondary';\n }\n };\n\n // Guard states wrapped in MotionPage to prevent unmount/remount animation replay\n if (loading && !vibe) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n <LoadingState message={tr('vibeDetails.loadingDetails', 'Loading vibe details...')} />\n </MotionPage>\n );\n }\n\n if (error && !vibe) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n <ErrorState\n title={tr('vibeDetails.failedLoad', 'Failed to load vibe')}\n message={error.message}\n onRetry={() => refetch()}\n />\n </MotionPage>\n );\n }\n\n if (!vibe) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n <EmptyState\n icon={<Zap className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.notFound', 'Vibe not found')}\n description={`${tr('vibeDetails.notFoundDescriptionPrefix', 'No vibe with ID')} \"${id}\" ${tr('vibeDetails.notFoundDescriptionSuffix', 'exists')}`}\n action={\n <button\n onClick={handleBack}\n className=\"px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n }\n />\n </MotionPage>\n );\n }\n\n // Types for sessions and child vibes from the query\n type SessionItem = NonNullable<typeof vibeSessions>[number];\n type ChildVibeItem = NonNullable<typeof childVibes>[number];\n\n const isActive = vibe.status === 'ACTIVE' || vibe.status === 'RUNNING';\n const runningSessions = vibeSessions.filter((s: SessionItem) => s.status === 'RUNNING').length;\n\n // Tab definitions\n const relatedCount = childVibes.length + (parentVibe ? 1 : 0) + (agent ? 1 : 0);\n const hasGitInfo = Boolean(vibe.gitBranch || vibe.gitRemote);\n\n const allVibeTabs: { id: VibeTab; label: string; icon: typeof Zap; badge?: string }[] = [\n { id: 'overview', label: tr('nav.overview', 'Overview'), icon: Info },\n { id: 'config', label: tr('vibeDetails.config', 'Config'), icon: Settings },\n {\n id: 'git',\n label: tr('vibeDetails.git', 'Git'),\n icon: GitBranch,\n badge: hasGitInfo ? vibe.gitBranch || undefined : undefined,\n },\n {\n id: 'sessions',\n label: tr('nav.sessions', 'Sessions'),\n icon: Terminal,\n badge: `${vibeSessions.length}`,\n },\n { id: 'notes', label: tr('vibeDetails.notes', 'Notes'), icon: FileText },\n { id: 'docs', label: tr('vibeDetails.docs', 'Docs'), icon: BookOpen },\n { id: 'scorecard', label: tr('vibeDetails.scorecard', 'Scorecard'), icon: BarChart3 },\n { id: 'catalogs', label: tr('vibeDetails.catalogs', 'Catalogs'), icon: Library },\n {\n id: 'graphqlPlayground',\n label: tr('vibeDetails.graphqlPlayground', 'GraphQL'),\n icon: Network,\n },\n { id: 'gitops', label: tr('vibeDetails.gitops', 'GitOps'), icon: GitMerge },\n {\n id: 'related',\n label: tr('vibeDetails.related', 'Related'),\n icon: Link2,\n badge: relatedCount > 0 ? `${relatedCount}` : undefined,\n },\n ];\n\n // Hide any non-core tab whose feature is disabled — either per-vibe,\n // platform-level, or because the vibe has no attached agent (sessions,\n // gitops, GraphQL playground, git all need an agent).\n const vibeTabs = allVibeTabs.filter((tab) => {\n if (ALWAYS_VISIBLE_TABS.has(tab.id)) return true;\n if (!isFeatureEnabled(tab.id) || !isPlatformTabEnabled(tab.id)) return false;\n if (!hasAttachedAgent && AGENT_REQUIRED_TABS.has(tab.id)) return false;\n return true;\n });\n\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n {/* Success Toast */}\n {successMessage && (\n <div className=\"fixed top-4 left-4 right-4 sm:left-auto z-50 bg-status-success-bg text-status-success-text px-4 py-3 rounded-md shadow-lg\">\n {successMessage}\n </div>\n )}\n\n {/* Back Button */}\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n\n {/* Header */}\n <PageHeader\n title={vibe.name}\n description={vibe.description || tr('vibeDetails.noDescription', 'No description')}\n breadcrumb={[\n { label: tr('nav.vibes', 'Vibes'), path: basePath ? `${basePath}/vibes` : '/vibes' },\n { label: vibe.name },\n ]}\n actions={\n <div className=\"flex items-center gap-2 flex-wrap\">\n <button\n onClick={() => refetch()}\n disabled={loading}\n className=\"flex items-center justify-center p-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50\"\n title={tr('common.refresh', 'Refresh')}\n >\n <RefreshCw className={`w-4 h-4 ${loading ? 'animate-spin' : ''}`} />\n </button>\n <PermissionButton\n permission={VIBE_PERMISSIONS.VIBE_UPDATE}\n deniedBehavior=\"disable\"\n deniedTooltip=\"You don't have permission to update vibes\"\n >\n {isActive ? (\n <button\n onClick={handleDeactivateVibe}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Pause className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">\n {tr('vibeDetails.deactivate', 'Deactivate')}\n </span>\n </button>\n ) : (\n <button\n onClick={handleActivateVibe}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-status-success-bg text-status-success-text rounded-md hover:opacity-80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Play className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">{tr('vibeDetails.activate', 'Activate')}</span>\n </button>\n )}\n </PermissionButton>\n <button\n onClick={handleOpenInEditor}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors\"\n title={tr('vibeDetails.openInLocalVscode', 'Open in local VS Code')}\n >\n <ExternalLink className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">\n {tr('vibeDetails.openInLocalVscode', 'Open in VS Code')}\n </span>\n </button>\n {isFeatureEnabled('browserEditor') && (\n <OpenInBrowserEditorButton\n tunnelUrl={effectiveTunnelUrl}\n agentApiKey={effectiveApiKey}\n workspacePath={vibe.path || undefined}\n />\n )}\n <PermissionButton\n permission={VIBE_PERMISSIONS.SESSION_CREATE}\n deniedBehavior=\"disable\"\n deniedTooltip=\"You don't have permission to create sessions\"\n >\n <button\n onClick={handleStartSession}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Plus className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">{tr('vibeDetails.new', 'New')}</span>\n <span className=\"hidden sm:inline\">{tr('nav.sessions', 'Session')}</span>\n </button>\n </PermissionButton>\n <PermissionButton\n permission={VIBE_PERMISSIONS.VIBE_UPDATE}\n deniedBehavior=\"disable\"\n deniedTooltip=\"You don't have permission to archive vibes\"\n >\n <button\n onClick={handleArchiveVibe}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-status-warning-bg text-status-warning-text rounded-md hover:opacity-80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title={tr('vibeDetails.archive', 'Archive')}\n >\n <Archive className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">{tr('vibeDetails.archive', 'Archive')}</span>\n </button>\n </PermissionButton>\n </div>\n }\n />\n\n {/* Status Cards */}\n <MotionList stagger={0.04} className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 sm:gap-4\">\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Zap className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('sessions.filterStatus', 'Status')}\n </p>\n <StatusBadge status={vibe.status} size=\"md\" />\n </div>\n </div>\n </Card>\n </MotionItem>\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Folder className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('sessions.filterType', 'Type')}\n </p>\n <p className=\"font-semibold text-text-primary text-sm sm:text-base truncate\">\n {vibe.type}\n </p>\n </div>\n </div>\n </Card>\n </MotionItem>\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Server className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('sessions.filterAgent', 'Agent')}\n </p>\n <p className=\"font-semibold text-text-primary text-sm sm:text-base truncate\">\n {agent?.name || tr('targets.unknown', 'Unknown')}\n </p>\n </div>\n </div>\n </Card>\n </MotionItem>\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Terminal className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('nav.sessions', 'Sessions')}\n </p>\n <p className=\"font-semibold text-text-primary text-sm sm:text-base\">\n {runningSessions} {tr('health.active', 'active')}\n </p>\n </div>\n </div>\n </Card>\n </MotionItem>\n </MotionList>\n\n {/* ── Tab Navigation Bar ─────────────────────────────────────────── */}\n <div className=\"border-b border-border-default\">\n <nav\n className=\"flex gap-1 -mb-px overflow-x-auto pb-1\"\n aria-label={tr('vibeDetails.tabsAriaLabel', 'Vibe tabs')}\n >\n {vibeTabs.map((tab) => {\n const Icon = tab.icon;\n const isActiveTab = activeTab === tab.id;\n return (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${\n isActiveTab\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 aria-selected={isActiveTab}\n role=\"tab\"\n >\n <Icon className=\"w-4 h-4\" />\n {tab.label}\n {tab.badge && (\n <span\n className={`hidden rounded-full px-1.5 py-0.5 text-[10px] sm:inline-flex sm:text-xs ${\n isActiveTab\n ? 'bg-action-primary-bg/10 text-action-primary-bg'\n : 'bg-bg-sunken text-text-muted'\n }`}\n >\n {tab.badge}\n </span>\n )}\n </button>\n );\n })}\n </nav>\n </div>\n\n {/* ── Tab Panels ─────────────────────────────────────────────────── */}\n <AnimatePresence mode=\"wait\">\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <motion.div\n key=\"overview\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n {/* Description */}\n {vibe.description && (\n <Card>\n <div className=\"p-4\">\n <p className=\"text-text-primary\">{vibe.description}</p>\n </div>\n </Card>\n )}\n\n {/* No-agent empty state — shown only on the overview tab so it does\n not push tab content out of frame. Agent-dependent tabs are\n already hidden when this is rendered. */}\n {!hasAttachedAgent && <VibeAgentEmptyState vibeId={vibe.id} tr={tr} />}\n\n {/* Path */}\n <Card>\n <div className=\"p-3 sm:p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2 text-sm sm:text-base\">\n <Folder className=\"w-4 h-4 sm:w-5 sm:h-5\" />\n {tr('vibeDetails.path', 'Path')}\n </h3>\n </div>\n <div className=\"p-3 sm:p-4\">\n <div className=\"bg-bg-sunken rounded-md p-2 sm:p-3 font-mono text-xs sm:text-sm text-text-primary overflow-x-auto break-all\">\n {vibe.path}\n </div>\n </div>\n </Card>\n\n {/* Timeline */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Clock className=\"w-5 h-5\" />\n {tr('vibeDetails.timeline', 'Timeline')}\n </h3>\n </div>\n <div className=\"p-4\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">{tr('vibeDetails.created', 'Created')}</p>\n <p className=\"font-medium text-text-primary\">\n {formatTimestamp(vibe.createdAt)}\n </p>\n </div>\n <div>\n <p className=\"text-text-secondary\">{tr('vibeDetails.updated', 'Updated')}</p>\n <p className=\"font-medium text-text-primary\">\n {formatTimestamp(vibe.updatedAt)}\n </p>\n </div>\n </div>\n </div>\n </Card>\n </motion.div>\n )}\n\n {/* Config Tab */}\n {activeTab === 'config' && (\n <motion.div\n key=\"config\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n {/* Environment Variables */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Variable className=\"w-5 h-5\" />\n {tr('vibeDetails.environmentVariables', 'Environment Variables')}\n </h3>\n </div>\n <div className=\"p-4\">\n {vibe.environmentVariables && Object.keys(vibe.environmentVariables).length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {Object.entries(vibe.environmentVariables).map(([key, value]) => (\n <span\n key={key}\n className=\"px-3 py-1 bg-bg-sunken text-text-primary text-sm rounded-full font-mono\"\n >\n {key}={String(value)}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">\n {tr(\n 'vibeDetails.noEnvironmentVariables',\n 'No environment variables configured'\n )}\n </p>\n )}\n </div>\n </Card>\n\n {/* Tags */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Tag className=\"w-5 h-5\" />\n {tr('vibeDetails.tags', 'Tags')}\n </h3>\n </div>\n <div className=\"p-4\">\n <EntityTagPicker entityType=\"VIBECONTROLS_VIBE\" entityId={vibe.id} />\n </div>\n </Card>\n\n {/* Features — per-vibe feature toggles */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Settings className=\"w-5 h-5\" />\n {tr('vibeDetails.features', 'Features')}\n </h3>\n <p className=\"text-sm text-text-secondary mt-1\">\n {tr(\n 'vibeDetails.featuresDescription',\n 'Toggle which sections show up on this vibe. Changes apply to everyone viewing the vibe.'\n )}\n </p>\n </div>\n <div className=\"p-4 space-y-2\">\n {featureCatalog.map((feature) => {\n const enabled = isFeatureEnabled(feature.id);\n return (\n <label\n key={feature.id}\n className=\"flex items-center justify-between gap-4 py-2 cursor-pointer\"\n >\n <span className=\"text-sm font-medium text-text-primary\">{feature.label}</span>\n <input\n type=\"checkbox\"\n role=\"switch\"\n aria-label={feature.label}\n checked={enabled}\n disabled={setFeatureFlagLoading || !vibe.id}\n onChange={async (e) => {\n const next = e.target.checked;\n try {\n await setVibeFeatureFlagMutation({\n variables: {\n id: vibe.id,\n featureId: feature.id,\n enabled: next,\n },\n optimisticResponse: {\n setVibeFeatureFlag: {\n __typename: 'Vibe',\n id: vibe.id,\n featureFlags: {\n ...(effectiveVibeFlags?.featureFlags ?? {}),\n [feature.id]: next,\n },\n effectiveFeatureFlags: {\n ...(effectiveVibeFlags?.effectiveFeatureFlags ?? {}),\n [feature.id]: next,\n },\n } as never,\n },\n });\n } catch (err) {\n console.error('Failed to toggle vibe feature:', err);\n }\n }}\n className=\"h-5 w-5 accent-action-primary-bg\"\n />\n </label>\n );\n })}\n </div>\n </Card>\n </motion.div>\n )}\n\n {/* Git Tab */}\n {activeTab === 'git' && isFeatureEnabled('git') && (\n <motion.div\n key=\"git\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <PluginGate\n agentId={effectiveAgent?.id ?? null}\n required={[GIT_PACKAGE]}\n mode=\"all\"\n eyebrow={tr('vibeDetails.gitPluginEyebrow', 'Git plugin required')}\n title={tr('vibeDetails.gitPluginTitle', 'Install the git plugin')}\n description={tr(\n 'vibeDetails.gitPluginDescription',\n 'Live git branch, status, and remote data for this vibe are served by the vibe-plugin-tool-git agent plugin.'\n )}\n >\n {hasGitInfo ? (\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <GitBranch className=\"w-5 h-5\" />\n {tr('vibeDetails.gitInformation', 'Git Information')}\n </h3>\n </div>\n <div className=\"p-4 space-y-3\">\n <div className=\"flex items-center gap-4 flex-wrap\">\n {vibe.gitBranch && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.branch', 'Branch')}:\n </span>\n <span className=\"px-2 py-1 bg-bg-sunken text-text-primary text-sm rounded font-mono\">\n {vibe.gitBranch}\n </span>\n </div>\n )}\n {vibe.gitStatus && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-text-secondary\">\n {tr('sessions.filterStatus', 'Status')}:\n </span>\n <span className={`font-medium ${getGitStatusColor(vibe.gitStatus)}`}>\n {vibe.gitStatus}\n </span>\n </div>\n )}\n </div>\n {vibe.gitRemote && (\n <div>\n <span className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.remote', 'Remote')}:\n </span>\n <p className=\"font-mono text-sm text-text-primary mt-1 break-all\">\n {vibe.gitRemote}\n </p>\n </div>\n )}\n </div>\n </Card>\n ) : (\n <EmptyState\n icon={<GitBranch className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noGitInformation', 'No git information')}\n description={tr(\n 'vibeDetails.noGitInformationDescription',\n 'This vibe does not have any git repository linked'\n )}\n />\n )}\n </PluginGate>\n </motion.div>\n )}\n\n {/* Sessions Tab */}\n {activeTab === 'sessions' && isFeatureEnabled('sessions') && (\n <motion.div\n key=\"sessions\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n >\n <PluginGate\n agentId={effectiveAgent?.id ?? null}\n requirements={[\n {\n packages: [SESSION_MANAGER_PACKAGE],\n mode: 'all',\n eyebrow: tr('vibeDetails.sessionsManagerEyebrow', 'Session manager required'),\n title: tr('vibeDetails.sessionsManagerTitle', 'Install the session manager'),\n description: tr(\n 'vibeDetails.sessionsManagerDescription',\n 'Sessions are orchestrated by the unified session manager plugin. Install it to continue.'\n ),\n },\n {\n packages: SESSION_PROVIDER_PACKAGES,\n mode: 'any',\n eyebrow: tr('vibeDetails.sessionProviderEyebrow', 'Session provider required'),\n title: tr('vibeDetails.sessionProviderTitle', 'Pick a session provider'),\n description: tr(\n 'vibeDetails.sessionProviderDescription',\n 'Choose the terminal multiplexer your sessions should run on. You can install more providers later.'\n ),\n },\n ]}\n >\n <Card>\n <div className=\"p-4 border-b border-border-default flex items-center justify-between\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Terminal className=\"w-5 h-5\" />\n {tr('nav.sessions', 'Sessions')} ({vibeSessions.length})\n </h3>\n <button\n onClick={handleStartSession}\n className=\"flex items-center gap-1 px-2 py-1 text-sm bg-bg-sunken text-text-primary rounded hover:bg-bg-sunken/80 transition-colors\"\n >\n <Plus className=\"w-4 h-4\" />\n {tr('vibeDetails.new', 'New')}\n </button>\n </div>\n {vibeSessions.length > 0 ? (\n <MotionList className=\"divide-y divide-border-primary\">\n {vibeSessions.map((session: SessionItem) => (\n <MotionItem key={session.id} variant=\"fadeRight\">\n <div\n onClick={() => handleSessionClick(session.id)}\n className=\"p-4 flex items-center justify-between cursor-pointer hover:bg-bg-sunken/50 transition-colors\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <Terminal className=\"w-5 h-5 text-text-secondary flex-shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"font-medium text-text-primary truncate\">\n {session.name}\n </p>\n <p className=\"text-sm text-text-secondary truncate\">{session.type}</p>\n </div>\n </div>\n <StatusBadge status={session.status} />\n </div>\n </MotionItem>\n ))}\n </MotionList>\n ) : (\n <div className=\"p-6 text-center text-text-secondary\">\n {tr('vibeDetails.noSessionsForVibe', 'No sessions for this vibe')}\n </div>\n )}\n </Card>\n </PluginGate>\n </motion.div>\n )}\n\n {/* Notes Tab */}\n {activeTab === 'notes' && isFeatureEnabled('notes') && (\n <motion.div\n key=\"notes\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <NotesTabPanel context=\"vibe\" vibeId={vibe.id} />\n </motion.div>\n )}\n\n {/* Docs Tab */}\n {activeTab === 'docs' && isFeatureEnabled('docs') && (\n <motion.div\n key=\"docs\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <DocsTabPanel vibeId={vibe.id} />\n </motion.div>\n )}\n\n {/* Scorecard Tab */}\n {activeTab === 'scorecard' && isFeatureEnabled('scorecard') && (\n <motion.div\n key=\"scorecard\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <ScorecardPanel ownerType=\"VIBE\" ownerId={vibe.id} />\n </motion.div>\n )}\n\n {/* Catalogs Tab */}\n {activeTab === 'catalogs' && isFeatureEnabled('catalogs') && (\n <motion.div\n key=\"catalogs\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <VibeCatalogsTab vibeId={vibe.id} tr={tr} navigate={navigate} />\n </motion.div>\n )}\n\n {/* GraphQL Playground Tab */}\n {activeTab === 'graphqlPlayground' && isFeatureEnabled('graphqlPlayground') && (\n <motion.div\n key=\"graphqlPlayground\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <PluginGate\n agentId={effectiveAgent?.id ?? null}\n required={[GRAPHQL_PLAYGROUND_PACKAGE]}\n mode=\"all\"\n eyebrow={tr('vibeDetails.graphqlPluginEyebrow', 'GraphQL playground plugin required')}\n title={tr('vibeDetails.graphqlPluginTitle', 'Install the GraphQL playground')}\n description={tr(\n 'vibeDetails.graphqlPluginDescription',\n 'The GraphQL Playground is served by the graphiql agent plugin. Install it to continue.'\n )}\n >\n {effectiveTunnelUrl ? (\n <PlaygroundTab\n vibeId={vibe.id}\n tunnelUrl={effectiveTunnelUrl}\n apiKey={effectiveApiKey}\n type=\"graphql\"\n tr={tr}\n />\n ) : (\n <EmptyState\n icon={<Network className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noAgentTunnel', 'No agent tunnel available')}\n description={tr(\n 'vibeDetails.noAgentTunnelDesc2',\n 'The GraphQL playground requires an active agent with a tunnel URL.'\n )}\n />\n )}\n </PluginGate>\n </motion.div>\n )}\n\n {/* GitOps Tab */}\n {activeTab === 'gitops' && isFeatureEnabled('gitops') && (\n <VibeGitOpsTab\n vibeId={id || ''}\n agentId={effectiveAgent?.id ?? ''}\n tunnelUrl={effectiveTunnelUrl}\n apiKey={effectiveApiKey}\n tr={tr}\n />\n )}\n\n {/* Related Tab */}\n {activeTab === 'related' && isFeatureEnabled('related') && (\n <motion.div\n key=\"related\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n {relatedCount > 0 ? (\n <>\n {/* Child Vibes */}\n {childVibes.length > 0 && (\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Zap className=\"w-5 h-5\" />\n {tr('vibeDetails.childVibes', 'Child Vibes')} ({childVibes.length})\n </h3>\n </div>\n <MotionList className=\"divide-y divide-border-primary\">\n {childVibes.map((child: ChildVibeItem) => (\n <MotionItem key={child.id} variant=\"fadeRight\">\n <div\n onClick={() => handleVibeClick(child.id)}\n className=\"p-4 flex items-center justify-between cursor-pointer hover:bg-bg-sunken/50 transition-colors\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <Zap className=\"w-5 h-5 text-text-secondary flex-shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"font-medium text-text-primary truncate\">\n {child.name}\n </p>\n <p className=\"text-sm text-text-secondary truncate\">{child.type}</p>\n </div>\n </div>\n <StatusBadge status={child.status} />\n </div>\n </MotionItem>\n ))}\n </MotionList>\n </Card>\n )}\n\n {/* Parent Vibe */}\n {parentVibe && (\n <Card onClick={() => handleVibeClick(parentVibe.id)} hoverable>\n <div className=\"p-4 flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-lg bg-bg-sunken flex items-center justify-center\">\n <Zap className=\"w-5 h-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.parentVibe', 'Parent Vibe')}\n </p>\n <p className=\"font-medium text-text-primary\">{parentVibe.name}</p>\n </div>\n </div>\n </Card>\n )}\n\n {/* Related Agent */}\n {agent && (\n <Card onClick={handleAgentClick} hoverable>\n <div className=\"p-4 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-lg bg-bg-sunken flex items-center justify-center\">\n <Server className=\"w-5 h-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.runningOnAgent', 'Running on Agent')}\n </p>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-sm text-text-secondary\">{agent.hostname}</p>\n </div>\n </div>\n <StatusBadge status={agent.isActive ? 'ACTIVE' : 'OFFLINE'} />\n </div>\n </Card>\n )}\n </>\n ) : (\n <EmptyState\n icon={<Link2 className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noRelatedEntities', 'No related entities')}\n description={tr(\n 'vibeDetails.noRelatedEntitiesDescription',\n 'This vibe has no child vibes, parent vibe, or linked agent'\n )}\n />\n )}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Create Session Modal */}\n {showSessionModal && (\n <div className=\"fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4\">\n <div className=\"bg-bg-surface rounded-lg p-6 w-full max-w-lg\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {tr('vibeDetails.newSessionFor', 'New Session for')} {vibe.name}\n </h2>\n {sessionCreateError && (\n <div className=\"mb-4 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm\">\n {sessionCreateError}\n </div>\n )}\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('vibeDetails.sessionName', 'Session Name')}\n </label>\n <input\n ref={sessionNameRef}\n type=\"text\"\n placeholder={tr('vibeDetails.sessionNamePlaceholder', 'dev-terminal')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('sessions.filterType', 'Type')}\n </label>\n <select\n ref={sessionTypeRef}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary\"\n >\n <option value=\"TERMINAL\">{tr('sessions.typeTerminal', 'Terminal')}</option>\n <option value=\"TMUX\">{tr('sessions.typeTmux', 'TMUX')}</option>\n <option value=\"SSH\">{tr('sessions.typeSsh', 'SSH')}</option>\n <option value=\"SCRIPT\">{tr('sessions.typeScript', 'Script')}</option>\n <option value=\"CUSTOM\">{tr('sessions.typeCustom', 'Custom')}</option>\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('sessions.command', 'Command')}\n </label>\n <input\n ref={sessionCommandRef}\n type=\"text\"\n placeholder={tr('vibeDetails.sessionCommandPlaceholder', 'bash')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('vibeDetails.workingDirectory', 'Working Directory')}\n </label>\n <input\n ref={sessionWorkDirRef}\n type=\"text\"\n defaultValue={vibe.path || ''}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary\"\n />\n </div>\n </div>\n <div className=\"flex flex-col sm:flex-row justify-end gap-3 mt-6\">\n <button\n onClick={() => setShowSessionModal(false)}\n disabled={sessionCreateLoading}\n className=\"px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n <button\n onClick={handleSubmitCreateSession}\n disabled={sessionCreateLoading}\n className=\"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\"\n >\n {sessionCreateLoading\n ? tr('sessions.creating', 'Creating...')\n : tr('sessions.createSession', 'Create Session')}\n </button>\n </div>\n </div>\n </div>\n )}\n </MotionPage>\n );\n}\n\n/* ── Vibe Catalogs Tab ─────────────────────────────────────────────────── */\n\nfunction VibeCatalogsTab({\n vibeId,\n tr,\n navigate,\n}: {\n vibeId: string;\n tr: (key: string, fallback: string) => string;\n navigate: (path: string) => void;\n}) {\n const [showAddDialog, setShowAddDialog] = useState(false);\n\n const { data, loading, refetch } = useGetVibeCatalogsQuery({ fetchPolicy: 'cache-and-network' });\n\n const [addVibeToCatalog] = useAddVibeToCatalogMutation({\n refetchQueries: ['GetVibeCatalogs'],\n });\n const [removeVibeFromCatalog] = useRemoveVibeFromCatalogMutation({\n refetchQueries: ['GetVibeCatalogs'],\n });\n\n const allCatalogs = data?.vibecontrolsCatalogs?.items ?? [];\n\n const memberCatalogs = allCatalogs.filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (cat: any) => cat.vibes?.some((v: any) => v.vibeId === vibeId)\n );\n\n const availableCatalogs = allCatalogs.filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (cat: any) => !cat.vibes?.some((v: any) => v.vibeId === vibeId)\n );\n\n const handleAdd = async (catalogId: string) => {\n await addVibeToCatalog({ variables: { catalogId, vibeId } });\n await refetch();\n setShowAddDialog(false);\n };\n\n const handleRemove = async (catalogId: string) => {\n await removeVibeFromCatalog({ variables: { catalogId, vibeId } });\n await refetch();\n };\n\n if (loading && allCatalogs.length === 0) {\n return <LoadingState message={tr('vibeDetails.loadingCatalogs', 'Loading catalogs...')} />;\n }\n\n return (\n <>\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Library className=\"w-5 h-5\" />\n {tr('vibeDetails.catalogsTitle', 'Catalogs')}\n <span className=\"text-sm font-normal text-text-secondary\">({memberCatalogs.length})</span>\n </h3>\n <button\n onClick={() => setShowAddDialog(true)}\n className=\"flex items-center gap-2 px-3 py-2 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"w-4 h-4\" />\n {tr('vibeDetails.addToCatalog', 'Add to Catalog')}\n </button>\n </div>\n\n {memberCatalogs.length > 0 ? (\n <div className=\"space-y-2\">\n {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}\n {memberCatalogs.map((cat: any) => (\n <Card key={cat.id}>\n <div className=\"p-3 flex items-center justify-between\">\n <button\n onClick={() => navigate(`/catalogs/${cat.id}`)}\n className=\"flex items-center gap-3 text-left hover:opacity-80 transition-opacity\"\n >\n <Library className=\"w-5 h-5 text-action-primary-bg flex-shrink-0\" />\n <div>\n <p className=\"font-medium text-text-primary text-sm\">{cat.name}</p>\n <p className=\"text-xs text-text-secondary\">{cat.visibility}</p>\n </div>\n </button>\n <button\n onClick={() => handleRemove(cat.id)}\n className=\"p-1.5 text-text-muted hover:text-status-error-text hover:bg-status-error-bg rounded-md transition-colors\"\n title={tr('vibeDetails.removeFromCatalog', 'Remove from catalog')}\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </Card>\n ))}\n </div>\n ) : (\n <EmptyState\n icon={<Library className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noCatalogs', 'Not in any catalogs')}\n description={tr(\n 'vibeDetails.noCatalogsDesc',\n 'Add this vibe to catalogs to organize and track it alongside other components'\n )}\n />\n )}\n\n {/* Add to Catalog Dialog */}\n {showAddDialog && (\n <div className=\"fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4\">\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n className=\"bg-bg-surface rounded-lg w-full max-w-md max-h-[60vh] flex flex-col\"\n >\n <div className=\"p-4 border-b border-border-default\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr('vibeDetails.addToCatalogTitle', 'Add Vibe to Catalog')}\n </h2>\n </div>\n <div className=\"flex-1 overflow-y-auto p-2\">\n {availableCatalogs.length === 0 ? (\n <div className=\"p-4 text-center text-text-secondary text-sm\">\n {tr(\n 'vibeDetails.noAvailableCatalogs',\n 'No available catalogs. This vibe is already in all catalogs.'\n )}\n </div>\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n availableCatalogs.map((cat: any) => (\n <button\n key={cat.id}\n onClick={() => handleAdd(cat.id)}\n className=\"w-full flex items-center justify-between p-3 rounded-md hover:bg-bg-sunken transition-colors text-left\"\n >\n <div>\n <p className=\"font-medium text-text-primary text-sm\">{cat.name}</p>\n <p className=\"text-xs text-text-secondary\">{cat.visibility}</p>\n </div>\n <Plus className=\"w-4 h-4 text-text-secondary\" />\n </button>\n ))\n )}\n </div>\n <div className=\"p-4 border-t border-border-default\">\n <button\n onClick={() => setShowAddDialog(false)}\n className=\"w-full px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors\"\n >\n {tr('common.close', 'Close')}\n </button>\n </div>\n </motion.div>\n </div>\n )}\n </>\n );\n}\n\n/* ── Playground Tab (REST / GraphQL) ───────────────────────────────────── */\n\nfunction PlaygroundTab({\n vibeId,\n tunnelUrl,\n apiKey,\n type,\n tr,\n}: {\n vibeId: string;\n tunnelUrl: string;\n apiKey: string | null;\n type: 'rest' | 'graphql';\n tr: (key: string, fallback: string) => string;\n}) {\n const isRest = type === 'rest';\n const pluginPath = 'graphiql';\n const configUrl = `${tunnelUrl}/api/${pluginPath}/config/${vibeId}`;\n\n const [endpointUrl, setEndpointUrl] = useState('');\n const [configLoaded, setConfigLoaded] = useState(false);\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [iframeKey, setIframeKey] = useState(0);\n\n // Load existing config on mount\n useEffect(() => {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (apiKey) headers['x-agent-api-key'] = apiKey;\n\n fetch(configUrl, { headers })\n .then((r) => (r.ok ? r.json() : null))\n .then((data) => {\n if (data) {\n const url = isRest ? data.openapiUrl || data.url : data.graphqlUrl || data.url;\n if (url) setEndpointUrl(url);\n }\n setConfigLoaded(true);\n })\n .catch(() => setConfigLoaded(true));\n }, [configUrl, apiKey, isRest]);\n\n const handleSave = async () => {\n if (!endpointUrl.trim()) return;\n setSaving(true);\n setSaved(false);\n try {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (apiKey) headers['x-agent-api-key'] = apiKey;\n\n const body = isRest ? { openapiUrl: endpointUrl.trim() } : { graphqlUrl: endpointUrl.trim() };\n\n await fetch(configUrl, {\n method: 'PUT',\n headers,\n body: JSON.stringify(body),\n });\n setSaved(true);\n setIframeKey((k) => k + 1); // reload iframe\n setTimeout(() => setSaved(false), 3000);\n } catch {\n // silently fail\n } finally {\n setSaving(false);\n }\n };\n\n const iframeSrc = `${tunnelUrl}/ui/${pluginPath}?vibeId=${vibeId}${apiKey ? `&apiKey=${encodeURIComponent(apiKey)}` : ''}`;\n\n return (\n <div className=\"space-y-4\">\n {/* Config Bar */}\n <Card>\n <div className=\"p-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n {isRest ? (\n <Globe className=\"w-5 h-5 text-text-secondary\" />\n ) : (\n <Network className=\"w-5 h-5 text-text-secondary\" />\n )}\n <h3 className=\"font-semibold text-text-primary\">\n {isRest\n ? tr('vibeDetails.restPlaygroundTitle', 'REST API Playground')\n : tr('vibeDetails.graphqlPlaygroundTitle', 'GraphQL Playground')}\n </h3>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"url\"\n value={endpointUrl}\n onChange={(e) => setEndpointUrl(e.target.value)}\n placeholder={\n isRest\n ? tr(\n 'vibeDetails.enterSwaggerUrl',\n 'Enter OpenAPI/Swagger URL (e.g. https://petstore3.swagger.io/api/v3/openapi.json)'\n )\n : tr(\n 'vibeDetails.enterGraphqlUrl',\n 'Enter GraphQL endpoint URL (e.g. https://countries.trevorblades.com/graphql)'\n )\n }\n className=\"flex-1 px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder text-sm\"\n onKeyDown={(e) => e.key === 'Enter' && handleSave()}\n />\n <button\n onClick={handleSave}\n disabled={saving || !endpointUrl.trim()}\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 whitespace-nowrap\"\n >\n {saving ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : saved ? (\n <Check className=\"w-4 h-4\" />\n ) : (\n <ExternalLinkIcon className=\"w-4 h-4\" />\n )}\n {saving\n ? tr('common.saving', 'Saving...')\n : saved\n ? tr('common.saved', 'Saved!')\n : tr('vibeDetails.loadApi', 'Load API')}\n </button>\n </div>\n {!configLoaded && (\n <p className=\"text-xs text-text-muted mt-1\">\n {tr('vibeDetails.loadingConfig', 'Loading saved configuration...')}\n </p>\n )}\n </div>\n </Card>\n\n {/* Iframe */}\n <iframe\n key={iframeKey}\n src={iframeSrc}\n title={isRest ? 'REST API Playground' : 'GraphQL Playground'}\n className=\"w-full rounded-md border border-border-default bg-bg-sunken\"\n style={{ height: '700px' }}\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups\"\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VibeDetailsPage.js","names":[],"sources":["../../src/pages/VibeDetailsPage.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { EntityTagPicker } from '@/components/shared/EntityTagPicker';\nimport { useParams } from 'react-router-dom';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\nimport {\n ArrowLeft,\n Zap,\n Play,\n Pause,\n Archive,\n ExternalLink,\n Server,\n Terminal,\n GitBranch,\n Folder,\n Variable,\n Tag,\n Clock,\n Plus,\n RefreshCw,\n Info,\n Settings,\n Link2,\n FileText,\n BookOpen,\n BarChart3,\n Globe,\n Network,\n GitMerge,\n Library,\n X,\n Check,\n ExternalLink as ExternalLinkIcon,\n Loader2,\n} from 'lucide-react';\nimport {\n PageHeader,\n Card,\n StatusBadge,\n EmptyState,\n LoadingState,\n ErrorState,\n PluginGate,\n} from '@/components/shared';\nimport {\n GIT_PACKAGE,\n GRAPHQL_PLAYGROUND_PACKAGE,\n SESSION_MANAGER_PACKAGE,\n SESSION_PROVIDER_PACKAGES,\n} from '@/constants/pluginCatalog';\nimport { MotionPage, MotionList, MotionItem } from '@burdenoff/fe-libs/shared/motion';\nimport { OpenInBrowserEditorButton } from '@/components/agents';\nimport { useActiveAgentProfile } from '@/hooks/useActiveAgentProfile';\nimport { NotesTabPanel } from '@/components/notes';\nimport { DocsTabPanel } from '@/components/docs';\nimport { ScorecardPanel } from '@/components/scorecard';\nimport { PermissionButton } from '@burdenoff/fe-libs/shared/components';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { VIBE_PERMISSIONS } from '@/constants/permissions';\nimport { useVibeControls, useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport { useQueryBackedTab } from '@/hooks/useQueryBackedTab';\nimport {\n useGetVibeQuery,\n useUpdateVibeStatusMutation,\n useArchiveVibeMutation,\n useCreateSessionMutation,\n useGetVibeCatalogsQuery,\n useAddVibeToCatalogMutation,\n useRemoveVibeFromCatalogMutation,\n useGetVibeFeatureCatalogQuery,\n useGetVibeFeatureFlagsQuery,\n useSetVibeFeatureFlagMutation,\n} from '@/generated/wspace-operations';\nimport { VibeGitOpsTab } from '@/components/gitops/VibeGitOpsTab';\nimport { VibeAgentEmptyState } from '@/components/vibe/VibeAgentEmptyState';\nimport {\n DEFAULT_VIBE_FEATURE_CATALOG,\n isVibeFeatureEnabled,\n type VibeFeatureDefinition,\n} from '@/lib/vibeFeatures';\nimport { useFeatureFlagDetails } from '@burdenoff/fe-libs/shared/feature-flags';\nimport {\n mintIframeToken,\n scheduleIframeTokenRefresh,\n appendIframeTokenParam,\n type IframeTokenAutoRefreshHandle,\n type IframeTokenResponse,\n} from '@/services/iframeToken';\n\ntype VibeTab =\n | 'overview'\n | 'config'\n | 'git'\n | 'sessions'\n | 'notes'\n | 'docs'\n | 'scorecard'\n | 'catalogs'\n | 'graphqlPlayground'\n | 'gitops'\n | 'related';\n\nconst VIBE_TABS: readonly VibeTab[] = [\n 'overview',\n 'config',\n 'git',\n 'sessions',\n 'notes',\n 'docs',\n 'scorecard',\n 'catalogs',\n 'graphqlPlayground',\n 'gitops',\n 'related',\n];\n\n// Tabs that are always visible regardless of per-vibe feature flags.\nconst ALWAYS_VISIBLE_TABS: ReadonlySet<VibeTab> = new Set<VibeTab>(['overview', 'config']);\nconst HIDDEN_VIBE_FEATURE_IDS = new Set<string>(['apiPlayground']);\n// Tabs whose content can only be rendered against an attached agent. They are\n// hidden when `vibe.agentId` is null so the user is not stranded on a panel\n// that silently borrowed someone else's agent.\nconst AGENT_REQUIRED_TABS: ReadonlySet<VibeTab> = new Set<VibeTab>([\n 'sessions',\n 'gitops',\n 'graphqlPlayground',\n 'git',\n]);\n\n/**\n * Vibe details page - shows comprehensive information about a single vibe\n */\nexport function VibeDetailsPage() {\n const { t } = useI18n();\n const { id } = useParams<{ id: string }>();\n const { basePath: basePathProp } = useVibeControls();\n const basePath = basePathProp || '';\n const navigate = useVibeNavigate();\n\n const tr = useCallback(\n (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n },\n [t]\n );\n\n const [activeTab, setActiveTab] = useQueryBackedTab<VibeTab>(VIBE_TABS, 'overview');\n\n const [updateVibeStatus] = useUpdateVibeStatusMutation({ refetchQueries: ['GetVibe'] });\n const [archiveVibe] = useArchiveVibeMutation({ refetchQueries: ['GetVibe'] });\n const [createSession] = useCreateSessionMutation({ refetchQueries: ['GetVibe', 'ListSessions'] });\n\n // Per-vibe feature catalog (drives the toggles in the Config tab and the\n // tab visibility filter below). Falls back to the static catalog if the\n // query is still loading or the backend hasn't shipped this field yet.\n const { data: featureCatalogData } = useGetVibeFeatureCatalogQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'ignore',\n });\n const rawFeatureCatalog: readonly VibeFeatureDefinition[] = useMemo(() => {\n const merged = new Map<string, VibeFeatureDefinition>(\n DEFAULT_VIBE_FEATURE_CATALOG.map((feature) => [feature.id, feature])\n );\n\n for (const feature of featureCatalogData?.vibeFeatureCatalog ?? []) {\n merged.set(feature.id, feature);\n }\n\n return Array.from(merged.values());\n }, [featureCatalogData?.vibeFeatureCatalog]);\n const featureCatalog: readonly VibeFeatureDefinition[] = useMemo(\n () => rawFeatureCatalog.filter((feature) => !HIDDEN_VIBE_FEATURE_IDS.has(feature.id)),\n [rawFeatureCatalog]\n );\n\n const [setVibeFeatureFlagMutation, { loading: setFeatureFlagLoading }] =\n useSetVibeFeatureFlagMutation({ refetchQueries: ['GetVibe'] });\n\n // Session creation modal state\n const [showSessionModal, setShowSessionModal] = useState(false);\n const [sessionCreateError, setSessionCreateError] = useState<string | null>(null);\n const [sessionCreateLoading, setSessionCreateLoading] = useState(false);\n const [successMessage, setSuccessMessage] = useState<string | null>(null);\n\n // Session form refs\n const sessionNameRef = useRef<HTMLInputElement>(null);\n const sessionTypeRef = useRef<HTMLSelectElement>(null);\n const sessionCommandRef = useRef<HTMLInputElement>(null);\n const sessionWorkDirRef = useRef<HTMLInputElement>(null);\n\n // Fetch vibe by ID from GraphQL API\n const { data, loading, error, refetch } = useGetVibeQuery({\n variables: { id: id || '' },\n skip: !id,\n fetchPolicy: 'cache-and-network',\n });\n\n // Get vibe from response\n const vibe = data?.vibe;\n const { data: featureFlagsData } = useGetVibeFeatureFlagsQuery({\n variables: { id: id || '' },\n skip: !id,\n fetchPolicy: 'cache-first',\n errorPolicy: 'ignore',\n });\n // Feature flags live on the Vibe but may not be reflected in the generated\n // types until `bun run codegen` is re-run after the schema update — read\n // them through an untyped view so this file stays compilable in either state.\n const vibeFlagsView = vibe as\n | (typeof vibe & {\n featureFlags?: Record<string, boolean> | null;\n effectiveFeatureFlags?: Record<string, boolean> | null;\n })\n | undefined;\n const effectiveVibeFlags = featureFlagsData?.vibe ?? vibeFlagsView;\n\n // Per-vibe feature enablement check. Hoisted to the top of the component\n // (before any early-return guards) to keep React hook ordering stable.\n const isFeatureEnabled = useCallback(\n (featureId: string) =>\n isVibeFeatureEnabled(effectiveVibeFlags ?? null, featureId, featureCatalog),\n [effectiveVibeFlags, featureCatalog]\n );\n\n // Platform-level tab gates (component-level feature flags). Missing flag details\n // fail open so platform flag fetch gaps do not hide per-vibe enabled tabs.\n const gitTabDetails = useFeatureFlagDetails('vibes.tabs.git');\n const scorecardTabDetails = useFeatureFlagDetails('vibes.tabs.scorecard');\n const graphqlPlaygroundTabDetails = useFeatureFlagDetails('vibes.tabs.graphql-playground');\n\n // Returns false for platform-gated tabs when the flag is off; true for all other tabs.\n const isPlatformTabEnabled = useCallback(\n (tabId: string): boolean => {\n switch (tabId) {\n case 'git':\n return gitTabDetails ? Boolean(gitTabDetails.value) : true;\n case 'scorecard':\n return scorecardTabDetails ? Boolean(scorecardTabDetails.value) : true;\n case 'graphqlPlayground':\n return graphqlPlaygroundTabDetails ? Boolean(graphqlPlaygroundTabDetails.value) : true;\n default:\n return true; // No platform gate for other tabs\n }\n },\n [gitTabDetails, scorecardTabDetails, graphqlPlaygroundTabDetails]\n );\n\n // Get related data from the vibe response (already included in the query)\n const agent = vibe?.agent || null;\n const vibeSessions = vibe?.sessions || [];\n const childVibes = vibe?.children || [];\n const parentVibe = vibe?.parent || null;\n\n // Resolve tunnel URL and API key from the vibe's own agent. We deliberately\n // do NOT fall back to some other active agent — a vibe without an attached\n // agent should surface the empty-state CTA instead of silently borrowing\n // someone else's agent. Agent-dependent tabs are hidden via the tab filter\n // when `vibe.agentId` is null.\n type AgentLike = {\n tunnelUrl?: string | null;\n agentApiKey?: string | null;\n id: string;\n metadata?: Record<string, unknown> | null;\n } | null;\n const effectiveAgent: AgentLike = agent ?? null;\n const effectiveTunnelUrl: string | null = effectiveAgent?.tunnelUrl ?? null;\n const effectiveApiKey: string | null = effectiveAgent?.agentApiKey ?? null;\n const { active: effectiveProfile } = useActiveAgentProfile(effectiveAgent?.id ?? null);\n\n // ── Sync active context ────────────────────────────────────────────────\n useEffect(() => {\n if (vibe) {\n useVibeControlsStore.setState({\n activeAgentId: agent?.id ?? null,\n selectedAgentId: agent?.id ?? null,\n activeVibeId: vibe.id,\n selectedVibeId: vibe.id,\n activeSessionId: null,\n selectedSessionId: null,\n });\n }\n // Only sync when vibe or agent identity changes, not on every field update.\n // useVibeControlsStore.setState is a stable Zustand reference.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [vibe?.id, agent?.id]);\n\n // If the currently selected tab is for a feature that just got disabled\n // (either per-vibe, platform-level, or because the vibe has no attached\n // agent), bounce back to overview so the user is not stranded on an empty\n // panel.\n const hasAttachedAgent = Boolean(vibe?.agentId);\n useEffect(() => {\n if (ALWAYS_VISIBLE_TABS.has(activeTab)) return;\n if (!isFeatureEnabled(activeTab) || !isPlatformTabEnabled(activeTab)) {\n setActiveTab('overview');\n return;\n }\n if (!hasAttachedAgent && AGENT_REQUIRED_TABS.has(activeTab)) {\n setActiveTab('overview');\n }\n }, [activeTab, isFeatureEnabled, isPlatformTabEnabled, hasAttachedAgent, setActiveTab]);\n\n const handleBack = () => {\n navigate('/vibes');\n };\n\n const handleActivateVibe = async () => {\n if (!vibe?.id) return;\n try {\n await updateVibeStatus({ variables: { id: vibe.id, status: 'ACTIVE' as const } });\n } catch (err) {\n console.error('Failed to activate vibe:', err);\n }\n };\n\n const handleDeactivateVibe = async () => {\n if (!vibe?.id) return;\n try {\n await updateVibeStatus({ variables: { id: vibe.id, status: 'INACTIVE' as const } });\n } catch (err) {\n console.error('Failed to deactivate vibe:', err);\n }\n };\n\n const handleArchiveVibe = async () => {\n if (!vibe?.id) return;\n try {\n await archiveVibe({ variables: { id: vibe.id } });\n } catch (err) {\n console.error('Failed to archive vibe:', err);\n }\n };\n\n const handleOpenInEditor = () => {\n if (vibe?.path) {\n // Use location.href instead of window.open to avoid popup blockers\n window.location.href = `vscode://file/${vibe.path}`;\n } else {\n setSuccessMessage(\n tr('vibesPage.openEditorPathMissing', 'No path available to open in editor')\n );\n setTimeout(() => setSuccessMessage(null), 3000);\n }\n };\n\n const handleStartSession = () => {\n setSessionCreateError(null);\n setShowSessionModal(true);\n };\n\n const handleSubmitCreateSession = async () => {\n const name = sessionNameRef.current?.value?.trim();\n const type = sessionTypeRef.current?.value as 'TERMINAL' | 'TMUX' | 'SSH' | 'SCRIPT' | 'CUSTOM';\n const command = sessionCommandRef.current?.value?.trim() || undefined;\n const workingDirectory = sessionWorkDirRef.current?.value?.trim() || undefined;\n\n if (!name) {\n setSessionCreateError(tr('vibeDetails.sessionNameRequired', 'Session name is required'));\n return;\n }\n\n // Refuse to silently fall back to some other agent — sessions belong to\n // the vibe's own agent. The Connect-an-Agent empty state handles UX for\n // the no-agent case.\n const agentId = vibe?.agentId;\n if (!agentId) {\n setSessionCreateError(\n tr(\n 'vibeDetails.noAgentAttached',\n 'This vibe has no agent attached. Connect an agent to this vibe before creating a session.'\n )\n );\n return;\n }\n\n setSessionCreateLoading(true);\n setSessionCreateError(null);\n try {\n await createSession({\n variables: {\n input: {\n name,\n type: type || 'TERMINAL',\n agentId,\n vibeId: vibe?.id,\n command,\n workingDirectory: workingDirectory || vibe?.path || undefined,\n },\n },\n });\n setShowSessionModal(false);\n // Clear form refs to prevent stale values on next open\n if (sessionNameRef.current) sessionNameRef.current.value = '';\n if (sessionTypeRef.current) sessionTypeRef.current.selectedIndex = 0;\n if (sessionCommandRef.current) sessionCommandRef.current.value = '';\n if (sessionWorkDirRef.current) sessionWorkDirRef.current.value = '';\n setSuccessMessage(tr('sessions.createdSuccess', 'Session created successfully'));\n setTimeout(() => setSuccessMessage(null), 3000);\n } catch (err) {\n setSessionCreateError(\n err instanceof Error ? err.message : tr('sessions.failedCreate', 'Failed to create session')\n );\n } finally {\n setSessionCreateLoading(false);\n }\n };\n\n const handleAgentClick = () => {\n if (!agent) return;\n navigate(`/agents/${agent.id}`);\n };\n\n const handleSessionClick = (sessionId: string) => {\n navigate(`/sessions/${sessionId}`);\n };\n\n const handleVibeClick = (vibeId: string) => {\n navigate(`/vibes/${vibeId}`);\n };\n\n const formatTimestamp = (timestamp: string | null | undefined) => {\n if (!timestamp) return tr('health.never', 'Never');\n const diff = Date.now() - new Date(timestamp).getTime();\n if (diff < 60000) return tr('health.justNow', 'Just now');\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n return new Date(timestamp).toLocaleDateString();\n };\n\n const getGitStatusColor = (status: string | null | undefined) => {\n switch (status) {\n case 'clean':\n return 'text-status-success-text';\n case 'modified':\n return 'text-status-warning-text';\n case 'ahead':\n return 'text-status-info-text';\n default:\n return 'text-text-secondary';\n }\n };\n\n // Guard states wrapped in MotionPage to prevent unmount/remount animation replay\n if (loading && !vibe) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n <LoadingState message={tr('vibeDetails.loadingDetails', 'Loading vibe details...')} />\n </MotionPage>\n );\n }\n\n if (error && !vibe) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n <ErrorState\n title={tr('vibeDetails.failedLoad', 'Failed to load vibe')}\n message={error.message}\n onRetry={() => refetch()}\n />\n </MotionPage>\n );\n }\n\n if (!vibe) {\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n <EmptyState\n icon={<Zap className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.notFound', 'Vibe not found')}\n description={`${tr('vibeDetails.notFoundDescriptionPrefix', 'No vibe with ID')} \"${id}\" ${tr('vibeDetails.notFoundDescriptionSuffix', 'exists')}`}\n action={\n <button\n onClick={handleBack}\n className=\"px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n }\n />\n </MotionPage>\n );\n }\n\n // Types for sessions and child vibes from the query\n type SessionItem = NonNullable<typeof vibeSessions>[number];\n type ChildVibeItem = NonNullable<typeof childVibes>[number];\n\n const isActive = vibe.status === 'ACTIVE' || vibe.status === 'RUNNING';\n const runningSessions = vibeSessions.filter((s: SessionItem) => s.status === 'RUNNING').length;\n\n // Tab definitions\n const relatedCount = childVibes.length + (parentVibe ? 1 : 0) + (agent ? 1 : 0);\n const hasGitInfo = Boolean(vibe.gitBranch || vibe.gitRemote);\n\n const allVibeTabs: { id: VibeTab; label: string; icon: typeof Zap; badge?: string }[] = [\n { id: 'overview', label: tr('nav.overview', 'Overview'), icon: Info },\n { id: 'config', label: tr('vibeDetails.config', 'Config'), icon: Settings },\n {\n id: 'git',\n label: tr('vibeDetails.git', 'Git'),\n icon: GitBranch,\n badge: hasGitInfo ? vibe.gitBranch || undefined : undefined,\n },\n {\n id: 'sessions',\n label: tr('nav.sessions', 'Sessions'),\n icon: Terminal,\n badge: `${vibeSessions.length}`,\n },\n { id: 'notes', label: tr('vibeDetails.notes', 'Notes'), icon: FileText },\n { id: 'docs', label: tr('vibeDetails.docs', 'Docs'), icon: BookOpen },\n { id: 'scorecard', label: tr('vibeDetails.scorecard', 'Scorecard'), icon: BarChart3 },\n { id: 'catalogs', label: tr('vibeDetails.catalogs', 'Catalogs'), icon: Library },\n {\n id: 'graphqlPlayground',\n label: tr('vibeDetails.graphqlPlayground', 'GraphQL'),\n icon: Network,\n },\n { id: 'gitops', label: tr('vibeDetails.gitops', 'GitOps'), icon: GitMerge },\n {\n id: 'related',\n label: tr('vibeDetails.related', 'Related'),\n icon: Link2,\n badge: relatedCount > 0 ? `${relatedCount}` : undefined,\n },\n ];\n\n // Hide any non-core tab whose feature is disabled — either per-vibe,\n // platform-level, or because the vibe has no attached agent (sessions,\n // gitops, GraphQL playground, git all need an agent).\n const vibeTabs = allVibeTabs.filter((tab) => {\n if (ALWAYS_VISIBLE_TABS.has(tab.id)) return true;\n if (!isFeatureEnabled(tab.id) || !isPlatformTabEnabled(tab.id)) return false;\n if (!hasAttachedAgent && AGENT_REQUIRED_TABS.has(tab.id)) return false;\n return true;\n });\n\n return (\n <MotionPage className=\"space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen\">\n {/* Success Toast */}\n {successMessage && (\n <div className=\"fixed top-4 left-4 right-4 sm:left-auto z-50 bg-status-success-bg text-status-success-text px-4 py-3 rounded-md shadow-lg\">\n {successMessage}\n </div>\n )}\n\n {/* Back Button */}\n <button\n onClick={handleBack}\n className=\"flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"w-4 h-4\" />\n {tr('vibeDetails.backToVibes', 'Back to Vibes')}\n </button>\n\n {/* Header */}\n <PageHeader\n title={vibe.name}\n description={vibe.description || tr('vibeDetails.noDescription', 'No description')}\n breadcrumb={[\n { label: tr('nav.vibes', 'Vibes'), path: basePath ? `${basePath}/vibes` : '/vibes' },\n { label: vibe.name },\n ]}\n actions={\n <div className=\"flex items-center gap-2 flex-wrap\">\n <button\n onClick={() => refetch()}\n disabled={loading}\n className=\"flex items-center justify-center p-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50\"\n title={tr('common.refresh', 'Refresh')}\n >\n <RefreshCw className={`w-4 h-4 ${loading ? 'animate-spin' : ''}`} />\n </button>\n <PermissionButton\n permission={VIBE_PERMISSIONS.VIBE_UPDATE}\n deniedBehavior=\"disable\"\n deniedTooltip=\"You don't have permission to update vibes\"\n >\n {isActive ? (\n <button\n onClick={handleDeactivateVibe}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Pause className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">\n {tr('vibeDetails.deactivate', 'Deactivate')}\n </span>\n </button>\n ) : (\n <button\n onClick={handleActivateVibe}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-status-success-bg text-status-success-text rounded-md hover:opacity-80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Play className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">{tr('vibeDetails.activate', 'Activate')}</span>\n </button>\n )}\n </PermissionButton>\n <button\n onClick={handleOpenInEditor}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors\"\n title={tr('vibeDetails.openInLocalVscode', 'Open in local VS Code')}\n >\n <ExternalLink className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">\n {tr('vibeDetails.openInLocalVscode', 'Open in VS Code')}\n </span>\n </button>\n {isFeatureEnabled('browserEditor') && (\n <OpenInBrowserEditorButton\n tunnelUrl={effectiveTunnelUrl}\n agentApiKey={effectiveApiKey}\n profile={effectiveProfile}\n workspacePath={vibe.path || undefined}\n />\n )}\n <PermissionButton\n permission={VIBE_PERMISSIONS.SESSION_CREATE}\n deniedBehavior=\"disable\"\n deniedTooltip=\"You don't have permission to create sessions\"\n >\n <button\n onClick={handleStartSession}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Plus className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">{tr('vibeDetails.new', 'New')}</span>\n <span className=\"hidden sm:inline\">{tr('nav.sessions', 'Session')}</span>\n </button>\n </PermissionButton>\n <PermissionButton\n permission={VIBE_PERMISSIONS.VIBE_UPDATE}\n deniedBehavior=\"disable\"\n deniedTooltip=\"You don't have permission to archive vibes\"\n >\n <button\n onClick={handleArchiveVibe}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-status-warning-bg text-status-warning-text rounded-md hover:opacity-80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title={tr('vibeDetails.archive', 'Archive')}\n >\n <Archive className=\"w-3.5 h-3.5 sm:w-4 sm:h-4\" />\n <span className=\"hidden sm:inline\">{tr('vibeDetails.archive', 'Archive')}</span>\n </button>\n </PermissionButton>\n </div>\n }\n />\n\n {/* Status Cards */}\n <MotionList stagger={0.04} className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 sm:gap-4\">\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Zap className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('sessions.filterStatus', 'Status')}\n </p>\n <StatusBadge status={vibe.status} size=\"md\" />\n </div>\n </div>\n </Card>\n </MotionItem>\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Folder className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('sessions.filterType', 'Type')}\n </p>\n <p className=\"font-semibold text-text-primary text-sm sm:text-base truncate\">\n {vibe.type}\n </p>\n </div>\n </div>\n </Card>\n </MotionItem>\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Server className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('sessions.filterAgent', 'Agent')}\n </p>\n <p className=\"font-semibold text-text-primary text-sm sm:text-base truncate\">\n {agent?.name || tr('targets.unknown', 'Unknown')}\n </p>\n </div>\n </div>\n </Card>\n </MotionItem>\n <MotionItem>\n <Card className=\"p-3 sm:p-4\">\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <div className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0\">\n <Terminal className=\"w-4 h-4 sm:w-5 sm:h-5 text-text-secondary\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-xs sm:text-sm text-text-secondary\">\n {tr('nav.sessions', 'Sessions')}\n </p>\n <p className=\"font-semibold text-text-primary text-sm sm:text-base\">\n {runningSessions} {tr('health.active', 'active')}\n </p>\n </div>\n </div>\n </Card>\n </MotionItem>\n </MotionList>\n\n {/* ── Tab Navigation Bar ─────────────────────────────────────────── */}\n <div className=\"border-b border-border-default\">\n <nav\n className=\"flex gap-1 -mb-px overflow-x-auto pb-1\"\n aria-label={tr('vibeDetails.tabsAriaLabel', 'Vibe tabs')}\n >\n {vibeTabs.map((tab) => {\n const Icon = tab.icon;\n const isActiveTab = activeTab === tab.id;\n return (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${\n isActiveTab\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 aria-selected={isActiveTab}\n role=\"tab\"\n >\n <Icon className=\"w-4 h-4\" />\n {tab.label}\n {tab.badge && (\n <span\n className={`hidden rounded-full px-1.5 py-0.5 text-[10px] sm:inline-flex sm:text-xs ${\n isActiveTab\n ? 'bg-action-primary-bg/10 text-action-primary-bg'\n : 'bg-bg-sunken text-text-muted'\n }`}\n >\n {tab.badge}\n </span>\n )}\n </button>\n );\n })}\n </nav>\n </div>\n\n {/* ── Tab Panels ─────────────────────────────────────────────────── */}\n <AnimatePresence mode=\"wait\">\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <motion.div\n key=\"overview\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n {/* Description */}\n {vibe.description && (\n <Card>\n <div className=\"p-4\">\n <p className=\"text-text-primary\">{vibe.description}</p>\n </div>\n </Card>\n )}\n\n {/* No-agent empty state — shown only on the overview tab so it does\n not push tab content out of frame. Agent-dependent tabs are\n already hidden when this is rendered. */}\n {!hasAttachedAgent && <VibeAgentEmptyState vibeId={vibe.id} tr={tr} />}\n\n {/* Path */}\n <Card>\n <div className=\"p-3 sm:p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2 text-sm sm:text-base\">\n <Folder className=\"w-4 h-4 sm:w-5 sm:h-5\" />\n {tr('vibeDetails.path', 'Path')}\n </h3>\n </div>\n <div className=\"p-3 sm:p-4\">\n <div className=\"bg-bg-sunken rounded-md p-2 sm:p-3 font-mono text-xs sm:text-sm text-text-primary overflow-x-auto break-all\">\n {vibe.path}\n </div>\n </div>\n </Card>\n\n {/* Timeline */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Clock className=\"w-5 h-5\" />\n {tr('vibeDetails.timeline', 'Timeline')}\n </h3>\n </div>\n <div className=\"p-4\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">{tr('vibeDetails.created', 'Created')}</p>\n <p className=\"font-medium text-text-primary\">\n {formatTimestamp(vibe.createdAt)}\n </p>\n </div>\n <div>\n <p className=\"text-text-secondary\">{tr('vibeDetails.updated', 'Updated')}</p>\n <p className=\"font-medium text-text-primary\">\n {formatTimestamp(vibe.updatedAt)}\n </p>\n </div>\n </div>\n </div>\n </Card>\n </motion.div>\n )}\n\n {/* Config Tab */}\n {activeTab === 'config' && (\n <motion.div\n key=\"config\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n {/* Environment Variables */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Variable className=\"w-5 h-5\" />\n {tr('vibeDetails.environmentVariables', 'Environment Variables')}\n </h3>\n </div>\n <div className=\"p-4\">\n {vibe.environmentVariables && Object.keys(vibe.environmentVariables).length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {Object.entries(vibe.environmentVariables).map(([key, value]) => (\n <span\n key={key}\n className=\"px-3 py-1 bg-bg-sunken text-text-primary text-sm rounded-full font-mono\"\n >\n {key}={String(value)}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">\n {tr(\n 'vibeDetails.noEnvironmentVariables',\n 'No environment variables configured'\n )}\n </p>\n )}\n </div>\n </Card>\n\n {/* Tags */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Tag className=\"w-5 h-5\" />\n {tr('vibeDetails.tags', 'Tags')}\n </h3>\n </div>\n <div className=\"p-4\">\n <EntityTagPicker entityType=\"VIBECONTROLS_VIBE\" entityId={vibe.id} />\n </div>\n </Card>\n\n {/* Features — per-vibe feature toggles */}\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Settings className=\"w-5 h-5\" />\n {tr('vibeDetails.features', 'Features')}\n </h3>\n <p className=\"text-sm text-text-secondary mt-1\">\n {tr(\n 'vibeDetails.featuresDescription',\n 'Toggle which sections show up on this vibe. Changes apply to everyone viewing the vibe.'\n )}\n </p>\n </div>\n <div className=\"p-4 space-y-2\">\n {featureCatalog.map((feature) => {\n const enabled = isFeatureEnabled(feature.id);\n return (\n <label\n key={feature.id}\n className=\"flex items-center justify-between gap-4 py-2 cursor-pointer\"\n >\n <span className=\"text-sm font-medium text-text-primary\">{feature.label}</span>\n <input\n type=\"checkbox\"\n role=\"switch\"\n aria-label={feature.label}\n checked={enabled}\n disabled={setFeatureFlagLoading || !vibe.id}\n onChange={async (e) => {\n const next = e.target.checked;\n try {\n await setVibeFeatureFlagMutation({\n variables: {\n id: vibe.id,\n featureId: feature.id,\n enabled: next,\n },\n optimisticResponse: {\n setVibeFeatureFlag: {\n __typename: 'Vibe',\n id: vibe.id,\n featureFlags: {\n ...(effectiveVibeFlags?.featureFlags ?? {}),\n [feature.id]: next,\n },\n effectiveFeatureFlags: {\n ...(effectiveVibeFlags?.effectiveFeatureFlags ?? {}),\n [feature.id]: next,\n },\n } as never,\n },\n });\n } catch (err) {\n console.error('Failed to toggle vibe feature:', err);\n }\n }}\n className=\"h-5 w-5 accent-action-primary-bg\"\n />\n </label>\n );\n })}\n </div>\n </Card>\n </motion.div>\n )}\n\n {/* Git Tab */}\n {activeTab === 'git' && isFeatureEnabled('git') && (\n <motion.div\n key=\"git\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <PluginGate\n agentId={effectiveAgent?.id ?? null}\n required={[GIT_PACKAGE]}\n mode=\"all\"\n eyebrow={tr('vibeDetails.gitPluginEyebrow', 'Git plugin required')}\n title={tr('vibeDetails.gitPluginTitle', 'Install the git plugin')}\n description={tr(\n 'vibeDetails.gitPluginDescription',\n 'Live git branch, status, and remote data for this vibe are served by the vibe-plugin-tool-git agent plugin.'\n )}\n >\n {hasGitInfo ? (\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <GitBranch className=\"w-5 h-5\" />\n {tr('vibeDetails.gitInformation', 'Git Information')}\n </h3>\n </div>\n <div className=\"p-4 space-y-3\">\n <div className=\"flex items-center gap-4 flex-wrap\">\n {vibe.gitBranch && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.branch', 'Branch')}:\n </span>\n <span className=\"px-2 py-1 bg-bg-sunken text-text-primary text-sm rounded font-mono\">\n {vibe.gitBranch}\n </span>\n </div>\n )}\n {vibe.gitStatus && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-text-secondary\">\n {tr('sessions.filterStatus', 'Status')}:\n </span>\n <span className={`font-medium ${getGitStatusColor(vibe.gitStatus)}`}>\n {vibe.gitStatus}\n </span>\n </div>\n )}\n </div>\n {vibe.gitRemote && (\n <div>\n <span className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.remote', 'Remote')}:\n </span>\n <p className=\"font-mono text-sm text-text-primary mt-1 break-all\">\n {vibe.gitRemote}\n </p>\n </div>\n )}\n </div>\n </Card>\n ) : (\n <EmptyState\n icon={<GitBranch className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noGitInformation', 'No git information')}\n description={tr(\n 'vibeDetails.noGitInformationDescription',\n 'This vibe does not have any git repository linked'\n )}\n />\n )}\n </PluginGate>\n </motion.div>\n )}\n\n {/* Sessions Tab */}\n {activeTab === 'sessions' && isFeatureEnabled('sessions') && (\n <motion.div\n key=\"sessions\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n >\n <PluginGate\n agentId={effectiveAgent?.id ?? null}\n requirements={[\n {\n packages: [SESSION_MANAGER_PACKAGE],\n mode: 'all',\n eyebrow: tr('vibeDetails.sessionsManagerEyebrow', 'Session manager required'),\n title: tr('vibeDetails.sessionsManagerTitle', 'Install the session manager'),\n description: tr(\n 'vibeDetails.sessionsManagerDescription',\n 'Sessions are orchestrated by the unified session manager plugin. Install it to continue.'\n ),\n },\n {\n packages: SESSION_PROVIDER_PACKAGES,\n mode: 'any',\n eyebrow: tr('vibeDetails.sessionProviderEyebrow', 'Session provider required'),\n title: tr('vibeDetails.sessionProviderTitle', 'Pick a session provider'),\n description: tr(\n 'vibeDetails.sessionProviderDescription',\n 'Choose the terminal multiplexer your sessions should run on. You can install more providers later.'\n ),\n },\n ]}\n >\n <Card>\n <div className=\"p-4 border-b border-border-default flex items-center justify-between\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Terminal className=\"w-5 h-5\" />\n {tr('nav.sessions', 'Sessions')} ({vibeSessions.length})\n </h3>\n <button\n onClick={handleStartSession}\n className=\"flex items-center gap-1 px-2 py-1 text-sm bg-bg-sunken text-text-primary rounded hover:bg-bg-sunken/80 transition-colors\"\n >\n <Plus className=\"w-4 h-4\" />\n {tr('vibeDetails.new', 'New')}\n </button>\n </div>\n {vibeSessions.length > 0 ? (\n <MotionList className=\"divide-y divide-border-primary\">\n {vibeSessions.map((session: SessionItem) => (\n <MotionItem key={session.id} variant=\"fadeRight\">\n <div\n onClick={() => handleSessionClick(session.id)}\n className=\"p-4 flex items-center justify-between cursor-pointer hover:bg-bg-sunken/50 transition-colors\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <Terminal className=\"w-5 h-5 text-text-secondary flex-shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"font-medium text-text-primary truncate\">\n {session.name}\n </p>\n <p className=\"text-sm text-text-secondary truncate\">{session.type}</p>\n </div>\n </div>\n <StatusBadge status={session.status} />\n </div>\n </MotionItem>\n ))}\n </MotionList>\n ) : (\n <div className=\"p-6 text-center text-text-secondary\">\n {tr('vibeDetails.noSessionsForVibe', 'No sessions for this vibe')}\n </div>\n )}\n </Card>\n </PluginGate>\n </motion.div>\n )}\n\n {/* Notes Tab */}\n {activeTab === 'notes' && isFeatureEnabled('notes') && (\n <motion.div\n key=\"notes\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <NotesTabPanel context=\"vibe\" vibeId={vibe.id} />\n </motion.div>\n )}\n\n {/* Docs Tab */}\n {activeTab === 'docs' && isFeatureEnabled('docs') && (\n <motion.div\n key=\"docs\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <DocsTabPanel vibeId={vibe.id} />\n </motion.div>\n )}\n\n {/* Scorecard Tab */}\n {activeTab === 'scorecard' && isFeatureEnabled('scorecard') && (\n <motion.div\n key=\"scorecard\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <ScorecardPanel ownerType=\"VIBE\" ownerId={vibe.id} />\n </motion.div>\n )}\n\n {/* Catalogs Tab */}\n {activeTab === 'catalogs' && isFeatureEnabled('catalogs') && (\n <motion.div\n key=\"catalogs\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <VibeCatalogsTab vibeId={vibe.id} tr={tr} navigate={navigate} />\n </motion.div>\n )}\n\n {/* GraphQL Playground Tab */}\n {activeTab === 'graphqlPlayground' && isFeatureEnabled('graphqlPlayground') && (\n <motion.div\n key=\"graphqlPlayground\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n <PluginGate\n agentId={effectiveAgent?.id ?? null}\n required={[GRAPHQL_PLAYGROUND_PACKAGE]}\n mode=\"all\"\n eyebrow={tr('vibeDetails.graphqlPluginEyebrow', 'GraphQL playground plugin required')}\n title={tr('vibeDetails.graphqlPluginTitle', 'Install the GraphQL playground')}\n description={tr(\n 'vibeDetails.graphqlPluginDescription',\n 'The GraphQL Playground is served by the graphiql agent plugin. Install it to continue.'\n )}\n >\n {effectiveTunnelUrl ? (\n <PlaygroundTab\n vibeId={vibe.id}\n agentId={effectiveAgent?.id ?? null}\n profile={effectiveProfile}\n tunnelUrl={effectiveTunnelUrl}\n apiKey={effectiveApiKey}\n type=\"graphql\"\n tr={tr}\n />\n ) : (\n <EmptyState\n icon={<Network className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noAgentTunnel', 'No agent tunnel available')}\n description={tr(\n 'vibeDetails.noAgentTunnelDesc2',\n 'The GraphQL playground requires an active agent with a tunnel URL.'\n )}\n />\n )}\n </PluginGate>\n </motion.div>\n )}\n\n {/* GitOps Tab */}\n {activeTab === 'gitops' && isFeatureEnabled('gitops') && (\n <VibeGitOpsTab\n vibeId={id || ''}\n agentId={effectiveAgent?.id ?? ''}\n profile={effectiveProfile}\n tunnelUrl={effectiveTunnelUrl}\n apiKey={effectiveApiKey}\n tr={tr}\n />\n )}\n\n {/* Related Tab */}\n {activeTab === 'related' && isFeatureEnabled('related') && (\n <motion.div\n key=\"related\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-6\"\n >\n {relatedCount > 0 ? (\n <>\n {/* Child Vibes */}\n {childVibes.length > 0 && (\n <Card>\n <div className=\"p-4 border-b border-border-default\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Zap className=\"w-5 h-5\" />\n {tr('vibeDetails.childVibes', 'Child Vibes')} ({childVibes.length})\n </h3>\n </div>\n <MotionList className=\"divide-y divide-border-primary\">\n {childVibes.map((child: ChildVibeItem) => (\n <MotionItem key={child.id} variant=\"fadeRight\">\n <div\n onClick={() => handleVibeClick(child.id)}\n className=\"p-4 flex items-center justify-between cursor-pointer hover:bg-bg-sunken/50 transition-colors\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <Zap className=\"w-5 h-5 text-text-secondary flex-shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"font-medium text-text-primary truncate\">\n {child.name}\n </p>\n <p className=\"text-sm text-text-secondary truncate\">{child.type}</p>\n </div>\n </div>\n <StatusBadge status={child.status} />\n </div>\n </MotionItem>\n ))}\n </MotionList>\n </Card>\n )}\n\n {/* Parent Vibe */}\n {parentVibe && (\n <Card onClick={() => handleVibeClick(parentVibe.id)} hoverable>\n <div className=\"p-4 flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-lg bg-bg-sunken flex items-center justify-center\">\n <Zap className=\"w-5 h-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.parentVibe', 'Parent Vibe')}\n </p>\n <p className=\"font-medium text-text-primary\">{parentVibe.name}</p>\n </div>\n </div>\n </Card>\n )}\n\n {/* Related Agent */}\n {agent && (\n <Card onClick={handleAgentClick} hoverable>\n <div className=\"p-4 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-lg bg-bg-sunken flex items-center justify-center\">\n <Server className=\"w-5 h-5 text-text-secondary\" />\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">\n {tr('vibeDetails.runningOnAgent', 'Running on Agent')}\n </p>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-sm text-text-secondary\">{agent.hostname}</p>\n </div>\n </div>\n <StatusBadge status={agent.isActive ? 'ACTIVE' : 'OFFLINE'} />\n </div>\n </Card>\n )}\n </>\n ) : (\n <EmptyState\n icon={<Link2 className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noRelatedEntities', 'No related entities')}\n description={tr(\n 'vibeDetails.noRelatedEntitiesDescription',\n 'This vibe has no child vibes, parent vibe, or linked agent'\n )}\n />\n )}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Create Session Modal */}\n {showSessionModal && (\n <div className=\"fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4\">\n <div className=\"bg-bg-surface rounded-lg p-6 w-full max-w-lg\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {tr('vibeDetails.newSessionFor', 'New Session for')} {vibe.name}\n </h2>\n {sessionCreateError && (\n <div className=\"mb-4 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm\">\n {sessionCreateError}\n </div>\n )}\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('vibeDetails.sessionName', 'Session Name')}\n </label>\n <input\n ref={sessionNameRef}\n type=\"text\"\n placeholder={tr('vibeDetails.sessionNamePlaceholder', 'dev-terminal')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('sessions.filterType', 'Type')}\n </label>\n <select\n ref={sessionTypeRef}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary\"\n >\n <option value=\"TERMINAL\">{tr('sessions.typeTerminal', 'Terminal')}</option>\n <option value=\"TMUX\">{tr('sessions.typeTmux', 'TMUX')}</option>\n <option value=\"SSH\">{tr('sessions.typeSsh', 'SSH')}</option>\n <option value=\"SCRIPT\">{tr('sessions.typeScript', 'Script')}</option>\n <option value=\"CUSTOM\">{tr('sessions.typeCustom', 'Custom')}</option>\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('sessions.command', 'Command')}\n </label>\n <input\n ref={sessionCommandRef}\n type=\"text\"\n placeholder={tr('vibeDetails.sessionCommandPlaceholder', 'bash')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('vibeDetails.workingDirectory', 'Working Directory')}\n </label>\n <input\n ref={sessionWorkDirRef}\n type=\"text\"\n defaultValue={vibe.path || ''}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary\"\n />\n </div>\n </div>\n <div className=\"flex flex-col sm:flex-row justify-end gap-3 mt-6\">\n <button\n onClick={() => setShowSessionModal(false)}\n disabled={sessionCreateLoading}\n className=\"px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n <button\n onClick={handleSubmitCreateSession}\n disabled={sessionCreateLoading}\n className=\"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\"\n >\n {sessionCreateLoading\n ? tr('sessions.creating', 'Creating...')\n : tr('sessions.createSession', 'Create Session')}\n </button>\n </div>\n </div>\n </div>\n )}\n </MotionPage>\n );\n}\n\n/* ── Vibe Catalogs Tab ─────────────────────────────────────────────────── */\n\nfunction VibeCatalogsTab({\n vibeId,\n tr,\n navigate,\n}: {\n vibeId: string;\n tr: (key: string, fallback: string) => string;\n navigate: (path: string) => void;\n}) {\n const [showAddDialog, setShowAddDialog] = useState(false);\n\n const { data, loading, refetch } = useGetVibeCatalogsQuery({ fetchPolicy: 'cache-and-network' });\n\n const [addVibeToCatalog] = useAddVibeToCatalogMutation({\n refetchQueries: ['GetVibeCatalogs'],\n });\n const [removeVibeFromCatalog] = useRemoveVibeFromCatalogMutation({\n refetchQueries: ['GetVibeCatalogs'],\n });\n\n const allCatalogs = data?.vibecontrolsCatalogs?.items ?? [];\n\n const memberCatalogs = allCatalogs.filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (cat: any) => cat.vibes?.some((v: any) => v.vibeId === vibeId)\n );\n\n const availableCatalogs = allCatalogs.filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (cat: any) => !cat.vibes?.some((v: any) => v.vibeId === vibeId)\n );\n\n const handleAdd = async (catalogId: string) => {\n await addVibeToCatalog({ variables: { catalogId, vibeId } });\n await refetch();\n setShowAddDialog(false);\n };\n\n const handleRemove = async (catalogId: string) => {\n await removeVibeFromCatalog({ variables: { catalogId, vibeId } });\n await refetch();\n };\n\n if (loading && allCatalogs.length === 0) {\n return <LoadingState message={tr('vibeDetails.loadingCatalogs', 'Loading catalogs...')} />;\n }\n\n return (\n <>\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Library className=\"w-5 h-5\" />\n {tr('vibeDetails.catalogsTitle', 'Catalogs')}\n <span className=\"text-sm font-normal text-text-secondary\">({memberCatalogs.length})</span>\n </h3>\n <button\n onClick={() => setShowAddDialog(true)}\n className=\"flex items-center gap-2 px-3 py-2 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"w-4 h-4\" />\n {tr('vibeDetails.addToCatalog', 'Add to Catalog')}\n </button>\n </div>\n\n {memberCatalogs.length > 0 ? (\n <div className=\"space-y-2\">\n {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}\n {memberCatalogs.map((cat: any) => (\n <Card key={cat.id}>\n <div className=\"p-3 flex items-center justify-between\">\n <button\n onClick={() => navigate(`/catalogs/${cat.id}`)}\n className=\"flex items-center gap-3 text-left hover:opacity-80 transition-opacity\"\n >\n <Library className=\"w-5 h-5 text-action-primary-bg flex-shrink-0\" />\n <div>\n <p className=\"font-medium text-text-primary text-sm\">{cat.name}</p>\n <p className=\"text-xs text-text-secondary\">{cat.visibility}</p>\n </div>\n </button>\n <button\n onClick={() => handleRemove(cat.id)}\n className=\"p-1.5 text-text-muted hover:text-status-error-text hover:bg-status-error-bg rounded-md transition-colors\"\n title={tr('vibeDetails.removeFromCatalog', 'Remove from catalog')}\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </Card>\n ))}\n </div>\n ) : (\n <EmptyState\n icon={<Library className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noCatalogs', 'Not in any catalogs')}\n description={tr(\n 'vibeDetails.noCatalogsDesc',\n 'Add this vibe to catalogs to organize and track it alongside other components'\n )}\n />\n )}\n\n {/* Add to Catalog Dialog */}\n {showAddDialog && (\n <div className=\"fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4\">\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n className=\"bg-bg-surface rounded-lg w-full max-w-md max-h-[60vh] flex flex-col\"\n >\n <div className=\"p-4 border-b border-border-default\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr('vibeDetails.addToCatalogTitle', 'Add Vibe to Catalog')}\n </h2>\n </div>\n <div className=\"flex-1 overflow-y-auto p-2\">\n {availableCatalogs.length === 0 ? (\n <div className=\"p-4 text-center text-text-secondary text-sm\">\n {tr(\n 'vibeDetails.noAvailableCatalogs',\n 'No available catalogs. This vibe is already in all catalogs.'\n )}\n </div>\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n availableCatalogs.map((cat: any) => (\n <button\n key={cat.id}\n onClick={() => handleAdd(cat.id)}\n className=\"w-full flex items-center justify-between p-3 rounded-md hover:bg-bg-sunken transition-colors text-left\"\n >\n <div>\n <p className=\"font-medium text-text-primary text-sm\">{cat.name}</p>\n <p className=\"text-xs text-text-secondary\">{cat.visibility}</p>\n </div>\n <Plus className=\"w-4 h-4 text-text-secondary\" />\n </button>\n ))\n )}\n </div>\n <div className=\"p-4 border-t border-border-default\">\n <button\n onClick={() => setShowAddDialog(false)}\n className=\"w-full px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors\"\n >\n {tr('common.close', 'Close')}\n </button>\n </div>\n </motion.div>\n </div>\n )}\n </>\n );\n}\n\n/* ── Playground Tab (REST / GraphQL) ───────────────────────────────────── */\n\nfunction PlaygroundTab({\n vibeId,\n agentId,\n profile,\n tunnelUrl,\n apiKey,\n type,\n tr,\n}: {\n vibeId: string;\n agentId: string | null;\n profile: string;\n tunnelUrl: string;\n apiKey: string | null;\n type: 'rest' | 'graphql';\n tr: (key: string, fallback: string) => string;\n}) {\n const isRest = type === 'rest';\n const pluginPath = 'graphiql';\n // Canonical agent → profile → plugins/data hierarchy.\n const configUrl = `${tunnelUrl}/api/profiles/${encodeURIComponent(profile)}/${pluginPath}/config/${vibeId}`;\n\n const [endpointUrl, setEndpointUrl] = useState('');\n const [configLoaded, setConfigLoaded] = useState(false);\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [iframeKey, setIframeKey] = useState(0);\n\n // Load existing config on mount\n useEffect(() => {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (apiKey) headers['x-agent-api-key'] = apiKey;\n\n fetch(configUrl, { headers })\n .then((r) => (r.ok ? r.json() : null))\n .then((data) => {\n if (data) {\n const url = isRest ? data.openapiUrl || data.url : data.graphqlUrl || data.url;\n if (url) setEndpointUrl(url);\n }\n setConfigLoaded(true);\n })\n .catch(() => setConfigLoaded(true));\n }, [configUrl, apiKey, isRest]);\n\n const handleSave = async () => {\n if (!endpointUrl.trim()) return;\n setSaving(true);\n setSaved(false);\n try {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (apiKey) headers['x-agent-api-key'] = apiKey;\n\n const body = isRest ? { openapiUrl: endpointUrl.trim() } : { graphqlUrl: endpointUrl.trim() };\n\n await fetch(configUrl, {\n method: 'PUT',\n headers,\n body: JSON.stringify(body),\n });\n setSaved(true);\n setIframeKey((k) => k + 1); // reload iframe\n setTimeout(() => setSaved(false), 3000);\n } catch {\n // silently fail\n } finally {\n setSaving(false);\n }\n };\n\n // Iframe-token (Phase C): replaces the previous ?apiKey= URL param.\n // Token TTL <= 600s; refresh ~60s before expiry.\n const [iframeToken, setIframeToken] = useState<IframeTokenResponse | null>(null);\n const [tokenError, setTokenError] = useState<string | null>(null);\n const iframePathPrefix = `/ui/${pluginPath}`;\n\n useEffect(() => {\n if (!agentId) return;\n let cancelled = false;\n let handle: IframeTokenAutoRefreshHandle | null = null;\n\n const onRefresh = (next: IframeTokenResponse) => {\n if (cancelled) return;\n setIframeToken(next);\n handle = scheduleIframeTokenRefresh(\n agentId,\n profile,\n iframePathPrefix,\n next,\n onRefresh,\n (err) => setTokenError(err.message)\n );\n };\n\n mintIframeToken(agentId, profile, iframePathPrefix)\n .then((tok) => {\n if (cancelled) return;\n setIframeToken(tok);\n handle = scheduleIframeTokenRefresh(\n agentId,\n profile,\n iframePathPrefix,\n tok,\n onRefresh,\n (err) => setTokenError(err.message)\n );\n })\n .catch((err: unknown) => {\n if (cancelled) return;\n setTokenError(err instanceof Error ? err.message : String(err));\n });\n\n return () => {\n cancelled = true;\n handle?.cancel();\n };\n }, [agentId, profile, iframePathPrefix]);\n\n const iframeBaseUrl = `${tunnelUrl}/ui/${pluginPath}?vibeId=${vibeId}`;\n const iframeSrc = iframeToken\n ? appendIframeTokenParam(iframeBaseUrl, iframeToken.token)\n : iframeBaseUrl;\n\n return (\n <div className=\"space-y-4\">\n {/* Config Bar */}\n <Card>\n <div className=\"p-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n {isRest ? (\n <Globe className=\"w-5 h-5 text-text-secondary\" />\n ) : (\n <Network className=\"w-5 h-5 text-text-secondary\" />\n )}\n <h3 className=\"font-semibold text-text-primary\">\n {isRest\n ? tr('vibeDetails.restPlaygroundTitle', 'REST API Playground')\n : tr('vibeDetails.graphqlPlaygroundTitle', 'GraphQL Playground')}\n </h3>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"url\"\n value={endpointUrl}\n onChange={(e) => setEndpointUrl(e.target.value)}\n placeholder={\n isRest\n ? tr(\n 'vibeDetails.enterSwaggerUrl',\n 'Enter OpenAPI/Swagger URL (e.g. https://petstore3.swagger.io/api/v3/openapi.json)'\n )\n : tr(\n 'vibeDetails.enterGraphqlUrl',\n 'Enter GraphQL endpoint URL (e.g. https://countries.trevorblades.com/graphql)'\n )\n }\n className=\"flex-1 px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder text-sm\"\n onKeyDown={(e) => e.key === 'Enter' && handleSave()}\n />\n <button\n onClick={handleSave}\n disabled={saving || !endpointUrl.trim()}\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 whitespace-nowrap\"\n >\n {saving ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : saved ? (\n <Check className=\"w-4 h-4\" />\n ) : (\n <ExternalLinkIcon className=\"w-4 h-4\" />\n )}\n {saving\n ? tr('common.saving', 'Saving...')\n : saved\n ? tr('common.saved', 'Saved!')\n : tr('vibeDetails.loadApi', 'Load API')}\n </button>\n </div>\n {!configLoaded && (\n <p className=\"text-xs text-text-muted mt-1\">\n {tr('vibeDetails.loadingConfig', 'Loading saved configuration...')}\n </p>\n )}\n </div>\n </Card>\n\n {/* Iframe (gated on iframe-token mint when agentId is present) */}\n {agentId && !iframeToken ? (\n <div className=\"p-8 text-center text-sm text-text-secondary rounded-md border border-border-default bg-bg-sunken\">\n {tokenError\n ? tr('vibeDetails.iframeTokenError', `Iframe token error: ${tokenError}`)\n : tr('vibeDetails.mintingIframeToken', 'Authorizing iframe…')}\n </div>\n ) : (\n <iframe\n key={iframeKey}\n src={iframeSrc}\n title={isRest ? 'REST API Playground' : 'GraphQL Playground'}\n className=\"w-full rounded-md border border-border-default bg-bg-sunken\"\n style={{ height: '700px' }}\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups\"\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}