@xenosystem/agent-interface-ui 0.1.24 → 0.1.26
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.
- package/dist/adapters/agentHostPlatformBridge.d.ts.map +1 -1
- package/dist/adapters/agentHostPlatformBridge.js +96 -16
- package/dist/adapters/agentHostPlatformBridge.js.map +1 -1
- package/dist/adapters/hubAgentPlatformBridge.d.ts.map +1 -1
- package/dist/adapters/hubAgentPlatformBridge.js +2 -0
- package/dist/adapters/hubAgentPlatformBridge.js.map +1 -1
- package/dist/adapters/scopedBackupBridge.d.ts +4 -0
- package/dist/adapters/scopedBackupBridge.d.ts.map +1 -0
- package/dist/adapters/scopedBackupBridge.js +49 -0
- package/dist/adapters/scopedBackupBridge.js.map +1 -0
- package/dist/adapters/xenoAgentCompatibilityBridge.d.ts.map +1 -1
- package/dist/adapters/xenoAgentCompatibilityBridge.js +9 -1
- package/dist/adapters/xenoAgentCompatibilityBridge.js.map +1 -1
- package/dist/agent.css +13227 -0
- package/dist/components/agent/AgentIdentityGenerator.d.ts +16 -0
- package/dist/components/agent/AgentIdentityGenerator.d.ts.map +1 -0
- package/dist/components/agent/AgentIdentityGenerator.js +80 -0
- package/dist/components/agent/AgentIdentityGenerator.js.map +1 -0
- package/dist/components/agent/AgentInterface.d.ts +1 -0
- package/dist/components/agent/AgentInterface.d.ts.map +1 -1
- package/dist/components/agent/AgentInterface.js +1816 -643
- package/dist/components/agent/AgentInterface.js.map +1 -1
- package/dist/components/agent/AgentNotificationBanner.d.ts +10 -0
- package/dist/components/agent/AgentNotificationBanner.d.ts.map +1 -0
- package/dist/components/agent/AgentNotificationBanner.js +28 -0
- package/dist/components/agent/AgentNotificationBanner.js.map +1 -0
- package/dist/components/agent/AgentOnboarding.d.ts +16 -2
- package/dist/components/agent/AgentOnboarding.d.ts.map +1 -1
- package/dist/components/agent/AgentOnboarding.js +93 -201
- package/dist/components/agent/AgentOnboarding.js.map +1 -1
- package/dist/components/agent/AgentView.d.ts.map +1 -1
- package/dist/components/agent/AgentView.js +533 -308
- package/dist/components/agent/AgentView.js.map +1 -1
- package/dist/components/agent/AgentWorkbenchPanel.d.ts +3 -1
- package/dist/components/agent/AgentWorkbenchPanel.d.ts.map +1 -1
- package/dist/components/agent/AgentWorkbenchPanel.js +3 -2
- package/dist/components/agent/AgentWorkbenchPanel.js.map +1 -1
- package/dist/components/agent/AgentWorkspaceBrowserPanel.d.ts +4 -1
- package/dist/components/agent/AgentWorkspaceBrowserPanel.d.ts.map +1 -1
- package/dist/components/agent/AgentWorkspaceBrowserPanel.js +23 -195
- package/dist/components/agent/AgentWorkspaceBrowserPanel.js.map +1 -1
- package/dist/components/agent/AgentsWorkspaceView.d.ts +12 -0
- package/dist/components/agent/AgentsWorkspaceView.d.ts.map +1 -0
- package/dist/components/agent/AgentsWorkspaceView.js +129 -0
- package/dist/components/agent/AgentsWorkspaceView.js.map +1 -0
- package/dist/components/agent/DevelopmentCoordinationPanel.d.ts +7 -0
- package/dist/components/agent/DevelopmentCoordinationPanel.d.ts.map +1 -1
- package/dist/components/agent/DevelopmentCoordinationPanel.js +57 -49
- package/dist/components/agent/DevelopmentCoordinationPanel.js.map +1 -1
- package/dist/components/agent/KnowledgePanel.d.ts.map +1 -1
- package/dist/components/agent/KnowledgePanel.js +17 -67
- package/dist/components/agent/KnowledgePanel.js.map +1 -1
- package/dist/components/agent/LiveConversationCollaboration.d.ts +27 -0
- package/dist/components/agent/LiveConversationCollaboration.d.ts.map +1 -0
- package/dist/components/agent/LiveConversationCollaboration.js +127 -0
- package/dist/components/agent/LiveConversationCollaboration.js.map +1 -0
- package/dist/components/agent/MonacoDiffWorkbenchEditor.d.ts.map +1 -1
- package/dist/components/agent/MonacoDiffWorkbenchEditor.js +1 -1
- package/dist/components/agent/MonacoDiffWorkbenchEditor.js.map +1 -1
- package/dist/components/agent/MonacoWorkbenchEditor.d.ts.map +1 -1
- package/dist/components/agent/MonacoWorkbenchEditor.js +3 -3
- package/dist/components/agent/MonacoWorkbenchEditor.js.map +1 -1
- package/dist/components/agent/OwnedBrowserController.d.ts +55 -0
- package/dist/components/agent/OwnedBrowserController.d.ts.map +1 -0
- package/dist/components/agent/OwnedBrowserController.js +166 -0
- package/dist/components/agent/OwnedBrowserController.js.map +1 -0
- package/dist/components/agent/OwnedWorkforceView.d.ts +10 -0
- package/dist/components/agent/OwnedWorkforceView.d.ts.map +1 -0
- package/dist/components/agent/OwnedWorkforceView.js +256 -0
- package/dist/components/agent/OwnedWorkforceView.js.map +1 -0
- package/dist/components/agent/PluginManager.d.ts +34 -0
- package/dist/components/agent/PluginManager.d.ts.map +1 -1
- package/dist/components/agent/PluginManager.js +187 -126
- package/dist/components/agent/PluginManager.js.map +1 -1
- package/dist/components/agent/ProjectsWorkspaceView.d.ts +14 -0
- package/dist/components/agent/ProjectsWorkspaceView.d.ts.map +1 -0
- package/dist/components/agent/ProjectsWorkspaceView.js +176 -0
- package/dist/components/agent/ProjectsWorkspaceView.js.map +1 -0
- package/dist/components/agent/RunReviewPanel.d.ts +8 -13
- package/dist/components/agent/RunReviewPanel.d.ts.map +1 -1
- package/dist/components/agent/RunReviewPanel.js +120 -106
- package/dist/components/agent/RunReviewPanel.js.map +1 -1
- package/dist/components/agent/ScheduledWorkspaceView.d.ts +19 -0
- package/dist/components/agent/ScheduledWorkspaceView.d.ts.map +1 -0
- package/dist/components/agent/ScheduledWorkspaceView.js +150 -0
- package/dist/components/agent/ScheduledWorkspaceView.js.map +1 -0
- package/dist/components/agent/SdkSessionPanel.d.ts +25 -0
- package/dist/components/agent/SdkSessionPanel.d.ts.map +1 -0
- package/dist/components/agent/SdkSessionPanel.js +15 -0
- package/dist/components/agent/SdkSessionPanel.js.map +1 -0
- package/dist/components/agent/SlashCommandAutocomplete.d.ts +12 -0
- package/dist/components/agent/SlashCommandAutocomplete.d.ts.map +1 -0
- package/dist/components/agent/SlashCommandAutocomplete.js +33 -0
- package/dist/components/agent/SlashCommandAutocomplete.js.map +1 -0
- package/dist/components/agent/TeamsWorkspaceView.d.ts +12 -0
- package/dist/components/agent/TeamsWorkspaceView.d.ts.map +1 -0
- package/dist/components/agent/TeamsWorkspaceView.js +127 -0
- package/dist/components/agent/TeamsWorkspaceView.js.map +1 -0
- package/dist/components/agent/WorkspacePersistenceNotice.d.ts +3 -0
- package/dist/components/agent/WorkspacePersistenceNotice.d.ts.map +1 -0
- package/dist/components/agent/WorkspacePersistenceNotice.js +23 -0
- package/dist/components/agent/WorkspacePersistenceNotice.js.map +1 -0
- package/dist/components/agent/acp/AcpAgentConfigForm.d.ts +1 -0
- package/dist/components/agent/acp/AcpAgentConfigForm.d.ts.map +1 -1
- package/dist/components/agent/acp/AcpAgentConfigForm.js +47 -14
- package/dist/components/agent/acp/AcpAgentConfigForm.js.map +1 -1
- package/dist/components/agent/acp/AcpAgentDiagnosticsPanel.js +1 -1
- package/dist/components/agent/acp/AcpAgentDiagnosticsPanel.js.map +1 -1
- package/dist/components/agent/acp/AcpAgentManager.d.ts.map +1 -1
- package/dist/components/agent/acp/AcpAgentManager.js +18 -18
- package/dist/components/agent/acp/AcpAgentManager.js.map +1 -1
- package/dist/components/agent/acp/AcpAgentTestResultPanel.js +1 -1
- package/dist/components/agent/acp/AcpAgentTestResultPanel.js.map +1 -1
- package/dist/components/agent/acp/AcpApprovalPanel.js +2 -2
- package/dist/components/agent/acp/AcpApprovalPanel.js.map +1 -1
- package/dist/components/agent/acp/AcpCertificationPanel.js +1 -1
- package/dist/components/agent/acp/AcpCertificationPanel.js.map +1 -1
- package/dist/components/agent/acp/AcpLiveProviderWorkflowPanel.js +1 -1
- package/dist/components/agent/acp/AcpLiveProviderWorkflowPanel.js.map +1 -1
- package/dist/components/agent/acp/AcpProviderManagerPanel.js +1 -1
- package/dist/components/agent/acp/AcpProviderManagerPanel.js.map +1 -1
- package/dist/components/agent/acp/AcpProviderModelsPanel.js +1 -1
- package/dist/components/agent/acp/AcpProviderModelsPanel.js.map +1 -1
- package/dist/components/agent/acp/AcpSupportBundlePanel.js +1 -1
- package/dist/components/agent/acp/AcpSupportBundlePanel.js.map +1 -1
- package/dist/components/agent/collaborationWindow.d.ts +11 -0
- package/dist/components/agent/collaborationWindow.d.ts.map +1 -0
- package/dist/components/agent/collaborationWindow.js +10 -0
- package/dist/components/agent/collaborationWindow.js.map +1 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.d.ts +25 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.d.ts.map +1 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.js +118 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.js.map +1 -0
- package/dist/components/agent/conversationCollaborationController.d.ts +96 -0
- package/dist/components/agent/conversationCollaborationController.d.ts.map +1 -0
- package/dist/components/agent/conversationCollaborationController.js +597 -0
- package/dist/components/agent/conversationCollaborationController.js.map +1 -0
- package/dist/components/agent/destructiveConfirmation.d.ts +76 -0
- package/dist/components/agent/destructiveConfirmation.d.ts.map +1 -0
- package/dist/components/agent/destructiveConfirmation.js +231 -0
- package/dist/components/agent/destructiveConfirmation.js.map +1 -0
- package/dist/components/agent/developmentCoordinationController.d.ts +43 -0
- package/dist/components/agent/developmentCoordinationController.d.ts.map +1 -0
- package/dist/components/agent/developmentCoordinationController.js +94 -0
- package/dist/components/agent/developmentCoordinationController.js.map +1 -0
- package/dist/components/agent/developmentCoordinationProjection.d.ts +24 -0
- package/dist/components/agent/developmentCoordinationProjection.d.ts.map +1 -1
- package/dist/components/agent/developmentCoordinationProjection.js +34 -5
- package/dist/components/agent/developmentCoordinationProjection.js.map +1 -1
- package/dist/components/agent/editorOperationAuthority.d.ts +29 -0
- package/dist/components/agent/editorOperationAuthority.d.ts.map +1 -0
- package/dist/components/agent/editorOperationAuthority.js +73 -0
- package/dist/components/agent/editorOperationAuthority.js.map +1 -0
- package/dist/components/agent/knowledgePagination.d.ts +7 -0
- package/dist/components/agent/knowledgePagination.d.ts.map +1 -0
- package/dist/components/agent/knowledgePagination.js +7 -0
- package/dist/components/agent/knowledgePagination.js.map +1 -0
- package/dist/components/agent/knowledgePanelController.d.ts +32 -0
- package/dist/components/agent/knowledgePanelController.d.ts.map +1 -0
- package/dist/components/agent/knowledgePanelController.js +119 -0
- package/dist/components/agent/knowledgePanelController.js.map +1 -0
- package/dist/components/agent/monacoWorkbenchShared.js +1 -1
- package/dist/components/agent/onboardingModels.d.ts +31 -0
- package/dist/components/agent/onboardingModels.d.ts.map +1 -0
- package/dist/components/agent/onboardingModels.js +107 -0
- package/dist/components/agent/onboardingModels.js.map +1 -0
- package/dist/components/agent/personalConversationScope.d.ts +26 -0
- package/dist/components/agent/personalConversationScope.d.ts.map +1 -0
- package/dist/components/agent/personalConversationScope.js +43 -0
- package/dist/components/agent/personalConversationScope.js.map +1 -0
- package/dist/components/agent/reviewRequestScope.d.ts +16 -0
- package/dist/components/agent/reviewRequestScope.d.ts.map +1 -0
- package/dist/components/agent/reviewRequestScope.js +101 -0
- package/dist/components/agent/reviewRequestScope.js.map +1 -0
- package/dist/components/agent/scheduleCreationAttempt.d.ts +12 -0
- package/dist/components/agent/scheduleCreationAttempt.d.ts.map +1 -0
- package/dist/components/agent/scheduleCreationAttempt.js +30 -0
- package/dist/components/agent/scheduleCreationAttempt.js.map +1 -0
- package/dist/components/agent/settings/EntitySettingsLayout.d.ts +1 -1
- package/dist/components/agent/settings/EntitySettingsLayout.d.ts.map +1 -1
- package/dist/components/agent/settings/EntitySettingsLayout.js +64 -44
- package/dist/components/agent/settings/EntitySettingsLayout.js.map +1 -1
- package/dist/components/agent/settings/SettingsNavigation.d.ts.map +1 -1
- package/dist/components/agent/settings/SettingsNavigation.js +17 -17
- package/dist/components/agent/settings/SettingsNavigation.js.map +1 -1
- package/dist/components/agent/settings/entityArchiveState.d.ts +24 -0
- package/dist/components/agent/settings/entityArchiveState.d.ts.map +1 -0
- package/dist/components/agent/settings/entityArchiveState.js +12 -0
- package/dist/components/agent/settings/entityArchiveState.js.map +1 -0
- package/dist/components/agent/settings/sections/AccessMembersSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/AccessMembersSection.js +10 -25
- package/dist/components/agent/settings/sections/AccessMembersSection.js.map +1 -1
- package/dist/components/agent/settings/sections/AccountWorkspacePanel.d.ts +16 -0
- package/dist/components/agent/settings/sections/AccountWorkspacePanel.d.ts.map +1 -0
- package/dist/components/agent/settings/sections/AccountWorkspacePanel.js +265 -0
- package/dist/components/agent/settings/sections/AccountWorkspacePanel.js.map +1 -0
- package/dist/components/agent/settings/sections/AgentPermissionRulesPanel.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/AgentPermissionRulesPanel.js +47 -32
- package/dist/components/agent/settings/sections/AgentPermissionRulesPanel.js.map +1 -1
- package/dist/components/agent/settings/sections/DangerZoneSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/DangerZoneSection.js +30 -6
- package/dist/components/agent/settings/sections/DangerZoneSection.js.map +1 -1
- package/dist/components/agent/settings/sections/DefaultAgentConfigSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/DefaultAgentConfigSection.js +47 -37
- package/dist/components/agent/settings/sections/DefaultAgentConfigSection.js.map +1 -1
- package/dist/components/agent/settings/sections/EnvironmentSecretsSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/EnvironmentSecretsSection.js +30 -43
- package/dist/components/agent/settings/sections/EnvironmentSecretsSection.js.map +1 -1
- package/dist/components/agent/settings/sections/ExportBackupSection.d.ts +3 -1
- package/dist/components/agent/settings/sections/ExportBackupSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/ExportBackupSection.js +14 -12
- package/dist/components/agent/settings/sections/ExportBackupSection.js.map +1 -1
- package/dist/components/agent/settings/sections/GeneralSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/GeneralSection.js +47 -4
- package/dist/components/agent/settings/sections/GeneralSection.js.map +1 -1
- package/dist/components/agent/settings/sections/IntegrationsSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/IntegrationsSection.js +14 -21
- package/dist/components/agent/settings/sections/IntegrationsSection.js.map +1 -1
- package/dist/components/agent/settings/sections/NotificationsSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/NotificationsSection.js +125 -20
- package/dist/components/agent/settings/sections/NotificationsSection.js.map +1 -1
- package/dist/components/agent/settings/sections/ResourceLimitsSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/ResourceLimitsSection.js +7 -7
- package/dist/components/agent/settings/sections/ResourceLimitsSection.js.map +1 -1
- package/dist/components/agent/settings/sections/SecurityComplianceSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/SecurityComplianceSection.js +5 -4
- package/dist/components/agent/settings/sections/SecurityComplianceSection.js.map +1 -1
- package/dist/components/agent/settings/sections/UsageAnalyticsSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/UsageAnalyticsSection.js +2 -3
- package/dist/components/agent/settings/sections/UsageAnalyticsSection.js.map +1 -1
- package/dist/components/agent/settings/sections/WorkspaceDirectoryAccessSection.d.ts.map +1 -1
- package/dist/components/agent/settings/sections/WorkspaceDirectoryAccessSection.js +39 -26
- package/dist/components/agent/settings/sections/WorkspaceDirectoryAccessSection.js.map +1 -1
- package/dist/components/agent/settings/sections/WorkspaceKeysPanel.d.ts +6 -0
- package/dist/components/agent/settings/sections/WorkspaceKeysPanel.d.ts.map +1 -0
- package/dist/components/agent/settings/sections/WorkspaceKeysPanel.js +205 -0
- package/dist/components/agent/settings/sections/WorkspaceKeysPanel.js.map +1 -0
- package/dist/components/agent/settings/sections/environmentDraftAction.d.ts +3 -0
- package/dist/components/agent/settings/sections/environmentDraftAction.d.ts.map +1 -0
- package/dist/components/agent/settings/sections/environmentDraftAction.js +6 -0
- package/dist/components/agent/settings/sections/environmentDraftAction.js.map +1 -0
- package/dist/components/agent/settings/sections/membershipOperationProjection.d.ts +3 -0
- package/dist/components/agent/settings/sections/membershipOperationProjection.d.ts.map +1 -0
- package/dist/components/agent/settings/sections/membershipOperationProjection.js +9 -0
- package/dist/components/agent/settings/sections/membershipOperationProjection.js.map +1 -0
- package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.d.ts +6 -0
- package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.d.ts.map +1 -0
- package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.js +8 -0
- package/dist/components/agent/settings/sections/workspaceKeyOperationProjection.js.map +1 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts +25 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts.map +1 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.js +89 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.js.map +1 -0
- package/dist/components/agent/settings/shared/InputField.d.ts +1 -1
- package/dist/components/agent/settings/shared/InputField.d.ts.map +1 -1
- package/dist/components/agent/settings/shared/InputField.js +4 -3
- package/dist/components/agent/settings/shared/InputField.js.map +1 -1
- package/dist/components/agent/settings/shared/MembersTable.d.ts +3 -3
- package/dist/components/agent/settings/shared/MembersTable.d.ts.map +1 -1
- package/dist/components/agent/settings/shared/MembersTable.js +1 -1
- package/dist/components/agent/settings/shared/MembersTable.js.map +1 -1
- package/dist/components/agent/settings/shared/ScopedAuditPanel.d.ts +5 -0
- package/dist/components/agent/settings/shared/ScopedAuditPanel.d.ts.map +1 -0
- package/dist/components/agent/settings/shared/ScopedAuditPanel.js +70 -0
- package/dist/components/agent/settings/shared/ScopedAuditPanel.js.map +1 -0
- package/dist/components/agent/settings/shared/SettingsCard.d.ts +2 -1
- package/dist/components/agent/settings/shared/SettingsCard.d.ts.map +1 -1
- package/dist/components/agent/settings/shared/SettingsCard.js +2 -2
- package/dist/components/agent/settings/shared/SettingsCard.js.map +1 -1
- package/dist/components/agent/settings/shared/ToggleSwitch.d.ts.map +1 -1
- package/dist/components/agent/settings/shared/ToggleSwitch.js +1 -1
- package/dist/components/agent/settings/shared/ToggleSwitch.js.map +1 -1
- package/dist/components/agent/settings/shared/UsageChart.d.ts +10 -0
- package/dist/components/agent/settings/shared/UsageChart.d.ts.map +1 -1
- package/dist/components/agent/settings/shared/UsageChart.js +16 -10
- package/dist/components/agent/settings/shared/UsageChart.js.map +1 -1
- package/dist/components/agent/settings/shared/WorkspaceRulesControl.d.ts +8 -0
- package/dist/components/agent/settings/shared/WorkspaceRulesControl.d.ts.map +1 -0
- package/dist/components/agent/settings/shared/WorkspaceRulesControl.js +26 -0
- package/dist/components/agent/settings/shared/WorkspaceRulesControl.js.map +1 -0
- package/dist/components/agent/settings/shared/useScopedConfirmation.d.ts +8 -0
- package/dist/components/agent/settings/shared/useScopedConfirmation.d.ts.map +1 -0
- package/dist/components/agent/settings/shared/useScopedConfirmation.js +53 -0
- package/dist/components/agent/settings/shared/useScopedConfirmation.js.map +1 -0
- package/dist/components/agent/settings/shared/useSettingsConfirmation.d.ts +8 -0
- package/dist/components/agent/settings/shared/useSettingsConfirmation.d.ts.map +1 -0
- package/dist/components/agent/settings/shared/useSettingsConfirmation.js +51 -0
- package/dist/components/agent/settings/shared/useSettingsConfirmation.js.map +1 -0
- package/dist/components/agent/settings/shared/workspaceRulesController.d.ts +28 -0
- package/dist/components/agent/settings/shared/workspaceRulesController.d.ts.map +1 -0
- package/dist/components/agent/settings/shared/workspaceRulesController.js +82 -0
- package/dist/components/agent/settings/shared/workspaceRulesController.js.map +1 -0
- package/dist/components/agent/sidebarEntityPins.d.ts +11 -0
- package/dist/components/agent/sidebarEntityPins.d.ts.map +1 -0
- package/dist/components/agent/sidebarEntityPins.js +37 -0
- package/dist/components/agent/sidebarEntityPins.js.map +1 -0
- package/dist/components/agent/workspaceHierarchy.d.ts +24 -0
- package/dist/components/agent/workspaceHierarchy.d.ts.map +1 -0
- package/dist/components/agent/workspaceHierarchy.js +50 -0
- package/dist/components/agent/workspaceHierarchy.js.map +1 -0
- package/dist/components/product/XenoAgentProductHeader.d.ts +4 -2
- package/dist/components/product/XenoAgentProductHeader.d.ts.map +1 -1
- package/dist/components/product/XenoAgentProductHeader.js +22 -4
- package/dist/components/product/XenoAgentProductHeader.js.map +1 -1
- package/dist/components/product/XenoAgentSessionTabs.js +1 -1
- package/dist/components/product/XenoAgentSessionTabs.js.map +1 -1
- package/dist/components/product/XenoAgentWorkspaceSelector.d.ts +7 -0
- package/dist/components/product/XenoAgentWorkspaceSelector.d.ts.map +1 -0
- package/dist/components/product/XenoAgentWorkspaceSelector.js +237 -0
- package/dist/components/product/XenoAgentWorkspaceSelector.js.map +1 -0
- package/dist/components/workspace/WorkspaceCreationWizard.d.ts +6 -0
- package/dist/components/workspace/WorkspaceCreationWizard.d.ts.map +1 -0
- package/dist/components/workspace/WorkspaceCreationWizard.js +48 -0
- package/dist/components/workspace/WorkspaceCreationWizard.js.map +1 -0
- package/dist/hooks/useSidebarLayoutPreference.d.ts +29 -0
- package/dist/hooks/useSidebarLayoutPreference.d.ts.map +1 -0
- package/dist/hooks/useSidebarLayoutPreference.js +83 -0
- package/dist/hooks/useSidebarLayoutPreference.js.map +1 -0
- package/dist/hooks/useWorkspaceCreation.d.ts +8 -0
- package/dist/hooks/useWorkspaceCreation.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceCreation.js +40 -0
- package/dist/hooks/useWorkspaceCreation.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/platformApiTypes.d.ts +77 -36
- package/dist/platformApiTypes.d.ts.map +1 -1
- package/dist/platformBridge.d.ts +4 -0
- package/dist/platformBridge.d.ts.map +1 -1
- package/dist/platformBridge.js +10 -0
- package/dist/platformBridge.js.map +1 -1
- package/dist/stores/agentChatStore.d.ts +120 -2
- package/dist/stores/agentChatStore.d.ts.map +1 -1
- package/dist/stores/agentChatStore.js +344 -35
- package/dist/stores/agentChatStore.js.map +1 -1
- package/dist/stores/agentCreationDefaults.d.ts +25 -0
- package/dist/stores/agentCreationDefaults.d.ts.map +1 -0
- package/dist/stores/agentCreationDefaults.js +11 -0
- package/dist/stores/agentCreationDefaults.js.map +1 -0
- package/dist/stores/entitySettingsStore.d.ts +37 -12
- package/dist/stores/entitySettingsStore.d.ts.map +1 -1
- package/dist/stores/entitySettingsStore.js +558 -585
- package/dist/stores/entitySettingsStore.js.map +1 -1
- package/dist/stores/suggestionStore.d.ts +9 -2
- package/dist/stores/suggestionStore.d.ts.map +1 -1
- package/dist/stores/suggestionStore.js +51 -24
- package/dist/stores/suggestionStore.js.map +1 -1
- package/dist/stores/workspaceCreationAttempt.d.ts +14 -0
- package/dist/stores/workspaceCreationAttempt.d.ts.map +1 -0
- package/dist/stores/workspaceCreationAttempt.js +35 -0
- package/dist/stores/workspaceCreationAttempt.js.map +1 -0
- package/dist/stores/workspaceReconciliation.d.ts +6 -0
- package/dist/stores/workspaceReconciliation.d.ts.map +1 -0
- package/dist/stores/workspaceReconciliation.js +33 -0
- package/dist/stores/workspaceReconciliation.js.map +1 -0
- package/dist/stores/workspaceStore.d.ts +44 -9
- package/dist/stores/workspaceStore.d.ts.map +1 -1
- package/dist/stores/workspaceStore.js +238 -99
- package/dist/stores/workspaceStore.js.map +1 -1
- package/dist/types/agentEditor.d.ts +1 -0
- package/dist/types/agentEditor.d.ts.map +1 -1
- package/dist/utils/advertisedReasoning.d.ts +25 -0
- package/dist/utils/advertisedReasoning.d.ts.map +1 -0
- package/dist/utils/advertisedReasoning.js +62 -0
- package/dist/utils/advertisedReasoning.js.map +1 -0
- package/dist/utils/clipboardCopy.d.ts +4 -0
- package/dist/utils/clipboardCopy.d.ts.map +1 -0
- package/dist/utils/clipboardCopy.js +27 -0
- package/dist/utils/clipboardCopy.js.map +1 -0
- package/dist/utils/providerCommandArgs.d.ts +11 -0
- package/dist/utils/providerCommandArgs.d.ts.map +1 -0
- package/dist/utils/providerCommandArgs.js +18 -0
- package/dist/utils/providerCommandArgs.js.map +1 -0
- package/dist/utils/rendererTeardown.d.ts +6 -0
- package/dist/utils/rendererTeardown.d.ts.map +1 -0
- package/dist/utils/rendererTeardown.js +18 -0
- package/dist/utils/rendererTeardown.js.map +1 -0
- package/package.json +20 -8
- 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 {
|
|
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
|
|
17
|
-
const [
|
|
18
|
-
const
|
|
19
|
-
const
|
|
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
|
-
|
|
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 () =>
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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":"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"}
|
|
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,
|
|
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, {
|
|
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
|
|
33
|
-
|
|
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 [
|
|
36
|
-
const [
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
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":";AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"KnowledgePanel.js","sourceRoot":"","sources":["../../../src/components/agent/KnowledgePanel.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,WAAW,GAAG,6RAA6R,CAAA;AACjT,MAAM,WAAW,GAAG,qDAAqD,CAAA;AACzE,MAAM,SAAS,GAAG,iGAAiG,CAAA;AAEnH,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,sBAAsB,EAAE,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAQD,MAAM,UAAU,cAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAuB;IACxE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,GAAG,CAAC,OAAO,GAAG,KAAK,CAAA;IACnB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,wBAAwB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAC3I,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IACrJ,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,WAAW,CAAC,CAAA;IACpE,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,WAAW,CAAC,CAAA;IACpE,SAAS,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAE/J,OAAO,CACL,eAAK,SAAS,EAAC,qGAAqG,iBAAa,iBAAiB,aAChJ,kBAAQ,SAAS,EAAC,yCAAyC,aACzD,cAAI,SAAS,EAAC,6CAA6C,aAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,wBAAgB,kBAAe,EAC7G,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,gBAAa,mBAAmB,YACpI,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,wBAAgB,GAC5B,IACF,EAGR,KAAK,EAAE,MAAM,IAAI,CAChB,aAAG,SAAS,EAAE,WAAW,iBAAc,kBAAkB,aACvD,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,wBAAgB,OAAE,KAAK,CAAC,MAAM,IACnD,CACL,EACA,KAAK,EAAE,OAAO,IAAI,YAAG,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,WAAW,kDAAuC,EAEhG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAChB,YAAG,SAAS,EAAE,WAAW,wDAAwC,CAClE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACd,8BACG,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC5B,YAAG,SAAS,EAAE,WAAW,6DAAkD,CAC5E,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,WAAW,iBAAa,mBAAmB,YACtD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACzB,cAAI,SAAS,EAAE,SAAS,iBAA4B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,aAChF,GAAG,CAAC,MAAM,IAAI,KAAC,GAAG,IAAC,IAAI,EAAE,EAAE,wBAAgB,EAC5C,eAAM,SAAS,EAAC,uBAAuB,YAAE,GAAG,CAAC,OAAO,GAAQ,EAC5D,eAAM,SAAS,EAAC,+BAA+B,YAAE,GAAG,CAAC,IAAI,GAAQ,EAGjE,eAAM,SAAS,EAAE,WAAW,YAAG,GAAG,CAAC,UAAU,GAAQ,EACrD,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,uBAAiB,KAP/F,GAAG,CAAC,EAAE,CAQhC,CACN,CAAC,GACC,CACN,EACA,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,6BAAgB,yBAAyB,EAAC,SAAS,EAAC,mCAAmC,aAC3G,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,uCAAiC,EAC5J,gBAAM,SAAS,EAAE,WAAW,sBAAQ,OAAO,CAAC,IAAI,GAAG,CAAC,UAAM,OAAO,CAAC,KAAK,IAAQ,EAC/E,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,mCAA6B,IACnK,EAEN,mBAAS,SAAS,EAAC,uDAAuD,aACxE,KAAC,UAAU,IAAC,KAAK,EAAC,SAAS,EACzB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACxD,WAAW,EAAC,qCAAqC,GACjD,EACF,KAAC,UAAU,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,UAAU,EACtC,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EACrD,WAAW,EAAC,uBAAuB,GACnC,EACF,eAAK,SAAS,EAAC,mCAAmC,aAClD,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAiB,EAG3H,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,8BAAwB,IAC3H,IACE,EAET,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,mBAAS,SAAS,EAAC,WAAW,iBAAa,mBAAmB,aAC5D,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,YAC3F,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,OAAO,CAAC,MAAM,qBAAqB,GAClE,EAIR,WAAW,IAAI,CACd,aAAI,SAAS,EAAC,WAAW,YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACzB,cAAI,SAAS,EAAE,SAAS,aACtB,eAAM,SAAS,EAAC,uBAAuB,YAAE,GAAG,CAAC,OAAO,GAAQ,EAC5D,eAAM,SAAS,EAAC,+BAA+B,YAAE,GAAG,CAAC,IAAI,GAAQ,EACjE,eAAM,SAAS,EAAE,WAAW,YAAG,GAAG,CAAC,UAAU,GAAQ,EACrD,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,uBAAiB,KAJ/F,GAAG,CAAC,EAAE,CAKhC,CACN,CAAC,GACC,CACN,EACA,WAAW,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,6BAAgB,4BAA4B,EAAC,SAAS,EAAC,mCAAmC,aAC7H,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,0CAAoC,EAC/J,gBAAM,SAAS,EAAE,WAAW,sBAAQ,OAAO,CAAC,IAAI,GAAG,CAAC,UAAM,OAAO,CAAC,KAAK,IAAQ,EAC/E,iBAAQ,SAAS,EAAE,WAAW,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,sCAAgC,IACtK,IACE,CACX,IACA,CACJ,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,IAAI,YAAG,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,WAAW,iBAAc,mBAAmB,YAAE,OAAO,GAAK,IAC7F,CACP,CAAA;AACH,CAAC"}
|
|
@@ -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
|