@xenosystem/agent-interface-ui 0.1.25 → 0.1.27

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 (380) hide show
  1. package/dist/adapters/agentHostPlatformBridge.d.ts.map +1 -1
  2. package/dist/adapters/agentHostPlatformBridge.js +96 -16
  3. package/dist/adapters/agentHostPlatformBridge.js.map +1 -1
  4. package/dist/adapters/hubAgentPlatformBridge.d.ts.map +1 -1
  5. package/dist/adapters/hubAgentPlatformBridge.js +2 -0
  6. package/dist/adapters/hubAgentPlatformBridge.js.map +1 -1
  7. package/dist/adapters/scopedBackupBridge.d.ts +4 -0
  8. package/dist/adapters/scopedBackupBridge.d.ts.map +1 -0
  9. package/dist/adapters/scopedBackupBridge.js +49 -0
  10. package/dist/adapters/scopedBackupBridge.js.map +1 -0
  11. package/dist/adapters/xenoAgentCompatibilityBridge.d.ts.map +1 -1
  12. package/dist/adapters/xenoAgentCompatibilityBridge.js +9 -1
  13. package/dist/adapters/xenoAgentCompatibilityBridge.js.map +1 -1
  14. package/dist/agent.css +13227 -0
  15. package/dist/components/agent/AgentIdentityGenerator.d.ts +16 -0
  16. package/dist/components/agent/AgentIdentityGenerator.d.ts.map +1 -0
  17. package/dist/components/agent/AgentIdentityGenerator.js +80 -0
  18. package/dist/components/agent/AgentIdentityGenerator.js.map +1 -0
  19. package/dist/components/agent/AgentInterface.d.ts +1 -0
  20. package/dist/components/agent/AgentInterface.d.ts.map +1 -1
  21. package/dist/components/agent/AgentInterface.js +1816 -643
  22. package/dist/components/agent/AgentInterface.js.map +1 -1
  23. package/dist/components/agent/AgentNotificationBanner.d.ts +10 -0
  24. package/dist/components/agent/AgentNotificationBanner.d.ts.map +1 -0
  25. package/dist/components/agent/AgentNotificationBanner.js +28 -0
  26. package/dist/components/agent/AgentNotificationBanner.js.map +1 -0
  27. package/dist/components/agent/AgentOnboarding.d.ts +16 -2
  28. package/dist/components/agent/AgentOnboarding.d.ts.map +1 -1
  29. package/dist/components/agent/AgentOnboarding.js +93 -201
  30. package/dist/components/agent/AgentOnboarding.js.map +1 -1
  31. package/dist/components/agent/AgentView.d.ts.map +1 -1
  32. package/dist/components/agent/AgentView.js +533 -308
  33. package/dist/components/agent/AgentView.js.map +1 -1
  34. package/dist/components/agent/AgentWorkbenchPanel.d.ts +3 -1
  35. package/dist/components/agent/AgentWorkbenchPanel.d.ts.map +1 -1
  36. package/dist/components/agent/AgentWorkbenchPanel.js +3 -2
  37. package/dist/components/agent/AgentWorkbenchPanel.js.map +1 -1
  38. package/dist/components/agent/AgentWorkspaceBrowserPanel.d.ts +4 -1
  39. package/dist/components/agent/AgentWorkspaceBrowserPanel.d.ts.map +1 -1
  40. package/dist/components/agent/AgentWorkspaceBrowserPanel.js +23 -195
  41. package/dist/components/agent/AgentWorkspaceBrowserPanel.js.map +1 -1
  42. package/dist/components/agent/AgentsWorkspaceView.d.ts +12 -0
  43. package/dist/components/agent/AgentsWorkspaceView.d.ts.map +1 -0
  44. package/dist/components/agent/AgentsWorkspaceView.js +129 -0
  45. package/dist/components/agent/AgentsWorkspaceView.js.map +1 -0
  46. package/dist/components/agent/DevelopmentCoordinationPanel.d.ts +7 -0
  47. package/dist/components/agent/DevelopmentCoordinationPanel.d.ts.map +1 -1
  48. package/dist/components/agent/DevelopmentCoordinationPanel.js +57 -49
  49. package/dist/components/agent/DevelopmentCoordinationPanel.js.map +1 -1
  50. package/dist/components/agent/KnowledgePanel.d.ts.map +1 -1
  51. package/dist/components/agent/KnowledgePanel.js +17 -67
  52. package/dist/components/agent/KnowledgePanel.js.map +1 -1
  53. package/dist/components/agent/LiveConversationCollaboration.d.ts +27 -0
  54. package/dist/components/agent/LiveConversationCollaboration.d.ts.map +1 -0
  55. package/dist/components/agent/LiveConversationCollaboration.js +127 -0
  56. package/dist/components/agent/LiveConversationCollaboration.js.map +1 -0
  57. package/dist/components/agent/MonacoDiffWorkbenchEditor.d.ts.map +1 -1
  58. package/dist/components/agent/MonacoDiffWorkbenchEditor.js +1 -1
  59. package/dist/components/agent/MonacoDiffWorkbenchEditor.js.map +1 -1
  60. package/dist/components/agent/MonacoWorkbenchEditor.d.ts.map +1 -1
  61. package/dist/components/agent/MonacoWorkbenchEditor.js +3 -3
  62. package/dist/components/agent/MonacoWorkbenchEditor.js.map +1 -1
  63. package/dist/components/agent/OwnedBrowserController.d.ts +55 -0
  64. package/dist/components/agent/OwnedBrowserController.d.ts.map +1 -0
  65. package/dist/components/agent/OwnedBrowserController.js +166 -0
  66. package/dist/components/agent/OwnedBrowserController.js.map +1 -0
  67. package/dist/components/agent/OwnedWorkforceView.d.ts +10 -0
  68. package/dist/components/agent/OwnedWorkforceView.d.ts.map +1 -0
  69. package/dist/components/agent/OwnedWorkforceView.js +256 -0
  70. package/dist/components/agent/OwnedWorkforceView.js.map +1 -0
  71. package/dist/components/agent/PluginManager.d.ts +34 -0
  72. package/dist/components/agent/PluginManager.d.ts.map +1 -1
  73. package/dist/components/agent/PluginManager.js +187 -126
  74. package/dist/components/agent/PluginManager.js.map +1 -1
  75. package/dist/components/agent/ProjectsWorkspaceView.d.ts +14 -0
  76. package/dist/components/agent/ProjectsWorkspaceView.d.ts.map +1 -0
  77. package/dist/components/agent/ProjectsWorkspaceView.js +176 -0
  78. package/dist/components/agent/ProjectsWorkspaceView.js.map +1 -0
  79. package/dist/components/agent/RunReviewPanel.d.ts +8 -13
  80. package/dist/components/agent/RunReviewPanel.d.ts.map +1 -1
  81. package/dist/components/agent/RunReviewPanel.js +120 -106
  82. package/dist/components/agent/RunReviewPanel.js.map +1 -1
  83. package/dist/components/agent/ScheduledWorkspaceView.d.ts +19 -0
  84. package/dist/components/agent/ScheduledWorkspaceView.d.ts.map +1 -0
  85. package/dist/components/agent/ScheduledWorkspaceView.js +150 -0
  86. package/dist/components/agent/ScheduledWorkspaceView.js.map +1 -0
  87. package/dist/components/agent/SdkSessionPanel.d.ts +25 -0
  88. package/dist/components/agent/SdkSessionPanel.d.ts.map +1 -0
  89. package/dist/components/agent/SdkSessionPanel.js +15 -0
  90. package/dist/components/agent/SdkSessionPanel.js.map +1 -0
  91. package/dist/components/agent/SlashCommandAutocomplete.d.ts +12 -0
  92. package/dist/components/agent/SlashCommandAutocomplete.d.ts.map +1 -0
  93. package/dist/components/agent/SlashCommandAutocomplete.js +33 -0
  94. package/dist/components/agent/SlashCommandAutocomplete.js.map +1 -0
  95. package/dist/components/agent/TeamsWorkspaceView.d.ts +12 -0
  96. package/dist/components/agent/TeamsWorkspaceView.d.ts.map +1 -0
  97. package/dist/components/agent/TeamsWorkspaceView.js +127 -0
  98. package/dist/components/agent/TeamsWorkspaceView.js.map +1 -0
  99. package/dist/components/agent/WorkspacePersistenceNotice.d.ts +3 -0
  100. package/dist/components/agent/WorkspacePersistenceNotice.d.ts.map +1 -0
  101. package/dist/components/agent/WorkspacePersistenceNotice.js +23 -0
  102. package/dist/components/agent/WorkspacePersistenceNotice.js.map +1 -0
  103. package/dist/components/agent/acp/AcpAgentConfigForm.d.ts +1 -0
  104. package/dist/components/agent/acp/AcpAgentConfigForm.d.ts.map +1 -1
  105. package/dist/components/agent/acp/AcpAgentConfigForm.js +47 -14
  106. package/dist/components/agent/acp/AcpAgentConfigForm.js.map +1 -1
  107. package/dist/components/agent/acp/AcpAgentDiagnosticsPanel.js +1 -1
  108. package/dist/components/agent/acp/AcpAgentDiagnosticsPanel.js.map +1 -1
  109. package/dist/components/agent/acp/AcpAgentManager.d.ts.map +1 -1
  110. package/dist/components/agent/acp/AcpAgentManager.js +18 -18
  111. package/dist/components/agent/acp/AcpAgentManager.js.map +1 -1
  112. package/dist/components/agent/acp/AcpAgentTestResultPanel.js +1 -1
  113. package/dist/components/agent/acp/AcpAgentTestResultPanel.js.map +1 -1
  114. package/dist/components/agent/acp/AcpApprovalPanel.js +2 -2
  115. package/dist/components/agent/acp/AcpApprovalPanel.js.map +1 -1
  116. package/dist/components/agent/acp/AcpCertificationPanel.js +1 -1
  117. package/dist/components/agent/acp/AcpCertificationPanel.js.map +1 -1
  118. package/dist/components/agent/acp/AcpLiveProviderWorkflowPanel.js +1 -1
  119. package/dist/components/agent/acp/AcpLiveProviderWorkflowPanel.js.map +1 -1
  120. package/dist/components/agent/acp/AcpProviderManagerPanel.js +1 -1
  121. package/dist/components/agent/acp/AcpProviderManagerPanel.js.map +1 -1
  122. package/dist/components/agent/acp/AcpProviderModelsPanel.js +1 -1
  123. package/dist/components/agent/acp/AcpProviderModelsPanel.js.map +1 -1
  124. package/dist/components/agent/acp/AcpSupportBundlePanel.js +1 -1
  125. package/dist/components/agent/acp/AcpSupportBundlePanel.js.map +1 -1
  126. package/dist/components/agent/collaborationWindow.d.ts +11 -0
  127. package/dist/components/agent/collaborationWindow.d.ts.map +1 -0
  128. package/dist/components/agent/collaborationWindow.js +10 -0
  129. package/dist/components/agent/collaborationWindow.js.map +1 -0
  130. package/dist/components/agent/conversationCollaborationAppendJournal.d.ts +25 -0
  131. package/dist/components/agent/conversationCollaborationAppendJournal.d.ts.map +1 -0
  132. package/dist/components/agent/conversationCollaborationAppendJournal.js +118 -0
  133. package/dist/components/agent/conversationCollaborationAppendJournal.js.map +1 -0
  134. package/dist/components/agent/conversationCollaborationController.d.ts +96 -0
  135. package/dist/components/agent/conversationCollaborationController.d.ts.map +1 -0
  136. package/dist/components/agent/conversationCollaborationController.js +597 -0
  137. package/dist/components/agent/conversationCollaborationController.js.map +1 -0
  138. package/dist/components/agent/destructiveConfirmation.d.ts +76 -0
  139. package/dist/components/agent/destructiveConfirmation.d.ts.map +1 -0
  140. package/dist/components/agent/destructiveConfirmation.js +231 -0
  141. package/dist/components/agent/destructiveConfirmation.js.map +1 -0
  142. package/dist/components/agent/developmentCoordinationController.d.ts +43 -0
  143. package/dist/components/agent/developmentCoordinationController.d.ts.map +1 -0
  144. package/dist/components/agent/developmentCoordinationController.js +94 -0
  145. package/dist/components/agent/developmentCoordinationController.js.map +1 -0
  146. package/dist/components/agent/developmentCoordinationProjection.d.ts +24 -0
  147. package/dist/components/agent/developmentCoordinationProjection.d.ts.map +1 -1
  148. package/dist/components/agent/developmentCoordinationProjection.js +34 -5
  149. package/dist/components/agent/developmentCoordinationProjection.js.map +1 -1
  150. package/dist/components/agent/editorOperationAuthority.d.ts +29 -0
  151. package/dist/components/agent/editorOperationAuthority.d.ts.map +1 -0
  152. package/dist/components/agent/editorOperationAuthority.js +73 -0
  153. package/dist/components/agent/editorOperationAuthority.js.map +1 -0
  154. package/dist/components/agent/knowledgePagination.d.ts +7 -0
  155. package/dist/components/agent/knowledgePagination.d.ts.map +1 -0
  156. package/dist/components/agent/knowledgePagination.js +7 -0
  157. package/dist/components/agent/knowledgePagination.js.map +1 -0
  158. package/dist/components/agent/knowledgePanelController.d.ts +32 -0
  159. package/dist/components/agent/knowledgePanelController.d.ts.map +1 -0
  160. package/dist/components/agent/knowledgePanelController.js +119 -0
  161. package/dist/components/agent/knowledgePanelController.js.map +1 -0
  162. package/dist/components/agent/monacoWorkbenchShared.js +1 -1
  163. package/dist/components/agent/onboardingModels.d.ts +31 -0
  164. package/dist/components/agent/onboardingModels.d.ts.map +1 -0
  165. package/dist/components/agent/onboardingModels.js +107 -0
  166. package/dist/components/agent/onboardingModels.js.map +1 -0
  167. package/dist/components/agent/personalConversationScope.d.ts +26 -0
  168. package/dist/components/agent/personalConversationScope.d.ts.map +1 -0
  169. package/dist/components/agent/personalConversationScope.js +43 -0
  170. package/dist/components/agent/personalConversationScope.js.map +1 -0
  171. package/dist/components/agent/reviewRequestScope.d.ts +16 -0
  172. package/dist/components/agent/reviewRequestScope.d.ts.map +1 -0
  173. package/dist/components/agent/reviewRequestScope.js +101 -0
  174. package/dist/components/agent/reviewRequestScope.js.map +1 -0
  175. package/dist/components/agent/scheduleCreationAttempt.d.ts +12 -0
  176. package/dist/components/agent/scheduleCreationAttempt.d.ts.map +1 -0
  177. package/dist/components/agent/scheduleCreationAttempt.js +30 -0
  178. package/dist/components/agent/scheduleCreationAttempt.js.map +1 -0
  179. package/dist/components/agent/settings/EntitySettingsLayout.d.ts +1 -1
  180. package/dist/components/agent/settings/EntitySettingsLayout.d.ts.map +1 -1
  181. package/dist/components/agent/settings/EntitySettingsLayout.js +64 -44
  182. package/dist/components/agent/settings/EntitySettingsLayout.js.map +1 -1
  183. package/dist/components/agent/settings/SettingsNavigation.d.ts.map +1 -1
  184. package/dist/components/agent/settings/SettingsNavigation.js +17 -17
  185. package/dist/components/agent/settings/SettingsNavigation.js.map +1 -1
  186. package/dist/components/agent/settings/entityArchiveState.d.ts +24 -0
  187. package/dist/components/agent/settings/entityArchiveState.d.ts.map +1 -0
  188. package/dist/components/agent/settings/entityArchiveState.js +12 -0
  189. package/dist/components/agent/settings/entityArchiveState.js.map +1 -0
  190. package/dist/components/agent/settings/sections/AccessMembersSection.d.ts.map +1 -1
  191. package/dist/components/agent/settings/sections/AccessMembersSection.js +10 -25
  192. package/dist/components/agent/settings/sections/AccessMembersSection.js.map +1 -1
  193. package/dist/components/agent/settings/sections/AccountWorkspacePanel.d.ts +16 -0
  194. package/dist/components/agent/settings/sections/AccountWorkspacePanel.d.ts.map +1 -0
  195. package/dist/components/agent/settings/sections/AccountWorkspacePanel.js +265 -0
  196. package/dist/components/agent/settings/sections/AccountWorkspacePanel.js.map +1 -0
  197. package/dist/components/agent/settings/sections/AgentPermissionRulesPanel.d.ts.map +1 -1
  198. package/dist/components/agent/settings/sections/AgentPermissionRulesPanel.js +47 -32
  199. package/dist/components/agent/settings/sections/AgentPermissionRulesPanel.js.map +1 -1
  200. package/dist/components/agent/settings/sections/DangerZoneSection.d.ts.map +1 -1
  201. package/dist/components/agent/settings/sections/DangerZoneSection.js +30 -6
  202. package/dist/components/agent/settings/sections/DangerZoneSection.js.map +1 -1
  203. package/dist/components/agent/settings/sections/DefaultAgentConfigSection.d.ts.map +1 -1
  204. package/dist/components/agent/settings/sections/DefaultAgentConfigSection.js +47 -37
  205. package/dist/components/agent/settings/sections/DefaultAgentConfigSection.js.map +1 -1
  206. package/dist/components/agent/settings/sections/EnvironmentSecretsSection.d.ts.map +1 -1
  207. package/dist/components/agent/settings/sections/EnvironmentSecretsSection.js +30 -43
  208. package/dist/components/agent/settings/sections/EnvironmentSecretsSection.js.map +1 -1
  209. package/dist/components/agent/settings/sections/ExportBackupSection.d.ts +3 -1
  210. package/dist/components/agent/settings/sections/ExportBackupSection.d.ts.map +1 -1
  211. package/dist/components/agent/settings/sections/ExportBackupSection.js +14 -12
  212. package/dist/components/agent/settings/sections/ExportBackupSection.js.map +1 -1
  213. package/dist/components/agent/settings/sections/GeneralSection.d.ts.map +1 -1
  214. package/dist/components/agent/settings/sections/GeneralSection.js +47 -4
  215. package/dist/components/agent/settings/sections/GeneralSection.js.map +1 -1
  216. package/dist/components/agent/settings/sections/IntegrationsSection.d.ts.map +1 -1
  217. package/dist/components/agent/settings/sections/IntegrationsSection.js +14 -21
  218. package/dist/components/agent/settings/sections/IntegrationsSection.js.map +1 -1
  219. package/dist/components/agent/settings/sections/NotificationsSection.d.ts.map +1 -1
  220. package/dist/components/agent/settings/sections/NotificationsSection.js +125 -20
  221. package/dist/components/agent/settings/sections/NotificationsSection.js.map +1 -1
  222. package/dist/components/agent/settings/sections/ResourceLimitsSection.d.ts.map +1 -1
  223. package/dist/components/agent/settings/sections/ResourceLimitsSection.js +7 -7
  224. package/dist/components/agent/settings/sections/ResourceLimitsSection.js.map +1 -1
  225. package/dist/components/agent/settings/sections/SecurityComplianceSection.d.ts.map +1 -1
  226. package/dist/components/agent/settings/sections/SecurityComplianceSection.js +5 -4
  227. package/dist/components/agent/settings/sections/SecurityComplianceSection.js.map +1 -1
  228. package/dist/components/agent/settings/sections/UsageAnalyticsSection.d.ts.map +1 -1
  229. package/dist/components/agent/settings/sections/UsageAnalyticsSection.js +2 -3
  230. package/dist/components/agent/settings/sections/UsageAnalyticsSection.js.map +1 -1
  231. package/dist/components/agent/settings/sections/WorkspaceDirectoryAccessSection.d.ts.map +1 -1
  232. package/dist/components/agent/settings/sections/WorkspaceDirectoryAccessSection.js +39 -26
  233. package/dist/components/agent/settings/sections/WorkspaceDirectoryAccessSection.js.map +1 -1
  234. package/dist/components/agent/settings/sections/WorkspaceKeysPanel.d.ts +6 -0
  235. package/dist/components/agent/settings/sections/WorkspaceKeysPanel.d.ts.map +1 -0
  236. package/dist/components/agent/settings/sections/WorkspaceKeysPanel.js +205 -0
  237. package/dist/components/agent/settings/sections/WorkspaceKeysPanel.js.map +1 -0
  238. package/dist/components/agent/settings/sections/environmentDraftAction.d.ts +3 -0
  239. package/dist/components/agent/settings/sections/environmentDraftAction.d.ts.map +1 -0
  240. package/dist/components/agent/settings/sections/environmentDraftAction.js +6 -0
  241. package/dist/components/agent/settings/sections/environmentDraftAction.js.map +1 -0
  242. package/dist/components/agent/settings/sections/membershipOperationProjection.d.ts +3 -0
  243. package/dist/components/agent/settings/sections/membershipOperationProjection.d.ts.map +1 -0
  244. package/dist/components/agent/settings/sections/membershipOperationProjection.js +9 -0
  245. package/dist/components/agent/settings/sections/membershipOperationProjection.js.map +1 -0
  246. package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.d.ts +6 -0
  247. package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.d.ts.map +1 -0
  248. package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.js +8 -0
  249. package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.js.map +1 -0
  250. package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts +25 -0
  251. package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts.map +1 -0
  252. package/dist/components/agent/settings/shared/InAppConfirmationDialog.js +89 -0
  253. package/dist/components/agent/settings/shared/InAppConfirmationDialog.js.map +1 -0
  254. package/dist/components/agent/settings/shared/InputField.d.ts +1 -1
  255. package/dist/components/agent/settings/shared/InputField.d.ts.map +1 -1
  256. package/dist/components/agent/settings/shared/InputField.js +4 -3
  257. package/dist/components/agent/settings/shared/InputField.js.map +1 -1
  258. package/dist/components/agent/settings/shared/MembersTable.d.ts +3 -3
  259. package/dist/components/agent/settings/shared/MembersTable.d.ts.map +1 -1
  260. package/dist/components/agent/settings/shared/MembersTable.js +1 -1
  261. package/dist/components/agent/settings/shared/MembersTable.js.map +1 -1
  262. package/dist/components/agent/settings/shared/ScopedAuditPanel.d.ts +5 -0
  263. package/dist/components/agent/settings/shared/ScopedAuditPanel.d.ts.map +1 -0
  264. package/dist/components/agent/settings/shared/ScopedAuditPanel.js +70 -0
  265. package/dist/components/agent/settings/shared/ScopedAuditPanel.js.map +1 -0
  266. package/dist/components/agent/settings/shared/SettingsCard.d.ts +2 -1
  267. package/dist/components/agent/settings/shared/SettingsCard.d.ts.map +1 -1
  268. package/dist/components/agent/settings/shared/SettingsCard.js +2 -2
  269. package/dist/components/agent/settings/shared/SettingsCard.js.map +1 -1
  270. package/dist/components/agent/settings/shared/ToggleSwitch.d.ts.map +1 -1
  271. package/dist/components/agent/settings/shared/ToggleSwitch.js +1 -1
  272. package/dist/components/agent/settings/shared/ToggleSwitch.js.map +1 -1
  273. package/dist/components/agent/settings/shared/UsageChart.d.ts +10 -0
  274. package/dist/components/agent/settings/shared/UsageChart.d.ts.map +1 -1
  275. package/dist/components/agent/settings/shared/UsageChart.js +16 -10
  276. package/dist/components/agent/settings/shared/UsageChart.js.map +1 -1
  277. package/dist/components/agent/settings/shared/WorkspaceRulesControl.d.ts +8 -0
  278. package/dist/components/agent/settings/shared/WorkspaceRulesControl.d.ts.map +1 -0
  279. package/dist/components/agent/settings/shared/WorkspaceRulesControl.js +26 -0
  280. package/dist/components/agent/settings/shared/WorkspaceRulesControl.js.map +1 -0
  281. package/dist/components/agent/settings/shared/useScopedConfirmation.d.ts +8 -0
  282. package/dist/components/agent/settings/shared/useScopedConfirmation.d.ts.map +1 -0
  283. package/dist/components/agent/settings/shared/useScopedConfirmation.js +53 -0
  284. package/dist/components/agent/settings/shared/useScopedConfirmation.js.map +1 -0
  285. package/dist/components/agent/settings/shared/useSettingsConfirmation.d.ts +8 -0
  286. package/dist/components/agent/settings/shared/useSettingsConfirmation.d.ts.map +1 -0
  287. package/dist/components/agent/settings/shared/useSettingsConfirmation.js +51 -0
  288. package/dist/components/agent/settings/shared/useSettingsConfirmation.js.map +1 -0
  289. package/dist/components/agent/settings/shared/workspaceRulesController.d.ts +28 -0
  290. package/dist/components/agent/settings/shared/workspaceRulesController.d.ts.map +1 -0
  291. package/dist/components/agent/settings/shared/workspaceRulesController.js +82 -0
  292. package/dist/components/agent/settings/shared/workspaceRulesController.js.map +1 -0
  293. package/dist/components/agent/sidebarEntityPins.d.ts +11 -0
  294. package/dist/components/agent/sidebarEntityPins.d.ts.map +1 -0
  295. package/dist/components/agent/sidebarEntityPins.js +37 -0
  296. package/dist/components/agent/sidebarEntityPins.js.map +1 -0
  297. package/dist/components/agent/workspaceHierarchy.d.ts +24 -0
  298. package/dist/components/agent/workspaceHierarchy.d.ts.map +1 -0
  299. package/dist/components/agent/workspaceHierarchy.js +50 -0
  300. package/dist/components/agent/workspaceHierarchy.js.map +1 -0
  301. package/dist/components/product/XenoAgentProductHeader.d.ts +4 -2
  302. package/dist/components/product/XenoAgentProductHeader.d.ts.map +1 -1
  303. package/dist/components/product/XenoAgentProductHeader.js +22 -4
  304. package/dist/components/product/XenoAgentProductHeader.js.map +1 -1
  305. package/dist/components/product/XenoAgentSessionTabs.js +1 -1
  306. package/dist/components/product/XenoAgentSessionTabs.js.map +1 -1
  307. package/dist/components/product/XenoAgentWorkspaceSelector.d.ts +7 -0
  308. package/dist/components/product/XenoAgentWorkspaceSelector.d.ts.map +1 -0
  309. package/dist/components/product/XenoAgentWorkspaceSelector.js +237 -0
  310. package/dist/components/product/XenoAgentWorkspaceSelector.js.map +1 -0
  311. package/dist/components/workspace/WorkspaceCreationWizard.d.ts +6 -0
  312. package/dist/components/workspace/WorkspaceCreationWizard.d.ts.map +1 -0
  313. package/dist/components/workspace/WorkspaceCreationWizard.js +48 -0
  314. package/dist/components/workspace/WorkspaceCreationWizard.js.map +1 -0
  315. package/dist/hooks/useSidebarLayoutPreference.d.ts +29 -0
  316. package/dist/hooks/useSidebarLayoutPreference.d.ts.map +1 -0
  317. package/dist/hooks/useSidebarLayoutPreference.js +83 -0
  318. package/dist/hooks/useSidebarLayoutPreference.js.map +1 -0
  319. package/dist/hooks/useWorkspaceCreation.d.ts +8 -0
  320. package/dist/hooks/useWorkspaceCreation.d.ts.map +1 -0
  321. package/dist/hooks/useWorkspaceCreation.js +40 -0
  322. package/dist/hooks/useWorkspaceCreation.js.map +1 -0
  323. package/dist/index.d.ts +3 -0
  324. package/dist/index.d.ts.map +1 -1
  325. package/dist/index.js +3 -0
  326. package/dist/index.js.map +1 -1
  327. package/dist/platformApiTypes.d.ts +77 -36
  328. package/dist/platformApiTypes.d.ts.map +1 -1
  329. package/dist/platformBridge.d.ts +4 -0
  330. package/dist/platformBridge.d.ts.map +1 -1
  331. package/dist/platformBridge.js +10 -0
  332. package/dist/platformBridge.js.map +1 -1
  333. package/dist/stores/agentChatStore.d.ts +120 -2
  334. package/dist/stores/agentChatStore.d.ts.map +1 -1
  335. package/dist/stores/agentChatStore.js +329 -35
  336. package/dist/stores/agentChatStore.js.map +1 -1
  337. package/dist/stores/agentCreationDefaults.d.ts +25 -0
  338. package/dist/stores/agentCreationDefaults.d.ts.map +1 -0
  339. package/dist/stores/agentCreationDefaults.js +11 -0
  340. package/dist/stores/agentCreationDefaults.js.map +1 -0
  341. package/dist/stores/entitySettingsStore.d.ts +37 -12
  342. package/dist/stores/entitySettingsStore.d.ts.map +1 -1
  343. package/dist/stores/entitySettingsStore.js +558 -585
  344. package/dist/stores/entitySettingsStore.js.map +1 -1
  345. package/dist/stores/suggestionStore.d.ts +9 -2
  346. package/dist/stores/suggestionStore.d.ts.map +1 -1
  347. package/dist/stores/suggestionStore.js +51 -24
  348. package/dist/stores/suggestionStore.js.map +1 -1
  349. package/dist/stores/workspaceCreationAttempt.d.ts +14 -0
  350. package/dist/stores/workspaceCreationAttempt.d.ts.map +1 -0
  351. package/dist/stores/workspaceCreationAttempt.js +35 -0
  352. package/dist/stores/workspaceCreationAttempt.js.map +1 -0
  353. package/dist/stores/workspaceReconciliation.d.ts +6 -0
  354. package/dist/stores/workspaceReconciliation.d.ts.map +1 -0
  355. package/dist/stores/workspaceReconciliation.js +33 -0
  356. package/dist/stores/workspaceReconciliation.js.map +1 -0
  357. package/dist/stores/workspaceStore.d.ts +44 -9
  358. package/dist/stores/workspaceStore.d.ts.map +1 -1
  359. package/dist/stores/workspaceStore.js +238 -99
  360. package/dist/stores/workspaceStore.js.map +1 -1
  361. package/dist/types/agentEditor.d.ts +1 -0
  362. package/dist/types/agentEditor.d.ts.map +1 -1
  363. package/dist/utils/advertisedReasoning.d.ts +25 -0
  364. package/dist/utils/advertisedReasoning.d.ts.map +1 -0
  365. package/dist/utils/advertisedReasoning.js +62 -0
  366. package/dist/utils/advertisedReasoning.js.map +1 -0
  367. package/dist/utils/clipboardCopy.d.ts +4 -0
  368. package/dist/utils/clipboardCopy.d.ts.map +1 -0
  369. package/dist/utils/clipboardCopy.js +27 -0
  370. package/dist/utils/clipboardCopy.js.map +1 -0
  371. package/dist/utils/providerCommandArgs.d.ts +11 -0
  372. package/dist/utils/providerCommandArgs.d.ts.map +1 -0
  373. package/dist/utils/providerCommandArgs.js +18 -0
  374. package/dist/utils/providerCommandArgs.js.map +1 -0
  375. package/dist/utils/rendererTeardown.d.ts +6 -0
  376. package/dist/utils/rendererTeardown.d.ts.map +1 -0
  377. package/dist/utils/rendererTeardown.js +18 -0
  378. package/dist/utils/rendererTeardown.js.map +1 -0
  379. package/package.json +20 -8
  380. package/src/agent.css +39 -9
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { ArrowRightLeft, RefreshCw, Repeat2, Target } from 'lucide-react';
4
4
  import { getAgentPlatformBridge } from '../../platformBridge.js';
