@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
|
@@ -5,6 +5,9 @@ export interface AgentCapabilities {
|
|
|
5
5
|
fileWrite: boolean;
|
|
6
6
|
appLaunch: boolean;
|
|
7
7
|
webSearch?: boolean;
|
|
8
|
+
codeExecution?: boolean;
|
|
9
|
+
imageGeneration?: boolean;
|
|
10
|
+
dataAnalysis?: boolean;
|
|
8
11
|
}
|
|
9
12
|
export type AgentPermissionProfileName = 'standard' | 'read-only' | 'edit-with-approval' | 'trusted-workspace' | 'plan';
|
|
10
13
|
export interface WorkspaceApp {
|
|
@@ -76,6 +79,7 @@ export interface AccessSettings {
|
|
|
76
79
|
allowGuestViewing: boolean;
|
|
77
80
|
}
|
|
78
81
|
export interface Agent {
|
|
82
|
+
isArchived?: boolean;
|
|
79
83
|
id: string;
|
|
80
84
|
name: string;
|
|
81
85
|
description?: string;
|
|
@@ -96,7 +100,13 @@ export interface Agent {
|
|
|
96
100
|
rateLimits?: RateLimits;
|
|
97
101
|
tools?: string[];
|
|
98
102
|
}
|
|
103
|
+
export interface AgentCreationDefaults {
|
|
104
|
+
model?: string;
|
|
105
|
+
systemPrompt?: string;
|
|
106
|
+
tools?: string[];
|
|
107
|
+
}
|
|
99
108
|
export interface Team {
|
|
109
|
+
isArchived?: boolean;
|
|
100
110
|
id: string;
|
|
101
111
|
name: string;
|
|
102
112
|
description?: string;
|
|
@@ -107,6 +117,7 @@ export interface Team {
|
|
|
107
117
|
isExpanded: boolean;
|
|
108
118
|
rateLimits?: RateLimits;
|
|
109
119
|
envVars?: EnvVar[];
|
|
120
|
+
agentDefaults?: AgentCreationDefaults;
|
|
110
121
|
}
|
|
111
122
|
export interface SecuritySettings {
|
|
112
123
|
require2FA: boolean;
|
|
@@ -130,39 +141,55 @@ export interface Workspace {
|
|
|
130
141
|
access?: AccessSettings;
|
|
131
142
|
security?: SecuritySettings;
|
|
132
143
|
isArchived?: boolean;
|
|
144
|
+
agentDefaults?: AgentCreationDefaults;
|
|
133
145
|
}
|
|
146
|
+
export declare function toolsForAgentCapabilities(capabilities?: AgentCapabilities): string[];
|
|
134
147
|
interface WorkspaceState {
|
|
148
|
+
lifecycleBusy: boolean;
|
|
149
|
+
lifecycleError: string | null;
|
|
150
|
+
lifecycleMessage: string | null;
|
|
151
|
+
retryLifecycle: () => Promise<boolean>;
|
|
135
152
|
workspaces: Workspace[];
|
|
136
153
|
isLoaded: boolean;
|
|
154
|
+
persistenceStatus: 'idle' | 'saving' | 'saved' | 'error';
|
|
155
|
+
persistenceError: string | null;
|
|
156
|
+
retryPersistence: () => void;
|
|
157
|
+
activeWorkspaceScope: string | null;
|
|
158
|
+
setActiveWorkspaceScope: (id: string | null) => void;
|
|
159
|
+
isWorkspaceWizardOpen: boolean;
|
|
160
|
+
openWorkspaceWizard: () => void;
|
|
161
|
+
closeWorkspaceWizard: () => void;
|
|
137
162
|
loadWorkspaces: () => Promise<void>;
|
|
163
|
+
/** Explicit user recovery; never invoked by background change notifications. */
|
|
164
|
+
discardUnsavedWorkspaceChanges: () => Promise<void>;
|
|
138
165
|
addWorkspace: (name: string) => string;
|
|
139
166
|
renameWorkspace: (id: string, name: string) => void;
|
|
140
|
-
deleteWorkspace: (id: string) =>
|
|
167
|
+
deleteWorkspace: (id: string) => Promise<boolean>;
|
|
141
168
|
duplicateWorkspace: (id: string) => void;
|
|
142
169
|
toggleWorkspaceExpanded: (id: string) => void;
|
|
143
170
|
addDirectoryToWorkspace: (workspaceId: string, path: string) => void;
|
|
144
171
|
removeDirectoryFromWorkspace: (workspaceId: string, directory: string) => void;
|
|
145
172
|
addAppToWorkspace: (workspaceId: string, app: WorkspaceApp) => void;
|
|
146
173
|
removeAppFromWorkspace: (workspaceId: string, appId: string) => void;
|
|
147
|
-
addTeam: (workspaceId: string, name: string) => string;
|
|
174
|
+
addTeam: (workspaceId: string, name: string, description?: string) => string;
|
|
148
175
|
renameTeam: (workspaceId: string, teamId: string, name: string) => void;
|
|
149
|
-
deleteTeam: (workspaceId: string, teamId: string) =>
|
|
176
|
+
deleteTeam: (workspaceId: string, teamId: string) => Promise<boolean>;
|
|
150
177
|
duplicateTeam: (workspaceId: string, teamId: string) => void;
|
|
151
178
|
moveTeam: (sourceWsId: string, teamId: string, targetWsId: string) => void;
|
|
152
179
|
toggleTeamExpanded: (workspaceId: string, teamId: string) => void;
|
|
153
|
-
addAgent: (workspaceId: string, teamId: string, name: string, model?: string, systemPrompt?: string, capabilities?: AgentCapabilities) => string;
|
|
180
|
+
addAgent: (workspaceId: string, teamId: string, name: string, model?: string, systemPrompt?: string, capabilities?: AgentCapabilities, runtimeSelection?: HubAgentRuntimeSelection) => string;
|
|
154
181
|
renameAgent: (workspaceId: string, teamId: string, agentId: string, name: string) => void;
|
|
155
|
-
deleteAgent: (workspaceId: string, teamId: string, agentId: string) =>
|
|
182
|
+
deleteAgent: (workspaceId: string, teamId: string, agentId: string) => Promise<boolean>;
|
|
156
183
|
duplicateAgent: (workspaceId: string, teamId: string, agentId: string) => void;
|
|
157
184
|
moveAgent: (srcWsId: string, srcTeamId: string, agentId: string, dstWsId: string, dstTeamId: string) => void;
|
|
158
185
|
toggleAgentExpanded: (workspaceId: string, teamId: string, agentId: string) => void;
|
|
159
186
|
updateAgent: (workspaceId: string, teamId: string, agentId: string, updates: Partial<Agent>) => void;
|
|
160
187
|
addAgentApprovalRule: (workspaceId: string, teamId: string, agentId: string, rule: Omit<AgentApprovalRule, 'id' | 'createdAt'> & Partial<Pick<AgentApprovalRule, 'id' | 'createdAt'>>) => void;
|
|
161
188
|
removeAgentApprovalRule: (workspaceId: string, teamId: string, agentId: string, ruleId: string) => void;
|
|
162
|
-
updateWorkspace: (id: string, updates: Partial<Pick<Workspace, 'name' | 'description' | 'rateLimits' | 'envVars' | 'isArchived'>>) => void;
|
|
163
|
-
updateTeam: (workspaceId: string, teamId: string, updates: Partial<Pick<Team, 'name' | 'description' | 'rateLimits' | 'envVars' | 'teamAgentPolicy'>>) => void;
|
|
164
|
-
archiveWorkspace: (id: string) =>
|
|
165
|
-
unarchiveWorkspace: (id: string) =>
|
|
189
|
+
updateWorkspace: (id: string, updates: Partial<Pick<Workspace, 'name' | 'description' | 'rateLimits' | 'envVars' | 'isArchived' | 'agentDefaults'>>) => void;
|
|
190
|
+
updateTeam: (workspaceId: string, teamId: string, updates: Partial<Pick<Team, 'name' | 'description' | 'rateLimits' | 'envVars' | 'teamAgentPolicy' | 'agentDefaults'>>) => void;
|
|
191
|
+
archiveWorkspace: (id: string) => Promise<boolean>;
|
|
192
|
+
unarchiveWorkspace: (id: string) => Promise<boolean>;
|
|
166
193
|
setWorkspaces: (workspaces: Workspace[] | ((prev: Workspace[]) => Workspace[])) => void;
|
|
167
194
|
findAgentById: (agentId: string) => {
|
|
168
195
|
workspace: Workspace;
|
|
@@ -170,6 +197,14 @@ interface WorkspaceState {
|
|
|
170
197
|
agent: Agent;
|
|
171
198
|
} | null;
|
|
172
199
|
}
|
|
200
|
+
export declare function waitForWorkspacePersistence(): Promise<void>;
|
|
201
|
+
/** Check the host-acknowledged snapshot, not just the optimistic renderer tree. */
|
|
202
|
+
export declare function requireWorkspacePersistence(contains: (workspaces: Workspace[]) => boolean): Promise<void>;
|
|
203
|
+
type LifecycleScope = import('@xenosystem/agent-interface-contract').AgentWorkspaceLifecycleScope;
|
|
204
|
+
/** Restore only the archived flag against the latest canonical revision; never restart execution. */
|
|
205
|
+
export declare function restoreWorkspaceLifecycle(scope: LifecycleScope): Promise<boolean>;
|
|
206
|
+
/** Every UI entrypoint uses host ACK; renderer snapshots never perform the cascade. */
|
|
207
|
+
export declare function requestWorkspaceLifecycle(scope: LifecycleScope, action: 'archive' | 'delete', operationId?: string): Promise<boolean>;
|
|
173
208
|
export declare const useWorkspaceStore: import("zustand").UseBoundStore<import("zustand").StoreApi<WorkspaceState>>;
|
|
174
209
|
export {};
|
|
175
210
|
//# sourceMappingURL=workspaceStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceStore.d.ts","sourceRoot":"","sources":["../../src/stores/workspaceStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspaceStore.d.ts","sourceRoot":"","sources":["../../src/stores/workspaceStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { getAgentPlatformBridge } from '../platformBridge.js';
|
|
2
|
+
import { reconcileWorkspaces } from './workspaceReconciliation.js';
|
|
3
|
+
import { agentCreationConfiguration } from './agentCreationDefaults.js';
|
|
4
|
+
import { capabilitiesForToolCategories, toolCategoriesForCapabilities } from '@xenosystem/agent-interface-core';
|
|
2
5
|
/**
|
|
3
6
|
* Workspace Store — Zustand store with file-backed persistence
|
|
4
7
|
*
|
|
@@ -7,7 +10,6 @@ import { getAgentPlatformBridge } from '../platformBridge.js';
|
|
|
7
10
|
* Conversations are NOT stored here — they live in agentChatStore.
|
|
8
11
|
*/
|
|
9
12
|
import { create } from 'zustand';
|
|
10
|
-
import { useAgentChatStore } from './agentChatStore.js';
|
|
11
13
|
import { DEFAULT_HUB_AGENT_RUNTIME_SELECTION, normalizeHubAgentRuntimeSelection, } from '../utils/agentRuntimeProvider.js';
|
|
12
14
|
// =============================================================================
|
|
13
15
|
// HELPERS
|
|
@@ -21,6 +23,9 @@ const DEFAULT_CAPABILITIES = {
|
|
|
21
23
|
fileWrite: false,
|
|
22
24
|
appLaunch: true,
|
|
23
25
|
};
|
|
26
|
+
export function toolsForAgentCapabilities(capabilities = DEFAULT_CAPABILITIES) {
|
|
27
|
+
return toolCategoriesForCapabilities(capabilities);
|
|
28
|
+
}
|
|
24
29
|
const DEFAULT_PERMISSION_PROFILE = 'standard';
|
|
25
30
|
const VALID_PERMISSION_PROFILES = new Set([
|
|
26
31
|
'standard',
|
|
@@ -64,7 +69,7 @@ function normalizeTeamAgentCallPolicy(value) {
|
|
|
64
69
|
function normalizeLoadedAgent(agent) {
|
|
65
70
|
return {
|
|
66
71
|
...agent,
|
|
67
|
-
capabilities: agent.capabilities || DEFAULT_CAPABILITIES,
|
|
72
|
+
capabilities: Array.isArray(agent.tools) ? capabilitiesForToolCategories(agent.tools) : agent.capabilities || DEFAULT_CAPABILITIES,
|
|
68
73
|
permissionProfile: normalizePermissionProfile(agent.permissionProfile),
|
|
69
74
|
runtimeSelection: normalizeHubAgentRuntimeSelection(agent.runtimeSelection),
|
|
70
75
|
allowedDirectories: Array.isArray(agent.allowedDirectories) ? agent.allowedDirectories : [],
|
|
@@ -87,31 +92,94 @@ function normalizeLoadedWorkspaces(workspaces) {
|
|
|
87
92
|
})),
|
|
88
93
|
}));
|
|
89
94
|
}
|
|
90
|
-
//
|
|
91
|
-
|
|
95
|
+
// Dispatch edits without a renderer-only debounce window. Serialize acknowledgements
|
|
96
|
+
// so an older slow write cannot overwrite a newer snapshot.
|
|
97
|
+
let persistQueue = Promise.resolve();
|
|
98
|
+
let persistGeneration = 0;
|
|
99
|
+
let persistPending = 0;
|
|
100
|
+
let workspaceLoadGeneration = 0;
|
|
101
|
+
const workspaceBaselines = new WeakMap();
|
|
102
|
+
export function waitForWorkspacePersistence() {
|
|
103
|
+
return persistQueue;
|
|
104
|
+
}
|
|
105
|
+
/** Check the host-acknowledged snapshot, not just the optimistic renderer tree. */
|
|
106
|
+
export async function requireWorkspacePersistence(contains) {
|
|
107
|
+
// Includes this creation's queued write. Later unrelated edits must not keep a
|
|
108
|
+
// successfully saved dialog open indefinitely.
|
|
109
|
+
await persistQueue;
|
|
110
|
+
const state = useWorkspaceStore.getState();
|
|
111
|
+
if (state.persistenceStatus === 'error')
|
|
112
|
+
throw new Error(state.persistenceError || 'Workspace save was not acknowledged.');
|
|
113
|
+
const storage = getAgentPlatformBridge()?.workspaceStorage;
|
|
114
|
+
const acknowledged = storage && workspaceBaselines.get(storage);
|
|
115
|
+
if (!acknowledged || !contains(acknowledged.workspaces) || !contains(state.workspaces)) {
|
|
116
|
+
throw new Error('The created item is not present in the acknowledged workspace state. It may have been changed or removed.');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (typeof window !== 'undefined') {
|
|
120
|
+
window.addEventListener('beforeunload', (event) => {
|
|
121
|
+
if (persistPending === 0 && useWorkspaceStore.getState().persistenceStatus !== 'error')
|
|
122
|
+
return;
|
|
123
|
+
event.preventDefault();
|
|
124
|
+
event.returnValue = '';
|
|
125
|
+
});
|
|
126
|
+
}
|
|
92
127
|
function schedulePersist(workspaces) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
128
|
+
const generation = ++persistGeneration;
|
|
129
|
+
const storage = getAgentPlatformBridge()?.workspaceStorage;
|
|
130
|
+
const base = storage ? workspaceBaselines.get(storage) : undefined;
|
|
131
|
+
persistPending += 1;
|
|
132
|
+
// Callers use Zustand updater functions; notify only after that update commits.
|
|
133
|
+
queueMicrotask(() => useWorkspaceStore.setState({ persistenceStatus: 'saving', persistenceError: null }));
|
|
134
|
+
persistQueue = persistQueue.then(async () => {
|
|
135
|
+
try {
|
|
136
|
+
if (!storage?.save)
|
|
137
|
+
throw new Error('Workspace storage is not available on this host.');
|
|
138
|
+
let desired = workspaces;
|
|
139
|
+
let current = workspaceBaselines.get(storage);
|
|
140
|
+
if (base && current && base !== current) {
|
|
141
|
+
const merged = reconcileWorkspaces(base.workspaces, desired, current.workspaces);
|
|
142
|
+
if (merged.conflicts.length)
|
|
143
|
+
throw new Error(`Workspace edits conflict at ${merged.conflicts.join(', ')}. Your local edits are retained.`);
|
|
144
|
+
desired = merged.value;
|
|
145
|
+
}
|
|
146
|
+
let result = await storage.save(desired, current?.revision);
|
|
147
|
+
if (!result.success && result.code === 'WORKSPACE_CONFLICT' && base) {
|
|
148
|
+
const latest = await storage.load();
|
|
149
|
+
if (!latest.success || !Array.isArray(latest.workspaces) || !latest.revision)
|
|
150
|
+
throw new Error(latest.error || 'Could not read newer workspace state for reconciliation.');
|
|
151
|
+
const merged = reconcileWorkspaces(base.workspaces, workspaces, normalizeLoadedWorkspaces(latest.workspaces));
|
|
152
|
+
if (merged.conflicts.length)
|
|
153
|
+
throw new Error(`Workspace edits conflict at ${merged.conflicts.join(', ')}. Your local edits are retained.`);
|
|
154
|
+
desired = merged.value;
|
|
155
|
+
// One bounded retry. Another intervening writer is reported, never overwritten.
|
|
156
|
+
result = await storage.save(desired, latest.revision);
|
|
157
|
+
}
|
|
158
|
+
if (!result?.success)
|
|
159
|
+
throw new Error(result?.error || 'The host did not confirm the workspace save.');
|
|
160
|
+
workspaceBaselines.set(storage, { workspaces: structuredClone(desired), revision: result.revision });
|
|
161
|
+
if (generation === persistGeneration) {
|
|
162
|
+
useWorkspaceStore.setState({ workspaces: desired, persistenceStatus: 'saved', persistenceError: null });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (generation === persistGeneration) {
|
|
167
|
+
useWorkspaceStore.setState({
|
|
168
|
+
persistenceStatus: 'error',
|
|
169
|
+
persistenceError: error instanceof Error ? error.message : 'Workspace save failed.',
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
persistPending -= 1;
|
|
175
|
+
}
|
|
176
|
+
});
|
|
104
177
|
}
|
|
105
178
|
function flushPersist(workspaces) {
|
|
106
|
-
|
|
107
|
-
clearTimeout(persistTimer);
|
|
108
|
-
persistTimer = null;
|
|
109
|
-
console.warn(`[WorkspaceStore] Flush-saving (delete operation)`);
|
|
110
|
-
getAgentPlatformBridge()?.workspaceStorage?.save(workspaces).catch((err) => {
|
|
111
|
-
console.warn('[WorkspaceStore] Save failed:', err);
|
|
112
|
-
});
|
|
179
|
+
schedulePersist(workspaces);
|
|
113
180
|
}
|
|
114
|
-
let
|
|
181
|
+
let workspaceStorageChangedBinding;
|
|
182
|
+
let unsubscribeWorkspaceStorageChanged;
|
|
115
183
|
let workspaceStorageChangedUnsupportedReported = false;
|
|
116
184
|
/**
|
|
117
185
|
* Registers the cross-surface workspace-change listener when the active platform
|
|
@@ -123,9 +191,12 @@ let workspaceStorageChangedUnsupportedReported = false;
|
|
|
123
191
|
* latch stays open, so a later bridge that does support it can still register.
|
|
124
192
|
*/
|
|
125
193
|
function ensureWorkspaceStorageChangedListener() {
|
|
126
|
-
if (workspaceStorageChangedListenerRegistered)
|
|
127
|
-
return;
|
|
128
194
|
const storage = getAgentPlatformBridge()?.workspaceStorage;
|
|
195
|
+
if (workspaceStorageChangedBinding === storage)
|
|
196
|
+
return;
|
|
197
|
+
unsubscribeWorkspaceStorageChanged?.();
|
|
198
|
+
unsubscribeWorkspaceStorageChanged = undefined;
|
|
199
|
+
workspaceStorageChangedBinding = undefined;
|
|
129
200
|
if (typeof storage?.onChanged !== 'function') {
|
|
130
201
|
if (!workspaceStorageChangedUnsupportedReported) {
|
|
131
202
|
workspaceStorageChangedUnsupportedReported = true;
|
|
@@ -135,52 +206,155 @@ function ensureWorkspaceStorageChangedListener() {
|
|
|
135
206
|
return;
|
|
136
207
|
}
|
|
137
208
|
try {
|
|
138
|
-
storage.onChanged(() => {
|
|
209
|
+
const unsubscribe = storage.onChanged(() => {
|
|
139
210
|
void useWorkspaceStore.getState().loadWorkspaces();
|
|
140
211
|
});
|
|
141
|
-
|
|
212
|
+
unsubscribeWorkspaceStorageChanged = typeof unsubscribe === 'function' ? unsubscribe : () => storage.offChanged?.();
|
|
213
|
+
workspaceStorageChangedBinding = storage;
|
|
142
214
|
}
|
|
143
215
|
catch (err) {
|
|
144
216
|
console.warn('[WorkspaceStore] Failed to register the workspace-storage change listener:', err);
|
|
145
217
|
}
|
|
146
218
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
219
|
+
let pendingLifecycle;
|
|
220
|
+
/** Restore only the archived flag against the latest canonical revision; never restart execution. */
|
|
221
|
+
export async function restoreWorkspaceLifecycle(scope) {
|
|
222
|
+
if (useWorkspaceStore.getState().lifecycleBusy)
|
|
223
|
+
return false;
|
|
224
|
+
useWorkspaceStore.setState({ lifecycleBusy: true, lifecycleError: null, lifecycleMessage: null });
|
|
225
|
+
try {
|
|
226
|
+
await waitForWorkspacePersistence();
|
|
227
|
+
if (useWorkspaceStore.getState().persistenceStatus === 'error')
|
|
228
|
+
throw new Error('Resolve unsaved workspace edits before restoring');
|
|
229
|
+
const storage = getAgentPlatformBridge().workspaceStorage;
|
|
230
|
+
const state = await storage.load();
|
|
231
|
+
if (!state.success || !state.revision)
|
|
232
|
+
throw new Error(state.error || 'Workspace revision unavailable');
|
|
233
|
+
const workspaces = structuredClone(state.workspaces);
|
|
234
|
+
const workspace = workspaces.find(w => w.id === scope.workspaceId);
|
|
235
|
+
const team = workspace?.teams.find(t => t.id === scope.teamId);
|
|
236
|
+
const entity = scope.agentId ? team?.agents.find(a => a.id === scope.agentId) : scope.teamId ? team : workspace;
|
|
237
|
+
if (!entity)
|
|
238
|
+
throw new Error('Archived scope no longer exists');
|
|
239
|
+
entity.isArchived = false;
|
|
240
|
+
const saved = await storage.save(workspaces, state.revision);
|
|
241
|
+
if (!saved.success)
|
|
242
|
+
throw new Error(saved.error || 'Restore was not acknowledged');
|
|
243
|
+
await useWorkspaceStore.getState().loadWorkspaces();
|
|
244
|
+
useWorkspaceStore.setState({ lifecycleMessage: 'Restore confirmed by host. Execution remains stopped.' });
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
useWorkspaceStore.setState({ lifecycleError: error instanceof Error ? error.message : 'Restore failed' });
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
useWorkspaceStore.setState({ lifecycleBusy: false });
|
|
253
|
+
}
|
|
150
254
|
}
|
|
151
|
-
|
|
152
|
-
function
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
255
|
+
/** Every UI entrypoint uses host ACK; renderer snapshots never perform the cascade. */
|
|
256
|
+
export async function requestWorkspaceLifecycle(scope, action, operationId = crypto.randomUUID()) {
|
|
257
|
+
if (useWorkspaceStore.getState().lifecycleBusy)
|
|
258
|
+
return false;
|
|
259
|
+
pendingLifecycle = { scope: { ...scope }, action, id: operationId };
|
|
260
|
+
useWorkspaceStore.setState({ lifecycleBusy: true, lifecycleError: null, lifecycleMessage: null });
|
|
261
|
+
let completed = false;
|
|
262
|
+
const confirmedMessage = action === 'archive' ? 'Archive confirmed by host.' : 'Delete confirmed by host.';
|
|
263
|
+
const refreshWarning = 'The operation is complete, but its view could not be refreshed. Reload the workspace; do not repeat the operation.';
|
|
264
|
+
try {
|
|
265
|
+
await waitForWorkspacePersistence();
|
|
266
|
+
if (useWorkspaceStore.getState().persistenceStatus === 'error')
|
|
267
|
+
throw new Error('Resolve unsaved workspace edits before changing lifecycle');
|
|
268
|
+
const api = getAgentPlatformBridge();
|
|
269
|
+
if (!api.workspace?.lifecycle)
|
|
270
|
+
throw new Error('Durable workspace lifecycle service is unavailable');
|
|
271
|
+
const state = await api.workspaceStorage.load();
|
|
272
|
+
if (!state.success || !state.revision)
|
|
273
|
+
throw new Error(state.error || 'Workspace revision is unavailable');
|
|
274
|
+
const result = await api.workspace.lifecycle({ scope, action, operationId, expectedRevision: state.revision });
|
|
275
|
+
if (!result.success || result.status !== 'completed' || result.operationId !== operationId)
|
|
276
|
+
throw new Error(result.error || 'Lifecycle cancellation remains pending; retry once execution stops');
|
|
277
|
+
completed = true;
|
|
278
|
+
pendingLifecycle = undefined;
|
|
279
|
+
await useWorkspaceStore.getState().loadWorkspaces();
|
|
280
|
+
if (action === 'delete') {
|
|
281
|
+
const { useAgentChatStore, loadLocalAgentConversations } = await import('./agentChatStore.js');
|
|
282
|
+
const removed = new Set(result.conversationIds ?? []);
|
|
283
|
+
useAgentChatStore.setState(current => ({ conversations: Object.fromEntries(Object.entries(current.conversations).filter(([id]) => !removed.has(id))) }));
|
|
284
|
+
await loadLocalAgentConversations();
|
|
285
|
+
if (!scope.teamId && useWorkspaceStore.getState().activeWorkspaceScope === scope.workspaceId)
|
|
286
|
+
useWorkspaceStore.setState({ activeWorkspaceScope: null });
|
|
287
|
+
}
|
|
288
|
+
const refreshUnavailable = result.projectionStatus === 'unavailable' || useWorkspaceStore.getState().persistenceStatus === 'error';
|
|
289
|
+
useWorkspaceStore.setState({ lifecycleMessage: confirmedMessage + (refreshUnavailable ? ` ${refreshWarning}` : '') });
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
if (completed) {
|
|
294
|
+
useWorkspaceStore.setState({ lifecycleError: null, lifecycleMessage: `${confirmedMessage} ${refreshWarning}` });
|
|
295
|
+
return true;
|
|
158
296
|
}
|
|
297
|
+
useWorkspaceStore.setState({ lifecycleError: error instanceof Error ? error.message : 'Lifecycle was not confirmed' });
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
finally {
|
|
301
|
+
useWorkspaceStore.setState({ lifecycleBusy: false });
|
|
159
302
|
}
|
|
160
303
|
}
|
|
161
304
|
export const useWorkspaceStore = create((set, get) => ({
|
|
305
|
+
lifecycleBusy: false,
|
|
306
|
+
lifecycleError: null,
|
|
307
|
+
lifecycleMessage: null,
|
|
308
|
+
retryLifecycle: () => pendingLifecycle ? requestWorkspaceLifecycle(pendingLifecycle.scope, pendingLifecycle.action, pendingLifecycle.id) : Promise.resolve(false),
|
|
162
309
|
workspaces: [],
|
|
163
310
|
isLoaded: false,
|
|
311
|
+
persistenceStatus: 'idle',
|
|
312
|
+
persistenceError: null,
|
|
313
|
+
retryPersistence: () => schedulePersist(get().workspaces),
|
|
314
|
+
discardUnsavedWorkspaceChanges: async () => {
|
|
315
|
+
await waitForWorkspacePersistence();
|
|
316
|
+
set({ persistenceStatus: 'idle', persistenceError: null });
|
|
317
|
+
await get().loadWorkspaces();
|
|
318
|
+
},
|
|
319
|
+
activeWorkspaceScope: null,
|
|
320
|
+
setActiveWorkspaceScope: (id) => set({ activeWorkspaceScope: id }),
|
|
321
|
+
isWorkspaceWizardOpen: false,
|
|
322
|
+
openWorkspaceWizard: () => set({ isWorkspaceWizardOpen: true }),
|
|
323
|
+
closeWorkspaceWizard: () => set({ isWorkspaceWizardOpen: false }),
|
|
164
324
|
// ── Lifecycle ────────────────────────────────────────────────────────────
|
|
165
325
|
loadWorkspaces: async () => {
|
|
326
|
+
const loadGeneration = ++workspaceLoadGeneration;
|
|
166
327
|
try {
|
|
167
328
|
ensureWorkspaceStorageChangedListener();
|
|
168
|
-
|
|
329
|
+
// A change notification or navigation must not replace unsaved local edits.
|
|
330
|
+
const generation = persistGeneration;
|
|
331
|
+
await waitForWorkspacePersistence();
|
|
332
|
+
if (generation !== persistGeneration || get().persistenceStatus === 'error')
|
|
333
|
+
return;
|
|
334
|
+
const storage = getAgentPlatformBridge()?.workspaceStorage;
|
|
335
|
+
const result = await storage?.load();
|
|
336
|
+
if (generation !== persistGeneration || loadGeneration !== workspaceLoadGeneration)
|
|
337
|
+
return;
|
|
169
338
|
if (result?.success && Array.isArray(result.workspaces)) {
|
|
339
|
+
if (!get().lifecycleBusy && result.pendingLifecycle?.[0]) {
|
|
340
|
+
pendingLifecycle = result.pendingLifecycle[0];
|
|
341
|
+
set({ lifecycleError: 'A workspace lifecycle operation is pending. Stop its remaining execution and retry.', lifecycleMessage: null });
|
|
342
|
+
}
|
|
170
343
|
const ws = normalizeLoadedWorkspaces(result.workspaces);
|
|
344
|
+
workspaceBaselines.set(storage, { workspaces: structuredClone(ws), revision: result.revision });
|
|
171
345
|
const teamCount = ws.reduce((sum, w) => sum + w.teams.length, 0);
|
|
172
346
|
const agentCount = ws.reduce((sum, w) => sum + w.teams.reduce((s, t) => s + t.agents.length, 0), 0);
|
|
173
347
|
console.warn(`[WorkspaceStore] Loaded ${ws.length} workspaces, ${teamCount} teams, ${agentCount} agents`);
|
|
174
348
|
set({ workspaces: ws, isLoaded: true });
|
|
175
349
|
}
|
|
176
350
|
else {
|
|
177
|
-
|
|
178
|
-
set({ isLoaded: true });
|
|
351
|
+
set({ isLoaded: true, persistenceStatus: 'error', persistenceError: result?.error || 'Workspace state could not be loaded. Existing local state has been retained.' });
|
|
179
352
|
}
|
|
180
353
|
}
|
|
181
354
|
catch (err) {
|
|
182
355
|
console.warn('[WorkspaceStore] Failed to load workspaces:', err);
|
|
183
|
-
|
|
356
|
+
if (loadGeneration === workspaceLoadGeneration)
|
|
357
|
+
set({ isLoaded: true, persistenceStatus: 'error', persistenceError: err instanceof Error ? err.message : 'Workspace load failed.' });
|
|
184
358
|
}
|
|
185
359
|
},
|
|
186
360
|
// ── Workspace CRUD ───────────────────────────────────────────────────────
|
|
@@ -209,16 +383,7 @@ export const useWorkspaceStore = create((set, get) => ({
|
|
|
209
383
|
return { workspaces: next };
|
|
210
384
|
});
|
|
211
385
|
},
|
|
212
|
-
deleteWorkspace: (id) => {
|
|
213
|
-
const ws = get().workspaces.find(w => w.id === id);
|
|
214
|
-
if (ws)
|
|
215
|
-
cascadeDeleteConversations(collectAgentIds(ws));
|
|
216
|
-
set(state => {
|
|
217
|
-
const next = state.workspaces.filter(w => w.id !== id);
|
|
218
|
-
flushPersist(next);
|
|
219
|
-
return { workspaces: next };
|
|
220
|
-
});
|
|
221
|
-
},
|
|
386
|
+
deleteWorkspace: (id) => requestWorkspaceLifecycle({ workspaceId: id }, 'delete'),
|
|
222
387
|
duplicateWorkspace: (id) => {
|
|
223
388
|
set(state => {
|
|
224
389
|
const source = state.workspaces.find(w => w.id === id);
|
|
@@ -311,11 +476,15 @@ export const useWorkspaceStore = create((set, get) => ({
|
|
|
311
476
|
});
|
|
312
477
|
},
|
|
313
478
|
// ── Team CRUD ────────────────────────────────────────────────────────────
|
|
314
|
-
addTeam: (workspaceId, name) => {
|
|
479
|
+
addTeam: (workspaceId, name, description) => {
|
|
480
|
+
const workspace = get().workspaces.find(w => w.id === workspaceId && !w.isArchived);
|
|
481
|
+
if (!workspace || !name.trim())
|
|
482
|
+
throw new Error('A named team requires an active workspace.');
|
|
315
483
|
const id = generateId();
|
|
316
484
|
const team = {
|
|
317
485
|
id,
|
|
318
486
|
name: name.trim(),
|
|
487
|
+
...(description?.trim() ? { description: description.trim() } : {}),
|
|
319
488
|
allowedDirectories: [],
|
|
320
489
|
allowedApps: [],
|
|
321
490
|
agents: [],
|
|
@@ -339,19 +508,7 @@ export const useWorkspaceStore = create((set, get) => ({
|
|
|
339
508
|
return { workspaces: next };
|
|
340
509
|
});
|
|
341
510
|
},
|
|
342
|
-
deleteTeam: (workspaceId, teamId) => {
|
|
343
|
-
const ws = get().workspaces.find(w => w.id === workspaceId);
|
|
344
|
-
const team = ws?.teams.find(t => t.id === teamId);
|
|
345
|
-
if (team)
|
|
346
|
-
cascadeDeleteConversations(team.agents.map(a => a.id));
|
|
347
|
-
set(state => {
|
|
348
|
-
const next = state.workspaces.map(w => w.id === workspaceId
|
|
349
|
-
? { ...w, teams: w.teams.filter(t => t.id !== teamId) }
|
|
350
|
-
: w);
|
|
351
|
-
flushPersist(next);
|
|
352
|
-
return { workspaces: next };
|
|
353
|
-
});
|
|
354
|
-
},
|
|
511
|
+
deleteTeam: (workspaceId, teamId) => requestWorkspaceLifecycle({ workspaceId, teamId }, 'delete'),
|
|
355
512
|
duplicateTeam: (workspaceId, teamId) => {
|
|
356
513
|
set(state => {
|
|
357
514
|
const next = state.workspaces.map(w => {
|
|
@@ -414,21 +571,25 @@ export const useWorkspaceStore = create((set, get) => ({
|
|
|
414
571
|
});
|
|
415
572
|
},
|
|
416
573
|
// ── Agent CRUD ───────────────────────────────────────────────────────────
|
|
417
|
-
addAgent: (workspaceId, teamId, name, model, systemPrompt, capabilities) => {
|
|
574
|
+
addAgent: (workspaceId, teamId, name, model, systemPrompt, capabilities, runtimeSelection) => {
|
|
418
575
|
const id = generateId();
|
|
419
576
|
const ws = get().workspaces.find(w => w.id === workspaceId);
|
|
420
577
|
const team = ws?.teams.find(t => t.id === teamId);
|
|
578
|
+
if (!ws || !team || ws.isArchived || team.isArchived || !name.trim())
|
|
579
|
+
throw new Error('A named agent requires an active workspace and team.');
|
|
580
|
+
const defaults = agentCreationConfiguration(ws, team, { model, systemPrompt, capabilities });
|
|
421
581
|
const isFirst = !team?.agents.length || !team.agents.some(a => a.isMainAssistant);
|
|
422
582
|
const agent = {
|
|
423
583
|
id,
|
|
424
584
|
name: name.trim(),
|
|
425
585
|
isMainAssistant: isFirst,
|
|
426
|
-
model: model ||
|
|
427
|
-
systemPrompt: systemPrompt
|
|
586
|
+
model: model || defaults.model || undefined,
|
|
587
|
+
systemPrompt: systemPrompt ?? defaults.systemPrompt ?? `You are ${name.trim()}, an assistant in ${ws.name}/${team.name}.`,
|
|
588
|
+
tools: defaults.tools,
|
|
428
589
|
templateName: 'Custom',
|
|
429
|
-
capabilities: capabilities
|
|
590
|
+
capabilities: defaults.capabilities,
|
|
430
591
|
permissionProfile: DEFAULT_PERMISSION_PROFILE,
|
|
431
|
-
runtimeSelection: {
|
|
592
|
+
runtimeSelection: runtimeSelection ? normalizeHubAgentRuntimeSelection(runtimeSelection) : {
|
|
432
593
|
...DEFAULT_HUB_AGENT_RUNTIME_SELECTION,
|
|
433
594
|
selectedAt: Date.now(),
|
|
434
595
|
},
|
|
@@ -468,21 +629,7 @@ export const useWorkspaceStore = create((set, get) => ({
|
|
|
468
629
|
return { workspaces: next };
|
|
469
630
|
});
|
|
470
631
|
},
|
|
471
|
-
deleteAgent: (workspaceId, teamId, agentId) => {
|
|
472
|
-
cascadeDeleteConversations([agentId]);
|
|
473
|
-
set(state => {
|
|
474
|
-
const next = state.workspaces.map(w => w.id === workspaceId
|
|
475
|
-
? {
|
|
476
|
-
...w,
|
|
477
|
-
teams: w.teams.map(t => t.id === teamId
|
|
478
|
-
? { ...t, agents: t.agents.filter(a => a.id !== agentId) }
|
|
479
|
-
: t),
|
|
480
|
-
}
|
|
481
|
-
: w);
|
|
482
|
-
flushPersist(next);
|
|
483
|
-
return { workspaces: next };
|
|
484
|
-
});
|
|
485
|
-
},
|
|
632
|
+
deleteAgent: (workspaceId, teamId, agentId) => requestWorkspaceLifecycle({ workspaceId, teamId, agentId }, 'delete'),
|
|
486
633
|
duplicateAgent: (workspaceId, teamId, agentId) => {
|
|
487
634
|
set(state => {
|
|
488
635
|
const next = state.workspaces.map(w => w.id === workspaceId
|
|
@@ -570,6 +717,10 @@ export const useWorkspaceStore = create((set, get) => ({
|
|
|
570
717
|
const safeUpdates = updates.runtimeSelection === undefined
|
|
571
718
|
? updates
|
|
572
719
|
: { ...updates, runtimeSelection: normalizeHubAgentRuntimeSelection(updates.runtimeSelection) };
|
|
720
|
+
if (updates.tools !== undefined)
|
|
721
|
+
safeUpdates.capabilities = capabilitiesForToolCategories(updates.tools);
|
|
722
|
+
else if (updates.capabilities !== undefined)
|
|
723
|
+
safeUpdates.tools = toolCategoriesForCapabilities(updates.capabilities);
|
|
573
724
|
set(state => {
|
|
574
725
|
const next = state.workspaces.map(w => w.id === workspaceId
|
|
575
726
|
? {
|
|
@@ -654,20 +805,8 @@ export const useWorkspaceStore = create((set, get) => ({
|
|
|
654
805
|
return { workspaces: next };
|
|
655
806
|
});
|
|
656
807
|
},
|
|
657
|
-
archiveWorkspace: (id) => {
|
|
658
|
-
|
|
659
|
-
const next = state.workspaces.map(w => w.id === id ? { ...w, isArchived: true } : w);
|
|
660
|
-
flushPersist(next);
|
|
661
|
-
return { workspaces: next };
|
|
662
|
-
});
|
|
663
|
-
},
|
|
664
|
-
unarchiveWorkspace: (id) => {
|
|
665
|
-
set(state => {
|
|
666
|
-
const next = state.workspaces.map(w => w.id === id ? { ...w, isArchived: false } : w);
|
|
667
|
-
flushPersist(next);
|
|
668
|
-
return { workspaces: next };
|
|
669
|
-
});
|
|
670
|
-
},
|
|
808
|
+
archiveWorkspace: (id) => requestWorkspaceLifecycle({ workspaceId: id }, 'archive'),
|
|
809
|
+
unarchiveWorkspace: (id) => restoreWorkspaceLifecycle({ workspaceId: id }),
|
|
671
810
|
// ── Bulk setter (backward compat) ────────────────────────────────────────
|
|
672
811
|
setWorkspaces: (workspacesOrFn) => {
|
|
673
812
|
set(state => {
|