5
- import { projectDevelopmentCoordinationState } from './developmentCoordinationProjection.js';
5
+ import { DevelopmentCoordinationController } from './developmentCoordinationController.js';
6
6
  function tryBridge() {
7
7
  try {
8
8
  return getAgentPlatformBridge();
@@ -11,63 +11,71 @@ function tryBridge() {
11
11
  return null;
12
12
  }
13
13
  }
14
+ const PAGE_SIZE = 20;
15
+ function PageControls({ page, pages, onPage }) {
16
+ if (pages <= 1)
17
+ return null;
18
+ return _jsxs("nav", { "aria-label": "History pages", className: "mt-2 flex items-center gap-2 text-[10px] text-white/60", children: [_jsx("button", { disabled: page === 0, onClick: () => onPage(page - 1), children: "Previous" }), _jsxs("span", { children: [page + 1, " / ", pages] }), _jsx("button", { disabled: page + 1 >= pages, onClick: () => onPage(page + 1), children: "Next" })] });
19
+ }
20
+ function Evidence({ items }) {
21
+ const [open, setOpen] = useState(false);
22
+ const [selectedPage, setPage] = useState(0);
23
+ const pages = Math.max(1, Math.ceil(items.length / PAGE_SIZE));
24
+ const page = Math.min(selectedPage, pages - 1);
25
+ return _jsxs("div", { children: [_jsxs("button", { "aria-expanded": open, onClick: () => setOpen(!open), className: "text-[10px] text-white/60", children: ["Evidence (", items.length, ")"] }), open && _jsxs(_Fragment, { children: [items.length === 0 && _jsx("p", { className: "text-[10px] text-white/45", children: "No evidence recorded." }), items.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE).map((item, index) => _jsx("pre", { className: "mt-1 max-h-40 overflow-auto whitespace-pre-wrap break-words text-[10px] text-white/60", children: item }, index)), _jsx(PageControls, { page: page, pages: pages, onPage: setPage })] })] });
26
+ }
27
+ export function GoalVerification({ goal }) {
28
+ const [open, setOpen] = useState(false);
29
+ const [selectedPage, setPage] = useState(0);
30
+ const pages = Math.max(1, Math.ceil(goal.criteria.length / PAGE_SIZE));
31
+ const page = Math.min(selectedPage, pages - 1);
32
+ return _jsxs("div", { className: "mt-2 text-[10px] text-white/60", "data-testid": "goal-verification", children: [_jsxs("p", { children: ["Verification: ", goal.verification.status, " \u00B7 ", goal.verification.satisfied, " satisfied \u00B7 ", goal.verification.failed, " failed \u00B7 ", goal.verification.pending, " pending"] }), goal.verification.summary && _jsx("p", { className: "mt-1 whitespace-pre-wrap", children: goal.verification.summary }), _jsxs("button", { "aria-expanded": open, onClick: () => setOpen(!open), className: "mt-1", children: ["Success criteria (", goal.criteria.length, ")"] }), open && _jsxs(_Fragment, { children: [goal.criteria.length === 0 && _jsx("p", { children: "No success criteria recorded." }), goal.criteria.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE).map((criterion) => _jsxs("div", { className: "mt-2 border-t border-white/[0.06] pt-2", children: [_jsxs("p", { children: [criterion.description, " \u00B7 ", criterion.required ? 'required' : 'optional', " \u00B7 ", criterion.result ? criterion.result.satisfied ? 'satisfied' : 'failed' : 'pending'] }), criterion.result && _jsxs(_Fragment, { children: [_jsx("p", { children: criterion.result.reason }), _jsx("p", { children: criterion.result.evaluatedAt }), _jsx(Evidence, { items: criterion.result.evidence })] })] }, criterion.id)), _jsx(PageControls, { page: page, pages: pages, onPage: setPage }), _jsx(Evidence, { items: goal.verification.evidence })] })] });
33
+ }
34
+ export function IterationHistory({ loop }) {
35
+ const [open, setOpen] = useState(false);
36
+ const [selectedPage, setPage] = useState(0);
37
+ const pages = Math.max(1, Math.ceil(loop.history.length / PAGE_SIZE));
38
+ const page = Math.min(selectedPage, pages - 1);
39
+ const end = Math.max(0, loop.history.length - page * PAGE_SIZE);
40
+ return _jsxs("div", { className: "mt-2 text-[10px] text-white/60", "data-testid": "loop-history", children: [_jsxs("button", { "aria-expanded": open, onClick: () => setOpen(!open), children: ["Iteration history (", loop.history.length, ")"] }), open && _jsxs(_Fragment, { children: [loop.history.length === 0 && _jsx("p", { children: "No valid iteration records available." }), loop.history.slice(Math.max(0, end - PAGE_SIZE), end).reverse().map((iteration) => _jsxs("div", { className: "mt-2 border-t border-white/[0.06] pt-2", children: [_jsxs("p", { children: ["Iteration ", iteration.number, " \u00B7 ", iteration.status] }), _jsx("p", { className: "whitespace-pre-wrap break-words", children: iteration.activity }), _jsxs("p", { children: [iteration.startedAt, iteration.completedAt ? ` → ${iteration.completedAt}` : ''] }), iteration.error && _jsx("pre", { className: "max-h-40 overflow-auto whitespace-pre-wrap break-words", children: iteration.error }), iteration.verificationEventId && _jsxs("p", { children: ["Verification event: ", iteration.verificationEventId] })] }, `${iteration.number}:${iteration.startedAt}`)), _jsx(PageControls, { page: page, pages: pages, onPage: setPage })] })] });
41
+ }
14
42
  export function DevelopmentCoordinationPanel({ sessionId }) {
43
+ return _jsx(CoordinationSessionPanel, { sessionId: sessionId }, sessionId);
44
+ }
45
+ function CoordinationSessionPanel({ sessionId }) {
15
46
  const ownerId = useMemo(() => tryBridge()?.developmentCoordination?.ownerId ?? 'interface:unavailable', []);
16
- const [state, setState] = useState(null);
17
- const [unreachable, setUnreachable] = useState(false);
18
- const [busy, setBusy] = useState(false);
19
- const [error, setError] = useState(null);
47
+ const controller = useRef(null);
48
+ const [snapshot, setSnapshot] = useState({ state: null, loading: true, busy: false, readError: null, actionError: null });
49
+ const { state, loading } = snapshot;
50
+ const busy = snapshot.busy || !state;
51
+ const error = snapshot.actionError || snapshot.readError;
20
52
  const [objective, setObjective] = useState('');
21
53
  const [steering, setSteering] = useState('');
22
54
  const [targetOwner, setTargetOwner] = useState('');
23
- const refresh = useCallback(async () => {
24
- const api = tryBridge()?.developmentCoordination;
25
- if (!api || !sessionId) {
26
- setUnreachable(true);
27
- return;
28
- }
29
- try {
30
- const response = await api.getState({ sessionId });
31
- setState(projectDevelopmentCoordinationState(response.state));
32
- setUnreachable(false);
33
- setError(null);
34
- }
35
- catch (cause) {
36
- setError(cause instanceof Error ? cause.message : 'Coordination state could not be read.');
37
- }
38
- }, [sessionId]);
39
- const act = useCallback(async (action, payload) => {
40
- const api = tryBridge()?.developmentCoordination;
41
- if (!api)
42
- return;
43
- setBusy(true);
44
- try {
45
- const response = await api.action({ sessionId, action, payload });
46
- setState(projectDevelopmentCoordinationState(response.state));
47
- setError(null);
48
- }
49
- catch (cause) {
50
- setError(cause instanceof Error ? cause.message : 'Coordination action failed.');
51
- }
52
- finally {
53
- setBusy(false);
54
- }
55
- }, [sessionId]);
56
- useEffect(() => { void refresh(); }, [refresh]);
57
- useEffect(() => {
58
- const subscribe = tryBridge()?.developmentCoordination?.subscribeChanged;
59
- return subscribe?.(() => { void refresh(); });
60
- }, [refresh]);
55
+ const refresh = useCallback(async () => { await controller.current?.refresh(); }, []);
56
+ const act = useCallback(async (action, payload) => (await controller.current?.act(action, payload) ?? false), []);
61
57
  useEffect(() => {
58
+ const api = tryBridge()?.developmentCoordination;
59
+ const current = new DevelopmentCoordinationController(sessionId, api);
60
+ controller.current = current;
61
+ const unsubscribeState = current.subscribe(() => setSnapshot(current.getSnapshot()));
62
+ const unsubscribe = api?.subscribeChanged?.(() => { void current.refresh(); });
63
+ void current.refresh();
62
64
  // Host events cover mutations made through this process. The CLI owns the
63
65
  // same durable store from a separate process, so those writes cannot reach
64
66
  // this in-memory subscription. Refresh while the panel is mounted to keep
65
67
  // the two frontends coherent without requiring a desktop restart.
66
68
  const timer = window.setInterval(() => { void refresh(); }, 2_000);
67
- return () => window.clearInterval(timer);
68
- }, [refresh]);
69
- if (unreachable)
70
- return _jsx("p", { className: "px-3 py-3 text-[11px] text-white/32", children: "This surface cannot reach durable Goal / Loop / Handoff state." });
71
- return (_jsxs("div", { className: "h-full overflow-y-auto px-3 py-3 space-y-3", "data-testid": "development-coordination-panel", children: [_jsxs("header", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-[11px] uppercase tracking-[0.12em] text-white/65", children: "Development lifecycle" }), _jsx("p", { className: "text-[10px] text-white/28", children: sessionId || 'No active session' })] }), _jsx("button", { type: "button", onClick: () => void refresh(), "aria-label": "Refresh development lifecycle", className: "text-white/36 hover:text-white/72", children: _jsx(RefreshCw, { size: 14, "aria-hidden": true }) })] }), error && _jsx("p", { className: "rounded border border-red-400/20 bg-red-400/5 px-2.5 py-2 text-[10px] text-red-200/70", children: error }), _jsxs("section", { className: "rounded border border-white/[0.06] bg-black/20 px-3 py-2.5", "data-testid": "coordination-goal", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("h3", { className: "flex items-center gap-1.5 text-[10px] uppercase tracking-[0.12em] text-white/46", children: [_jsx(Target, { size: 13 }), " Goal"] }), _jsx("span", { className: "text-[10px] text-white/28", children: state?.goal?.status ?? 'none' })] }), state?.goal ? _jsxs(_Fragment, { children: [_jsx("p", { className: "mt-2 text-[12px] text-white/72", children: state.goal.objective }), _jsx("p", { className: "mt-1 text-[10px] text-white/36", children: state.goal.progress }), _jsxs("p", { className: "mt-1 text-[10px] text-white/24", children: [state.goal.completedTasks, "/", state.goal.totalTasks, " tasks \u00B7 ", state.goal.criteria.length, " criteria"] }), state.goal.currentMilestone && _jsxs("p", { className: "mt-1.5 text-[10px] text-white/42", children: ["Milestone: ", _jsx("span", { className: "text-white/62", children: state.goal.currentMilestone.title }), " \u00B7 ", state.goal.currentMilestone.status] }), state.goal.currentTask && _jsxs("p", { className: "mt-1 text-[10px] text-white/42", children: ["Current: ", _jsx("span", { className: "text-white/62", children: state.goal.currentTask.title }), state.goal.currentTask.assignedAgentId ? ` · ${state.goal.currentTask.assignedAgentId}` : ''] }), state.goal.outstanding.length > 0 && _jsxs("div", { className: "mt-2", children: [_jsx("p", { className: "text-[9px] uppercase tracking-[0.1em] text-white/24", children: "Outstanding" }), _jsx("ul", { className: "mt-1 space-y-0.5", children: state.goal.outstanding.slice(0, 5).map((item) => _jsxs("li", { className: "text-[10px] text-white/38", children: ["\u2022 ", item] }, item)) })] }), state.goal.decisions.length > 0 && _jsxs("p", { className: "mt-1.5 text-[10px] text-white/30", children: ["Latest decision: ", state.goal.decisions.at(-1)] }), _jsxs("div", { className: "mt-2 flex gap-1.5", children: [_jsx("input", { value: steering, onChange: (event) => setSteering(event.target.value), placeholder: "Steer the active goal", className: "min-w-0 flex-1 rounded border border-white/[0.08] bg-black/30 px-2 py-1 text-[10px] text-white/62" }), _jsx("button", { disabled: busy || !steering.trim(), onClick: () => { void act('goal.steer', { goalId: state.goal.id, expectedVersion: state.goal.version, instruction: steering.trim() }); setSteering(''); }, className: "rounded bg-white/[0.07] px-2 text-[10px] text-white/55 disabled:opacity-30", children: "Send" })] })] }) : _jsxs("div", { className: "mt-2 flex gap-1.5", children: [_jsx("input", { value: objective, onChange: (event) => setObjective(event.target.value), placeholder: "Define a durable goal", className: "min-w-0 flex-1 rounded border border-white/[0.08] bg-black/30 px-2 py-1 text-[10px] text-white/62" }), _jsx("button", { disabled: busy || !objective.trim(), onClick: () => { void act('goal.create', { objective: objective.trim() }); setObjective(''); }, className: "rounded bg-white/[0.07] px-2 text-[10px] text-white/55 disabled:opacity-30", children: "Create" })] })] }), _jsxs("section", { className: "rounded border border-white/[0.06] bg-black/20 px-3 py-2.5", "data-testid": "coordination-loop", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("h3", { className: "flex items-center gap-1.5 text-[10px] uppercase tracking-[0.12em] text-white/46", children: [_jsx(Repeat2, { size: 13 }), " Loop"] }), _jsx("span", { className: "text-[10px] text-white/28", children: state?.loop?.status ?? 'none' })] }), state?.loop ? _jsxs(_Fragment, { children: [_jsxs("p", { className: "mt-2 text-[11px] text-white/62", children: [state.loop.kind, " \u00B7 ", state.loop.iterations, " iterations"] }), state.loop.activity && _jsx("p", { className: "mt-1 text-[10px] text-white/32", children: state.loop.activity }), _jsxs("div", { className: "mt-2 flex gap-1.5", children: [state.loop.status === 'paused' ? _jsx("button", { disabled: busy, onClick: () => void act('loop.set_status', { loopId: state.loop.id, expectedVersion: state.loop.version, status: 'running' }), className: "rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55", children: "Resume" }) : _jsx("button", { disabled: busy, onClick: () => void act('loop.set_status', { loopId: state.loop.id, expectedVersion: state.loop.version, status: 'paused' }), className: "rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55", children: "Pause" }), _jsx("button", { disabled: busy, onClick: () => void act('loop.set_status', { loopId: state.loop.id, expectedVersion: state.loop.version, status: 'stopped', reason: 'Stopped from Agent Interface' }), className: "rounded border border-white/[0.07] px-2 py-1 text-[10px] text-white/42", children: "Stop" })] })] }) : _jsx("button", { disabled: busy || !state?.goal, onClick: () => void act('loop.start', { kind: 'goal-continuation', ...(state?.goal ? { goalId: state.goal.id } : {}) }), className: "mt-2 rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55 disabled:opacity-30", children: "Start goal continuation" })] }), _jsxs("section", { className: "rounded border border-white/[0.06] bg-black/20 px-3 py-2.5", "data-testid": "coordination-handoff", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("h3", { className: "flex items-center gap-1.5 text-[10px] uppercase tracking-[0.12em] text-white/46", children: [_jsx(ArrowRightLeft, { size: 13 }), " Handoff"] }), _jsxs("span", { className: "text-[10px] text-white/28", children: ["epoch ", state?.owner?.epoch ?? '—'] })] }), _jsxs("p", { className: "mt-2 text-[10px] text-white/36", children: ["Owner: ", state?.owner?.ownerId ?? 'unclaimed'] }), !state?.owner && _jsx("button", { disabled: busy, onClick: () => void act('ownership.acquire', {}), className: "mt-2 rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55", children: "Acquire this session" }), state?.owner?.ownerId === ownerId && _jsxs("div", { className: "mt-2 flex gap-1.5", children: [_jsx("input", { value: targetOwner, onChange: (event) => setTargetOwner(event.target.value), placeholder: "Target owner id", className: "min-w-0 flex-1 rounded border border-white/[0.08] bg-black/30 px-2 py-1 text-[10px] text-white/62" }), _jsx("button", { disabled: busy || !targetOwner.trim(), onClick: () => void act('handoff.create', { targetOwnerId: targetOwner.trim(), ...(state.goal ? { goalId: state.goal.id } : {}), ...(state.loop ? { loopId: state.loop.id } : {}) }), className: "rounded bg-white/[0.07] px-2 text-[10px] text-white/55 disabled:opacity-30", children: "Prepare" })] }), state?.handoffs.map((handoff) => _jsxs("div", { className: "mt-2 border-t border-white/[0.05] pt-2 text-[10px] text-white/34", children: [_jsx("span", { className: "text-white/55", children: handoff.status }), " \u00B7 ", handoff.sourceOwnerId, handoff.targetOwnerId ? ` → ${handoff.targetOwnerId}` : '', handoff.status === 'available' && (!handoff.targetOwnerId || handoff.targetOwnerId === ownerId) && _jsx("button", { disabled: busy, onClick: () => void act('handoff.claim', { handoffId: handoff.id }), className: "ml-2 rounded bg-white/[0.07] px-1.5 py-0.5 text-white/55", children: "Claim here" })] }, handoff.id))] })] }));
69
+ return () => {
70
+ window.clearInterval(timer);
71
+ unsubscribe?.();
72
+ unsubscribeState();
73
+ current.dispose();
74
+ controller.current = null;
75
+ };
76
+ }, [refresh, sessionId]);
77
+ return (_jsxs("div", { className: "h-full overflow-y-auto px-3 py-3 space-y-3", "data-testid": "development-coordination-panel", children: [_jsxs("header", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-[11px] uppercase tracking-[0.12em] text-white/65", children: "Development lifecycle" }), _jsx("p", { className: "text-[10px] text-white/28", children: sessionId || 'No active session' })] }), _jsx("button", { type: "button", onClick: () => void refresh(), "aria-label": "Refresh development lifecycle", className: "text-white/36 hover:text-white/72", children: _jsx(RefreshCw, { size: 14, "aria-hidden": true }) })] }), loading && !state && _jsx("p", { role: "status", className: "text-[11px] text-white/45", children: "Loading development lifecycle\u2026" }), error && _jsx("p", { role: "alert", className: "rounded border border-red-400/20 bg-red-400/5 px-2.5 py-2 text-[10px] text-red-200/70", children: error }), _jsxs("section", { className: "rounded border border-white/[0.06] bg-black/20 px-3 py-2.5", "data-testid": "coordination-goal", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("h3", { className: "flex items-center gap-1.5 text-[10px] uppercase tracking-[0.12em] text-white/46", children: [_jsx(Target, { size: 13 }), " Goal"] }), _jsx("span", { className: "text-[10px] text-white/28", children: state?.goal?.status ?? 'none' })] }), state?.goal ? _jsxs(_Fragment, { children: [_jsx("p", { className: "mt-2 text-[12px] text-white/72", children: state.goal.objective }), _jsx("p", { className: "mt-1 text-[10px] text-white/36", children: state.goal.progress }), _jsxs("p", { className: "mt-1 text-[10px] text-white/24", children: [state.goal.completedTasks, "/", state.goal.totalTasks, " tasks \u00B7 ", state.goal.criteria.length, " criteria"] }), _jsx(GoalVerification, { goal: state.goal }, state.goal.id), state.goal.currentMilestone && _jsxs("p", { className: "mt-1.5 text-[10px] text-white/42", children: ["Milestone: ", _jsx("span", { className: "text-white/62", children: state.goal.currentMilestone.title }), " \u00B7 ", state.goal.currentMilestone.status] }), state.goal.currentTask && _jsxs("p", { className: "mt-1 text-[10px] text-white/42", children: ["Current: ", _jsx("span", { className: "text-white/62", children: state.goal.currentTask.title }), state.goal.currentTask.assignedAgentId ? ` · ${state.goal.currentTask.assignedAgentId}` : ''] }), state.goal.outstanding.length > 0 && _jsxs("div", { className: "mt-2", children: [_jsx("p", { className: "text-[9px] uppercase tracking-[0.1em] text-white/24", children: "Outstanding" }), _jsx("ul", { className: "mt-1 space-y-0.5", children: state.goal.outstanding.slice(0, 5).map((item) => _jsxs("li", { className: "text-[10px] text-white/38", children: ["\u2022 ", item] }, item)) })] }), state.goal.decisions.length > 0 && _jsxs("p", { className: "mt-1.5 text-[10px] text-white/30", children: ["Latest decision: ", state.goal.decisions.at(-1)] }), _jsxs("div", { className: "mt-2 flex gap-1.5", children: [_jsx("input", { "aria-label": "Goal steering instruction", value: steering, onChange: (event) => setSteering(event.target.value), placeholder: "Steer the active goal", className: "min-w-0 flex-1 rounded border border-white/[0.08] bg-black/30 px-2 py-1 text-[10px] text-white/62" }), _jsx("button", { disabled: busy || !steering.trim(), onClick: async () => { const submitted = steering; if (await act('goal.steer', { goalId: state.goal.id, expectedVersion: state.goal.version, instruction: submitted.trim() }))
78
+ setSteering((draft) => draft === submitted ? '' : draft); }, className: "rounded bg-white/[0.07] px-2 text-[10px] text-white/55 disabled:opacity-30", children: "Send" })] })] }) : _jsxs("div", { className: "mt-2 flex gap-1.5", children: [_jsx("input", { "aria-label": "Goal objective", value: objective, onChange: (event) => setObjective(event.target.value), placeholder: "Define a durable goal", className: "min-w-0 flex-1 rounded border border-white/[0.08] bg-black/30 px-2 py-1 text-[10px] text-white/62" }), _jsx("button", { disabled: busy || !objective.trim(), onClick: async () => { const submitted = objective; if (await act('goal.create', { objective: submitted.trim() }))
79
+ setObjective((draft) => draft === submitted ? '' : draft); }, className: "rounded bg-white/[0.07] px-2 text-[10px] text-white/55 disabled:opacity-30", children: "Create" })] })] }), _jsxs("section", { className: "rounded border border-white/[0.06] bg-black/20 px-3 py-2.5", "data-testid": "coordination-loop", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("h3", { className: "flex items-center gap-1.5 text-[10px] uppercase tracking-[0.12em] text-white/46", children: [_jsx(Repeat2, { size: 13 }), " Loop"] }), _jsx("span", { className: "text-[10px] text-white/28", children: state?.loop?.status ?? 'none' })] }), state?.loop ? _jsxs(_Fragment, { children: [_jsxs("p", { className: "mt-2 text-[11px] text-white/62", children: [state.loop.kind, " \u00B7 ", state.loop.iterations, " iterations"] }), state.loop.activity && _jsx("p", { className: "mt-1 text-[10px] text-white/32", children: state.loop.activity }), _jsx(IterationHistory, { loop: state.loop }, state.loop.id), ['running', 'paused', 'waiting'].includes(state.loop.status) && _jsxs("div", { className: "mt-2 flex gap-1.5", children: [['paused', 'waiting'].includes(state.loop.status) ? _jsx("button", { disabled: busy, onClick: () => void act('loop.set_status', { loopId: state.loop.id, expectedVersion: state.loop.version, status: 'running' }), className: "rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55", children: "Resume" }) : _jsx("button", { disabled: busy, onClick: () => void act('loop.set_status', { loopId: state.loop.id, expectedVersion: state.loop.version, status: 'paused' }), className: "rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55", children: "Pause" }), _jsx("button", { disabled: busy, onClick: () => void act('loop.set_status', { loopId: state.loop.id, expectedVersion: state.loop.version, status: 'stopped', reason: 'Stopped from Agent Interface' }), className: "rounded border border-white/[0.07] px-2 py-1 text-[10px] text-white/42", children: "Stop" })] })] }) : _jsx("button", { disabled: busy || !state?.goal, onClick: () => void act('loop.start', { kind: 'goal-continuation', ...(state?.goal ? { goalId: state.goal.id } : {}) }), className: "mt-2 rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55 disabled:opacity-30", children: "Start goal continuation" })] }), _jsxs("section", { className: "rounded border border-white/[0.06] bg-black/20 px-3 py-2.5", "data-testid": "coordination-handoff", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("h3", { className: "flex items-center gap-1.5 text-[10px] uppercase tracking-[0.12em] text-white/46", children: [_jsx(ArrowRightLeft, { size: 13 }), " Handoff"] }), _jsxs("span", { className: "text-[10px] text-white/28", children: ["epoch ", state?.owner?.epoch ?? '—'] })] }), _jsxs("p", { className: "mt-2 text-[10px] text-white/36", children: ["Owner: ", state?.owner?.ownerId ?? 'unclaimed'] }), !state?.owner && _jsx("button", { disabled: busy, onClick: () => void act('ownership.acquire', {}), className: "mt-2 rounded bg-white/[0.07] px-2 py-1 text-[10px] text-white/55", children: "Acquire this session" }), state?.owner?.ownerId === ownerId && _jsxs("div", { className: "mt-2 flex gap-1.5", children: [_jsx("input", { "aria-label": "Handoff target owner", value: targetOwner, onChange: (event) => setTargetOwner(event.target.value), placeholder: "Target owner id", className: "min-w-0 flex-1 rounded border border-white/[0.08] bg-black/30 px-2 py-1 text-[10px] text-white/62" }), _jsx("button", { disabled: busy || !targetOwner.trim(), onClick: () => void act('handoff.create', { targetOwnerId: targetOwner.trim(), ...(state.goal ? { goalId: state.goal.id } : {}), ...(state.loop ? { loopId: state.loop.id } : {}) }), className: "rounded bg-white/[0.07] px-2 text-[10px] text-white/55 disabled:opacity-30", children: "Prepare" })] }), state?.handoffs.map((handoff) => _jsxs("div", { className: "mt-2 border-t border-white/[0.05] pt-2 text-[10px] text-white/34", children: [_jsx("span", { className: "text-white/55", children: handoff.status }), " \u00B7 ", handoff.sourceOwnerId, handoff.targetOwnerId ? ` → ${handoff.targetOwnerId}` : '', handoff.status === 'available' && (!handoff.targetOwnerId || handoff.targetOwnerId === ownerId) && _jsx("button", { disabled: busy, onClick: () => void act('handoff.claim', { handoffId: handoff.id }), className: "ml-2 rounded bg-white/[0.07] px-1.5 py-0.5 text-white/55", children: "Claim here" })] }, handoff.id))] })] }));
72
80
  }
73
81
  //# sourceMappingURL=DevelopmentCoordinationPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevelopmentCoordinationPanel.js","sourceRoot":"","sources":["../../../src/components/agent/DevelopmentCoordinationPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,mCAAmC,EAA0C,MAAM,wCAAwC,CAAA;AAQpI,SAAS,SAAS;IAChB,IAAI,CAAC;QAAC,OAAO,sBAAsB,EAAE,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAA;IAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAAE,SAAS,EAAyB;IAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,uBAAuB,EAAE,OAAO,IAAI,uBAAuB,EAAE,EAAE,CAAC,CAAA;IAC3G,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA2C,IAAI,CAAC,CAAA;IAClF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAElD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,GAAG,GAAG,SAAS,EAAE,EAAE,uBAAuB,CAAA;QAChD,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;YAClD,QAAQ,CAAC,mCAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7D,cAAc,CAAC,KAAK,CAAC,CAAA;YACrB,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,EAAE,MAAqC,EAAE,OAAgC,EAAE,EAAE;QACxG,MAAM,GAAG,GAAG,SAAS,EAAE,EAAE,uBAAuB,CAAA;QAChD,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YACjE,QAAQ,CAAC,mCAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7D,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAA;QAClF,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,SAAS,EAAE,EAAE,uBAAuB,EAAE,gBAAgB,CAAA;QACxE,OAAO,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACb,SAAS,CAAC,GAAG,EAAE;QACb,0EAA0E;QAC1E,2EAA2E;QAC3E,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,EAAE,CAAA,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACjE,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,IAAI,WAAW;QAAE,OAAO,YAAG,SAAS,EAAC,qCAAqC,+EAAmE,CAAA;IAE7I,OAAO,CACL,eAAK,SAAS,EAAC,4CAA4C,iBAAa,gCAAgC,aACtG,kBAAQ,SAAS,EAAC,yCAAyC,aACzD,0BACE,aAAI,SAAS,EAAC,uDAAuD,sCAA2B,EAChG,YAAG,SAAS,EAAC,2BAA2B,YAAE,SAAS,IAAI,mBAAmB,GAAK,IAC3E,EACN,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,gBAAa,+BAA+B,EAAC,SAAS,EAAC,mCAAmC,YAC3I,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,wBAAgB,GAC5B,IACF,EAER,KAAK,IAAI,YAAG,SAAS,EAAC,uFAAuF,YAAE,KAAK,GAAK,EAE1H,mBAAS,SAAS,EAAC,4DAA4D,iBAAa,mBAAmB,aAC7G,eAAK,SAAS,EAAC,yCAAyC,aAAC,cAAI,SAAS,EAAC,iFAAiF,aAAC,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,GAAI,aAAU,EAAA,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM,GAAQ,IAAM,EAC9Q,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,8BACb,YAAG,SAAS,EAAC,gCAAgC,YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,GAAK,EACxE,YAAG,SAAS,EAAC,gCAAgC,YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAK,EACvE,aAAG,SAAS,EAAC,gCAAgC,aAAE,KAAK,CAAC,IAAI,CAAC,cAAc,OAAG,KAAK,CAAC,IAAI,CAAC,UAAU,oBAAW,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,iBAAc,EAClJ,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,aAAG,SAAS,EAAC,kCAAkC,4BAAY,eAAM,SAAS,EAAC,eAAe,YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAQ,cAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAK,EAC/M,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,aAAG,SAAS,EAAC,gCAAgC,0BAAU,eAAM,SAAS,EAAC,eAAe,YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAQ,EAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,IAAK,EACxP,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,eAAK,SAAS,EAAC,MAAM,aAAC,YAAG,SAAS,EAAC,qDAAqD,4BAAgB,EAAA,aAAI,SAAS,EAAC,kBAAkB,YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAe,SAAS,EAAC,2BAA2B,wBAAI,IAAI,KAAnD,IAAI,CAAqD,CAAC,GAAM,IAAM,EAC/S,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,aAAG,SAAS,EAAC,kCAAkC,kCAAmB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAK,EACtI,eAAK,SAAS,EAAC,mBAAmB,aAAC,gBAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAC,uBAAuB,EAAC,SAAS,EAAC,mGAAmG,GAAG,EAAA,iBAAQ,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAK,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,IAAK,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,EAAE,SAAS,EAAC,4EAA4E,qBAAc,IAAM,IACtjB,CAAC,CAAC,CAAC,eAAK,SAAS,EAAC,mBAAmB,aAAC,gBAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAC,uBAAuB,EAAC,SAAS,EAAC,mGAAmG,GAAG,EAAA,iBAAQ,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,EAAE,SAAS,EAAC,4EAA4E,uBAAgB,IAAM,IAC7f,EAEV,mBAAS,SAAS,EAAC,4DAA4D,iBAAa,mBAAmB,aAC7G,eAAK,SAAS,EAAC,yCAAyC,aAAC,cAAI,SAAS,EAAC,iFAAiF,aAAC,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,GAAI,aAAU,EAAA,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM,GAAQ,IAAM,EAC/Q,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,8BACb,aAAG,SAAS,EAAC,gCAAgC,aAAE,KAAK,CAAC,IAAI,CAAC,IAAI,cAAK,KAAK,CAAC,IAAI,CAAC,UAAU,mBAAgB,EACvG,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,YAAG,SAAS,EAAC,gCAAgC,YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAK,EAC/F,eAAK,SAAS,EAAC,mBAAmB,aAAE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAK,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,IAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAC,6DAA6D,uBAAgB,CAAC,CAAC,CAAC,iBAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAK,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,IAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAC,6DAA6D,sBAAe,EAAC,iBAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAK,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,IAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC,EAAE,SAAS,EAAC,wEAAwE,qBAAc,IAAM,IAC70B,CAAC,CAAC,CAAC,iBAAQ,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAC,sFAAsF,wCAAiC,IAChS,EAEV,mBAAS,SAAS,EAAC,4DAA4D,iBAAa,sBAAsB,aAChH,eAAK,SAAS,EAAC,yCAAyC,aAAC,cAAI,SAAS,EAAC,iFAAiF,aAAC,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,GAAI,gBAAa,EAAA,gBAAM,SAAS,EAAC,2BAA2B,uBAAQ,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,IAAQ,IAAM,EAC7R,aAAG,SAAS,EAAC,gCAAgC,wBAAS,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,WAAW,IAAK,EAC9F,CAAC,KAAK,EAAE,KAAK,IAAI,iBAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,kEAAkE,qCAA8B,EACrM,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,IAAI,eAAK,SAAS,EAAC,mBAAmB,aAAC,gBAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAC,iBAAiB,EAAC,SAAS,EAAC,mGAAmG,GAAG,EAAA,iBAAQ,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAC,4EAA4E,wBAAiB,IAAM,EAC5nB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAsB,SAAS,EAAC,kEAAkE,aAAC,eAAM,SAAS,EAAC,eAAe,YAAE,OAAO,CAAC,MAAM,GAAQ,cAAI,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,IAAI,iBAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,0DAA0D,2BAAoB,KAA/f,OAAO,CAAC,EAAE,CAA4f,CAAC,IAC3iB,IACN,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"DevelopmentCoordinationPanel.js","sourceRoot":"","sources":["../../../src/components/agent/DevelopmentCoordinationPanel.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"KnowledgePanel.d.ts","sourceRoot":"","sources":["../../../src/components/agent/KnowledgePanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAA2C,MAAM,OAAO,CAAA;AAe/D,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,cAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAsJ9F"}
1
+ {"version":3,"file":"KnowledgePanel.d.ts","sourceRoot":"","sources":["../../../src/components/agent/KnowledgePanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAqE,MAAM,OAAO,CAAA;AAoBzF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,cAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CA4G9F"}
@@ -16,10 +16,15 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
16
16
  *
17
17
  * Design: monochromatic, rectangles only, no circles — `DESIGN_SYSTEM.md`.
18
18
  */
19
- import React, { useCallback, useEffect, useState } from 'react';
19
+ import React, { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
20
20
  import { AlertTriangle, BookOpen, Pin, RefreshCw } from 'lucide-react';
21
- import { projectKnowledgeBoard } from '@xenosystem/agent-interface-core';
22
21
  import { getAgentPlatformBridge } from '../../platformBridge.js';
22
+ import { KnowledgePanelController } from './knowledgePanelController.js';
23
+ import { InputField } from './settings/shared/InputField.js';
24
+ import { pageKnowledgeRows } from './knowledgePagination.js';
25
+ const buttonClass = 'inline-flex items-center justify-center gap-2 px-3 py-1.5 text-xs border xeno-border-subtle rounded-[4px] xeno-text-secondary hover:bg-[var(--xeno-bg-subtle)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 disabled:opacity-40 disabled:cursor-not-allowed';
26
+ const noticeClass = 'text-xs xeno-text-muted leading-relaxed break-words';
27
+ const factClass = 'min-w-0 flex flex-col items-start gap-2 border xeno-border-subtle rounded-[4px] p-3 break-words';
23
28
  function tryBridge() {
24
29
  try {
25
30
  return getAgentPlatformBridge();
@@ -29,71 +34,16 @@ function tryBridge() {
29
34
  }
30
35
  }
31
36
  export function KnowledgePanel({ workspaceId, runId }) {
32
- const [board, setBoard] = useState(null);
33
- const [busy, setBusy] = useState(false);
37
+ const run = useRef(runId);
38
+ run.current = runId;
39
+ const controller = useMemo(() => new KnowledgePanelController(workspaceId, () => run.current, () => tryBridge()?.knowledge), [workspaceId]);
40
+ const { board, busy, available, subject, fact, problem } = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);
34
41
  const [showHistory, setShowHistory] = useState(false);
35
- const [subject, setSubject] = useState('');
36
- const [fact, setFact] = useState('');
37
- const [problem, setProblem] = useState(null);
38
- const refresh = useCallback(async () => {
39
- const bridge = tryBridge();
40
- if (!bridge?.knowledge) {
41
- setBoard(projectKnowledgeBoard({
42
- available: false,
43
- entries: [],
44
- durable: false,
45
- reason: 'This surface cannot reach the Agent host.',
46
- }));
47
- return;
48
- }
49
- setBusy(true);
50
- try {
51
- setBoard(projectKnowledgeBoard(await bridge.knowledge.list({ workspaceId })));
52
- }
53
- finally {
54
- setBusy(false);
55
- }
56
- }, [workspaceId]);
57
- useEffect(() => { void refresh(); }, [refresh]);
58
- const record = useCallback(async (pinned) => {
59
- const bridge = tryBridge();
60
- if (!bridge?.knowledge)
61
- return;
62
- setBusy(true);
63
- try {
64
- const result = await bridge.knowledge.record({
65
- workspaceId,
66
- subject,
67
- fact,
68
- ...(pinned ? { pinned: true } : {}),
69
- runId,
70
- });
71
- // The host's refusal verbatim — it already says what is missing.
72
- setProblem(result.ok ? null : result.reason ?? 'That fact could not be recorded.');
73
- if (result.ok) {
74
- setSubject('');
75
- setFact('');
76
- }
77
- }
78
- finally {
79
- setBusy(false);
80
- await refresh();
81
- }
82
- }, [workspaceId, runId, subject, fact, refresh]);
83
- const forget = useCallback(async (entryId) => {
84
- const bridge = tryBridge();
85
- if (!bridge?.knowledge)
86
- return;
87
- setBusy(true);
88
- try {
89
- const result = await bridge.knowledge.forget({ workspaceId, entryId });
90
- setProblem(result.ok ? null : result.reason ?? null);
91
- }
92
- finally {
93
- setBusy(false);
94
- await refresh();
95
- }
96
- }, [workspaceId, refresh]);
97
- return (_jsxs("div", { className: "xeno-knowledge", "data-testid": "knowledge-panel", children: [_jsxs("header", { className: "xeno-knowledge__header", children: [_jsxs("h2", { children: [_jsx(BookOpen, { size: 14, "aria-hidden": true }), " Knowledge"] }), _jsx("button", { type: "button", onClick: () => void refresh(), disabled: busy, "aria-label": "Refresh knowledge", children: _jsx(RefreshCw, { size: 14, "aria-hidden": true }) })] }), board?.notice && (_jsxs("p", { className: "xeno-knowledge__notice", "data-testid": "knowledge-notice", children: [_jsx(AlertTriangle, { size: 14, "aria-hidden": true }), " ", board.notice] })), board === null ? (_jsx("p", { className: "xeno-knowledge__notice", children: "Loading what this workspace knows\u2026" })) : (_jsxs(_Fragment, { children: [board.current.length === 0 ? (_jsx("p", { className: "xeno-knowledge__notice", children: "This workspace has not learned anything yet." })) : (_jsx("ul", { className: "xeno-knowledge__current", "data-testid": "knowledge-current", children: board.current.map((row) => (_jsxs("li", { "data-pinned": row.pinned ? 'true' : undefined, children: [row.pinned && _jsx(Pin, { size: 12, "aria-hidden": true }), _jsx("span", { className: "xeno-knowledge__subject", children: row.subject }), _jsx("span", { className: "xeno-knowledge__fact", children: row.fact }), _jsx("span", { className: "xeno-knowledge__provenance", children: row.provenance }), _jsx("button", { type: "button", disabled: busy, onClick: () => void forget(row.id), children: "Forget" })] }, row.id))) })), _jsxs("section", { className: "xeno-knowledge__record", children: [_jsx("input", { value: subject, onChange: (event) => setSubject(event.target.value), placeholder: "subject, e.g. build.package-manager", "aria-label": "Subject" }), _jsx("input", { value: fact, onChange: (event) => setFact(event.target.value), placeholder: "what is true about it", "aria-label": "Fact" }), _jsx("button", { type: "button", disabled: busy, onClick: () => void record(false), children: "Record" }), _jsx("button", { type: "button", disabled: busy, onClick: () => void record(true), children: "Record pinned" })] }), board.history.length > 0 && (_jsxs("section", { className: "xeno-knowledge__history", "data-testid": "knowledge-history", children: [_jsx("button", { type: "button", onClick: () => setShowHistory((shown) => !shown), children: showHistory ? 'Hide' : `Show ${board.history.length} superseded fact(s)` }), showHistory && (_jsx("ul", { children: board.history.map((row) => (_jsxs("li", { children: [_jsx("span", { children: row.subject }), _jsx("span", { children: row.fact }), _jsx("span", { children: row.provenance })] }, row.id))) }))] }))] })), problem && _jsx("p", { className: "xeno-knowledge__notice", "data-testid": "knowledge-problem", children: problem })] }));
42
+ const [currentPage, setCurrentPage] = useState(0);
43
+ const [historyPage, setHistoryPage] = useState(0);
44
+ const current = pageKnowledgeRows(board?.current ?? [], currentPage);
45
+ const history = pageKnowledgeRows(board?.history ?? [], historyPage);
46
+ useEffect(() => { setShowHistory(false); setCurrentPage(0); setHistoryPage(0); void controller.refresh(); return () => controller.invalidate(); }, [controller]);
47
+ return (_jsxs("div", { className: "h-full min-h-0 min-w-0 overflow-y-auto overscroll-contain p-3 space-y-4 text-sm xeno-text-secondary", "data-testid": "knowledge-panel", children: [_jsxs("header", { className: "flex items-center justify-between gap-3", children: [_jsxs("h2", { className: "flex items-center gap-2 text-sm font-medium", children: [_jsx(BookOpen, { size: 14, "aria-hidden": true }), " Knowledge"] }), _jsx("button", { className: buttonClass, type: "button", onClick: () => void controller.refresh(), disabled: busy, "aria-label": "Refresh knowledge", children: _jsx(RefreshCw, { size: 14, "aria-hidden": true }) })] }), board?.notice && (_jsxs("p", { className: noticeClass, "data-testid": "knowledge-notice", children: [_jsx(AlertTriangle, { size: 14, "aria-hidden": true }), " ", board.notice] })), board?.durable && _jsx("p", { role: "status", className: noticeClass, children: "Knowledge is stored on this host." }), board === null ? (_jsx("p", { className: noticeClass, children: "Loading what this workspace knows\u2026" })) : available ? (_jsxs(_Fragment, { children: [board.current.length === 0 ? (_jsx("p", { className: noticeClass, children: "This workspace has not learned anything yet." })) : (_jsx("ul", { className: "space-y-3", "data-testid": "knowledge-current", children: current.rows.map((row) => (_jsxs("li", { className: factClass, "data-pinned": row.pinned ? 'true' : undefined, children: [row.pinned && _jsx(Pin, { size: 12, "aria-hidden": true }), _jsx("span", { className: "font-medium break-all", children: row.subject }), _jsx("span", { className: "whitespace-pre-wrap break-all", children: row.fact }), _jsx("span", { className: noticeClass, children: row.provenance }), _jsx("button", { className: buttonClass, type: "button", disabled: busy, onClick: () => void controller.forget(row.id), children: "Forget" })] }, row.id))) })), current.pages > 1 && _jsxs("nav", { "aria-label": "Current knowledge pages", className: "flex flex-wrap items-center gap-2", children: [_jsx("button", { className: buttonClass, type: "button", disabled: current.page === 0, onClick: () => setCurrentPage(current.page - 1), children: "Previous current facts" }), _jsxs("span", { className: noticeClass, children: ["Page ", current.page + 1, " of ", current.pages] }), _jsx("button", { className: buttonClass, type: "button", disabled: current.page + 1 >= current.pages, onClick: () => setCurrentPage(current.page + 1), children: "Next current facts" })] }), _jsxs("section", { className: "space-y-3 border xeno-border-subtle rounded-[4px] p-3", children: [_jsx(InputField, { label: "Subject", value: subject, onChange: (value) => controller.edit({ subject: value }), placeholder: "subject, e.g. build.package-manager" }), _jsx(InputField, { label: "Fact", type: "textarea", value: fact, onChange: (value) => controller.edit({ fact: value }), placeholder: "what is true about it" }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("button", { className: buttonClass, type: "button", disabled: busy, onClick: () => void controller.record(false), children: "Record" }), _jsx("button", { className: buttonClass, type: "button", disabled: busy, onClick: () => void controller.record(true), children: "Record pinned" })] })] }), board.history.length > 0 && (_jsxs("section", { className: "space-y-3", "data-testid": "knowledge-history", children: [_jsx("button", { className: buttonClass, type: "button", onClick: () => setShowHistory((shown) => !shown), children: showHistory ? 'Hide' : `Show ${board.history.length} superseded fact(s)` }), showHistory && (_jsx("ul", { className: "space-y-3", children: history.rows.map((row) => (_jsxs("li", { className: factClass, children: [_jsx("span", { className: "font-medium break-all", children: row.subject }), _jsx("span", { className: "whitespace-pre-wrap break-all", children: row.fact }), _jsx("span", { className: noticeClass, children: row.provenance }), _jsx("button", { className: buttonClass, type: "button", disabled: busy, onClick: () => void controller.forget(row.id), children: "Forget" })] }, row.id))) })), showHistory && history.pages > 1 && _jsxs("nav", { "aria-label": "Superseded knowledge pages", className: "flex flex-wrap items-center gap-2", children: [_jsx("button", { className: buttonClass, type: "button", disabled: history.page === 0, onClick: () => setHistoryPage(history.page - 1), children: "Previous superseded facts" }), _jsxs("span", { className: noticeClass, children: ["Page ", history.page + 1, " of ", history.pages] }), _jsx("button", { className: buttonClass, type: "button", disabled: history.page + 1 >= history.pages, onClick: () => setHistoryPage(history.page + 1), children: "Next superseded facts" })] })] }))] })) : null, problem && _jsx("p", { role: "alert", className: noticeClass, "data-testid": "knowledge-problem", children: problem })] }));
98
48
  }
99
49
  //# sourceMappingURL=KnowledgePanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KnowledgePanel.js","sourceRoot":"","sources":["../../../src/components/agent/KnowledgePanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KnowledgePanel.js","sourceRoot":"","sources":["../../../src/components/agent/KnowledgePanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import type { AgentAccountRequest, AgentAccountResult } from '@xenosystem/agent-interface-contract';
3
+ import { type CollaborationAccess, type CollaborationStorage } from './conversationCollaborationController.js';
4
+ interface OwnerMessage {
5
+ id: string;
6
+ role: string;
7
+ content: string;
8
+ isStreaming?: boolean;
9
+ toolCalls?: Array<{
10
+ id: string;
11
+ toolName: string;
12
+ status?: string;
13
+ }>;
14
+ }
15
+ export interface LiveConversationCollaborationProps {
16
+ localConversationId: string;
17
+ title: string;
18
+ modelId?: string;
19
+ ownerMessages?: OwnerMessage[];
20
+ request?: (input: AgentAccountRequest) => Promise<AgentAccountResult>;
21
+ storage?: CollaborationStorage;
22
+ onNavigateConversation?: (conversationId: string) => void;
23
+ onAccessChange?: (access: CollaborationAccess | null) => void;
24
+ }
25
+ export declare function LiveConversationCollaboration(props: LiveConversationCollaborationProps): React.JSX.Element;
26
+ export {};
27
+ //# sourceMappingURL=LiveConversationCollaboration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveConversationCollaboration.d.ts","sourceRoot":"","sources":["../../../src/components/agent/LiveConversationCollaboration.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqE,MAAM,OAAO,CAAA;AAEzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAwD,MAAM,sCAAsC,CAAA;AAGzJ,OAAO,EAA6D,KAAK,mBAAmB,EAA2B,KAAK,oBAAoB,EAAE,MAAM,0CAA0C,CAAA;AAElM,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrE;AACD,MAAM,WAAW,kCAAkC;IACjD,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACrE,OAAO,CAAC,EAAE,oBAAoB,CAAA;IAC9B,sBAAsB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;IACzD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAA;CAC9D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,kCAAkC,qBAoGtF"}
@@ -0,0 +1,127 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React, { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
3
+ import { Copy, RefreshCw, Share2, UserRoundX, Users, X } from 'lucide-react';
4
+ import { copyTextWithFallback } from '../../utils/clipboardCopy.js';
5
+ import { collaborationWindow, COLLABORATION_WINDOW_SIZE } from './collaborationWindow.js';
6
+ import { ConversationCollaborationController, collaborationEntries } from './conversationCollaborationController.js';
7
+ export function LiveConversationCollaboration(props) {
8
+ const request = props.request;
9
+ const storage = props.storage ?? browserStorage();
10
+ const controller = useMemo(() => new ConversationCollaborationController(request, storage), [request, storage]);
11
+ const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
12
+ const [open, setOpen] = useState(false);
13
+ const [copyError, setCopyError] = useState(null);
14
+ const [joinInput, setJoinInput] = useState('');
15
+ const [draft, setDraft] = useState('');
16
+ const [entryKind, setEntryKind] = useState('comment');
17
+ const [role, setRole] = useState('viewer');
18
+ const [expiry, setExpiry] = useState(7);
19
+ const firstFocus = useRef(null);
20
+ const entryFlight = useRef(false);
21
+ const joinFlight = useRef(false);
22
+ useEffect(() => { setDraft(''); setEntryKind('comment'); controller.load(props.localConversationId); }, [controller, props.localConversationId]);
23
+ useEffect(() => { props.onAccessChange?.(state.access); }, [props.onAccessChange, state.access]);
24
+ useEffect(() => { if (state.access?.kind === 'participant')
25
+ void controller.restorePendingAppend(); }, [controller, state.access?.conversationId, state.access?.kind]);
26
+ useEffect(() => { if (state.pendingAppend) {
27
+ setEntryKind(state.pendingAppend.kind);
28
+ setDraft(current => current || state.pendingAppend.content);
29
+ } }, [state.pendingAppend]);
30
+ useEffect(() => {
31
+ if (!state.access)
32
+ return;
33
+ if (state.access.kind === 'owner')
34
+ void controller.loadParticipants();
35
+ return controller.startLive();
36
+ }, [controller, state.access?.conversationId, state.access?.kind]);
37
+ useEffect(() => {
38
+ if (state.access?.kind !== 'owner' || !props.ownerMessages)
39
+ return;
40
+ const events = props.ownerMessages.flatMap(message => {
41
+ const synced = [];
42
+ if ((message.role === 'user' || message.role === 'assistant') && message.content.trim())
43
+ synced.push({ eventId: stableEventId('message', message.id), logicalMessageId: stableEventId('message', message.id), kind: message.role, content: message.content, state: message.isStreaming ? 'streaming' : 'complete' });
44
+ for (const tool of message.toolCalls || []) {
45
+ const status = tool.status === 'done' ? 'completed' : tool.status === 'failed' || tool.status === 'error' ? 'failed' : 'started';
46
+ synced.push({ eventId: stableEventId(`tool-${status}`, tool.id), kind: 'tool', tool: { name: tool.toolName, status } });
47
+ }
48
+ return synced;
49
+ });
50
+ void controller.ownerSync(events);
51
+ }, [controller, props.ownerMessages, state.access?.conversationId, state.access?.kind]);
52
+ useEffect(() => {
53
+ if (!open)
54
+ return;
55
+ const prior = document.activeElement;
56
+ firstFocus.current?.focus();
57
+ const key = (event) => {
58
+ if (event.key === 'Escape') {
59
+ event.preventDefault();
60
+ setOpen(false);
61
+ }
62
+ if (event.key !== 'Tab')
63
+ return;
64
+ const modal = document.querySelector('[data-testid="live-collaboration-dialog"]');
65
+ const focusable = Array.from(modal?.querySelectorAll('button,input,textarea,[tabindex]:not([tabindex="-1"])') || []).filter(element => !element.hasAttribute('disabled'));
66
+ if (!focusable.length)
67
+ return;
68
+ const first = focusable[0], last = focusable.at(-1);
69
+ if (event.shiftKey && document.activeElement === first) {
70
+ event.preventDefault();
71
+ last.focus();
72
+ }
73
+ else if (!event.shiftKey && document.activeElement === last) {
74
+ event.preventDefault();
75
+ first.focus();
76
+ }
77
+ };
78
+ window.addEventListener('keydown', key);
79
+ return () => { window.removeEventListener('keydown', key); prior?.focus(); };
80
+ }, [open]);
81
+ if (state.access?.kind === 'participant') {
82
+ const canComment = state.access.role !== 'viewer';
83
+ const canMessage = state.access.role === 'contributor';
84
+ return (_jsxs("section", { "data-testid": "live-collaboration-participant", className: "xeno-app-shell flex h-full min-h-0 flex-1 flex-col bg-[#08080a] text-white", children: [_jsxs("header", { className: "flex h-[34px] items-center justify-between gap-3 border-b border-white/[0.08] bg-[#111111] px-3", children: [_jsxs("span", { className: "inline-flex items-center gap-2 text-[10px] uppercase tracking-[0.12em] text-white/60", children: [_jsx(Users, { className: "h-3.5 w-3.5" }), " Live collaboration"] }), _jsx("span", { "data-testid": "collaboration-role", className: "rounded-[2px] bg-white/[0.06] px-1.5 py-0.5 text-[10px] text-white/45", children: state.access.role })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 py-4", children: _jsx("div", { className: "mx-auto flex w-full max-w-[820px] flex-col gap-2", children: _jsx(CollaborationEntries, { state: state }, state.access.conversationId) }) }), _jsx("div", { className: "border-t border-white/[0.08] bg-[#111111] px-6 py-3", children: _jsxs("div", { className: "mx-auto flex w-full max-w-[820px] flex-col gap-2", children: [_jsx(CollaborationStatus, { status: state.status, error: copyError || state.error }), (canComment || canMessage) ? _jsxs(_Fragment, { children: [_jsxs("div", { className: "flex gap-1", children: [canComment && _jsx(ModeButton, { active: entryKind === 'comment', onClick: () => setEntryKind('comment'), children: "Comment" }), canMessage && _jsx(ModeButton, { active: entryKind === 'message', onClick: () => setEntryKind('message'), children: "Contribute message" })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("textarea", { "aria-label": "Collaboration entry", value: draft, onChange: event => setDraft(event.target.value), className: "min-h-[56px] flex-1 cursor-text resize-y rounded-[4px] border border-white/[0.08] bg-black/30 px-2 py-1.5 text-[12px] text-white/80 outline-none focus:border-white/[0.15]" }), _jsx("button", { type: "button", disabled: !draft.trim() || ['loading', 'revoked', 'unavailable'].includes(state.status), onClick: () => { if (entryFlight.current)
85
+ return; entryFlight.current = true; const value = draft; void controller.append(entryKind, value).then(confirmed => { if (confirmed)
86
+ setDraft(current => current === value ? '' : current); }).finally(() => { entryFlight.current = false; }); }, className: "h-7 cursor-pointer self-end rounded-[4px] bg-white/[0.15] px-4 text-[11px] text-white disabled:cursor-not-allowed disabled:opacity-30", children: "Send" })] })] }) : _jsx("p", { className: "text-[11px] text-white/40", children: "Viewer access is read-only. Provider, terminal, workspace, key and execution controls are not available." })] }) })] }));
87
+ }
88
+ const ensureOwner = async () => state.access?.kind === 'owner' || controller.registerOwner(props.localConversationId, props.title, props.modelId);
89
+ return _jsxs(_Fragment, { children: [_jsxs("button", { type: "button", "data-testid": "open-live-collaboration", onClick: () => setOpen(true), className: "inline-flex h-7 cursor-pointer items-center gap-1.5 rounded-[4px] bg-white/[0.04] px-2.5 text-[10px] text-white/40 hover:bg-white/[0.08] hover:text-white/65", children: [_jsx(Share2, { className: "h-3 w-3" }), " Share"] }), open && _jsx("div", { className: "fixed inset-0 z-[100] flex items-center justify-center bg-black/70", onMouseDown: event => { if (event.target === event.currentTarget)
90
+ setOpen(false); }, children: _jsxs("section", { role: "dialog", "aria-modal": "true", "aria-labelledby": "live-collaboration-title", "data-testid": "live-collaboration-dialog", className: "flex w-[520px] max-w-[calc(100vw-32px)] flex-col gap-0 rounded-[6px] border border-white/[0.10] bg-[#111115]", children: [_jsxs("header", { className: "flex h-[34px] items-center justify-between px-3", children: [_jsx("h2", { id: "live-collaboration-title", className: "text-[10px] uppercase tracking-[0.12em] text-white/55", children: "Live conversation collaboration" }), _jsx("button", { type: "button", "aria-label": "Close collaboration", onClick: () => setOpen(false), className: "flex h-6 w-6 cursor-pointer items-center justify-center rounded-[4px] bg-white/[0.04] text-white/35 hover:bg-white/[0.10]", children: _jsx(X, { className: "h-3 w-3" }) })] }), _jsxs("div", { className: "flex flex-col gap-4 border-y border-white/[0.08] p-3", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-[9px] uppercase tracking-[0.12em] text-white/30", children: "Create link" }), _jsx("div", { className: "flex gap-1", children: ['viewer', 'commenter', 'contributor'].map(value => _jsx(ModeButton, { active: role === value, onClick: () => setRole(value), children: value }, value)) }), _jsx("div", { className: "flex gap-1", children: [1, 7, 30].map(value => _jsxs(ModeButton, { active: expiry === value, onClick: () => setExpiry(value), children: [value, " day", value === 1 ? '' : 's'] }, value)) }), _jsx("button", { type: "button", disabled: state.status === 'loading', onClick: () => { void ensureOwner().then(async (ok) => { if (ok)
91
+ await controller.createShare(role, expiry); }); }, className: "h-7 cursor-pointer self-start rounded-[4px] bg-white/[0.15] px-4 text-[11px] text-white disabled:cursor-not-allowed disabled:opacity-30", children: "Create live link" }), state.transientShare?.shareUrl && _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { "data-testid": "live-share-url", className: "min-w-0 flex-1 truncate rounded-[4px] border border-white/[0.08] bg-black/30 px-2 py-1.5 text-[10px] text-white/55", children: state.transientShare.shareUrl }), _jsx("button", { type: "button", onClick: () => { setCopyError(null); void copyTextWithFallback(state.transientShare.shareUrl).then(() => controller.clearTransientShare()).catch(() => setCopyError('Clipboard access was denied. The link is still available to copy manually.')); }, className: "flex h-7 w-7 cursor-pointer items-center justify-center rounded-[4px] bg-white/[0.08] text-white/55", "aria-label": "Copy live link", children: _jsx(Copy, { className: "h-3 w-3" }) })] })] }), _jsxs("div", { className: "flex flex-col gap-2 border-t border-white/[0.08] pt-3", children: [_jsx("span", { className: "text-[9px] uppercase tracking-[0.12em] text-white/30", children: "Join original conversation" }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { ref: firstFocus, "aria-label": "Live collaboration link", value: joinInput, onChange: event => setJoinInput(event.target.value), className: "h-7 flex-1 cursor-text rounded-[4px] border border-white/[0.08] bg-black/30 px-2 text-[11px] text-white/75 outline-none focus:border-white/[0.15]" }), _jsx("button", { type: "button", onClick: () => { void controller.preview(joinInput); }, className: "h-7 cursor-pointer rounded-[4px] bg-white/[0.08] px-3 text-[11px] text-white/60", children: "Preview" })] }), state.preview && _jsxs("div", { className: "rounded-[6px] border border-white/[0.10] bg-[#060608] p-2", children: [_jsx("p", { className: "text-[12px] text-white/75", children: state.preview.title || 'Shared conversation' }), _jsxs("p", { className: "text-[10px] text-white/35", children: [state.preview.role, " access \u00B7 ", state.preview.messages.length, " visible messages"] }), _jsx("button", { type: "button", onClick: () => { if (joinFlight.current)
92
+ return; joinFlight.current = true; void controller.accept().then(id => { if (id) {
93
+ setOpen(false);
94
+ props.onNavigateConversation?.(id);
95
+ } }).finally(() => { joinFlight.current = false; }); }, className: "mt-2 h-7 cursor-pointer rounded-[4px] bg-white/[0.15] px-4 text-[11px] text-white", children: "Join live conversation" })] })] }), state.access?.kind === 'owner' && _jsxs("div", { className: "flex flex-col gap-2 border-t border-white/[0.08] pt-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-[9px] uppercase tracking-[0.12em] text-white/30", children: "Participants" }), _jsx("button", { type: "button", "aria-label": "Refresh participants", onClick: () => { void controller.loadParticipants(); }, className: "flex h-6 w-6 cursor-pointer items-center justify-center rounded-[4px] bg-white/[0.04] text-white/35", children: _jsx(RefreshCw, { className: "h-3 w-3" }) })] }), state.participants.length ? state.participants.map(participant => _jsxs("div", { className: "flex items-center gap-2 rounded-[4px] border border-white/[0.06] bg-black/20 px-2 py-1.5", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-[11px] text-white/60", children: participant.name || participant.email || participant.userId }), _jsx("span", { className: "text-[10px] text-white/35", children: participant.role }), _jsx("button", { type: "button", "aria-label": `Revoke ${participant.userId}`, onClick: () => { void controller.revokeParticipant(participant.userId); }, className: "flex h-6 w-6 cursor-pointer items-center justify-center rounded-[4px] border border-red-500/30 text-red-400/70 hover:bg-red-500/10", children: _jsx(UserRoundX, { className: "h-3 w-3" }) })] }, participant.id)) : _jsx("p", { className: "text-[11px] text-white/30", children: "No active participants." })] }), state.access?.kind === 'owner' && state.events.length > 0 && _jsx("section", { "aria-label": "Live conversation activity", className: "max-h-[240px] overflow-y-auto", children: _jsx(CollaborationEntries, { state: state }, state.access.conversationId) }), _jsx(CollaborationStatus, { status: state.status, error: copyError || state.error })] }), _jsx("footer", { className: "flex h-[34px] items-center justify-end px-3", children: _jsx("button", { type: "button", onClick: () => setOpen(false), className: "h-6 cursor-pointer rounded-[4px] bg-white/[0.06] px-3 text-[10px] text-white/50", children: "Close" }) })] }) })] });
96
+ }
97
+ function ModeButton(props) { return _jsx("button", { type: "button", "aria-pressed": props.active, onClick: props.onClick, className: `h-6 cursor-pointer rounded-[4px] px-2 text-[10px] ${props.active ? 'bg-white/[0.15] text-white/80' : 'bg-white/[0.05] text-white/40 hover:bg-white/[0.09]'}`, children: props.children }); }
98
+ function CollaborationEntries({ state }) {
99
+ const entries = useMemo(() => collaborationEntries(state), [state.events, state.preview]);
100
+ const [anchor, setAnchor] = useState(null);
101
+ const view = collaborationWindow(entries.length, anchor);
102
+ const buttonClass = 'h-7 rounded-[4px] bg-white/[0.06] px-2 text-[10px] text-white/60 disabled:opacity-30';
103
+ return _jsxs(_Fragment, { children: [entries.length > COLLABORATION_WINDOW_SIZE && _jsxs("nav", { "aria-label": "Conversation history pages", className: "flex items-center gap-2", children: [_jsx("button", { type: "button", className: buttonClass, disabled: view.start === 0, onClick: () => setAnchor(view.older), children: "Older" }), _jsxs("span", { role: "status", className: "text-[10px] text-white/45", children: [view.start + 1, "\u2013", view.end, " of ", view.count] }), _jsx("button", { type: "button", className: buttonClass, disabled: view.end === view.count, onClick: () => setAnchor(view.newer), children: "Newer" }), _jsx("button", { type: "button", className: buttonClass, disabled: view.following, onClick: () => setAnchor(null), children: "Latest" })] }), entries.slice(view.start, view.end).map(entry => _jsxs("article", { "data-sequence": entry.sequence, "data-message-id": entry.messageId, className: "rounded-[6px] border border-white/[0.08] bg-[#060608] px-3 py-2", children: [_jsxs("span", { className: "text-[9px] uppercase tracking-[0.12em] text-white/25", children: [entry.role, entry.state === 'streaming' ? ' · streaming' : ''] }), _jsx("p", { className: "whitespace-pre-wrap text-[12px] text-white/72", children: entry.content })] }, entry.id))] });
104
+ }
105
+ function CollaborationStatus({ status, error }) { if (!error && status !== 'offline' && status !== 'revoked' && status !== 'conflict')
106
+ return null; return _jsx("p", { role: "status", "data-testid": "collaboration-status", className: `text-[11px] ${status === 'revoked' || status === 'conflict' ? 'text-red-400/70' : status === 'offline' ? 'text-amber-300/70' : 'text-white/45'}`, children: error || status }); }
107
+ function browserStorage() { try {
108
+ return globalThis.localStorage;
109
+ }
110
+ catch {
111
+ return undefined;
112
+ } }
113
+ function stableEventId(prefix, raw) {
114
+ const source = `${prefix}:${raw}`;
115
+ if (/^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$/.test(source))
116
+ return source;
117
+ let a = 2166136261, b = 2246822519, c = 3266489917, d = 668265263;
118
+ for (const char of source) {
119
+ const code = char.charCodeAt(0);
120
+ a = Math.imul(a ^ code, 16777619);
121
+ b = Math.imul(b ^ code, 3266489917);
122
+ c = Math.imul(c ^ code, 374761393);
123
+ d = Math.imul(d ^ code, 1274126177);
124
+ }
125
+ return `${prefix}-${[a, b, c, d].map(value => (value >>> 0).toString(16).padStart(8, '0')).join('')}`.slice(0, 128);
126
+ }
127
+ //# sourceMappingURL=LiveConversationCollaboration.js.map