@taskforcehq/taskforce 0.3.326 → 0.3.327
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/LICENSE.md +68 -0
- package/README.md +19 -0
- package/dist/Taskforce.module.css +2173 -561
- package/dist/TaskforceCore.d.ts +1 -0
- package/dist/TaskforceCore.js +65 -22
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.d.ts +1 -0
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +3 -2
- package/dist/annotatedAttachments/commandService.d.ts +68 -0
- package/dist/annotatedAttachments/commandService.js +348 -0
- package/dist/annotatedAttachments/service.d.ts +2 -0
- package/dist/annotatedAttachments/service.js +13 -12
- package/dist/cli.js +158 -9
- package/dist/cliOpenPort.d.ts +1 -0
- package/dist/cliOpenPort.js +4 -0
- package/dist/compat/taskforceAgentDefinitionCompat.d.ts +12 -0
- package/dist/compat/taskforceAgentDefinitionCompat.js +25 -0
- package/dist/compat/workspaceSyncCompat.js +6 -2
- package/dist/compat/workspaceSyncV3CombinedCoverageCompat.d.ts +6 -0
- package/dist/compat/workspaceSyncV3CombinedCoverageCompat.js +22 -0
- package/dist/compat/workspaceSyncV3OperationCompat.d.ts +7 -0
- package/dist/compat/workspaceSyncV3OperationCompat.js +30 -0
- package/dist/components/activity/EntityActivityTimeline.d.ts +10 -2
- package/dist/components/activity/EntityActivityTimeline.js +73 -35
- package/dist/components/context/AttachmentPreviewHost.d.ts +6 -0
- package/dist/components/context/AttachmentPreviewHost.js +222 -0
- package/dist/components/context/ContextAttachmentManager.d.ts +4 -0
- package/dist/components/context/ContextAttachmentManager.js +418 -208
- package/dist/components/features/AiProfilesModule.d.ts +24 -0
- package/dist/components/features/AiProfilesModule.js +744 -0
- package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +4 -1
- package/dist/components/features/AnnotatedAttachmentWorkspace.js +351 -79
- package/dist/components/features/DocumentGenerateModal.js +23 -5
- package/dist/components/features/DocumentIndex.d.ts +19 -1
- package/dist/components/features/DocumentIndex.js +104 -15
- package/dist/components/features/DocumentViewer.d.ts +9 -1
- package/dist/components/features/DocumentViewer.js +721 -100
- package/dist/components/features/DocumentWorkspace.d.ts +37 -2
- package/dist/components/features/DocumentWorkspace.js +21 -6
- package/dist/components/features/TaskSettings.d.ts +6 -27
- package/dist/components/features/TaskSettings.js +232 -143
- package/dist/components/features/TaskforceAgentsModule.d.ts +36 -0
- package/dist/components/features/TaskforceAgentsModule.js +1782 -0
- package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.d.ts +94 -0
- package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.js +70 -0
- package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +65 -0
- package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +115 -0
- package/dist/components/features/agentRoles/RoleManagerPanel.d.ts +4 -0
- package/dist/components/features/agentRoles/RoleManagerPanel.js +382 -0
- package/dist/components/features/agentSkills/SkillManagerPanel.d.ts +5 -0
- package/dist/components/features/agentSkills/SkillManagerPanel.js +355 -0
- package/dist/components/features/documentWorkspaceModel.d.ts +16 -4
- package/dist/components/features/documentWorkspaceModel.js +30 -5
- package/dist/components/features/planning/PlanningArchiveConfirmation.d.ts +9 -0
- package/dist/components/features/planning/PlanningArchiveConfirmation.js +19 -0
- package/dist/components/features/planning/PlanningCardIdentity.d.ts +12 -0
- package/dist/components/features/planning/PlanningCardIdentity.js +44 -0
- package/dist/components/features/planning/PlanningEntityDetails.d.ts +36 -0
- package/dist/components/features/planning/PlanningEntityDetails.js +131 -0
- package/dist/components/features/planning/PlanningEntitySummary.d.ts +44 -0
- package/dist/components/features/planning/PlanningEntitySummary.js +97 -0
- package/dist/components/features/planning/PlanningLinkPicker.d.ts +9 -0
- package/dist/components/features/planning/PlanningLinkPicker.js +26 -0
- package/dist/components/features/planning/PlanningModule.d.ts +6 -0
- package/dist/components/features/planning/PlanningModule.js +571 -0
- package/dist/components/features/planning/PlanningOwnerDropdown.d.ts +27 -0
- package/dist/components/features/planning/PlanningOwnerDropdown.js +80 -0
- package/dist/components/features/planning/PlanningTaskArrangeControl.d.ts +5 -0
- package/dist/components/features/planning/PlanningTaskArrangeControl.js +11 -0
- package/dist/components/features/planning/PlanningTaskCard.d.ts +20 -0
- package/dist/components/features/planning/PlanningTaskCard.js +26 -0
- package/dist/components/features/planning/PlanningTaskOrderList.d.ts +10 -0
- package/dist/components/features/planning/PlanningTaskOrderList.js +52 -0
- package/dist/components/features/planning/PlanningUnlinkConfirmation.d.ts +15 -0
- package/dist/components/features/planning/PlanningUnlinkConfirmation.js +7 -0
- package/dist/components/features/planning/planningCreateIntent.d.ts +10 -0
- package/dist/components/features/planning/planningCreateIntent.js +16 -0
- package/dist/components/features/planning/planningNavigator.d.ts +33 -0
- package/dist/components/features/planning/planningNavigator.js +96 -0
- package/dist/components/features/planning/planningTaskArrangement.d.ts +18 -0
- package/dist/components/features/planning/planningTaskArrangement.js +106 -0
- package/dist/components/features/planning/planningWorkspaceModel.d.ts +121 -0
- package/dist/components/features/planning/planningWorkspaceModel.js +5 -0
- package/dist/components/features/settings/CategoryManager.js +2 -2
- package/dist/components/features/settings/TaxonomyEditor.js +1 -1
- package/dist/components/features/settings/TaxonomyManager.js +1 -1
- package/dist/components/features/settings/TypeManager.js +1 -1
- package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.d.ts +10 -0
- package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +175 -0
- package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.d.ts +27 -0
- package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.js +24 -0
- package/dist/components/features/taskforceAgentEditorModel.d.ts +109 -0
- package/dist/components/features/taskforceAgentEditorModel.js +145 -0
- package/dist/components/features/useDocumentWorkspaceController.d.ts +20 -1
- package/dist/components/features/useDocumentWorkspaceController.js +106 -21
- package/dist/components/features/workflowManager/WorkflowManagerModule.d.ts +11 -0
- package/dist/components/features/workflowManager/WorkflowManagerModule.js +313 -0
- package/dist/components/features/workflowManager/WorkflowPublishDialog.d.ts +11 -0
- package/dist/components/features/workflowManager/WorkflowPublishDialog.js +8 -0
- package/dist/components/features/workflowManager/types.d.ts +74 -0
- package/dist/components/features/workflowManager/types.js +1 -0
- package/dist/components/features/workflowManager/useWorkflowManager.d.ts +30 -0
- package/dist/components/features/workflowManager/useWorkflowManager.js +213 -0
- package/dist/components/features/workflowManager/workflowManagerApi.d.ts +52 -0
- package/dist/components/features/workflowManager/workflowManagerApi.js +142 -0
- package/dist/components/task/TaskActionHeader.d.ts +6 -3
- package/dist/components/task/TaskActionHeader.js +46 -53
- package/dist/components/task/TaskCard.d.ts +10 -2
- package/dist/components/task/TaskCard.js +103 -54
- package/dist/components/task/TaskContextUpload.d.ts +1 -0
- package/dist/components/task/TaskContextUpload.js +3 -2
- package/dist/components/task/TaskForm.d.ts +12 -17
- package/dist/components/task/TaskForm.js +544 -199
- package/dist/components/task/TaskImageReviews.d.ts +8 -0
- package/dist/components/task/TaskImageReviews.js +47 -0
- package/dist/components/task/TaskKanban.d.ts +9 -10
- package/dist/components/task/TaskKanban.js +70 -18
- package/dist/components/task/TaskList.d.ts +9 -8
- package/dist/components/task/TaskList.js +46 -32
- package/dist/components/task/TaskReferenceBadge.d.ts +2 -1
- package/dist/components/task/TaskReferenceBadge.js +3 -2
- package/dist/components/task/TaskStatusActions.d.ts +3 -1
- package/dist/components/task/TaskStatusActions.js +17 -6
- package/dist/components/task/TaskWorkflowAssignmentField.d.ts +18 -0
- package/dist/components/task/TaskWorkflowAssignmentField.js +362 -0
- package/dist/components/task/TaskWorkstreamPicker.d.ts +8 -0
- package/dist/components/task/TaskWorkstreamPicker.js +24 -0
- package/dist/components/task/TrashRestoreControls.d.ts +18 -0
- package/dist/components/task/TrashRestoreControls.js +71 -0
- package/dist/components/ui/AiIdentityRosterCard.d.ts +20 -0
- package/dist/components/ui/AiIdentityRosterCard.js +5 -0
- package/dist/components/ui/AssetTraySortControl.d.ts +10 -0
- package/dist/components/ui/AssetTraySortControl.js +38 -0
- package/dist/components/ui/AssigneeIdentity.d.ts +12 -0
- package/dist/components/ui/AssigneeIdentity.js +41 -0
- package/dist/components/ui/DiscardChangesDialog.d.ts +10 -0
- package/dist/components/ui/DiscardChangesDialog.js +7 -0
- package/dist/components/ui/DisclosureSectionHeader.d.ts +4 -1
- package/dist/components/ui/DisclosureSectionHeader.js +2 -2
- package/dist/components/ui/EditableAvatarButton.d.ts +6 -1
- package/dist/components/ui/EditableAvatarButton.js +6 -5
- package/dist/components/ui/HierarchyActionBadge.d.ts +2 -1
- package/dist/components/ui/HierarchyActionBadge.js +2 -2
- package/dist/components/ui/Markdown.d.ts +13 -3
- package/dist/components/ui/Markdown.fixture.d.ts +1 -0
- package/dist/components/ui/Markdown.fixture.js +23 -0
- package/dist/components/ui/Markdown.js +158 -68
- package/dist/components/ui/Modal.d.ts +3 -1
- package/dist/components/ui/Modal.js +85 -19
- package/dist/components/ui/MultiSelectFilter.d.ts +9 -2
- package/dist/components/ui/MultiSelectFilter.js +26 -5
- package/dist/components/ui/ReferenceBadgeButton.js +2 -3
- package/dist/components/ui/TaxonomyDropdown.d.ts +10 -1
- package/dist/components/ui/TaxonomyDropdown.js +149 -58
- package/dist/components/ui/TopNoticeLayer.d.ts +2 -1
- package/dist/components/ui/TopNoticeLayer.js +5 -2
- package/dist/components/ui/useFallbackImageUrl.d.ts +4 -0
- package/dist/components/ui/useFallbackImageUrl.js +20 -0
- package/dist/components/views/AppShellHeader.js +2 -2
- package/dist/components/views/StandaloneLayout.d.ts +1 -0
- package/dist/components/views/StandaloneLayout.js +1662 -598
- package/dist/components/views/WidgetView.d.ts +1 -0
- package/dist/components/views/WidgetView.js +95 -30
- package/dist/components/views/chrome/WorkspaceChromeSections.d.ts +4 -2
- package/dist/components/views/chrome/WorkspaceChromeSections.js +3 -6
- package/dist/components/views/chrome/workspaceChrome.d.ts +5 -8
- package/dist/components/views/chrome/workspaceChrome.js +62 -27
- package/dist/components/views/panels/FilterToolbar.d.ts +4 -3
- package/dist/components/views/panels/FilterToolbar.js +8 -5
- package/dist/components/views/panels/FilterToolbarControls.d.ts +11 -2
- package/dist/components/views/panels/FilterToolbarControls.js +35 -20
- package/dist/components/views/panels/PlanningDrawer.d.ts +60 -49
- package/dist/components/views/panels/PlanningDrawer.js +978 -313
- package/dist/components/views/planningScope.js +7 -1
- package/dist/components/views/standalone/modals/AccountSettingsModal.d.ts +62 -0
- package/dist/components/views/standalone/modals/AccountSettingsModal.js +197 -0
- package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +7 -2
- package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +56 -9
- package/dist/components/views/standalone/modals/HelpModal.d.ts +1 -2
- package/dist/components/views/standalone/modals/HelpModal.js +3 -4
- package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +8 -9
- package/dist/components/views/standalone/modals/SyncStatusModal.js +85 -25
- package/dist/components/views/standalone/modals/TeamManagementModal.js +1 -1
- package/dist/config/applicationBaseUrl.d.ts +2 -0
- package/dist/config/applicationBaseUrl.js +23 -0
- package/dist/config/envSchema.d.ts +1 -1
- package/dist/config/envSchema.js +166 -5
- package/dist/core/AdminAuditRetentionService.d.ts +43 -0
- package/dist/core/AdminAuditRetentionService.js +126 -0
- package/dist/core/AiProfileService.d.ts +34 -0
- package/dist/core/AiProfileService.js +510 -251
- package/dist/core/AttachmentLinkService.d.ts +10 -2
- package/dist/core/AttachmentLinkService.js +44 -12
- package/dist/core/AuthIdentityService.d.ts +6 -0
- package/dist/core/AuthIdentityService.js +38 -0
- package/dist/core/AuthTokenService.d.ts +1 -0
- package/dist/core/AuthTokenService.js +13 -0
- package/dist/core/DeletedTaskLifecycleService.d.ts +4 -2
- package/dist/core/DeletedTaskLifecycleService.js +124 -38
- package/dist/core/GlobalSettingsService.d.ts +3 -1
- package/dist/core/GlobalSettingsService.js +30 -4
- package/dist/core/InitiativeDurableMutationService.d.ts +89 -0
- package/dist/core/InitiativeDurableMutationService.js +187 -0
- package/dist/core/McpTokenService.d.ts +1 -0
- package/dist/core/McpTokenService.js +39 -13
- package/dist/core/PlanningCommandPreparationService.d.ts +60 -0
- package/dist/core/PlanningCommandPreparationService.js +149 -0
- package/dist/core/ScheduleCommandService.d.ts +76 -0
- package/dist/core/ScheduleCommandService.js +165 -0
- package/dist/core/SyncReconciliationService.d.ts +29 -6
- package/dist/core/SyncReconciliationService.js +256 -84
- package/dist/core/TaskActivityService.d.ts +22 -2
- package/dist/core/TaskActivityService.js +177 -29
- package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +31 -0
- package/dist/core/TaskAttachmentLinksDurableMutationService.js +231 -0
- package/dist/core/TaskChecklistCommandService.d.ts +50 -0
- package/dist/core/TaskChecklistCommandService.js +111 -0
- package/dist/core/TaskDurableCreateMutationService.d.ts +38 -0
- package/dist/core/TaskDurableCreateMutationService.js +85 -0
- package/dist/core/TaskDurableDeleteMutationService.d.ts +47 -0
- package/dist/core/TaskDurableDeleteMutationService.js +54 -0
- package/dist/core/TaskDurableLifecycleMutationService.d.ts +38 -0
- package/dist/core/TaskDurableLifecycleMutationService.js +42 -0
- package/dist/core/TaskDurableRelationshipMutationService.d.ts +58 -0
- package/dist/core/TaskDurableRelationshipMutationService.js +66 -0
- package/dist/core/TaskDurableRestoreMutationService.d.ts +31 -0
- package/dist/core/TaskDurableRestoreMutationService.js +33 -0
- package/dist/core/TaskDurableStatusMutationService.d.ts +74 -0
- package/dist/core/TaskDurableStatusMutationService.js +247 -0
- package/dist/core/TaskDurableSyncMutationService.d.ts +34 -0
- package/dist/core/TaskDurableSyncMutationService.js +70 -0
- package/dist/core/TaskDurableWorkflowMutationService.d.ts +48 -0
- package/dist/core/TaskDurableWorkflowMutationService.js +59 -0
- package/dist/core/TaskLifecycleCommandService.d.ts +101 -0
- package/dist/core/TaskLifecycleCommandService.js +161 -0
- package/dist/core/TaskRootCommandPreparationService.d.ts +35 -0
- package/dist/core/TaskRootCommandPreparationService.js +103 -0
- package/dist/core/Taskforce.d.ts +479 -59
- package/dist/core/Taskforce.js +3671 -841
- package/dist/core/WorkflowAssignmentService.d.ts +40 -0
- package/dist/core/WorkflowAssignmentService.js +158 -0
- package/dist/core/WorkflowExecutionService.d.ts +69 -0
- package/dist/core/WorkflowExecutionService.js +342 -0
- package/dist/core/WorkflowTaskActivationService.d.ts +32 -0
- package/dist/core/WorkflowTaskActivationService.js +63 -0
- package/dist/core/WorkflowTemplateService.d.ts +64 -0
- package/dist/core/WorkflowTemplateService.js +223 -0
- package/dist/core/WorkspaceLifecycleService.d.ts +1 -0
- package/dist/core/WorkspaceLifecycleService.js +18 -0
- package/dist/core/WorkstreamDurableMutationService.d.ts +90 -0
- package/dist/core/WorkstreamDurableMutationService.js +184 -0
- package/dist/core/planningReferencePolicy.d.ts +14 -0
- package/dist/core/planningReferencePolicy.js +53 -0
- package/dist/core/taskReferencePolicy.js +24 -3
- package/dist/core/types.d.ts +10 -10
- package/dist/documentReviews/DocumentReviewCommentStore.d.ts +22 -2
- package/dist/documentReviews/DocumentReviewCommentStore.js +92 -8
- package/dist/documentReviews/commandService.d.ts +51 -0
- package/dist/documentReviews/commandService.js +63 -0
- package/dist/documentReviews/service.d.ts +20 -1
- package/dist/documentReviews/service.js +234 -24
- package/dist/documentReviews/types.d.ts +18 -1
- package/dist/hooks/sync/bootstrap.d.ts +3 -7
- package/dist/hooks/sync/bootstrap.js +6 -14
- package/dist/hooks/sync/browserSyncAuthority.d.ts +21 -0
- package/dist/hooks/sync/browserSyncAuthority.js +70 -0
- package/dist/hooks/sync/browserSyncRemoteServices.d.ts +29 -0
- package/dist/hooks/sync/browserSyncRemoteServices.js +58 -0
- package/dist/hooks/sync/controlPlane.d.ts +1 -37
- package/dist/hooks/sync/controlPlane.js +1 -78
- package/dist/hooks/sync/lifecyclePolicy.d.ts +1 -45
- package/dist/hooks/sync/lifecyclePolicy.js +1 -93
- package/dist/hooks/sync/orchestratorShared.d.ts +9 -3
- package/dist/hooks/sync/orchestratorShared.js +70 -96
- package/dist/hooks/sync/pullLifecycle.d.ts +1 -31
- package/dist/hooks/sync/pullLifecycle.js +1 -24
- package/dist/hooks/sync/realtime.d.ts +4 -1
- package/dist/hooks/sync/realtime.js +103 -3
- package/dist/hooks/sync/recovery.d.ts +1 -84
- package/dist/hooks/sync/recovery.js +1 -245
- package/dist/hooks/sync/transfers.d.ts +8 -129
- package/dist/hooks/sync/transfers.js +19 -581
- package/dist/hooks/sync/useDataVersionRefresh.d.ts +6 -1
- package/dist/hooks/sync/useDataVersionRefresh.js +127 -12
- package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +14 -0
- package/dist/hooks/sync/useDurableLocalOutboxDrain.js +208 -0
- package/dist/hooks/sync/useDurableTaskCreateMutation.d.ts +15 -0
- package/dist/hooks/sync/useDurableTaskCreateMutation.js +152 -0
- package/dist/hooks/sync/useDurableTaskDeleteMutation.d.ts +11 -0
- package/dist/hooks/sync/useDurableTaskDeleteMutation.js +21 -0
- package/dist/hooks/sync/useDurableTaskLifecycleMutation.d.ts +12 -0
- package/dist/hooks/sync/useDurableTaskLifecycleMutation.js +22 -0
- package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +14 -0
- package/dist/hooks/sync/useDurableTaskMetadataMutation.js +24 -0
- package/dist/hooks/sync/useDurableTaskRestoreMutation.d.ts +12 -0
- package/dist/hooks/sync/useDurableTaskRestoreMutation.js +24 -0
- package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +18 -0
- package/dist/hooks/sync/useDurableTaskStatusMutation.js +23 -0
- package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +23 -0
- package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +414 -0
- package/dist/hooks/sync/useSyncStatusActions.d.ts +2 -1
- package/dist/hooks/sync/useSyncStatusActions.js +8 -3
- package/dist/hooks/tasks/taskHttpMutation.d.ts +25 -0
- package/dist/hooks/tasks/taskHttpMutation.js +134 -0
- package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +6 -1
- package/dist/hooks/tasks/useCurrentTaskRelations.js +32 -6
- package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +4 -3
- package/dist/hooks/tasks/useTaskEditorNavigation.js +9 -13
- package/dist/hooks/tasks/useTaskFormActions.d.ts +17 -2
- package/dist/hooks/tasks/useTaskFormActions.js +309 -55
- package/dist/hooks/tasks/useTaskReferenceContract.d.ts +5 -0
- package/dist/hooks/tasks/useTaskReferenceContract.js +17 -0
- package/dist/hooks/tasks/useTaskRelationships.d.ts +1 -3
- package/dist/hooks/tasks/useTaskRelationships.js +5 -25
- package/dist/hooks/tasks/useTrashSelection.d.ts +12 -0
- package/dist/hooks/tasks/useTrashSelection.js +49 -0
- package/dist/hooks/ui/useInitiativeTemplates.d.ts +24 -0
- package/dist/hooks/ui/useInitiativeTemplates.js +22 -0
- package/dist/hooks/ui/useSettingsModel.d.ts +5 -29
- package/dist/hooks/ui/useSettingsModel.js +31 -15
- package/dist/hooks/ui/useSettingsPersistence.d.ts +0 -1
- package/dist/hooks/ui/useSettingsPersistence.js +4 -8
- package/dist/hooks/ui/useSettingsTaxonomyManagement.js +31 -0
- package/dist/hooks/useFilterSort.d.ts +2 -2
- package/dist/hooks/useFilterSort.js +19 -15
- package/dist/hooks/useRealtimeSync.d.ts +10 -0
- package/dist/hooks/useRealtimeSync.js +57 -4
- package/dist/hooks/useSyncOrchestrator.d.ts +32 -1
- package/dist/hooks/useSyncOrchestrator.js +963 -287
- package/dist/hooks/useTaskData.d.ts +11 -2
- package/dist/hooks/useTaskData.js +59 -26
- package/dist/hooks/useTaskMutations.d.ts +42 -5
- package/dist/hooks/useTaskMutations.js +750 -125
- package/dist/hooks/useTaskforce.d.ts +114 -118
- package/dist/hooks/useTaskforce.js +1102 -449
- package/dist/hooks/useUiNotice.d.ts +5 -1
- package/dist/hooks/useUiNotice.js +13 -2
- package/dist/hooks/useWorkspaceSyncController.d.ts +9 -0
- package/dist/hooks/useWorkspaceSyncController.js +159 -17
- package/dist/hooks/workspace/usePersistedAppUiState.d.ts +74 -0
- package/dist/hooks/workspace/usePersistedAppUiState.js +325 -0
- package/dist/hooks/workspace/usePersistedLayoutUiState.d.ts +76 -0
- package/dist/hooks/workspace/usePersistedLayoutUiState.js +479 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +2 -7
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +42 -31
- package/dist/hooks/workspace/workspaceLocalState.d.ts +17 -6
- package/dist/hooks/workspace/workspaceLocalState.js +175 -5
- package/dist/hooks/workstreams/workstreamHttpMutation.d.ts +23 -0
- package/dist/hooks/workstreams/workstreamHttpMutation.js +134 -0
- package/dist/localization/locales/en-US.d.ts +3 -3
- package/dist/localization/locales/en-US.js +3 -3
- package/dist/localization/locales/es-419.js +3 -3
- package/dist/localization/locales/pt-BR.js +3 -3
- package/dist/mcp/adminWorkspaceRegistrar.js +2 -30
- package/dist/mcp/aiProfileBootstrap.d.ts +3 -0
- package/dist/mcp/aiProfileBootstrap.js +4 -0
- package/dist/mcp/canonicalAssetHelpers.d.ts +16 -4
- package/dist/mcp/canonicalAssetHelpers.js +104 -35
- package/dist/mcp/clientIntegrations.d.ts +4 -2
- package/dist/mcp/clientIntegrations.js +58 -57
- package/dist/mcp/clientRegistry.d.ts +30 -0
- package/dist/mcp/clientRegistry.js +134 -0
- package/dist/mcp/collaborationRegistrar.js +20 -6
- package/dist/mcp/documentAssetRegistrar.js +220 -52
- package/dist/mcp/documentContentCommand.d.ts +94 -0
- package/dist/mcp/documentContentCommand.js +226 -0
- package/dist/mcp/documentHelpers.d.ts +13 -65
- package/dist/mcp/documentHelpers.js +49 -62
- package/dist/mcp/durableTaskMutationRouter.d.ts +65 -0
- package/dist/mcp/durableTaskMutationRouter.js +217 -0
- package/dist/mcp/durableTaskRelationshipMutationRouter.d.ts +38 -0
- package/dist/mcp/durableTaskRelationshipMutationRouter.js +168 -0
- package/dist/mcp/durableTaskRootMutationRouter.d.ts +64 -0
- package/dist/mcp/durableTaskRootMutationRouter.js +226 -0
- package/dist/mcp/gitWorktreeRoots.d.ts +2 -0
- package/dist/mcp/gitWorktreeRoots.js +19 -0
- package/dist/mcp/legacyServer.d.ts +1 -0
- package/dist/mcp/legacyServer.js +42 -0
- package/dist/mcp/localCliHealth.d.ts +56 -0
- package/dist/mcp/localCliHealth.js +170 -0
- package/dist/mcp/localServiceProxy.d.ts +23 -0
- package/dist/mcp/localServiceProxy.js +255 -0
- package/dist/mcp/mcpInputValidator.d.ts +17 -0
- package/dist/mcp/mcpInputValidator.js +58 -0
- package/dist/mcp/planningAttachmentCommandAdapter.d.ts +127 -0
- package/dist/mcp/planningAttachmentCommandAdapter.js +188 -0
- package/dist/mcp/programScaffoldCommandAdapter.d.ts +6 -0
- package/dist/mcp/programScaffoldCommandAdapter.js +39 -0
- package/dist/mcp/proxyServer.d.ts +1 -0
- package/dist/mcp/proxyServer.js +2 -0
- package/dist/mcp/runtime.d.ts +82 -1
- package/dist/mcp/runtime.js +4285 -1925
- package/dist/mcp/server.js +29 -2
- package/dist/mcp/sharedLocalServiceGateD.d.ts +115 -0
- package/dist/mcp/sharedLocalServiceGateD.js +344 -0
- package/dist/mcp/stdioLifecycle.d.ts +22 -0
- package/dist/mcp/stdioLifecycle.js +54 -0
- package/dist/mcp/taskAttachmentCommandAdapter.d.ts +190 -0
- package/dist/mcp/taskAttachmentCommandAdapter.js +464 -0
- package/dist/mcp/taskAttachmentHelpers.d.ts +8 -6
- package/dist/mcp/taskAttachmentHelpers.js +74 -2
- package/dist/mcp/taskAttachmentTypes.d.ts +26 -5
- package/dist/mcp/taskPlanCommand.d.ts +64 -0
- package/dist/mcp/taskPlanCommand.js +98 -0
- package/dist/mcp/taskPlanningRegistrar.js +215 -27
- package/dist/mcp/toolCallCompatibility.d.ts +6 -0
- package/dist/mcp/toolCallCompatibility.js +16 -0
- package/dist/mcp/toolCatalog.d.ts +3 -1
- package/dist/mcp/toolProfiles.d.ts +12 -1
- package/dist/mcp/toolProfiles.js +43 -0
- package/dist/mcp/toolRegistry.d.ts +17 -2
- package/dist/mcp/toolRegistry.js +24 -9
- package/dist/mcp/workflowExecutionRegistrar.d.ts +2 -0
- package/dist/mcp/workflowExecutionRegistrar.js +51 -0
- package/dist/migrations/taskSchemaMigrations.d.ts +35 -0
- package/dist/migrations/taskSchemaMigrations.js +1797 -4
- package/dist/migrations/taskUpdatedAtSyncDriftMigration.d.ts +20 -0
- package/dist/migrations/taskUpdatedAtSyncDriftMigration.js +153 -0
- package/dist/migrations/taskforceAgentDefinitionMigration.d.ts +26 -0
- package/dist/migrations/taskforceAgentDefinitionMigration.js +116 -0
- package/dist/plugins/vite.js +48 -17
- package/dist/public/Taskforce_Van.webp +0 -0
- package/dist/runtime/appGateDefinitions.d.ts +16 -10
- package/dist/runtime/appGateDefinitions.js +16 -10
- package/dist/runtime/appGates.d.ts +5 -4
- package/dist/runtime/appGates.js +4 -3
- package/dist/server/aiProfileAvatarAssets.d.ts +11 -8
- package/dist/server/aiProfileAvatarAssets.js +159 -70
- package/dist/server/auth.js +15 -1
- package/dist/server/cors.d.ts +2 -1
- package/dist/server/cors.js +45 -8
- package/dist/server/email.d.ts +3 -1
- package/dist/server/email.js +46 -8
- package/dist/server/index.d.ts +24 -1
- package/dist/server/index.js +342 -46
- package/dist/server/localDataOwnerPermit.d.ts +18 -0
- package/dist/server/localDataOwnerPermit.js +58 -0
- package/dist/server/localDatabaseIdentity.d.ts +14 -0
- package/dist/server/localDatabaseIdentity.js +69 -0
- package/dist/server/localRealtimeFileInvalidation.d.ts +1 -0
- package/dist/server/localRealtimeFileInvalidation.js +7 -0
- package/dist/server/localServiceLease.d.ts +62 -0
- package/dist/server/localServiceLease.js +477 -0
- package/dist/server/localServiceOwnershipBootstrap.d.ts +19 -0
- package/dist/server/localServiceOwnershipBootstrap.js +84 -0
- package/dist/server/localServiceSessions.d.ts +87 -0
- package/dist/server/localServiceSessions.js +309 -0
- package/dist/server/localServiceWindowsAcl.d.ts +8 -0
- package/dist/server/localServiceWindowsAcl.js +60 -0
- package/dist/server/localSyncProcessLockBootstrap.d.ts +3 -0
- package/dist/server/localSyncProcessLockBootstrap.js +16 -0
- package/dist/server/localWorkspaceSyncServerComposition.d.ts +59 -0
- package/dist/server/localWorkspaceSyncServerComposition.js +91 -0
- package/dist/server/localWorkspaceSyncServerRuntime.d.ts +119 -0
- package/dist/server/localWorkspaceSyncServerRuntime.js +1163 -0
- package/dist/server/rateLimit.d.ts +1 -0
- package/dist/server/rateLimit.js +16 -0
- package/dist/server/routes/admin.d.ts +2 -4
- package/dist/server/routes/admin.js +199 -337
- package/dist/server/routes/agentRoles.d.ts +13 -0
- package/dist/server/routes/agentRoles.js +273 -0
- package/dist/server/routes/agentSkills.d.ts +16 -0
- package/dist/server/routes/agentSkills.js +291 -0
- package/dist/server/routes/agents.d.ts +49 -0
- package/dist/server/routes/agents.js +1455 -0
- package/dist/server/routes/annotatedAttachments.js +46 -9
- package/dist/server/routes/assetAccess.d.ts +36 -0
- package/dist/server/routes/assetAccess.js +93 -0
- package/dist/server/routes/auth.d.ts +4 -3
- package/dist/server/routes/auth.js +236 -21
- package/dist/server/routes/authSupport.d.ts +3 -1
- package/dist/server/routes/authSupport.js +22 -8
- package/dist/server/routes/documentReviews.d.ts +2 -0
- package/dist/server/routes/documentReviews.js +155 -15
- package/dist/server/routes/documents.d.ts +1 -0
- package/dist/server/routes/documents.js +335 -141
- package/dist/server/routes/durableTaskHttpRouters.d.ts +165 -0
- package/dist/server/routes/durableTaskHttpRouters.js +89 -0
- package/dist/server/routes/localMcpHealth.d.ts +11 -0
- package/dist/server/routes/localMcpHealth.js +29 -0
- package/dist/server/routes/localService.d.ts +13 -0
- package/dist/server/routes/localService.js +444 -0
- package/dist/server/routes/localUpdate.d.ts +11 -0
- package/dist/server/routes/localUpdate.js +154 -0
- package/dist/server/routes/primitives.d.ts +27 -0
- package/dist/server/routes/primitives.js +18 -0
- package/dist/server/routes/resources.d.ts +1 -10
- package/dist/server/routes/resources.js +1 -153
- package/dist/server/routes/shared.d.ts +31 -2
- package/dist/server/routes/shared.js +394 -0
- package/dist/server/routes/sync.d.ts +2 -0
- package/dist/server/routes/sync.js +184 -272
- package/dist/server/routes/syncAuxRoutes.d.ts +3 -1
- package/dist/server/routes/syncAuxRoutes.js +9 -4
- package/dist/server/routes/syncCoordinatorLocalRoutes.d.ts +6 -0
- package/dist/server/routes/syncCoordinatorLocalRoutes.js +867 -0
- package/dist/server/routes/syncPullApplyRoutes.d.ts +29 -1
- package/dist/server/routes/syncPullApplyRoutes.js +520 -17
- package/dist/server/routes/syncPushRoutes.d.ts +33 -4
- package/dist/server/routes/syncPushRoutes.js +251 -62
- package/dist/server/routes/syncRouteTypes.d.ts +1 -1
- package/dist/server/routes/syncSnapshotRoutes.d.ts +15 -7
- package/dist/server/routes/syncSnapshotRoutes.js +95 -17
- package/dist/server/routes/syncV3DiagnosticsRoutes.d.ts +14 -0
- package/dist/server/routes/syncV3DiagnosticsRoutes.js +72 -0
- package/dist/server/routes/syncV3FeedRoutes.d.ts +20 -0
- package/dist/server/routes/syncV3FeedRoutes.js +462 -0
- package/dist/server/routes/syncV3LocalCaptureRoutes.d.ts +37 -0
- package/dist/server/routes/syncV3LocalCaptureRoutes.js +897 -0
- package/dist/server/routes/syncV3LocalDispatchRoutes.d.ts +17 -0
- package/dist/server/routes/syncV3LocalDispatchRoutes.js +280 -0
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +17 -0
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +493 -0
- package/dist/server/routes/syncV3LocalOwnershipRoutes.d.ts +10 -0
- package/dist/server/routes/syncV3LocalOwnershipRoutes.js +51 -0
- package/dist/server/routes/syncV3LocalRecoveryRoutes.d.ts +12 -0
- package/dist/server/routes/syncV3LocalRecoveryRoutes.js +78 -0
- package/dist/server/routes/syncV3OperationRoutes.d.ts +35 -0
- package/dist/server/routes/syncV3OperationRoutes.js +1136 -0
- package/dist/server/routes/tasks.d.ts +0 -2
- package/dist/server/routes/tasks.js +932 -195
- package/dist/server/routes/workflows.d.ts +26 -0
- package/dist/server/routes/workflows.js +500 -0
- package/dist/server/routes.d.ts +1 -6
- package/dist/server/routes.js +148 -339
- package/dist/server/smtpTransport.d.ts +11 -3
- package/dist/server/smtpTransport.js +9 -2
- package/dist/server/start.js +42 -10
- package/dist/service/localServiceCli.d.ts +33 -0
- package/dist/service/localServiceCli.js +365 -0
- package/dist/service/localServiceClientLifecycle.d.ts +25 -0
- package/dist/service/localServiceClientLifecycle.js +128 -0
- package/dist/service/localServiceOpen.d.ts +17 -0
- package/dist/service/localServiceOpen.js +27 -0
- package/dist/services/agentRoleResolver.d.ts +4 -0
- package/dist/services/agentRoleResolver.js +7 -0
- package/dist/services/aiProfileAvatarGenerationService.d.ts +41 -0
- package/dist/services/aiProfileAvatarGenerationService.js +158 -0
- package/dist/services/avatarImageProvider.d.ts +33 -0
- package/dist/services/avatarImageProvider.js +140 -0
- package/dist/services/bedrockAnthropicMessagesModelGateway.d.ts +24 -0
- package/dist/services/bedrockAnthropicMessagesModelGateway.js +95 -0
- package/dist/services/bedrockMantleModelGateway.d.ts +43 -0
- package/dist/services/bedrockMantleModelGateway.js +81 -0
- package/dist/services/bedrockModelGateway.d.ts +26 -0
- package/dist/services/bedrockModelGateway.js +94 -0
- package/dist/services/modelGateway.d.ts +82 -0
- package/dist/services/modelGateway.js +61 -0
- package/dist/services/taskforceAgentAvatarImageProvider.d.ts +8 -0
- package/dist/services/taskforceAgentAvatarImageProvider.js +24 -0
- package/dist/services/taskforceAgentMcpBridge.d.ts +77 -0
- package/dist/services/taskforceAgentMcpBridge.js +527 -0
- package/dist/shared/agentRoleDefinition.d.ts +34 -0
- package/dist/shared/agentRoleDefinition.js +207 -0
- package/dist/shared/aiProfileAvatarEligibility.d.ts +10 -0
- package/dist/shared/aiProfileAvatarEligibility.js +27 -0
- package/dist/shared/aiProfileColors.d.ts +7 -0
- package/dist/shared/aiProfileColors.js +33 -0
- package/dist/shared/colorPalette.d.ts +3 -0
- package/dist/shared/colorPalette.js +20 -0
- package/dist/shared/commentProvenance.d.ts +4 -0
- package/dist/shared/commentProvenance.js +6 -0
- package/dist/shared/deletedTaskRetention.d.ts +2 -0
- package/dist/shared/deletedTaskRetention.js +7 -0
- package/dist/shared/passwordPolicy.d.ts +2 -1
- package/dist/shared/passwordPolicy.js +9 -0
- package/dist/shared/taskDeepLinks.d.ts +28 -0
- package/dist/shared/taskDeepLinks.js +48 -0
- package/dist/shared/taskRestoreDestination.d.ts +2 -0
- package/dist/shared/taskRestoreDestination.js +5 -0
- package/dist/shared/taskforceAgentDefinition.d.ts +88 -0
- package/dist/shared/taskforceAgentDefinition.js +434 -0
- package/dist/shared/taskforceAgentExecutionSnapshot.d.ts +50 -0
- package/dist/shared/taskforceAgentExecutionSnapshot.js +68 -0
- package/dist/shared/taskforceAgentModels.d.ts +56 -0
- package/dist/shared/taskforceAgentModels.js +314 -0
- package/dist/shared/taskforceAgentRunContext.d.ts +23 -0
- package/dist/shared/taskforceAgentRunContext.js +21 -0
- package/dist/shared/taskforceAgentRuntimeResolution.d.ts +31 -0
- package/dist/shared/taskforceAgentRuntimeResolution.js +72 -0
- package/dist/shared/taskforceAgentSkill.d.ts +33 -0
- package/dist/shared/taskforceAgentSkill.js +149 -0
- package/dist/storage/agentRoleStore.d.ts +91 -0
- package/dist/storage/agentRoleStore.js +385 -0
- package/dist/storage/databaseAdapter.d.ts +1 -0
- package/dist/storage/databaseAdapter.js +7 -1
- package/dist/storage/documentIntegrity.d.ts +12 -3
- package/dist/storage/documentIntegrity.js +105 -27
- package/dist/storage/objectStorageClient.d.ts +10 -4
- package/dist/storage/objectStorageClient.js +73 -43
- package/dist/storage/postgresAdapter.d.ts +2 -1
- package/dist/storage/postgresAdapter.js +38 -6
- package/dist/storage/postgresWorker.js +65 -1
- package/dist/storage/sqliteAdapter.d.ts +1 -1
- package/dist/storage/sqliteAdapter.js +7 -1
- package/dist/storage/sqliteWalHealth.d.ts +71 -0
- package/dist/storage/sqliteWalHealth.js +176 -0
- package/dist/storage/taskDataPath.d.ts +1 -0
- package/dist/storage/taskDataPath.js +20 -0
- package/dist/storage/taskforceAgentConversationStore.d.ts +66 -0
- package/dist/storage/taskforceAgentConversationStore.js +264 -0
- package/dist/storage/taskforceAgentSkillStore.d.ts +93 -0
- package/dist/storage/taskforceAgentSkillStore.js +355 -0
- package/dist/storage/taskforceAgentStore.d.ts +105 -0
- package/dist/storage/taskforceAgentStore.js +549 -0
- package/dist/storage/workflowStore.d.ts +223 -0
- package/dist/storage/workflowStore.js +1032 -0
- package/dist/storage/workspaceAssetStore.d.ts +70 -0
- package/dist/storage/workspaceAssetStore.js +418 -25
- package/dist/sync/aiProfileAvatarSyncPaths.d.ts +14 -0
- package/dist/sync/aiProfileAvatarSyncPaths.js +56 -0
- package/dist/sync/cloudSyncApi.d.ts +329 -0
- package/dist/sync/cloudSyncApi.js +574 -1
- package/dist/sync/collaborationSyncPayload.d.ts +5 -1
- package/dist/sync/collaborationSyncPayload.js +213 -1
- package/dist/sync/collaborationSyncState.d.ts +23 -3
- package/dist/sync/collaborationSyncState.js +92 -3
- package/dist/sync/contentSyncPayload.d.ts +9 -0
- package/dist/sync/contentSyncPayload.js +29 -0
- package/dist/sync/contentSyncState.d.ts +79 -4
- package/dist/sync/contentSyncState.js +1113 -313
- package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.d.ts +39 -0
- package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.js +234 -0
- package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.d.ts +7 -0
- package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.js +10 -0
- package/dist/sync/coordinator/localSyncCommittedApplyPolicy.d.ts +7 -0
- package/dist/sync/coordinator/localSyncCommittedApplyPolicy.js +41 -0
- package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.d.ts +178 -0
- package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.js +131 -0
- package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.d.ts +25 -0
- package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.js +200 -0
- package/dist/sync/coordinator/localSyncCoordinatorHost.d.ts +84 -0
- package/dist/sync/coordinator/localSyncCoordinatorHost.js +435 -0
- package/dist/sync/coordinator/localSyncCoordinatorRouteServices.d.ts +33 -0
- package/dist/sync/coordinator/localSyncCoordinatorRouteServices.js +1 -0
- package/dist/sync/coordinator/localSyncCoordinatorStore.d.ts +122 -0
- package/dist/sync/coordinator/localSyncCoordinatorStore.js +1039 -0
- package/dist/sync/coordinator/localSyncCoordinatorTypes.d.ts +82 -0
- package/dist/sync/coordinator/localSyncCoordinatorTypes.js +9 -0
- package/dist/sync/coordinator/localSyncDispatchTracker.d.ts +15 -0
- package/dist/sync/coordinator/localSyncDispatchTracker.js +68 -0
- package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +200 -0
- package/dist/sync/coordinator/localSyncExecutionPermitStore.js +1388 -0
- package/dist/sync/coordinator/localSyncExecutionPermitTypes.d.ts +52 -0
- package/dist/sync/coordinator/localSyncExecutionPermitTypes.js +8 -0
- package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.d.ts +33 -0
- package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.js +83 -0
- package/dist/sync/coordinator/localSyncPermitTransactionHooks.d.ts +9 -0
- package/dist/sync/coordinator/localSyncPermitTransactionHooks.js +27 -0
- package/dist/sync/coordinator/localSyncProcessLock.d.ts +12 -0
- package/dist/sync/coordinator/localSyncProcessLock.js +212 -0
- package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.d.ts +17 -0
- package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.js +82 -0
- package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +134 -0
- package/dist/sync/coordinator/localWorkspaceSyncRunner.js +981 -0
- package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +189 -0
- package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +961 -0
- package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.d.ts +19 -0
- package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.js +83 -0
- package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +117 -0
- package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +323 -0
- package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.d.ts +11 -0
- package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.js +51 -0
- package/dist/sync/coordinator/workspaceSyncTransportGateway.d.ts +139 -0
- package/dist/sync/coordinator/workspaceSyncTransportGateway.js +738 -0
- package/dist/sync/engine/localWorkspaceContentManifestService.d.ts +21 -0
- package/dist/sync/engine/localWorkspaceContentManifestService.js +44 -0
- package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.d.ts +36 -0
- package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.js +203 -0
- package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +21 -0
- package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.js +13 -0
- package/dist/sync/engine/workspaceSyncContentPullObligationStore.d.ts +65 -0
- package/dist/sync/engine/workspaceSyncContentPullObligationStore.js +160 -0
- package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +216 -0
- package/dist/sync/engine/workspaceSyncContentVersionStore.js +1068 -0
- package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.d.ts +28 -0
- package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +543 -0
- package/dist/sync/engine/workspaceSyncEngineContracts.d.ts +78 -0
- package/dist/sync/engine/workspaceSyncEngineContracts.js +1 -0
- package/dist/sync/engine/workspaceSyncEngineControlPlane.d.ts +37 -0
- package/dist/sync/engine/workspaceSyncEngineControlPlane.js +79 -0
- package/dist/sync/engine/workspaceSyncEngineIdentity.d.ts +1 -0
- package/dist/sync/engine/workspaceSyncEngineIdentity.js +4 -0
- package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.d.ts +68 -0
- package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +180 -0
- package/dist/sync/engine/workspaceSyncEngineLocalApply.d.ts +72 -0
- package/dist/sync/engine/workspaceSyncEngineLocalApply.js +132 -0
- package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +70 -0
- package/dist/sync/engine/workspaceSyncEngineLocalServices.js +25 -0
- package/dist/sync/engine/workspaceSyncEngineParity.d.ts +8 -0
- package/dist/sync/engine/workspaceSyncEngineParity.js +7 -0
- package/dist/sync/engine/workspaceSyncEnginePullPolicy.d.ts +32 -0
- package/dist/sync/engine/workspaceSyncEnginePullPolicy.js +27 -0
- package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +20 -0
- package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +87 -0
- package/dist/sync/engine/workspaceSyncEngineRecovery.d.ts +56 -0
- package/dist/sync/engine/workspaceSyncEngineRecovery.js +288 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +104 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +21 -0
- package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +61 -0
- package/dist/sync/engine/workspaceSyncEngineRuntime.js +59 -0
- package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.d.ts +28 -0
- package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.js +86 -0
- package/dist/sync/engine/workspaceSyncEngineServerLocalServices.d.ts +73 -0
- package/dist/sync/engine/workspaceSyncEngineServerLocalServices.js +452 -0
- package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +23 -0
- package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +451 -0
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +125 -0
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +1124 -0
- package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.d.ts +63 -0
- package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +276 -0
- package/dist/sync/engine/workspaceSyncEngineTransferCompletion.d.ts +20 -0
- package/dist/sync/engine/workspaceSyncEngineTransferCompletion.js +37 -0
- package/dist/sync/engine/workspaceSyncEngineTransferTypes.d.ts +7 -0
- package/dist/sync/engine/workspaceSyncEngineTransferTypes.js +1 -0
- package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +240 -0
- package/dist/sync/engine/workspaceSyncEngineTransfers.js +1184 -0
- package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.d.ts +39 -0
- package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.js +39 -0
- package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.d.ts +25 -0
- package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.js +83 -0
- package/dist/sync/engine/workspaceSyncImmutableContentProvider.d.ts +71 -0
- package/dist/sync/engine/workspaceSyncImmutableContentProvider.js +209 -0
- package/dist/sync/engine/workspaceSyncImmutableContentStager.d.ts +32 -0
- package/dist/sync/engine/workspaceSyncImmutableContentStager.js +202 -0
- package/dist/sync/engine/workspaceSyncPublishedContentResolver.d.ts +43 -0
- package/dist/sync/engine/workspaceSyncPublishedContentResolver.js +142 -0
- package/dist/sync/engine/workspaceSyncServerContentRuntime.d.ts +26 -0
- package/dist/sync/engine/workspaceSyncServerContentRuntime.js +41 -0
- package/dist/sync/engine/workspaceSyncServerDataServices.d.ts +44 -0
- package/dist/sync/engine/workspaceSyncServerDataServices.js +143 -0
- package/dist/sync/engine/workspaceSyncTransferEvidence.d.ts +39 -0
- package/dist/sync/engine/workspaceSyncTransferEvidence.js +45 -0
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +44 -0
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +990 -0
- package/dist/sync/engine/workspaceSyncV2PreparedContent.d.ts +82 -0
- package/dist/sync/engine/workspaceSyncV2PreparedContent.js +219 -0
- package/dist/sync/planningCanonicalFields.d.ts +41 -0
- package/dist/sync/planningCanonicalFields.js +211 -0
- package/dist/sync/planningSyncPayload.d.ts +5 -1
- package/dist/sync/planningSyncPayload.js +88 -4
- package/dist/sync/syncApplyHandlers.d.ts +98 -8
- package/dist/sync/syncApplyHandlers.js +816 -78
- package/dist/sync/syncResourceAdapters.d.ts +10 -0
- package/dist/sync/syncResourceAdapters.js +21 -1
- package/dist/sync/syncService.d.ts +57 -1
- package/dist/sync/syncService.js +1085 -138
- package/dist/sync/taskNestedContent.d.ts +2 -0
- package/dist/sync/taskNestedContent.js +8 -0
- package/dist/sync/taskSyncChangeKey.js +0 -1
- package/dist/sync/taskSyncPayload.d.ts +0 -1
- package/dist/sync/taskSyncPayload.js +14 -3
- package/dist/sync/v3/canonicalWorkspaceSyncJson.d.ts +2 -0
- package/dist/sync/v3/canonicalWorkspaceSyncJson.js +26 -0
- package/dist/sync/v3/combinedFeedCapability.d.ts +21 -0
- package/dist/sync/v3/combinedFeedCapability.js +80 -0
- package/dist/sync/v3/combinedFeedPrerequisites.d.ts +18 -0
- package/dist/sync/v3/combinedFeedPrerequisites.js +184 -0
- package/dist/sync/v3/durableInitiativeMutationRouter.d.ts +61 -0
- package/dist/sync/v3/durableInitiativeMutationRouter.js +287 -0
- package/dist/sync/v3/durableOperationReplay.d.ts +36 -0
- package/dist/sync/v3/durableOperationReplay.js +103 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +49 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +198 -0
- package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +47 -0
- package/dist/sync/v3/durableTaskChecklistMutationRouter.js +182 -0
- package/dist/sync/v3/durableTaskCommentMutationRouter.d.ts +47 -0
- package/dist/sync/v3/durableTaskCommentMutationRouter.js +191 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +60 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +320 -0
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +40 -0
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +518 -0
- package/dist/sync/v3/durableTaxonomyMutationRouter.d.ts +63 -0
- package/dist/sync/v3/durableTaxonomyMutationRouter.js +289 -0
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +77 -0
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +361 -0
- package/dist/sync/v3/durableWorkstreamMutationRouter.d.ts +61 -0
- package/dist/sync/v3/durableWorkstreamMutationRouter.js +287 -0
- package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.d.ts +42 -0
- package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +122 -0
- package/dist/sync/v3/entityEventLegacyAdoptionContract.d.ts +6 -0
- package/dist/sync/v3/entityEventLegacyAdoptionContract.js +6 -0
- package/dist/sync/v3/entityEventLegacyAdoptionService.d.ts +62 -0
- package/dist/sync/v3/entityEventLegacyAdoptionService.js +180 -0
- package/dist/sync/v3/initiativeActivityAuthoritativeRevision.d.ts +11 -0
- package/dist/sync/v3/initiativeActivityAuthoritativeRevision.js +23 -0
- package/dist/sync/v3/initiativeActivityIdentity.d.ts +8 -0
- package/dist/sync/v3/initiativeActivityIdentity.js +14 -0
- package/dist/sync/v3/initiativeCoexistence.d.ts +26 -0
- package/dist/sync/v3/initiativeCoexistence.js +148 -0
- package/dist/sync/v3/initiativeFeedActivationCapability.d.ts +6 -0
- package/dist/sync/v3/initiativeFeedActivationCapability.js +16 -0
- package/dist/sync/v3/initiativeMutationPayload.d.ts +26 -0
- package/dist/sync/v3/initiativeMutationPayload.js +144 -0
- package/dist/sync/v3/initiativeMutationService.d.ts +62 -0
- package/dist/sync/v3/initiativeMutationService.js +206 -0
- package/dist/sync/v3/localEntityEventLegacyAdoption.d.ts +31 -0
- package/dist/sync/v3/localEntityEventLegacyAdoption.js +607 -0
- package/dist/sync/v3/localInitiativeOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localInitiativeOutboxHandler.js +88 -0
- package/dist/sync/v3/localInitiativeOutboxService.d.ts +50 -0
- package/dist/sync/v3/localInitiativeOutboxService.js +495 -0
- package/dist/sync/v3/localOperationIdentityStore.d.ts +81 -0
- package/dist/sync/v3/localOperationIdentityStore.js +388 -0
- package/dist/sync/v3/localOutboxDispatchCapability.d.ts +7 -0
- package/dist/sync/v3/localOutboxDispatchCapability.js +13 -0
- package/dist/sync/v3/localOutboxDispatchRuntime.d.ts +16 -0
- package/dist/sync/v3/localOutboxDispatchRuntime.js +269 -0
- package/dist/sync/v3/localOutboxDispatcher.d.ts +53 -0
- package/dist/sync/v3/localOutboxDispatcher.js +362 -0
- package/dist/sync/v3/localOutboxDrainClient.d.ts +50 -0
- package/dist/sync/v3/localOutboxDrainClient.js +250 -0
- package/dist/sync/v3/localOutboxOperationHandler.d.ts +31 -0
- package/dist/sync/v3/localOutboxOperationHandler.js +10 -0
- package/dist/sync/v3/localOutboxRecoveryClient.d.ts +14 -0
- package/dist/sync/v3/localOutboxRecoveryClient.js +45 -0
- package/dist/sync/v3/localOutboxRecoveryPreparationService.d.ts +12 -0
- package/dist/sync/v3/localOutboxRecoveryPreparationService.js +151 -0
- package/dist/sync/v3/localSyncIdentityStore.d.ts +9 -0
- package/dist/sync/v3/localSyncIdentityStore.js +43 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.d.ts +10 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +70 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +45 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +291 -0
- package/dist/sync/v3/localTaskChecklistOutboxHandler.d.ts +10 -0
- package/dist/sync/v3/localTaskChecklistOutboxHandler.js +54 -0
- package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +47 -0
- package/dist/sync/v3/localTaskChecklistOutboxService.js +221 -0
- package/dist/sync/v3/localTaskCommentOutboxHandler.d.ts +10 -0
- package/dist/sync/v3/localTaskCommentOutboxHandler.js +94 -0
- package/dist/sync/v3/localTaskCommentOutboxService.d.ts +75 -0
- package/dist/sync/v3/localTaskCommentOutboxService.js +391 -0
- package/dist/sync/v3/localTaskCreateClient.d.ts +27 -0
- package/dist/sync/v3/localTaskCreateClient.js +209 -0
- package/dist/sync/v3/localTaskCreateOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localTaskCreateOutboxHandler.js +147 -0
- package/dist/sync/v3/localTaskCreateOutboxService.d.ts +77 -0
- package/dist/sync/v3/localTaskCreateOutboxService.js +397 -0
- package/dist/sync/v3/localTaskDeleteClient.d.ts +10 -0
- package/dist/sync/v3/localTaskDeleteClient.js +23 -0
- package/dist/sync/v3/localTaskDeleteOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localTaskDeleteOutboxHandler.js +54 -0
- package/dist/sync/v3/localTaskDeleteOutboxService.d.ts +38 -0
- package/dist/sync/v3/localTaskDeleteOutboxService.js +235 -0
- package/dist/sync/v3/localTaskLegacyRootAdoption.d.ts +28 -0
- package/dist/sync/v3/localTaskLegacyRootAdoption.js +219 -0
- package/dist/sync/v3/localTaskLifecycleClient.d.ts +49 -0
- package/dist/sync/v3/localTaskLifecycleClient.js +57 -0
- package/dist/sync/v3/localTaskLifecycleOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localTaskLifecycleOutboxHandler.js +94 -0
- package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +60 -0
- package/dist/sync/v3/localTaskLifecycleOutboxService.js +304 -0
- package/dist/sync/v3/localTaskMetadataClient.d.ts +13 -0
- package/dist/sync/v3/localTaskMetadataClient.js +30 -0
- package/dist/sync/v3/localTaskMetadataOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localTaskMetadataOutboxHandler.js +70 -0
- package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +48 -0
- package/dist/sync/v3/localTaskMetadataOutboxService.js +229 -0
- package/dist/sync/v3/localTaskOperationClient.d.ts +72 -0
- package/dist/sync/v3/localTaskOperationClient.js +195 -0
- package/dist/sync/v3/localTaskRelationshipOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localTaskRelationshipOutboxHandler.js +114 -0
- package/dist/sync/v3/localTaskRelationshipOutboxService.d.ts +45 -0
- package/dist/sync/v3/localTaskRelationshipOutboxService.js +192 -0
- package/dist/sync/v3/localTaskRestoreClient.d.ts +13 -0
- package/dist/sync/v3/localTaskRestoreClient.js +32 -0
- package/dist/sync/v3/localTaskRestoreOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localTaskRestoreOutboxHandler.js +41 -0
- package/dist/sync/v3/localTaskRestoreOutboxService.d.ts +56 -0
- package/dist/sync/v3/localTaskRestoreOutboxService.js +323 -0
- package/dist/sync/v3/localTaskStatusClient.d.ts +17 -0
- package/dist/sync/v3/localTaskStatusClient.js +35 -0
- package/dist/sync/v3/localTaskStatusOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localTaskStatusOutboxHandler.js +75 -0
- package/dist/sync/v3/localTaskStatusOutboxService.d.ts +53 -0
- package/dist/sync/v3/localTaskStatusOutboxService.js +422 -0
- package/dist/sync/v3/localTaxonomyCompositeOutboxService.d.ts +34 -0
- package/dist/sync/v3/localTaxonomyCompositeOutboxService.js +290 -0
- package/dist/sync/v3/localTaxonomyOutboxHandler.d.ts +9 -0
- package/dist/sync/v3/localTaxonomyOutboxHandler.js +106 -0
- package/dist/sync/v3/localTaxonomyOutboxService.d.ts +30 -0
- package/dist/sync/v3/localTaxonomyOutboxService.js +181 -0
- package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.js +113 -0
- package/dist/sync/v3/localWorkflowRuntimeOutboxService.d.ts +37 -0
- package/dist/sync/v3/localWorkflowRuntimeOutboxService.js +330 -0
- package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.d.ts +63 -0
- package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.js +264 -0
- package/dist/sync/v3/localWorkstreamOutboxHandler.d.ts +8 -0
- package/dist/sync/v3/localWorkstreamOutboxHandler.js +102 -0
- package/dist/sync/v3/localWorkstreamOutboxService.d.ts +52 -0
- package/dist/sync/v3/localWorkstreamOutboxService.js +579 -0
- package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.d.ts +10 -0
- package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.js +57 -0
- package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.d.ts +30 -0
- package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.js +128 -0
- package/dist/sync/v3/planningActivation.d.ts +13 -0
- package/dist/sync/v3/planningActivation.js +33 -0
- package/dist/sync/v3/planningAttachmentActivityValidation.d.ts +9 -0
- package/dist/sync/v3/planningAttachmentActivityValidation.js +87 -0
- package/dist/sync/v3/programScaffoldService.d.ts +143 -0
- package/dist/sync/v3/programScaffoldService.js +478 -0
- package/dist/sync/v3/syncDurabilityStore.d.ts +773 -0
- package/dist/sync/v3/syncDurabilityStore.js +4635 -0
- package/dist/sync/v3/taskActivityAuthoritativeRevision.d.ts +16 -0
- package/dist/sync/v3/taskActivityAuthoritativeRevision.js +67 -0
- package/dist/sync/v3/taskActivityJournal.d.ts +20 -0
- package/dist/sync/v3/taskActivityJournal.js +195 -0
- package/dist/sync/v3/taskAttachmentLinksActivityIdentity.d.ts +6 -0
- package/dist/sync/v3/taskAttachmentLinksActivityIdentity.js +14 -0
- package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +111 -0
- package/dist/sync/v3/taskAttachmentLinksMutationService.js +202 -0
- package/dist/sync/v3/taskChecklistActivityIdentity.d.ts +6 -0
- package/dist/sync/v3/taskChecklistActivityIdentity.js +14 -0
- package/dist/sync/v3/taskChecklistMutationService.d.ts +92 -0
- package/dist/sync/v3/taskChecklistMutationService.js +156 -0
- package/dist/sync/v3/taskCommentActivityIdentity.d.ts +7 -0
- package/dist/sync/v3/taskCommentActivityIdentity.js +15 -0
- package/dist/sync/v3/taskCommentMutationService.d.ts +150 -0
- package/dist/sync/v3/taskCommentMutationService.js +392 -0
- package/dist/sync/v3/taskCommentReconcileProvenance.d.ts +58 -0
- package/dist/sync/v3/taskCommentReconcileProvenance.js +170 -0
- package/dist/sync/v3/taskCreateActivation.d.ts +19 -0
- package/dist/sync/v3/taskCreateActivation.js +84 -0
- package/dist/sync/v3/taskCreateActivityIdentity.d.ts +7 -0
- package/dist/sync/v3/taskCreateActivityIdentity.js +18 -0
- package/dist/sync/v3/taskCreateMutationService.d.ts +103 -0
- package/dist/sync/v3/taskCreateMutationService.js +283 -0
- package/dist/sync/v3/taskDeleteActivation.d.ts +7 -0
- package/dist/sync/v3/taskDeleteActivation.js +14 -0
- package/dist/sync/v3/taskDeleteMutationService.d.ts +35 -0
- package/dist/sync/v3/taskDeleteMutationService.js +133 -0
- package/dist/sync/v3/taskLegacyRootAdoptionService.d.ts +78 -0
- package/dist/sync/v3/taskLegacyRootAdoptionService.js +175 -0
- package/dist/sync/v3/taskLifecycleActivityIdentity.d.ts +9 -0
- package/dist/sync/v3/taskLifecycleActivityIdentity.js +18 -0
- package/dist/sync/v3/taskLifecycleMutationPayload.d.ts +5 -0
- package/dist/sync/v3/taskLifecycleMutationPayload.js +28 -0
- package/dist/sync/v3/taskLifecycleMutationService.d.ts +66 -0
- package/dist/sync/v3/taskLifecycleMutationService.js +92 -0
- package/dist/sync/v3/taskMetadataActivation.d.ts +12 -0
- package/dist/sync/v3/taskMetadataActivation.js +38 -0
- package/dist/sync/v3/taskMetadataActivityIdentity.d.ts +7 -0
- package/dist/sync/v3/taskMetadataActivityIdentity.js +18 -0
- package/dist/sync/v3/taskMetadataCoexistence.d.ts +37 -0
- package/dist/sync/v3/taskMetadataCoexistence.js +134 -0
- package/dist/sync/v3/taskMetadataMutationService.d.ts +71 -0
- package/dist/sync/v3/taskMetadataMutationService.js +199 -0
- package/dist/sync/v3/taskRelationshipLegacyAdoptionService.d.ts +48 -0
- package/dist/sync/v3/taskRelationshipLegacyAdoptionService.js +164 -0
- package/dist/sync/v3/taskRelationshipMutationService.d.ts +50 -0
- package/dist/sync/v3/taskRelationshipMutationService.js +148 -0
- package/dist/sync/v3/taskRestoreMutationService.d.ts +90 -0
- package/dist/sync/v3/taskRestoreMutationService.js +179 -0
- package/dist/sync/v3/taskStatusActivation.d.ts +7 -0
- package/dist/sync/v3/taskStatusActivation.js +15 -0
- package/dist/sync/v3/taskStatusMutationService.d.ts +76 -0
- package/dist/sync/v3/taskStatusMutationService.js +308 -0
- package/dist/sync/v3/taskWorkflowMutationPayload.d.ts +4 -0
- package/dist/sync/v3/taskWorkflowMutationPayload.js +22 -0
- package/dist/sync/v3/taskWorkflowMutationService.d.ts +64 -0
- package/dist/sync/v3/taskWorkflowMutationService.js +102 -0
- package/dist/sync/v3/taxonomyCoexistence.d.ts +10 -0
- package/dist/sync/v3/taxonomyCoexistence.js +19 -0
- package/dist/sync/v3/taxonomyCompositeMutationService.d.ts +110 -0
- package/dist/sync/v3/taxonomyCompositeMutationService.js +304 -0
- package/dist/sync/v3/taxonomyMutationService.d.ts +57 -0
- package/dist/sync/v3/taxonomyMutationService.js +106 -0
- package/dist/sync/v3/taxonomyStateMutation.d.ts +22 -0
- package/dist/sync/v3/taxonomyStateMutation.js +49 -0
- package/dist/sync/v3/taxonomySyncPayload.d.ts +9 -0
- package/dist/sync/v3/taxonomySyncPayload.js +199 -0
- package/dist/sync/v3/workflowAssignmentSync.d.ts +22 -0
- package/dist/sync/v3/workflowAssignmentSync.js +213 -0
- package/dist/sync/v3/workflowRuntimeMutationService.d.ts +89 -0
- package/dist/sync/v3/workflowRuntimeMutationService.js +359 -0
- package/dist/sync/v3/workflowRuntimeOperationIdentity.d.ts +13 -0
- package/dist/sync/v3/workflowRuntimeOperationIdentity.js +35 -0
- package/dist/sync/v3/workflowRuntimeSync.d.ts +141 -0
- package/dist/sync/v3/workflowRuntimeSync.js +485 -0
- package/dist/sync/v3/workspaceSyncJournalReader.d.ts +43 -0
- package/dist/sync/v3/workspaceSyncJournalReader.js +45 -0
- package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.d.ts +28 -0
- package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.js +81 -0
- package/dist/sync/v3/workspaceSyncPayloadFingerprint.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncPayloadFingerprint.js +5 -0
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +16 -0
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +161 -0
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +83 -0
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +161 -0
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +16 -0
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +90 -0
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +65 -0
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +356 -0
- package/dist/sync/v3/workspaceSyncV3CombinedCoverage.d.ts +51 -0
- package/dist/sync/v3/workspaceSyncV3CombinedCoverage.js +171 -0
- package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.d.ts +43 -0
- package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +535 -0
- package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.d.ts +50 -0
- package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +1149 -0
- package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.d.ts +96 -0
- package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.js +672 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +42 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +598 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +65 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +505 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +78 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +511 -0
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +45 -0
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +125 -0
- package/dist/sync/v3/workspaceSyncV3CoverageRegistry.d.ts +13 -0
- package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +34 -0
- package/dist/sync/v3/workspaceSyncV3CursorEncoding.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3CursorEncoding.js +6 -0
- package/dist/sync/v3/workspaceSyncV3DomainAdmission.d.ts +43 -0
- package/dist/sync/v3/workspaceSyncV3DomainAdmission.js +118 -0
- package/dist/sync/v3/workspaceSyncV3Feed.d.ts +95 -0
- package/dist/sync/v3/workspaceSyncV3Feed.js +243 -0
- package/dist/sync/v3/workspaceSyncV3FeedApply.d.ts +13 -0
- package/dist/sync/v3/workspaceSyncV3FeedApply.js +67 -0
- package/dist/sync/v3/workspaceSyncV3FeedClientContract.d.ts +3 -0
- package/dist/sync/v3/workspaceSyncV3FeedClientContract.js +46 -0
- package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.d.ts +10 -0
- package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.js +58 -0
- package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.d.ts +31 -0
- package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.js +228 -0
- package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +32 -0
- package/dist/sync/v3/workspaceSyncV3FeedProfile.js +21 -0
- package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.d.ts +36 -0
- package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.js +163 -0
- package/dist/sync/v3/workspaceSyncV3InitiativeRepair.d.ts +33 -0
- package/dist/sync/v3/workspaceSyncV3InitiativeRepair.js +118 -0
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +10 -0
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +45 -0
- package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.d.ts +27 -0
- package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.js +83 -0
- package/dist/sync/v3/workspaceSyncV3NestedCoverage.d.ts +10 -0
- package/dist/sync/v3/workspaceSyncV3NestedCoverage.js +40 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +83 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +325 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +59 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +302 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +47 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +329 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +19 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +41 -0
- package/dist/sync/v3/workspaceSyncV3NestedWireContract.d.ts +6 -0
- package/dist/sync/v3/workspaceSyncV3NestedWireContract.js +16 -0
- package/dist/sync/v3/workspaceSyncV3OperationProjection.d.ts +8 -0
- package/dist/sync/v3/workspaceSyncV3OperationProjection.js +52 -0
- package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +229 -0
- package/dist/sync/v3/workspaceSyncV3OperationProtocol.js +1 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +165 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +414 -0
- package/dist/sync/v3/workspaceSyncV3OriginActor.d.ts +36 -0
- package/dist/sync/v3/workspaceSyncV3OriginActor.js +61 -0
- package/dist/sync/v3/workspaceSyncV3OriginAssertion.d.ts +46 -0
- package/dist/sync/v3/workspaceSyncV3OriginAssertion.js +121 -0
- package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.js +1 -0
- package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.d.ts +10 -0
- package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.js +34 -0
- package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.d.ts +6 -0
- package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.js +10 -0
- package/dist/sync/v3/workspaceSyncV3ProjectionState.d.ts +105 -0
- package/dist/sync/v3/workspaceSyncV3ProjectionState.js +467 -0
- package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.d.ts +56 -0
- package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +250 -0
- package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.d.ts +30 -0
- package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.js +142 -0
- package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +40 -0
- package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +246 -0
- package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.d.ts +39 -0
- package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.js +185 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.d.ts +10 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.js +36 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +17 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +143 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.d.ts +9 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.js +195 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.d.ts +11 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.js +12 -0
- package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.d.ts +4 -0
- package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.js +98 -0
- package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.d.ts +9 -0
- package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.js +72 -0
- package/dist/sync/v3/workstreamActivityAuthoritativeRevision.d.ts +11 -0
- package/dist/sync/v3/workstreamActivityAuthoritativeRevision.js +23 -0
- package/dist/sync/v3/workstreamActivityIdentity.d.ts +8 -0
- package/dist/sync/v3/workstreamActivityIdentity.js +14 -0
- package/dist/sync/v3/workstreamCoexistence.d.ts +19 -0
- package/dist/sync/v3/workstreamCoexistence.js +64 -0
- package/dist/sync/v3/workstreamMutationPayload.d.ts +27 -0
- package/dist/sync/v3/workstreamMutationPayload.js +147 -0
- package/dist/sync/v3/workstreamMutationService.d.ts +72 -0
- package/dist/sync/v3/workstreamMutationService.js +256 -0
- package/dist/sync/v3/workstreamTaskOrderMutationService.d.ts +55 -0
- package/dist/sync/v3/workstreamTaskOrderMutationService.js +110 -0
- package/dist/sync/v3/workstreamTaskOrderSync.d.ts +14 -0
- package/dist/sync/v3/workstreamTaskOrderSync.js +25 -0
- package/dist/sync/workspaceContentManifest.d.ts +86 -0
- package/dist/sync/workspaceContentManifest.js +123 -0
- package/dist/sync/workspacePullFeed.d.ts +186 -2
- package/dist/sync/workspacePullFeed.js +513 -136
- package/dist/sync/workspacePushPreparedPlan.d.ts +21 -0
- package/dist/sync/workspacePushPreparedPlan.js +1 -0
- package/dist/sync/workspaceRepair.d.ts +17 -25
- package/dist/sync/workspaceRepair.js +348 -25
- package/dist/sync/workspaceSyncContentDecryption.d.ts +6 -0
- package/dist/sync/workspaceSyncContentDecryption.js +11 -0
- package/dist/sync/workspaceSyncModel.d.ts +216 -5
- package/dist/sync/workspaceSyncModel.js +371 -35
- package/dist/sync/workspaceSyncSnapshotProjection.d.ts +11 -0
- package/dist/sync/workspaceSyncSnapshotProjection.js +101 -0
- package/dist/sync/workspaceSyncState.d.ts +13 -0
- package/dist/sync/workspaceSyncState.js +36 -0
- package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +106 -0
- package/dist/sync/workspaceSyncV2SnapshotBuilder.js +193 -0
- package/dist/types.d.ts +23 -15
- package/dist/types.js +1 -3
- package/dist/ui/ai-profile-clients/amazon-nova.svg +1 -0
- package/dist/ui/ai-profile-clients/antigravity.png +0 -0
- package/dist/ui/ai-profile-clients/chatgpt.svg +10 -0
- package/dist/ui/ai-profile-clients/claude-chat.svg +1 -0
- package/dist/ui/ai-profile-clients/claude-code.svg +15 -0
- package/dist/ui/ai-profile-clients/cline-app-icon-light.png +0 -0
- package/dist/ui/ai-profile-clients/cline.svg +16 -0
- package/dist/ui/ai-profile-clients/codex.svg +1 -0
- package/dist/ui/ai-profile-clients/copilot.png +0 -0
- package/dist/ui/ai-profile-clients/cursor.svg +1 -0
- package/dist/ui/ai-profile-clients/deepseek.svg +1 -0
- package/dist/ui/ai-profile-clients/gemini-cli-icon.png +0 -0
- package/dist/ui/ai-profile-clients/gemini.svg +10 -0
- package/dist/ui/ai-profile-clients/grok.svg +31 -0
- package/dist/ui/ai-profile-clients/kiro.svg +11 -0
- package/dist/ui/ai-profile-clients/llama.svg +1 -0
- package/dist/ui/ai-profile-clients/mistral.svg +1 -0
- package/dist/ui/ai-profile-clients/ms_copilot.jpeg +0 -0
- package/dist/ui/ai-profile-clients/openclaw.png +0 -0
- package/dist/ui/ai-profile-clients/perplexity.svg +1 -0
- package/dist/ui/ai-profile-clients/vscode.svg +41 -0
- package/dist/ui/ai-profile-clients/windsurf.svg +11 -0
- package/dist/ui/assets/AiIdentityRosterCard-DB1BLO_j.js +1 -0
- package/dist/ui/assets/AiProfilesModule-DPxQeF9N.js +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-DHNYaNg6.js +3 -0
- package/dist/ui/assets/AssetTraySortControl-B9k5caQW.css +1 -0
- package/dist/ui/assets/AssetTraySortControl-DphbyHVc.js +1 -0
- package/dist/ui/assets/ContextAttachmentManager-CMxSzHqc.js +3 -0
- package/dist/ui/assets/DocumentWorkspace-BC7sy5TG.js +261 -0
- package/dist/ui/assets/DocumentWorkspace-BIBGBfd7.css +1 -0
- package/dist/ui/assets/EntityActivityTimeline-BfJbZRdl.css +1 -0
- package/dist/ui/assets/EntityActivityTimeline-pJ2ZjZ-k.js +1 -0
- package/dist/ui/assets/PlanningModule-CeTqXMMz.css +1 -0
- package/dist/ui/assets/PlanningModule-t5GbvVR9.js +1 -0
- package/dist/ui/assets/PlansPage-BVH_NfgT.js +1 -0
- package/dist/ui/assets/PlansPage-C2nkK2Bp.css +1 -0
- package/dist/ui/assets/TaskContextUpload-Ds4LnDzV.css +1 -0
- package/dist/ui/assets/TaskContextUpload-bl4fOOUz.js +1 -0
- package/dist/ui/assets/TaskSettings-xVsxSa0g.js +12 -0
- package/dist/ui/assets/TaskforceAgentsModule-CkAxW19K.js +21 -0
- package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +1 -0
- package/dist/ui/assets/WorkflowManagerModule-BKqIGVnF.js +1 -0
- package/dist/ui/assets/WorkflowManagerModule-DF10XENz.css +1 -0
- package/dist/ui/assets/antigravity-DRKQga2U.png +0 -0
- package/dist/ui/assets/cursor-BM_3k4Y4.svg +1 -0
- package/dist/ui/assets/gemini-cli-icon-dBAVjCcn.png +0 -0
- package/dist/ui/assets/grok-BuodbWaG.svg +31 -0
- package/dist/ui/assets/index-BzJlVnNS.css +1 -0
- package/dist/ui/assets/index-Cx7vZJHL.js +7 -0
- package/dist/ui/assets/{vendor-dnd-DRzYolkg.js → vendor-dnd-CJ-AjP-Y.js} +1 -1
- package/dist/ui/assets/{vendor-icons-CLnehDTw.js → vendor-icons-B8ZNsH1g.js} +1 -1
- package/dist/ui/assets/{vendor-markdown-BUxTU7dS.js → vendor-markdown-_lhNCyq-.js} +9 -9
- package/dist/ui/assets/vendor-router-AqJMU8Lz.js +3 -0
- package/dist/ui/assets/vscode-C_7wk1WI.svg +41 -0
- package/dist/ui/branding/logos/logo_dark_bg.png +0 -0
- package/dist/ui/branding/logos/logo_favicon_dark.png +0 -0
- package/dist/ui/branding/logos/logo_favicon_dark.svg +56 -0
- package/dist/ui/branding/logos/logo_favicon_light.png +0 -0
- package/dist/ui/branding/logos/logo_light_bg.png +0 -0
- package/dist/ui/images/Taskforce_Van.webp +0 -0
- package/dist/ui/index.html +6 -6
- package/dist/update/uiUpdateService.d.ts +43 -0
- package/dist/update/uiUpdateService.js +149 -0
- package/dist/update/updateCli.d.ts +15 -0
- package/dist/update/updateCli.js +76 -0
- package/dist/update/updateExecutor.d.ts +40 -0
- package/dist/update/updateExecutor.js +474 -0
- package/dist/update/updateStatus.d.ts +83 -0
- package/dist/update/updateStatus.js +703 -0
- package/dist/utils/aiProfileAvatarPaths.d.ts +14 -0
- package/dist/utils/aiProfileAvatarPaths.js +52 -0
- package/dist/utils/aiProfileDefaultLogo.d.ts +7 -0
- package/dist/utils/aiProfileDefaultLogo.js +84 -0
- package/dist/utils/aiProfileEvents.d.ts +9 -1
- package/dist/utils/annotatedAttachments.d.ts +8 -0
- package/dist/utils/annotatedAttachments.js +17 -1
- package/dist/utils/assetTraySorting.d.ts +25 -0
- package/dist/utils/assetTraySorting.js +83 -0
- package/dist/utils/assignees.d.ts +5 -0
- package/dist/utils/assignees.js +14 -9
- package/dist/utils/authLogin.d.ts +10 -0
- package/dist/utils/authLogin.js +8 -0
- package/dist/utils/authSessionEvents.d.ts +2 -0
- package/dist/utils/authSessionEvents.js +6 -0
- package/dist/utils/avatarUpload.js +5 -5
- package/dist/utils/canonicalReferenceAttachments.d.ts +12 -0
- package/dist/utils/canonicalReferenceAttachments.js +42 -0
- package/dist/utils/cloudAssetDisplay.d.ts +2 -0
- package/dist/utils/cloudAssetDisplay.js +8 -0
- package/dist/utils/constants.d.ts +4 -11
- package/dist/utils/constants.js +5 -64
- package/dist/utils/contextAttachmentPreview.d.ts +11 -0
- package/dist/utils/contextAttachmentPreview.js +8 -0
- package/dist/utils/contextAttachmentUpload.d.ts +8 -0
- package/dist/utils/contextAttachmentUpload.js +144 -0
- package/dist/utils/documentNames.js +6 -4
- package/dist/utils/entityReferences.d.ts +14 -0
- package/dist/utils/entityReferences.js +21 -0
- package/dist/utils/httpSetCookie.d.ts +3 -0
- package/dist/utils/httpSetCookie.js +22 -0
- package/dist/utils/imageNoteStoragePaths.d.ts +3 -0
- package/dist/utils/imageNoteStoragePaths.js +19 -0
- package/dist/utils/imageReferences.d.ts +6 -0
- package/dist/utils/imageReferences.js +1 -0
- package/dist/utils/planningArchiveOrchestrator.d.ts +23 -0
- package/dist/utils/planningArchiveOrchestrator.js +37 -0
- package/dist/utils/planningArchivePresentation.d.ts +20 -0
- package/dist/utils/planningArchivePresentation.js +23 -0
- package/dist/utils/planningArchiveReadiness.d.ts +26 -0
- package/dist/utils/planningArchiveReadiness.js +30 -0
- package/dist/utils/planningFavorites.d.ts +7 -0
- package/dist/utils/planningFavorites.js +34 -0
- package/dist/utils/syncEventPresentation.js +53 -0
- package/dist/utils/syncStatusPresentation.d.ts +25 -0
- package/dist/utils/syncStatusPresentation.js +86 -5
- package/dist/utils/taskActivity.d.ts +9 -2
- package/dist/utils/taskActivity.js +61 -0
- package/dist/utils/taskDraftDefaults.d.ts +0 -8
- package/dist/utils/taskDraftDefaults.js +0 -4
- package/dist/utils/taskEvents.d.ts +11 -0
- package/dist/utils/taskEvents.js +6 -0
- package/dist/utils/taskHeaderQuickFilter.d.ts +14 -0
- package/dist/utils/taskHeaderQuickFilter.js +32 -0
- package/dist/utils/taskInvalidation.d.ts +23 -0
- package/dist/utils/taskInvalidation.js +67 -0
- package/dist/utils/taskNormalization.d.ts +2 -1
- package/dist/utils/taskNormalization.js +44 -18
- package/dist/utils/taskReferences.d.ts +16 -0
- package/dist/utils/taskReferences.js +63 -0
- package/dist/utils/taskforceAgentEvents.d.ts +8 -0
- package/dist/utils/taskforceAgentEvents.js +6 -0
- package/dist/utils/taskforceAgentSkillEvents.d.ts +7 -0
- package/dist/utils/taskforceAgentSkillEvents.js +8 -0
- package/dist/utils/uiNotice.d.ts +3 -0
- package/dist/utils/uiNotice.js +1 -1
- package/dist/utils/workspaceResourceEvents.d.ts +7 -0
- package/dist/utils/workspaceResourceEvents.js +6 -0
- package/dist/utils/workspaceSyncPresentation.d.ts +24 -0
- package/dist/utils/workspaceSyncPresentation.js +243 -6
- package/package.json +69 -21
- package/dist/components/features/AgentsModule.d.ts +0 -18
- package/dist/components/features/AgentsModule.js +0 -479
- package/dist/components/features/InitiativesModule.d.ts +0 -22
- package/dist/components/features/InitiativesModule.js +0 -33
- package/dist/components/features/WorkflowsModule.d.ts +0 -27
- package/dist/components/features/WorkflowsModule.js +0 -21
- package/dist/components/features/settings/WorkflowEditor.d.ts +0 -15
- package/dist/components/features/settings/WorkflowEditor.js +0 -245
- package/dist/components/views/panels/DocumentFilterToolbar.d.ts +0 -10
- package/dist/components/views/panels/DocumentFilterToolbar.js +0 -7
- package/dist/components/views/standalone/modals/AccountHubModal.d.ts +0 -61
- package/dist/components/views/standalone/modals/AccountHubModal.js +0 -108
- package/dist/components/views/standalone/modals/EditProfileModal.d.ts +0 -19
- package/dist/components/views/standalone/modals/EditProfileModal.js +0 -11
- package/dist/hooks/ui/useResourceExport.d.ts +0 -21
- package/dist/hooks/ui/useResourceExport.js +0 -87
- package/dist/hooks/ui/useWorkflowTemplates.d.ts +0 -37
- package/dist/hooks/ui/useWorkflowTemplates.js +0 -116
- package/dist/mcp/clientProfileDefaults.d.ts +0 -12
- package/dist/mcp/clientProfileDefaults.js +0 -41
- package/dist/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
- package/dist/resources/templates/environments/aider.yaml +0 -14
- package/dist/resources/templates/environments/antigravity.yaml +0 -10
- package/dist/resources/templates/environments/claude.yaml +0 -10
- package/dist/resources/templates/environments/cline.yaml +0 -10
- package/dist/resources/templates/environments/codex.yaml +0 -13
- package/dist/resources/templates/environments/copilot.yaml +0 -10
- package/dist/resources/templates/environments/cursor.yaml +0 -9
- package/dist/resources/templates/environments/gemini.yaml +0 -9
- package/dist/resources/templates/environments/windsurf.yaml +0 -10
- package/dist/resources/templates/workflow-sources/README.md +0 -9
- package/dist/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
- package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
- package/dist/resources/templates/workflows/collaborate.yaml +0 -109
- package/dist/resources/templates/workflows/do.yaml +0 -87
- package/dist/resources/templates/workflows/evaluate.yaml +0 -116
- package/dist/resources/templates/workflows/execute.yaml +0 -156
- package/dist/resources/templates/workflows/plan.yaml +0 -118
- package/dist/resources/templates/workflows/review.yaml +0 -114
- package/dist/services/formatTransformers.d.ts +0 -29
- package/dist/services/formatTransformers.js +0 -56
- package/dist/services/templateEngine.d.ts +0 -46
- package/dist/services/templateEngine.js +0 -148
- package/dist/shared/workflowDefaults.d.ts +0 -9
- package/dist/shared/workflowDefaults.js +0 -11
- package/dist/ui/agent-logos/Gemini CLI.jpeg +0 -0
- package/dist/ui/agent-logos/antigravity.jpeg +0 -0
- package/dist/ui/agent-logos/chatgpt.png +0 -0
- package/dist/ui/agent-logos/claude-code.jpeg +0 -0
- package/dist/ui/agent-logos/codex.jpeg +0 -0
- package/dist/ui/agent-logos/cursor.png +0 -0
- package/dist/ui/agent-logos/openclaw.jpeg +0 -0
- package/dist/ui/agent-logos/windsurf.png +0 -0
- package/dist/ui/assets/AgentsModule-C4LcqhcZ.js +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-B-Dq22d2.js +0 -3
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +0 -1
- package/dist/ui/assets/ContextAttachmentManager-DsXPTvi-.js +0 -3
- package/dist/ui/assets/DocumentWorkspace-CxA1wO3U.js +0 -252
- package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +0 -1
- package/dist/ui/assets/EntityActivityTimeline-B8nSe8l3.js +0 -1
- package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +0 -1
- package/dist/ui/assets/InitiativesModule-VY95v38E.js +0 -1
- package/dist/ui/assets/PlansPage-CQbKDv1a.js +0 -1
- package/dist/ui/assets/PlansPage-DeAzWYTb.css +0 -1
- package/dist/ui/assets/TaskContextUpload-DvDlNpHC.js +0 -1
- package/dist/ui/assets/TaskSettings-CUWbYYtP.js +0 -12
- package/dist/ui/assets/WorkflowsModule-CgM3Jako.js +0 -5
- package/dist/ui/assets/documentReferences-Do9YjrS3.js +0 -1
- package/dist/ui/assets/index--mh3pktj.js +0 -5
- package/dist/ui/assets/index-BawaaEXS.css +0 -1
- package/dist/ui/assets/vendor-router-BbWMxlnO.js +0 -3
- package/dist/ui/branding/logos/logo_black_01.png +0 -0
- package/dist/ui/branding/logos/logo_black_02.png +0 -0
- package/dist/ui/branding/logos/logo_white_01.png +0 -0
- package/dist/ui/branding/logos/logo_white_02.png +0 -0
- package/scripts/generate-workflow-templates.mjs +0 -134
- package/src/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
- package/src/resources/templates/environments/aider.yaml +0 -14
- package/src/resources/templates/environments/antigravity.yaml +0 -10
- package/src/resources/templates/environments/claude.yaml +0 -10
- package/src/resources/templates/environments/cline.yaml +0 -10
- package/src/resources/templates/environments/codex.yaml +0 -13
- package/src/resources/templates/environments/copilot.yaml +0 -10
- package/src/resources/templates/environments/cursor.yaml +0 -9
- package/src/resources/templates/environments/gemini.yaml +0 -9
- package/src/resources/templates/environments/windsurf.yaml +0 -10
- package/src/resources/templates/workflow-sources/README.md +0 -9
- package/src/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
- package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
- package/src/resources/templates/workflows/collaborate.yaml +0 -109
- package/src/resources/templates/workflows/do.yaml +0 -87
- package/src/resources/templates/workflows/evaluate.yaml +0 -116
- package/src/resources/templates/workflows/execute.yaml +0 -156
- package/src/resources/templates/workflows/plan.yaml +0 -118
- package/src/resources/templates/workflows/review.yaml +0 -114
- /package/dist/ui/branding/logos/{logo_dark.svg → logo_dark_no_bg.svg} +0 -0
- /package/dist/ui/branding/logos/{logo_favicon.svg → logo_favicon_light.svg} +0 -0
- /package/dist/ui/branding/logos/{logo_light.svg → logo_light_no_bg.svg} +0 -0
|
@@ -19,36 +19,47 @@
|
|
|
19
19
|
* Key exports: useSyncOrchestrator, UseSyncOrchestratorInput, WorkspaceSyncStatus
|
|
20
20
|
*/
|
|
21
21
|
// === SECTION: Imports & module-level constants ===
|
|
22
|
-
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
22
|
+
import { useState, useEffect, useCallback, useRef, useMemo, useLayoutEffect, } from 'react';
|
|
23
23
|
import { ensureCloudWorkspaceReadyForSyncService, syncUserGlobalSettingsService } from '../sync/syncService';
|
|
24
|
-
import {
|
|
24
|
+
import { buildWorkspaceSyncV2Candidate, buildWorkspaceSyncV2Signature, createWorkspaceSyncV2FrozenSnapshot, } from '../sync/workspaceSyncV2SnapshotBuilder.js';
|
|
25
|
+
import { normalizeAgentRoleSyncPayload, normalizeTaskforceAgentSkillSyncPayload, } from '../sync/collaborationSyncPayload.js';
|
|
26
|
+
import { hasWorkspaceTaxonomyStatePayload } from '../shared/taxonomyState.js';
|
|
25
27
|
import { useWorkspaceSyncController } from './useWorkspaceSyncController';
|
|
26
28
|
import { normalizeTaskforceTheme } from '../utils/theme';
|
|
27
29
|
import { useRealtimeSync } from './useRealtimeSync';
|
|
28
30
|
import { TASKFORCE_CONTEXT_ASSETS_MUTATED_EVENT } from '../utils/contextAssetEvents';
|
|
29
|
-
import { TASKFORCE_AI_PROFILES_MUTATED_EVENT } from '../utils/aiProfileEvents';
|
|
31
|
+
import { dispatchTaskforceAiProfilesMutated, TASKFORCE_AI_PROFILES_MUTATED_EVENT, } from '../utils/aiProfileEvents';
|
|
32
|
+
import { dispatchTaskforceAgentsMutated, TASKFORCE_AGENTS_MUTATED_EVENT, } from '../utils/taskforceAgentEvents';
|
|
33
|
+
import { dispatchTaskforceAgentSkillsMutated, TASKFORCE_AGENT_SKILLS_MUTATED_EVENT, } from '../utils/taskforceAgentSkillEvents';
|
|
30
34
|
import { setLocale as setAppLocale } from '../localization';
|
|
31
35
|
import { normalizeTaskFromApi } from '../utils/taskNormalization.js';
|
|
32
36
|
import { normalizeSyncEventDetails } from '../utils/syncEventDetails';
|
|
33
37
|
import { createSyncAuthCoordinator } from './sync/auth';
|
|
34
38
|
import { createBootstrapTimeoutMonitor, syncBootstrapPhaseTracking } from './sync/bootstrap';
|
|
35
39
|
import { resolvePullSyncReadiness, resolvePushSyncReadiness, resolveRetrySyncReadiness } from './sync/controlPlane';
|
|
36
|
-
import { resolveWorkspaceAutomaticPullPolicy, resolveWorkspaceSyncPresentation, shouldRunWorkspaceStartupRepair, shouldScheduleWorkspaceReactivePush, shouldStartWorkspacePeriodicFullReconcile, shouldStartWorkspacePushWatchdog, } from './sync/lifecyclePolicy';
|
|
37
|
-
import { buildPersistedSyncWatermarksSnapshot, buildTaxonomyStateFingerprint, flattenDocumentReviewComments, flattenTaskEvents, isValidWorkspaceKey, logSyncDebug, normalizeWorkspaceSyncAiProfileSnapshotEntry, parsePersistedSyncWatermarksSnapshot, readPersistedSyncWatermarks, readUserGlobalSyncMeta, savePersistedSyncWatermarks, WORKSPACE_CONCURRENT_WINDOW_MESSAGE, WORKSPACE_FULL_RECONCILE_INTERVAL_MS, writeUserGlobalSyncMeta } from './sync/orchestratorShared';
|
|
40
|
+
import { resolveWorkspaceAutomaticPullPolicy, resolveWorkspaceSyncPresentation, shouldRunWorkspaceStartupRepair, shouldScheduleWorkspaceReactivePush, shouldStartWorkspacePeriodicFullReconcile, shouldStartWorkspacePushWatchdog, WORKSPACE_SYNC_PULL_FRESHNESS_WINDOW_MS, } from './sync/lifecyclePolicy';
|
|
41
|
+
import { buildPersistedSyncWatermarksSnapshot, buildTaxonomyStateFingerprint, flattenDocumentReviewComments, flattenTaskEvents, isValidWorkspaceKey, logSyncDebug, normalizeWorkspaceSyncAiProfileSnapshotEntry, normalizeWorkspaceSyncAgentConversationSnapshotEntry, normalizeWorkspaceSyncTaskforceAgentSnapshotEntry, parsePersistedSyncWatermarksSnapshot, readPersistedSyncWatermarks, readUserGlobalSyncMeta, savePersistedSyncWatermarks, WORKSPACE_CONCURRENT_WINDOW_MESSAGE, WORKSPACE_FULL_RECONCILE_INTERVAL_MS, writeUserGlobalSyncMeta } from './sync/orchestratorShared';
|
|
38
42
|
import { createRealtimeSyncBridge } from './sync/realtime';
|
|
39
43
|
import { createSyncRecoveryCoordinator } from './sync/recovery';
|
|
40
44
|
import { createWorkspaceTransferCoordinator } from './sync/transfers';
|
|
41
|
-
import { aiProfileSyncResourceAdapter, taskSyncResourceAdapter } from '../sync/syncResourceAdapters.js';
|
|
45
|
+
import { aiProfileSyncResourceAdapter, getAiProfileSyncSnapshotFingerprint, getTaskRelationshipSyncChangeKey, getTaxonomySyncChangeKey, taskSyncResourceAdapter, } from '../sync/syncResourceAdapters.js';
|
|
46
|
+
import { useDurableLocalOutboxDrain } from './sync/useDurableLocalOutboxDrain.js';
|
|
47
|
+
import { createBrowserWorkspaceSyncEngineLocalServices } from '../sync/engine/workspaceSyncEngineLocalServices.js';
|
|
48
|
+
import { useLocalSyncCoordinatorSnapshot } from './sync/useLocalSyncCoordinatorSnapshot.js';
|
|
49
|
+
import { isServerOwnedBrowserSyncAuthority, resolveBrowserSyncAuthority, shouldAttachLocalSyncCoordinator, } from './sync/browserSyncAuthority.js';
|
|
50
|
+
import { LocalSyncCoordinatorBrowserClient, LocalSyncCoordinatorBrowserClientError, } from '../sync/coordinator/localSyncCoordinatorBrowserClient.js';
|
|
51
|
+
import { isBrowserSyncRemoteServicesSelectionAuthorized, selectBrowserSyncRemoteServices, } from './sync/browserSyncRemoteServices.js';
|
|
42
52
|
const EMPTY_WORKSPACE_SYNC_REFERENCE_SNAPSHOT_STATUS = {
|
|
43
53
|
documents: false,
|
|
44
54
|
aiProfiles: false,
|
|
45
55
|
assets: false,
|
|
46
56
|
documentReviewSessions: false,
|
|
47
|
-
annotatedAttachmentSessions: false
|
|
57
|
+
annotatedAttachmentSessions: false,
|
|
58
|
+
taskforceAgents: false
|
|
48
59
|
};
|
|
49
60
|
export { normalizeWorkspaceSyncAiProfileSnapshotEntry };
|
|
50
61
|
export function useSyncOrchestrator(input) {
|
|
51
|
-
const { currentWorkspaceId, cloudAuthConfigured, runtimeMode, authSessionResolved, isAuthenticated, authUserId, projectName, resolveCloudAuthUrl, resolveWebSocketUrl, realtimeSyncEnabled, tasks, archivedTasks, deletedTasks = [], initiatives, workstreams, taxonomies, taxonomyState, setupState, globalTheme, locale, globalWeekStartsOn, themeUseGlobalDefault, setTasks, setArchivedTasks, setAuthBlocked, setIsAuthenticated, checkAuthSession, setGlobalTheme, setCurrentTheme, setSetupState, setLocale, setGlobalWeekStartsOn, fetchPlanningEntities } = input;
|
|
62
|
+
const { currentWorkspaceId, cloudAuthConfigured, runtimeMode, authSessionResolved, isAuthenticated, authUserId, projectName, resolveCloudAuthUrl, resolveWebSocketUrl, realtimeSyncEnabled, localOutboxDispatchEnabled, localCoordinatorBrowserAuthorityGateEnabled = false, localCoordinatorClient, initiativeFeedActivationEnabled, combinedFeedActivationEnabled, combinedFeedCoverage, tasks, archivedTasks, deletedTasks = [], initiatives, workstreams, taxonomies, taxonomyState, setupState, globalTheme, locale, globalWeekStartsOn, themeUseGlobalDefault, setTasks, setArchivedTasks, setAuthBlocked, setIsAuthenticated, checkAuthSession, setGlobalTheme, setCurrentTheme, setSetupState, setLocale, setGlobalWeekStartsOn, fetchPlanningEntities } = input;
|
|
52
63
|
const taxonomyStateFingerprint = useMemo(() => buildTaxonomyStateFingerprint(taxonomyState), [taxonomyState]);
|
|
53
64
|
// === SECTION: State initialization ===
|
|
54
65
|
const [userGlobalSyncStatus, setUserGlobalSyncStatus] = useState('disconnected');
|
|
@@ -62,14 +73,29 @@ export function useSyncOrchestrator(input) {
|
|
|
62
73
|
const [workspaceSyncSetupIntent, setWorkspaceSyncSetupIntent] = useState(null);
|
|
63
74
|
const [workspaceSyncBusy, setWorkspaceSyncBusy] = useState(false);
|
|
64
75
|
const [workspaceSyncPendingChanges, setWorkspaceSyncPendingChanges] = useState(0);
|
|
76
|
+
const [workspaceSyncV3OutboxStatus, setWorkspaceSyncV3OutboxStatus] = useState(null);
|
|
77
|
+
const workspaceSyncV3OutboxStatusRef = useRef(null);
|
|
78
|
+
const handleWorkspaceSyncV3OutboxStatus = useCallback((status) => {
|
|
79
|
+
workspaceSyncV3OutboxStatusRef.current = status;
|
|
80
|
+
setWorkspaceSyncV3OutboxStatus(status);
|
|
81
|
+
}, []);
|
|
65
82
|
const [workspaceSyncMarkdownDocuments, setWorkspaceSyncMarkdownDocuments] = useState([]);
|
|
66
83
|
const [workspaceSyncMarkdownDocumentsFingerprint, setWorkspaceSyncMarkdownDocumentsFingerprint] = useState('');
|
|
67
84
|
// Ref mirror kept in sync with state — readable synchronously inside callbacks to avoid
|
|
68
85
|
// stale-closure issues when buildWorkspaceSyncPayload is called after an async refresh.
|
|
69
86
|
const workspaceTasksRef = useRef(tasks || []);
|
|
70
87
|
const workspaceArchivedTasksRef = useRef(archivedTasks || []);
|
|
88
|
+
const workspaceDeletedTasksRef = useRef(deletedTasks || []);
|
|
89
|
+
const workspaceTaskRelationshipsRef = useRef([]);
|
|
90
|
+
const [workspaceTaskRelationships, setWorkspaceTaskRelationships] = useState([]);
|
|
91
|
+
const updateWorkspaceTaskRelationships = useCallback((relationships) => {
|
|
92
|
+
workspaceTaskRelationshipsRef.current = relationships;
|
|
93
|
+
setWorkspaceTaskRelationships(relationships);
|
|
94
|
+
}, []);
|
|
71
95
|
const workspaceInitiativesRef = useRef(initiatives || []);
|
|
72
96
|
const workspaceWorkstreamsRef = useRef(workstreams || []);
|
|
97
|
+
const workspaceTaxonomyStateRef = useRef(taxonomyState);
|
|
98
|
+
const workspaceTaxonomiesRef = useRef(taxonomies || []);
|
|
73
99
|
const workspaceSyncMarkdownDocumentsRef = useRef([]);
|
|
74
100
|
const workspaceSyncKnownDocumentPathsRef = useRef(new Set());
|
|
75
101
|
const [workspaceSyncAiProfiles, setWorkspaceSyncAiProfiles] = useState([]);
|
|
@@ -90,6 +116,12 @@ export function useSyncOrchestrator(input) {
|
|
|
90
116
|
const [workspaceSyncAnnotatedAttachmentSessions, setWorkspaceSyncAnnotatedAttachmentSessions] = useState([]);
|
|
91
117
|
const [workspaceSyncAnnotatedAttachmentSessionsFingerprint, setWorkspaceSyncAnnotatedAttachmentSessionsFingerprint] = useState('');
|
|
92
118
|
const workspaceSyncAnnotatedAttachmentSessionsRef = useRef([]);
|
|
119
|
+
const [workspaceSyncTaskforceAgents, setWorkspaceSyncTaskforceAgents] = useState([]);
|
|
120
|
+
const [workspaceSyncTaskforceAgentsFingerprint, setWorkspaceSyncTaskforceAgentsFingerprint] = useState('');
|
|
121
|
+
const workspaceSyncTaskforceAgentsRef = useRef([]);
|
|
122
|
+
const workspaceSyncAgentRolesRef = useRef([]);
|
|
123
|
+
const workspaceSyncTaskforceAgentSkillsRef = useRef([]);
|
|
124
|
+
const workspaceSyncAgentConversationsRef = useRef([]);
|
|
93
125
|
const [workspaceSyncReferenceSnapshotStatus, setWorkspaceSyncReferenceSnapshotStatus] = useState(EMPTY_WORKSPACE_SYNC_REFERENCE_SNAPSHOT_STATUS);
|
|
94
126
|
const [realtimeConnectionState, setRealtimeConnectionState] = useState('degraded-fallback');
|
|
95
127
|
const [realtimeTelemetry, setRealtimeTelemetry] = useState({
|
|
@@ -111,12 +143,15 @@ export function useSyncOrchestrator(input) {
|
|
|
111
143
|
const workspaceSyncAssetsFingerprintRef = useRef('');
|
|
112
144
|
const workspaceSyncDocumentReviewSessionsFingerprintRef = useRef('');
|
|
113
145
|
const workspaceSyncAnnotatedAttachmentSessionsFingerprintRef = useRef('');
|
|
146
|
+
const workspaceSyncTaskforceAgentsFingerprintRef = useRef('');
|
|
114
147
|
const syncInFlightRef = useRef(false);
|
|
115
148
|
const realtimePullDebounceRef = useRef(null);
|
|
116
149
|
const realtimeSuppressedEventIdsRef = useRef(new Set());
|
|
117
150
|
const realtimeSuppressedEventQueueRef = useRef([]);
|
|
118
151
|
const workspacePendingPushReplayRef = useRef(null);
|
|
152
|
+
const workspaceBlockedPushSignatureRef = useRef('');
|
|
119
153
|
const retryWorkspaceSyncRef = useRef(() => Promise.resolve(false));
|
|
154
|
+
const browserExecutionFenceDiagnosticEpochRef = useRef('');
|
|
120
155
|
const syncUserGlobalSettingsRef = useRef(async () => { });
|
|
121
156
|
const bootstrapPhaseStartedAtRef = useRef(null);
|
|
122
157
|
const bootstrapLastProgressAtRef = useRef(null);
|
|
@@ -153,14 +188,55 @@ export function useSyncOrchestrator(input) {
|
|
|
153
188
|
}));
|
|
154
189
|
}, []);
|
|
155
190
|
const workspaceSyncReferenceSnapshotsReady = Object.values(workspaceSyncReferenceSnapshotStatus).every(Boolean);
|
|
156
|
-
const
|
|
191
|
+
const effectiveLocalCoordinatorClient = useMemo(() => localCoordinatorClient || new LocalSyncCoordinatorBrowserClient(), [localCoordinatorClient]);
|
|
192
|
+
const localCoordinatorAttachmentEnabled = shouldAttachLocalSyncCoordinator({
|
|
193
|
+
runtimeMode,
|
|
194
|
+
});
|
|
195
|
+
const localCoordinator = useLocalSyncCoordinatorSnapshot({
|
|
196
|
+
// Durable dispatch must be able to reattach after a local server restart
|
|
197
|
+
// even when the browser's derived auth state is stale. The coordinator
|
|
198
|
+
// route remains the authority and validates the session cookie itself.
|
|
199
|
+
enabled: localCoordinatorAttachmentEnabled,
|
|
200
|
+
workspaceId: currentWorkspaceId,
|
|
201
|
+
client: effectiveLocalCoordinatorClient,
|
|
202
|
+
});
|
|
203
|
+
const browserSyncAuthority = useMemo(() => resolveBrowserSyncAuthority({
|
|
204
|
+
enforcementEnabled: localCoordinatorBrowserAuthorityGateEnabled,
|
|
205
|
+
workspaceId: currentWorkspaceId,
|
|
206
|
+
phase: localCoordinator.phase,
|
|
207
|
+
snapshot: localCoordinator.snapshot,
|
|
208
|
+
}), [
|
|
209
|
+
currentWorkspaceId,
|
|
210
|
+
localCoordinator.phase,
|
|
211
|
+
localCoordinator.snapshot,
|
|
212
|
+
localCoordinatorBrowserAuthorityGateEnabled,
|
|
213
|
+
]);
|
|
214
|
+
// Durable dispatch, like every browser transfer, uses the permit-backed
|
|
215
|
+
// coordinator gateway and waits for an exact attached browser owner.
|
|
216
|
+
const localOutboxCoordinatorAuthority = useMemo(() => resolveBrowserSyncAuthority({
|
|
217
|
+
enforcementEnabled: true,
|
|
218
|
+
workspaceId: currentWorkspaceId,
|
|
219
|
+
phase: localCoordinator.phase,
|
|
220
|
+
snapshot: localCoordinator.snapshot,
|
|
221
|
+
}), [
|
|
222
|
+
currentWorkspaceId,
|
|
223
|
+
localCoordinator.phase,
|
|
224
|
+
localCoordinator.snapshot,
|
|
225
|
+
]);
|
|
226
|
+
const browserSyncAuthorityRef = useRef(browserSyncAuthority);
|
|
227
|
+
useLayoutEffect(() => {
|
|
228
|
+
browserSyncAuthorityRef.current = browserSyncAuthority;
|
|
229
|
+
}, [browserSyncAuthority]);
|
|
230
|
+
const isBrowserWorkspaceSyncAuthorized = useCallback(() => browserSyncAuthorityRef.current.browserSchedulingAllowed, []);
|
|
231
|
+
const { workspaceRetryAt, isWorkspaceRetryPending, workspacePushInFlightRef, workspacePullInFlightRef, workspaceLastPushedSignatureRef, workspacePendingSignatureRef, workspaceLastPushedTaskIdsRef, workspaceDeletedTaskIdsRef, workspaceDeletedTaskWatermarksRef, workspacePullCursorRef, clearWorkspaceRetry, scheduleWorkspaceRetry, persistWorkspaceSyncPatch, applyWorkspaceSyncPatchLocally, readWorkspaceSyncStateSnapshot, loadWorkspaceSyncState, applyWorkspaceSyncStateSnapshot: applyWorkspaceSyncStateSnapshotBase, saveWorkspaceCloudSyncSettings: saveWorkspaceCloudSyncSettingsBase, acquireWorkspaceSyncLease, releaseWorkspaceSyncLease, forceClearWorkspaceSyncLease, recordWorkspaceSyncCompletion, wasWorkspaceSyncOperationCompletedRecently } = useWorkspaceSyncController({
|
|
157
232
|
currentWorkspaceId,
|
|
158
233
|
setWorkspaceCloudSyncEnabled,
|
|
159
234
|
setWorkspaceSyncPhase,
|
|
160
235
|
setWorkspaceSyncSetupIntent,
|
|
161
236
|
setWorkspaceLastPullAt,
|
|
162
237
|
setWorkspaceLastPushAt,
|
|
163
|
-
setWorkspaceLastErrorMessage
|
|
238
|
+
setWorkspaceLastErrorMessage,
|
|
239
|
+
isWorkspaceOperationAuthorized: isBrowserWorkspaceSyncAuthorized,
|
|
164
240
|
});
|
|
165
241
|
const applyWorkspaceSyncStateSnapshot = useCallback((nextState) => {
|
|
166
242
|
if (nextState.phase === 'attach-cloud' || nextState.phase === 'provision-local') {
|
|
@@ -174,6 +250,8 @@ export function useSyncOrchestrator(input) {
|
|
|
174
250
|
}, [applyWorkspaceSyncStateSnapshotBase]);
|
|
175
251
|
const workspaceLastPushedWatermarksRef = useRef(new Map());
|
|
176
252
|
const workspaceLastPushedTaskChangeKeysRef = useRef(new Map());
|
|
253
|
+
const workspaceLastPushedTaskRelationshipChangeKeysRef = useRef(new Map());
|
|
254
|
+
const workspaceLastPushedTaxonomyChangeKeyRef = useRef('');
|
|
177
255
|
const workspaceLastPushedInitiativeIdsRef = useRef(new Set());
|
|
178
256
|
const workspaceLastPushedInitiativeWatermarksRef = useRef(new Map());
|
|
179
257
|
const workspaceLastPushedWorkstreamIdsRef = useRef(new Set());
|
|
@@ -191,6 +269,12 @@ export function useSyncOrchestrator(input) {
|
|
|
191
269
|
const workspaceLastPushedDocumentReviewCommentWatermarksRef = useRef(new Map());
|
|
192
270
|
const workspaceLastPushedAnnotatedAttachmentSessionIdsRef = useRef(new Set());
|
|
193
271
|
const workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef = useRef(new Map());
|
|
272
|
+
const workspaceLastPushedTaskforceAgentIdsRef = useRef(new Set());
|
|
273
|
+
const workspaceLastPushedTaskforceAgentWatermarksRef = useRef(new Map());
|
|
274
|
+
const workspaceLastPushedTaskforceAgentSkillIdsRef = useRef(new Set());
|
|
275
|
+
const workspaceLastPushedTaskforceAgentSkillWatermarksRef = useRef(new Map());
|
|
276
|
+
const workspaceLastPushedAgentConversationIdsRef = useRef(new Set());
|
|
277
|
+
const workspaceLastPushedAgentConversationWatermarksRef = useRef(new Map());
|
|
194
278
|
const workspaceLastPushedTaskEventWatermarksRef = useRef(new Map());
|
|
195
279
|
const hydrateWorkspacePushBaselines = useCallback((persisted) => {
|
|
196
280
|
if (!persisted)
|
|
@@ -198,6 +282,8 @@ export function useSyncOrchestrator(input) {
|
|
|
198
282
|
workspaceLastPushedTaskIdsRef.current = new Set(persisted.taskIds);
|
|
199
283
|
workspaceLastPushedWatermarksRef.current = persisted.taskWatermarks;
|
|
200
284
|
workspaceLastPushedTaskChangeKeysRef.current = persisted.taskChangeKeys || new Map();
|
|
285
|
+
workspaceLastPushedTaskRelationshipChangeKeysRef.current = persisted.taskRelationshipChangeKeys || new Map();
|
|
286
|
+
workspaceLastPushedTaxonomyChangeKeyRef.current = persisted.taxonomyChangeKey || '';
|
|
201
287
|
workspaceLastPushedInitiativeIdsRef.current = new Set(Array.from(persisted.initiativeWatermarks.keys()));
|
|
202
288
|
workspaceLastPushedInitiativeWatermarksRef.current = persisted.initiativeWatermarks;
|
|
203
289
|
workspaceLastPushedWorkstreamIdsRef.current = new Set(Array.from(persisted.workstreamWatermarks.keys()));
|
|
@@ -205,6 +291,12 @@ export function useSyncOrchestrator(input) {
|
|
|
205
291
|
workspaceLastPushedAiProfileIdsRef.current = new Set(Array.from(persisted.aiProfileWatermarks.keys()));
|
|
206
292
|
workspaceLastPushedAiProfileWatermarksRef.current = persisted.aiProfileWatermarks;
|
|
207
293
|
workspaceLastPushedAiProfileChangeKeysRef.current = persisted.aiProfileChangeKeys || new Map();
|
|
294
|
+
workspaceLastPushedTaskforceAgentIdsRef.current = new Set(Array.from((persisted.taskforceAgentWatermarks || new Map()).keys()));
|
|
295
|
+
workspaceLastPushedTaskforceAgentWatermarksRef.current = persisted.taskforceAgentWatermarks || new Map();
|
|
296
|
+
workspaceLastPushedTaskforceAgentSkillIdsRef.current = new Set(Array.from((persisted.taskforceAgentSkillWatermarks || new Map()).keys()));
|
|
297
|
+
workspaceLastPushedTaskforceAgentSkillWatermarksRef.current = persisted.taskforceAgentSkillWatermarks || new Map();
|
|
298
|
+
workspaceLastPushedAgentConversationIdsRef.current = new Set(Array.from((persisted.agentConversationWatermarks || new Map()).keys()));
|
|
299
|
+
workspaceLastPushedAgentConversationWatermarksRef.current = persisted.agentConversationWatermarks || new Map();
|
|
208
300
|
workspaceLastPushedDocumentPathsRef.current = new Set(Array.from(persisted.documentWatermarks.keys()));
|
|
209
301
|
workspaceLastPushedDocumentWatermarksRef.current = persisted.documentWatermarks;
|
|
210
302
|
workspaceLastPushedAssetPathsRef.current = new Set(Array.from(persisted.assetWatermarks.keys()));
|
|
@@ -223,10 +315,15 @@ export function useSyncOrchestrator(input) {
|
|
|
223
315
|
taskIds: workspaceLastPushedTaskIdsRef.current,
|
|
224
316
|
taskWatermarks: workspaceLastPushedWatermarksRef.current,
|
|
225
317
|
taskChangeKeys: workspaceLastPushedTaskChangeKeysRef.current,
|
|
318
|
+
taskRelationshipChangeKeys: workspaceLastPushedTaskRelationshipChangeKeysRef.current,
|
|
319
|
+
taxonomyChangeKey: workspaceLastPushedTaxonomyChangeKeyRef.current,
|
|
226
320
|
initiativeWatermarks: workspaceLastPushedInitiativeWatermarksRef.current,
|
|
227
321
|
workstreamWatermarks: workspaceLastPushedWorkstreamWatermarksRef.current,
|
|
228
322
|
aiProfileWatermarks: workspaceLastPushedAiProfileWatermarksRef.current,
|
|
229
323
|
aiProfileChangeKeys: workspaceLastPushedAiProfileChangeKeysRef.current,
|
|
324
|
+
taskforceAgentWatermarks: workspaceLastPushedTaskforceAgentWatermarksRef.current,
|
|
325
|
+
taskforceAgentSkillWatermarks: workspaceLastPushedTaskforceAgentSkillWatermarksRef.current,
|
|
326
|
+
agentConversationWatermarks: workspaceLastPushedAgentConversationWatermarksRef.current,
|
|
230
327
|
documentWatermarks: workspaceLastPushedDocumentWatermarksRef.current,
|
|
231
328
|
assetWatermarks: workspaceLastPushedAssetWatermarksRef.current,
|
|
232
329
|
documentReviewSessionWatermarks: workspaceLastPushedDocumentReviewSessionWatermarksRef.current,
|
|
@@ -234,14 +331,44 @@ export function useSyncOrchestrator(input) {
|
|
|
234
331
|
annotatedAttachmentSessionWatermarks: workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef.current,
|
|
235
332
|
taskEventWatermarks: workspaceLastPushedTaskEventWatermarksRef.current,
|
|
236
333
|
}), []);
|
|
334
|
+
const refreshWorkspaceAiProfilePushBaselineFromPersistence = useCallback(() => {
|
|
335
|
+
if (workspaceBaselineResetReasonRef.current === 'repair-reset'
|
|
336
|
+
|| workspaceBaselineResetReasonRef.current === 'storage-write-failed')
|
|
337
|
+
return false;
|
|
338
|
+
const persisted = readPersistedSyncWatermarks(currentWorkspaceId, taxonomyStateFingerprint);
|
|
339
|
+
if (!persisted || persisted.aiProfileWatermarks.size === 0)
|
|
340
|
+
return false;
|
|
341
|
+
workspaceLastPushedAiProfileIdsRef.current = new Set(persisted.aiProfileWatermarks.keys());
|
|
342
|
+
workspaceLastPushedAiProfileWatermarksRef.current = new Map(persisted.aiProfileWatermarks);
|
|
343
|
+
workspaceLastPushedAiProfileChangeKeysRef.current = new Map(persisted.aiProfileChangeKeys || []);
|
|
344
|
+
return true;
|
|
345
|
+
}, [currentWorkspaceId, taxonomyStateFingerprint]);
|
|
237
346
|
const workspaceStartupRepairRanRef = useRef(false);
|
|
238
347
|
const workspaceStartupFullReconcileRanRef = useRef(false);
|
|
348
|
+
const workspaceStartupFullReconcileRequestedRef = useRef(false);
|
|
239
349
|
const workspaceRepairModeRef = useRef(false);
|
|
350
|
+
const workspacePullAfterPushRequestedRef = useRef(false);
|
|
240
351
|
const workspaceAttachBootstrapBaselineSignatureRef = useRef('');
|
|
241
352
|
const workspaceCaptureAttachBootstrapBaselineRef = useRef(false);
|
|
242
353
|
const workspaceDocumentsRefreshIntervalMs = 30_000;
|
|
243
354
|
const workspacePullIntervalMs = realtimeSyncEnabled ? 30_000 : 15_000;
|
|
244
355
|
const workspacePushWatchdogIntervalMs = Math.max(30_000, workspacePullIntervalMs);
|
|
356
|
+
const [workspaceSyncHealthDeadlineNowMs, setWorkspaceSyncHealthDeadlineNowMs] = useState(null);
|
|
357
|
+
useEffect(() => {
|
|
358
|
+
const nowMs = Date.now();
|
|
359
|
+
if (runtimeMode !== 'local' || !workspaceCloudSyncEnabled || workspaceSyncPhase !== 'active')
|
|
360
|
+
return;
|
|
361
|
+
const lastPullMs = workspaceLastPullAt ? Date.parse(workspaceLastPullAt) : NaN;
|
|
362
|
+
if (!Number.isFinite(lastPullMs))
|
|
363
|
+
return;
|
|
364
|
+
const remainingMs = lastPullMs + WORKSPACE_SYNC_PULL_FRESHNESS_WINDOW_MS - nowMs;
|
|
365
|
+
if (remainingMs <= 0)
|
|
366
|
+
return;
|
|
367
|
+
const timeoutId = window.setTimeout(() => {
|
|
368
|
+
setWorkspaceSyncHealthDeadlineNowMs(Date.now());
|
|
369
|
+
}, remainingMs + 50);
|
|
370
|
+
return () => window.clearTimeout(timeoutId);
|
|
371
|
+
}, [runtimeMode, workspaceCloudSyncEnabled, workspaceSyncPhase, workspaceLastPullAt]);
|
|
245
372
|
const workspaceLastSuccessfulSyncAt = useMemo(() => {
|
|
246
373
|
const pullMs = workspaceLastPullAt ? Date.parse(workspaceLastPullAt) : NaN;
|
|
247
374
|
const pushMs = workspaceLastPushAt ? Date.parse(workspaceLastPushAt) : NaN;
|
|
@@ -254,19 +381,19 @@ export function useSyncOrchestrator(input) {
|
|
|
254
381
|
return workspaceLastPushAt;
|
|
255
382
|
return null;
|
|
256
383
|
}, [workspaceLastPullAt, workspaceLastPushAt]);
|
|
257
|
-
const workspaceSyncPresentation =
|
|
384
|
+
const workspaceSyncPresentation = resolveWorkspaceSyncPresentation({
|
|
258
385
|
enabled: workspaceCloudSyncEnabled,
|
|
259
386
|
phase: workspaceSyncPhase,
|
|
260
387
|
busy: workspaceSyncBusy,
|
|
261
388
|
retryAt: workspaceRetryAt,
|
|
262
|
-
lastErrorMessage: workspaceLastErrorMessage
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
389
|
+
lastErrorMessage: workspaceLastErrorMessage,
|
|
390
|
+
lastErrorAt: workspaceLastErrorAt,
|
|
391
|
+
lastPullAt: workspaceLastPullAt,
|
|
392
|
+
lastPushAt: workspaceLastPushAt,
|
|
393
|
+
nowMs: workspaceSyncHealthDeadlineNowMs ?? Date.now(),
|
|
394
|
+
pendingChanges: workspaceSyncPendingChanges,
|
|
395
|
+
durableOutbox: workspaceSyncV3OutboxStatus,
|
|
396
|
+
});
|
|
270
397
|
const workspaceSyncStatus = workspaceSyncPresentation.status;
|
|
271
398
|
const workspaceSyncSummary = workspaceSyncPresentation.summary;
|
|
272
399
|
const workspaceSyncRecommendedAction = workspaceSyncPresentation.recommendedAction;
|
|
@@ -482,6 +609,7 @@ export function useSyncOrchestrator(input) {
|
|
|
482
609
|
workspaceSyncAssetsFingerprintRef.current = '';
|
|
483
610
|
workspaceSyncDocumentReviewSessionsFingerprintRef.current = '';
|
|
484
611
|
workspaceSyncAnnotatedAttachmentSessionsFingerprintRef.current = '';
|
|
612
|
+
workspaceSyncTaskforceAgentsFingerprintRef.current = '';
|
|
485
613
|
workspaceAttachBootstrapBaselineSignatureRef.current = '';
|
|
486
614
|
workspaceCaptureAttachBootstrapBaselineRef.current = false;
|
|
487
615
|
setWorkspaceSyncMarkdownDocuments([]);
|
|
@@ -498,6 +626,11 @@ export function useSyncOrchestrator(input) {
|
|
|
498
626
|
workspaceSyncAnnotatedAttachmentSessionsRef.current = [];
|
|
499
627
|
setWorkspaceSyncAnnotatedAttachmentSessions([]);
|
|
500
628
|
setWorkspaceSyncAnnotatedAttachmentSessionsFingerprint('');
|
|
629
|
+
workspaceSyncTaskforceAgentsRef.current = [];
|
|
630
|
+
workspaceSyncAgentRolesRef.current = [];
|
|
631
|
+
workspaceSyncAgentConversationsRef.current = [];
|
|
632
|
+
setWorkspaceSyncTaskforceAgents([]);
|
|
633
|
+
setWorkspaceSyncTaskforceAgentsFingerprint('');
|
|
501
634
|
setWorkspaceSyncReferenceSnapshotStatus(EMPTY_WORKSPACE_SYNC_REFERENCE_SNAPSHOT_STATUS);
|
|
502
635
|
setWorkspaceLastErrorMessage(null);
|
|
503
636
|
setWorkspaceLastErrorAt(null);
|
|
@@ -509,6 +642,8 @@ export function useSyncOrchestrator(input) {
|
|
|
509
642
|
// changes that happened while the app was closed.
|
|
510
643
|
workspaceLastPushedWatermarksRef.current = new Map();
|
|
511
644
|
workspaceLastPushedTaskChangeKeysRef.current = new Map();
|
|
645
|
+
workspaceLastPushedTaskRelationshipChangeKeysRef.current = new Map();
|
|
646
|
+
workspaceLastPushedTaxonomyChangeKeyRef.current = '';
|
|
512
647
|
workspaceLastPushedInitiativeIdsRef.current = new Set();
|
|
513
648
|
workspaceLastPushedInitiativeWatermarksRef.current = new Map();
|
|
514
649
|
workspaceLastPushedWorkstreamIdsRef.current = new Set();
|
|
@@ -526,6 +661,12 @@ export function useSyncOrchestrator(input) {
|
|
|
526
661
|
workspaceLastPushedDocumentReviewCommentWatermarksRef.current = new Map();
|
|
527
662
|
workspaceLastPushedAnnotatedAttachmentSessionIdsRef.current = new Set();
|
|
528
663
|
workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef.current = new Map();
|
|
664
|
+
workspaceLastPushedTaskforceAgentIdsRef.current = new Set();
|
|
665
|
+
workspaceLastPushedTaskforceAgentWatermarksRef.current = new Map();
|
|
666
|
+
workspaceLastPushedTaskforceAgentSkillIdsRef.current = new Set();
|
|
667
|
+
workspaceLastPushedTaskforceAgentSkillWatermarksRef.current = new Map();
|
|
668
|
+
workspaceLastPushedAgentConversationIdsRef.current = new Set();
|
|
669
|
+
workspaceLastPushedAgentConversationWatermarksRef.current = new Map();
|
|
529
670
|
workspaceLastPushedTaskEventWatermarksRef.current = new Map();
|
|
530
671
|
workspaceStartupFullReconcileRanRef.current = Boolean(readWorkspaceSyncStateSnapshot().startupFullReconcileCompletedAt);
|
|
531
672
|
workspaceFullReconcileInFlightRef.current = false;
|
|
@@ -584,6 +725,7 @@ export function useSyncOrchestrator(input) {
|
|
|
584
725
|
workspacePushInFlightRef,
|
|
585
726
|
bootstrapPhaseStartedAtRef,
|
|
586
727
|
bootstrapLastProgressAtRef,
|
|
728
|
+
isExecutionAuthorized: isBrowserWorkspaceSyncAuthorized,
|
|
587
729
|
setWorkspaceLastErrorMessage: (value) => setWorkspaceLastErrorMessage(value),
|
|
588
730
|
setWorkspaceLastErrorAt: (value) => setWorkspaceLastErrorAt(value),
|
|
589
731
|
setUserGlobalSyncStatus,
|
|
@@ -597,26 +739,9 @@ export function useSyncOrchestrator(input) {
|
|
|
597
739
|
workspaceSyncPhase,
|
|
598
740
|
persistWorkspaceSyncPatchSafely,
|
|
599
741
|
workspacePullInFlightRef,
|
|
600
|
-
workspacePushInFlightRef
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
return ensureCloudWorkspaceReadyForSyncService({
|
|
604
|
-
cloudAuthConfigured,
|
|
605
|
-
runtimeMode,
|
|
606
|
-
isAuthenticated,
|
|
607
|
-
resolveCloudAuthUrl,
|
|
608
|
-
workspaceId: currentWorkspaceId,
|
|
609
|
-
workspaceName: projectName || currentWorkspaceId,
|
|
610
|
-
allowProvisionOnMismatch: workspaceSyncPhase !== 'attach-cloud'
|
|
611
|
-
});
|
|
612
|
-
}, [
|
|
613
|
-
cloudAuthConfigured,
|
|
614
|
-
runtimeMode,
|
|
615
|
-
isAuthenticated,
|
|
616
|
-
resolveCloudAuthUrl,
|
|
617
|
-
currentWorkspaceId,
|
|
618
|
-
projectName,
|
|
619
|
-
workspaceSyncPhase
|
|
742
|
+
workspacePushInFlightRef,
|
|
743
|
+
browserSyncAuthority.authorityEpoch,
|
|
744
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
620
745
|
]);
|
|
621
746
|
useEffect(() => {
|
|
622
747
|
workspaceTasksRef.current = tasks || [];
|
|
@@ -625,6 +750,18 @@ export function useSyncOrchestrator(input) {
|
|
|
625
750
|
workspaceArchivedTasksRef.current = archivedTasks || [];
|
|
626
751
|
}, [archivedTasks]);
|
|
627
752
|
useEffect(() => {
|
|
753
|
+
let cancelled = false;
|
|
754
|
+
void fetch('/api/taskforce/task-relationships', { method: 'GET', credentials: 'include' })
|
|
755
|
+
.then((response) => response.ok ? response.json() : null)
|
|
756
|
+
.then((payload) => {
|
|
757
|
+
if (!cancelled && Array.isArray(payload?.relationships))
|
|
758
|
+
updateWorkspaceTaskRelationships(payload.relationships);
|
|
759
|
+
})
|
|
760
|
+
.catch(() => undefined);
|
|
761
|
+
return () => { cancelled = true; };
|
|
762
|
+
}, [archivedTasks, currentWorkspaceId, tasks, updateWorkspaceTaskRelationships]);
|
|
763
|
+
useEffect(() => {
|
|
764
|
+
workspaceDeletedTasksRef.current = deletedTasks || [];
|
|
628
765
|
workspaceDeletedTaskIdsRef.current = new Set((deletedTasks || [])
|
|
629
766
|
.map((entry) => String(entry?.taskId || '').trim())
|
|
630
767
|
.filter((taskId) => taskId.length > 0));
|
|
@@ -641,32 +778,161 @@ export function useSyncOrchestrator(input) {
|
|
|
641
778
|
useEffect(() => {
|
|
642
779
|
workspaceWorkstreamsRef.current = workstreams || [];
|
|
643
780
|
}, [workstreams]);
|
|
781
|
+
useEffect(() => {
|
|
782
|
+
workspaceTaxonomyStateRef.current = taxonomyState;
|
|
783
|
+
workspaceTaxonomiesRef.current = taxonomies || [];
|
|
784
|
+
}, [taxonomies, taxonomyState]);
|
|
644
785
|
const workspaceForceFullAiProfilePushRef = useRef(false);
|
|
645
786
|
const workspaceFullReconcileInFlightRef = useRef(false);
|
|
646
|
-
const
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
787
|
+
const workspaceSyncEngineRuntime = useMemo(() => ({
|
|
788
|
+
repairMode: workspaceRepairModeRef,
|
|
789
|
+
forceFullAiProfilePush: workspaceForceFullAiProfilePushRef,
|
|
790
|
+
pushInFlight: workspacePushInFlightRef,
|
|
791
|
+
pullInFlight: workspacePullInFlightRef,
|
|
792
|
+
pullAfterPushRequested: workspacePullAfterPushRequestedRef,
|
|
793
|
+
pendingPushReplay: workspacePendingPushReplayRef,
|
|
794
|
+
blockedPushSignature: workspaceBlockedPushSignatureRef,
|
|
795
|
+
lastPushedSignature: workspaceLastPushedSignatureRef,
|
|
796
|
+
pendingSignature: workspacePendingSignatureRef,
|
|
797
|
+
lastPushedTaskIds: workspaceLastPushedTaskIdsRef,
|
|
798
|
+
deletedTaskIds: workspaceDeletedTaskIdsRef,
|
|
799
|
+
deletedTaskWatermarks: workspaceDeletedTaskWatermarksRef,
|
|
800
|
+
pullCursor: workspacePullCursorRef,
|
|
801
|
+
lastPushedWatermarks: workspaceLastPushedWatermarksRef,
|
|
802
|
+
lastPushedTaskChangeKeys: workspaceLastPushedTaskChangeKeysRef,
|
|
803
|
+
lastPushedTaskRelationshipChangeKeys: workspaceLastPushedTaskRelationshipChangeKeysRef,
|
|
804
|
+
lastPushedTaxonomyChangeKey: workspaceLastPushedTaxonomyChangeKeyRef,
|
|
805
|
+
lastPushedInitiativeIds: workspaceLastPushedInitiativeIdsRef,
|
|
806
|
+
lastPushedInitiativeWatermarks: workspaceLastPushedInitiativeWatermarksRef,
|
|
807
|
+
lastPushedWorkstreamIds: workspaceLastPushedWorkstreamIdsRef,
|
|
808
|
+
lastPushedWorkstreamWatermarks: workspaceLastPushedWorkstreamWatermarksRef,
|
|
809
|
+
lastPushedAiProfileIds: workspaceLastPushedAiProfileIdsRef,
|
|
810
|
+
lastPushedAiProfileWatermarks: workspaceLastPushedAiProfileWatermarksRef,
|
|
811
|
+
lastPushedAiProfileChangeKeys: workspaceLastPushedAiProfileChangeKeysRef,
|
|
812
|
+
lastPushedDocumentPaths: workspaceLastPushedDocumentPathsRef,
|
|
813
|
+
lastPushedDocumentWatermarks: workspaceLastPushedDocumentWatermarksRef,
|
|
814
|
+
lastPushedAssetPaths: workspaceLastPushedAssetPathsRef,
|
|
815
|
+
lastPushedAssetWatermarks: workspaceLastPushedAssetWatermarksRef,
|
|
816
|
+
lastPushedDocumentReviewSessionIds: workspaceLastPushedDocumentReviewSessionIdsRef,
|
|
817
|
+
lastPushedDocumentReviewSessionWatermarks: workspaceLastPushedDocumentReviewSessionWatermarksRef,
|
|
818
|
+
lastPushedDocumentReviewCommentIds: workspaceLastPushedDocumentReviewCommentIdsRef,
|
|
819
|
+
lastPushedDocumentReviewCommentWatermarks: workspaceLastPushedDocumentReviewCommentWatermarksRef,
|
|
820
|
+
lastPushedAnnotatedAttachmentSessionIds: workspaceLastPushedAnnotatedAttachmentSessionIdsRef,
|
|
821
|
+
lastPushedAnnotatedAttachmentSessionWatermarks: workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef,
|
|
822
|
+
lastPushedTaskforceAgentIds: workspaceLastPushedTaskforceAgentIdsRef,
|
|
823
|
+
lastPushedTaskforceAgentWatermarks: workspaceLastPushedTaskforceAgentWatermarksRef,
|
|
824
|
+
lastPushedTaskforceAgentSkillIds: workspaceLastPushedTaskforceAgentSkillIdsRef,
|
|
825
|
+
lastPushedTaskforceAgentSkillWatermarks: workspaceLastPushedTaskforceAgentSkillWatermarksRef,
|
|
826
|
+
lastPushedAgentConversationIds: workspaceLastPushedAgentConversationIdsRef,
|
|
827
|
+
lastPushedAgentConversationWatermarks: workspaceLastPushedAgentConversationWatermarksRef,
|
|
828
|
+
lastPushedTaskEventWatermarks: workspaceLastPushedTaskEventWatermarksRef,
|
|
829
|
+
baselineResetReason: workspaceBaselineResetReasonRef,
|
|
830
|
+
captureAttachBootstrapBaseline: workspaceCaptureAttachBootstrapBaselineRef,
|
|
831
|
+
attachBootstrapBaselineSignature: workspaceAttachBootstrapBaselineSignatureRef,
|
|
832
|
+
startupRepairRan: workspaceStartupRepairRanRef,
|
|
833
|
+
startupFullReconcileRan: workspaceStartupFullReconcileRanRef,
|
|
834
|
+
startupFullReconcileRequested: workspaceStartupFullReconcileRequestedRef,
|
|
835
|
+
fullReconcileInFlight: workspaceFullReconcileInFlightRef,
|
|
836
|
+
lastBootstrapPhase: lastBootstrapPhaseRef,
|
|
837
|
+
bootstrapPhaseStartedAtMs: bootstrapPhaseStartedAtRef,
|
|
838
|
+
bootstrapLastProgressAtMs: bootstrapLastProgressAtRef,
|
|
839
|
+
realtimeSuppressedEventQueue: realtimeSuppressedEventQueueRef,
|
|
840
|
+
}), []);
|
|
841
|
+
const workspaceSyncEngineLocalServices = useMemo(() => createBrowserWorkspaceSyncEngineLocalServices(), []);
|
|
842
|
+
const workspaceSyncRemoteServicesSelectionRef = useRef(null);
|
|
843
|
+
const workspaceSyncRemoteServicesSelection = useMemo(() => selectBrowserSyncRemoteServices({
|
|
844
|
+
workspaceId: currentWorkspaceId,
|
|
845
|
+
phase: localCoordinator.phase,
|
|
846
|
+
snapshot: localCoordinator.snapshot,
|
|
847
|
+
authority: browserSyncAuthority,
|
|
848
|
+
client: effectiveLocalCoordinatorClient,
|
|
849
|
+
isSelectionAuthorized: (selection) => (workspaceSyncRemoteServicesSelectionRef.current === selection
|
|
850
|
+
&& isBrowserWorkspaceSyncAuthorized()),
|
|
851
|
+
}), [
|
|
852
|
+
browserSyncAuthority.authorityEpoch,
|
|
853
|
+
browserSyncAuthority.browserSchedulingAllowed,
|
|
854
|
+
browserSyncAuthority.reason,
|
|
855
|
+
currentWorkspaceId,
|
|
856
|
+
effectiveLocalCoordinatorClient,
|
|
857
|
+
localCoordinator.phase,
|
|
858
|
+
localCoordinator.snapshot?.credential.coordinatorGeneration,
|
|
859
|
+
localCoordinator.snapshot?.credential.status,
|
|
860
|
+
localCoordinator.snapshot?.credential.workspaceId,
|
|
861
|
+
localCoordinator.snapshot?.serverInstanceId,
|
|
862
|
+
localCoordinator.snapshot?.state.activeWorkspaceId,
|
|
863
|
+
localCoordinator.snapshot?.state.coordinatorGeneration,
|
|
864
|
+
localCoordinator.snapshot?.state.ownershipMode,
|
|
865
|
+
localCoordinator.snapshot?.state.transitionState,
|
|
866
|
+
localCoordinatorBrowserAuthorityGateEnabled,
|
|
867
|
+
]);
|
|
868
|
+
const workspaceSyncEngineRemoteServices = workspaceSyncRemoteServicesSelection.remoteServices;
|
|
869
|
+
useLayoutEffect(() => {
|
|
870
|
+
workspaceSyncRemoteServicesSelectionRef.current =
|
|
871
|
+
workspaceSyncRemoteServicesSelection;
|
|
872
|
+
return () => {
|
|
873
|
+
if (workspaceSyncRemoteServicesSelectionRef.current
|
|
874
|
+
=== workspaceSyncRemoteServicesSelection) {
|
|
875
|
+
workspaceSyncRemoteServicesSelectionRef.current = null;
|
|
876
|
+
}
|
|
877
|
+
};
|
|
878
|
+
}, [workspaceSyncRemoteServicesSelection]);
|
|
879
|
+
const ensureCloudWorkspaceReadyForSync = useCallback(async () => {
|
|
880
|
+
const capturedSelection = workspaceSyncRemoteServicesSelection;
|
|
881
|
+
const currentSelection = workspaceSyncRemoteServicesSelectionRef.current
|
|
882
|
+
?? { mode: 'blocked', remoteServices: null };
|
|
883
|
+
if (!workspaceSyncEngineRemoteServices
|
|
884
|
+
|| !isBrowserSyncRemoteServicesSelectionAuthorized({
|
|
885
|
+
current: currentSelection,
|
|
886
|
+
captured: capturedSelection,
|
|
887
|
+
browserSchedulingAllowed: isBrowserWorkspaceSyncAuthorized(),
|
|
888
|
+
})) {
|
|
889
|
+
return {
|
|
890
|
+
success: false,
|
|
891
|
+
statusCode: 409,
|
|
892
|
+
transient: true,
|
|
893
|
+
error: 'Browser workspace sync authority changed before cloud readiness validation.',
|
|
894
|
+
};
|
|
895
|
+
}
|
|
896
|
+
return ensureCloudWorkspaceReadyForSyncService({
|
|
897
|
+
cloudAuthConfigured,
|
|
898
|
+
runtimeMode,
|
|
899
|
+
isAuthenticated,
|
|
900
|
+
resolveCloudAuthUrl,
|
|
901
|
+
workspaceId: currentWorkspaceId,
|
|
902
|
+
workspaceName: projectName || currentWorkspaceId,
|
|
903
|
+
allowProvisionOnMismatch: workspaceSyncPhase !== 'attach-cloud',
|
|
904
|
+
remoteServices: workspaceSyncEngineRemoteServices,
|
|
905
|
+
});
|
|
906
|
+
}, [
|
|
907
|
+
cloudAuthConfigured,
|
|
908
|
+
currentWorkspaceId,
|
|
909
|
+
isAuthenticated,
|
|
910
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
911
|
+
projectName,
|
|
912
|
+
resolveCloudAuthUrl,
|
|
913
|
+
runtimeMode,
|
|
914
|
+
workspaceSyncEngineRemoteServices,
|
|
915
|
+
workspaceSyncPhase,
|
|
916
|
+
workspaceSyncRemoteServicesSelection,
|
|
917
|
+
]);
|
|
918
|
+
const currentWorkspaceIdRef = useRef(currentWorkspaceId);
|
|
919
|
+
currentWorkspaceIdRef.current = currentWorkspaceId;
|
|
920
|
+
const createWorkspaceSyncV2Snapshot = useCallback(() => {
|
|
921
|
+
// Read every collection from refs once so payload and signature construction
|
|
922
|
+
// share one coherent browser snapshot even after an immediately-preceding refresh.
|
|
923
|
+
return createWorkspaceSyncV2FrozenSnapshot({
|
|
924
|
+
workspaceId: currentWorkspaceIdRef.current,
|
|
652
925
|
tasks: workspaceTasksRef.current,
|
|
653
926
|
archivedTasks: workspaceArchivedTasksRef.current,
|
|
654
|
-
|
|
655
|
-
|
|
927
|
+
taskRelationships: workspaceTaskRelationshipsRef.current,
|
|
928
|
+
deletedTasks: workspaceDeletedTasksRef.current,
|
|
656
929
|
pendingDeletedTaskIds: workspaceDeletedTaskIdsRef.current,
|
|
657
930
|
pendingDeletedTaskWatermarks: workspaceDeletedTaskWatermarksRef.current,
|
|
658
931
|
initiatives: workspaceInitiativesRef.current,
|
|
659
932
|
workstreams: workspaceWorkstreamsRef.current,
|
|
660
|
-
taxonomies:
|
|
661
|
-
taxonomyState,
|
|
662
|
-
lastPushedInitiativeIds: workspaceLastPushedInitiativeIdsRef.current,
|
|
663
|
-
lastPushedInitiativeWatermarks: workspaceLastPushedInitiativeWatermarksRef.current,
|
|
664
|
-
lastPushedWorkstreamIds: workspaceLastPushedWorkstreamIdsRef.current,
|
|
665
|
-
lastPushedWorkstreamWatermarks: workspaceLastPushedWorkstreamWatermarksRef.current,
|
|
933
|
+
taxonomies: workspaceTaxonomiesRef.current,
|
|
934
|
+
taxonomyState: workspaceTaxonomyStateRef.current,
|
|
666
935
|
aiProfiles: workspaceSyncAiProfilesRef.current,
|
|
667
|
-
lastPushedAiProfileIds: forceAllAiProfiles ? new Set() : workspaceLastPushedAiProfileIdsRef.current,
|
|
668
|
-
lastPushedAiProfileWatermarks: forceAllAiProfiles ? new Map() : workspaceLastPushedAiProfileWatermarksRef.current,
|
|
669
|
-
lastPushedAiProfileChangeKeys: forceAllAiProfiles ? new Map() : workspaceLastPushedAiProfileChangeKeysRef.current,
|
|
670
936
|
documents: workspaceSyncMarkdownDocumentsRef.current,
|
|
671
937
|
assets: workspaceSyncAssetsRef.current,
|
|
672
938
|
currentDocumentPaths: workspaceSyncKnownDocumentPathsRef.current,
|
|
@@ -674,22 +940,54 @@ export function useSyncOrchestrator(input) {
|
|
|
674
940
|
documentReviewSessions: workspaceSyncDocumentReviewSessionsRef.current,
|
|
675
941
|
documentReviewComments: workspaceSyncDocumentReviewCommentsRef.current,
|
|
676
942
|
annotatedAttachmentSessions: workspaceSyncAnnotatedAttachmentSessionsRef.current,
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
lastPushedDocumentReviewSessionIds: workspaceLastPushedDocumentReviewSessionIdsRef.current,
|
|
682
|
-
lastPushedDocumentReviewSessionWatermarks: workspaceLastPushedDocumentReviewSessionWatermarksRef.current,
|
|
683
|
-
lastPushedDocumentReviewCommentIds: workspaceLastPushedDocumentReviewCommentIdsRef.current,
|
|
684
|
-
lastPushedDocumentReviewCommentWatermarks: workspaceLastPushedDocumentReviewCommentWatermarksRef.current,
|
|
685
|
-
lastPushedAnnotatedAttachmentSessionIds: workspaceLastPushedAnnotatedAttachmentSessionIdsRef.current,
|
|
686
|
-
lastPushedAnnotatedAttachmentSessionWatermarks: workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef.current,
|
|
687
|
-
lastPushedTaskEventWatermarks: workspaceLastPushedTaskEventWatermarksRef.current,
|
|
688
|
-
baselineResetReason: workspaceBaselineResetReasonRef.current,
|
|
689
|
-
lastPushedWatermarks: workspaceLastPushedWatermarksRef.current,
|
|
690
|
-
lastPushedTaskChangeKeys: workspaceLastPushedTaskChangeKeysRef.current
|
|
943
|
+
taskforceAgents: workspaceSyncTaskforceAgentsRef.current,
|
|
944
|
+
agentRoles: workspaceSyncAgentRolesRef.current,
|
|
945
|
+
taskforceAgentSkills: workspaceSyncTaskforceAgentSkillsRef.current,
|
|
946
|
+
agentConversations: workspaceSyncAgentConversationsRef.current,
|
|
691
947
|
});
|
|
692
|
-
}, [
|
|
948
|
+
}, []);
|
|
949
|
+
const createWorkspaceSyncV2Candidate = useCallback((options) => {
|
|
950
|
+
const snapshot = createWorkspaceSyncV2Snapshot();
|
|
951
|
+
return buildWorkspaceSyncV2Candidate({
|
|
952
|
+
snapshot,
|
|
953
|
+
forceAllAiProfiles: options?.forceAllAiProfiles === true,
|
|
954
|
+
baseline: {
|
|
955
|
+
lastPushedTaskIds: workspaceLastPushedTaskIdsRef.current,
|
|
956
|
+
lastPushedWatermarks: workspaceLastPushedWatermarksRef.current,
|
|
957
|
+
lastPushedTaskChangeKeys: workspaceLastPushedTaskChangeKeysRef.current,
|
|
958
|
+
lastPushedTaskRelationshipChangeKeys: workspaceLastPushedTaskRelationshipChangeKeysRef.current,
|
|
959
|
+
lastPushedTaxonomyChangeKey: workspaceLastPushedTaxonomyChangeKeyRef.current,
|
|
960
|
+
lastPushedInitiativeIds: workspaceLastPushedInitiativeIdsRef.current,
|
|
961
|
+
lastPushedInitiativeWatermarks: workspaceLastPushedInitiativeWatermarksRef.current,
|
|
962
|
+
lastPushedWorkstreamIds: workspaceLastPushedWorkstreamIdsRef.current,
|
|
963
|
+
lastPushedWorkstreamWatermarks: workspaceLastPushedWorkstreamWatermarksRef.current,
|
|
964
|
+
lastPushedAiProfileIds: workspaceLastPushedAiProfileIdsRef.current,
|
|
965
|
+
lastPushedAiProfileWatermarks: workspaceLastPushedAiProfileWatermarksRef.current,
|
|
966
|
+
lastPushedAiProfileChangeKeys: workspaceLastPushedAiProfileChangeKeysRef.current,
|
|
967
|
+
lastPushedDocumentPaths: workspaceLastPushedDocumentPathsRef.current,
|
|
968
|
+
lastPushedDocumentWatermarks: workspaceLastPushedDocumentWatermarksRef.current,
|
|
969
|
+
lastPushedAssetPaths: workspaceLastPushedAssetPathsRef.current,
|
|
970
|
+
lastPushedAssetWatermarks: workspaceLastPushedAssetWatermarksRef.current,
|
|
971
|
+
lastPushedDocumentReviewSessionIds: workspaceLastPushedDocumentReviewSessionIdsRef.current,
|
|
972
|
+
lastPushedDocumentReviewSessionWatermarks: workspaceLastPushedDocumentReviewSessionWatermarksRef.current,
|
|
973
|
+
lastPushedDocumentReviewCommentIds: workspaceLastPushedDocumentReviewCommentIdsRef.current,
|
|
974
|
+
lastPushedDocumentReviewCommentWatermarks: workspaceLastPushedDocumentReviewCommentWatermarksRef.current,
|
|
975
|
+
lastPushedAnnotatedAttachmentSessionIds: workspaceLastPushedAnnotatedAttachmentSessionIdsRef.current,
|
|
976
|
+
lastPushedAnnotatedAttachmentSessionWatermarks: workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef.current,
|
|
977
|
+
lastPushedTaskforceAgentIds: workspaceLastPushedTaskforceAgentIdsRef.current,
|
|
978
|
+
lastPushedTaskforceAgentWatermarks: workspaceLastPushedTaskforceAgentWatermarksRef.current,
|
|
979
|
+
lastPushedTaskforceAgentSkillIds: workspaceLastPushedTaskforceAgentSkillIdsRef.current,
|
|
980
|
+
lastPushedTaskforceAgentSkillWatermarks: workspaceLastPushedTaskforceAgentSkillWatermarksRef.current,
|
|
981
|
+
lastPushedAgentConversationIds: workspaceLastPushedAgentConversationIdsRef.current,
|
|
982
|
+
lastPushedAgentConversationWatermarks: workspaceLastPushedAgentConversationWatermarksRef.current,
|
|
983
|
+
lastPushedTaskEventWatermarks: workspaceLastPushedTaskEventWatermarksRef.current,
|
|
984
|
+
baselineResetReason: workspaceBaselineResetReasonRef.current,
|
|
985
|
+
},
|
|
986
|
+
});
|
|
987
|
+
}, [createWorkspaceSyncV2Snapshot]);
|
|
988
|
+
const buildWorkspaceSyncPayload = useCallback((options) => {
|
|
989
|
+
return createWorkspaceSyncV2Candidate(options).payload;
|
|
990
|
+
}, [createWorkspaceSyncV2Candidate]);
|
|
693
991
|
const reportSyncEvent = useCallback((workspaceId, event) => {
|
|
694
992
|
if (runtimeMode !== 'local')
|
|
695
993
|
return;
|
|
@@ -723,25 +1021,8 @@ export function useSyncOrchestrator(input) {
|
|
|
723
1021
|
}
|
|
724
1022
|
}, [runtimeMode]);
|
|
725
1023
|
const buildWorkspaceSyncSignature = useCallback(() => {
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
return buildWorkspaceSyncSignatureModel({
|
|
729
|
-
workspaceId: currentWorkspaceId,
|
|
730
|
-
tasks: workspaceTasksRef.current,
|
|
731
|
-
archivedTasks: workspaceArchivedTasksRef.current,
|
|
732
|
-
taskEvents: flattenTaskEvents(workspaceTasksRef.current, workspaceArchivedTasksRef.current, workspaceInitiativesRef.current, workspaceWorkstreamsRef.current),
|
|
733
|
-
pendingDeletedTaskIds: workspaceDeletedTaskIdsRef.current,
|
|
734
|
-
initiatives: workspaceInitiativesRef.current,
|
|
735
|
-
workstreams: workspaceWorkstreamsRef.current,
|
|
736
|
-
taxonomies: taxonomies || [],
|
|
737
|
-
aiProfiles: workspaceSyncAiProfilesRef.current,
|
|
738
|
-
documents: workspaceSyncMarkdownDocumentsRef.current,
|
|
739
|
-
assets: workspaceSyncAssetsRef.current,
|
|
740
|
-
documentReviewSessions: workspaceSyncDocumentReviewSessionsRef.current,
|
|
741
|
-
documentReviewComments: workspaceSyncDocumentReviewCommentsRef.current,
|
|
742
|
-
annotatedAttachmentSessions: workspaceSyncAnnotatedAttachmentSessionsRef.current
|
|
743
|
-
});
|
|
744
|
-
}, [currentWorkspaceId, taxonomies, taxonomyState]);
|
|
1024
|
+
return buildWorkspaceSyncV2Signature(createWorkspaceSyncV2Snapshot());
|
|
1025
|
+
}, [createWorkspaceSyncV2Snapshot]);
|
|
745
1026
|
const workspaceCoreSyncFingerprint = useMemo(() => JSON.stringify({
|
|
746
1027
|
tasks: (tasks || [])
|
|
747
1028
|
.map((task) => ({
|
|
@@ -795,6 +1076,29 @@ export function useSyncOrchestrator(input) {
|
|
|
795
1076
|
taxonomies: Array.isArray(taxonomies) ? taxonomies : [],
|
|
796
1077
|
taxonomyState: taxonomyState && typeof taxonomyState === 'object' ? taxonomyState : null
|
|
797
1078
|
}), [tasks, archivedTasks, deletedTasks, initiatives, workstreams, taxonomies, taxonomyState]);
|
|
1079
|
+
useDurableLocalOutboxDrain({
|
|
1080
|
+
enabled: localOutboxDispatchEnabled === true
|
|
1081
|
+
&& runtimeMode === 'local'
|
|
1082
|
+
&& localOutboxCoordinatorAuthority.browserSchedulingAllowed
|
|
1083
|
+
&& workspaceCloudSyncEnabled,
|
|
1084
|
+
workspaceId: currentWorkspaceId,
|
|
1085
|
+
mutationFingerprint: workspaceCoreSyncFingerprint,
|
|
1086
|
+
authorityScope: workspaceSyncRemoteServicesSelection,
|
|
1087
|
+
remoteServices: workspaceSyncEngineRemoteServices,
|
|
1088
|
+
localServices: workspaceSyncEngineLocalServices,
|
|
1089
|
+
isAuthorityCurrent: (authorityScope) => (workspaceSyncRemoteServicesSelectionRef.current === authorityScope
|
|
1090
|
+
&& isBrowserWorkspaceSyncAuthorized()),
|
|
1091
|
+
onHydratedEventIds: (eventIds) => {
|
|
1092
|
+
realtimeBridgeRef.current.recordSuppressedEventIds(eventIds, { ttlMs: 60_000 });
|
|
1093
|
+
},
|
|
1094
|
+
onOutboxStatus: handleWorkspaceSyncV3OutboxStatus,
|
|
1095
|
+
});
|
|
1096
|
+
const isDurableRecoveryBlockingOrdinaryPush = useCallback(() => {
|
|
1097
|
+
if (localOutboxDispatchEnabled !== true)
|
|
1098
|
+
return false;
|
|
1099
|
+
const status = workspaceSyncV3OutboxStatusRef.current;
|
|
1100
|
+
return status === null || (status.recovery !== null && status.recovery.state !== 'completed');
|
|
1101
|
+
}, [localOutboxDispatchEnabled]);
|
|
798
1102
|
// Fingerprint of per-task attachment counts — changes when the MCP tool saves a new
|
|
799
1103
|
// attachment and the React app polls the updated task. Used to trigger an immediate
|
|
800
1104
|
// asset snapshot refresh without requiring a cross-process DOM event.
|
|
@@ -828,21 +1132,49 @@ export function useSyncOrchestrator(input) {
|
|
|
828
1132
|
workspaceAttachBootstrapBaselineSignatureRef.current = '';
|
|
829
1133
|
return false;
|
|
830
1134
|
}, []);
|
|
1135
|
+
const refreshWorkspaceSyncTaxonomySnapshot = useCallback(async () => {
|
|
1136
|
+
if (runtimeMode !== 'local')
|
|
1137
|
+
return false;
|
|
1138
|
+
if (!isValidWorkspaceKey(currentWorkspaceId))
|
|
1139
|
+
return false;
|
|
1140
|
+
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated))
|
|
1141
|
+
return false;
|
|
1142
|
+
try {
|
|
1143
|
+
const res = await fetch(`/api/taskforce/taxonomy-state?workspaceId=${encodeURIComponent(currentWorkspaceId)}`, { method: 'GET', credentials: 'include' });
|
|
1144
|
+
if (!res.ok)
|
|
1145
|
+
return false;
|
|
1146
|
+
const data = await res.json();
|
|
1147
|
+
if (!hasWorkspaceTaxonomyStatePayload(data))
|
|
1148
|
+
return false;
|
|
1149
|
+
workspaceTaxonomyStateRef.current = data;
|
|
1150
|
+
workspaceTaxonomiesRef.current = Array.isArray(data.taxonomies) ? data.taxonomies : [];
|
|
1151
|
+
return true;
|
|
1152
|
+
}
|
|
1153
|
+
catch (error) {
|
|
1154
|
+
logSyncDebug('taxonomy_snapshot_refresh_failed', {
|
|
1155
|
+
workspaceId: currentWorkspaceId,
|
|
1156
|
+
error: String(error?.message || error || '')
|
|
1157
|
+
});
|
|
1158
|
+
return false;
|
|
1159
|
+
}
|
|
1160
|
+
}, [runtimeMode, currentWorkspaceId, cloudAuthConfigured, authSessionResolved, isAuthenticated]);
|
|
831
1161
|
const refreshWorkspaceSyncMarkdownDocumentsSnapshot = useCallback(async () => {
|
|
832
1162
|
if (runtimeMode !== 'local')
|
|
833
|
-
return;
|
|
1163
|
+
return false;
|
|
834
1164
|
if (!isValidWorkspaceKey(currentWorkspaceId))
|
|
835
|
-
return;
|
|
1165
|
+
return false;
|
|
836
1166
|
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated))
|
|
837
|
-
return;
|
|
1167
|
+
return false;
|
|
838
1168
|
try {
|
|
839
1169
|
const res = await fetch(`/api/taskforce/sync/workspace/documents?workspaceId=${encodeURIComponent(currentWorkspaceId)}`, {
|
|
840
1170
|
method: 'GET',
|
|
841
1171
|
credentials: 'include'
|
|
842
1172
|
});
|
|
843
1173
|
if (!res.ok)
|
|
844
|
-
return;
|
|
845
|
-
const data = await res.json()
|
|
1174
|
+
return false;
|
|
1175
|
+
const data = await res.json();
|
|
1176
|
+
if (!Array.isArray(data?.documents))
|
|
1177
|
+
return false;
|
|
846
1178
|
const docs = Array.isArray(data?.documents)
|
|
847
1179
|
? data.documents
|
|
848
1180
|
.map((entry) => ({
|
|
@@ -870,18 +1202,20 @@ export function useSyncOrchestrator(input) {
|
|
|
870
1202
|
? data.fingerprint
|
|
871
1203
|
: JSON.stringify(docs.map((entry) => `${entry.path}:${entry.updatedAt}:${entry.content.length}`).sort());
|
|
872
1204
|
if (fingerprint === workspaceSyncMarkdownDocumentsFingerprintRef.current)
|
|
873
|
-
return;
|
|
1205
|
+
return true;
|
|
874
1206
|
workspaceSyncMarkdownDocumentsFingerprintRef.current = fingerprint;
|
|
875
1207
|
workspaceSyncMarkdownDocumentsRef.current = docs;
|
|
876
1208
|
workspaceSyncKnownDocumentPathsRef.current = knownDocumentPaths;
|
|
877
1209
|
setWorkspaceSyncMarkdownDocuments(docs);
|
|
878
1210
|
setWorkspaceSyncMarkdownDocumentsFingerprint(fingerprint);
|
|
1211
|
+
return true;
|
|
879
1212
|
}
|
|
880
1213
|
catch (error) {
|
|
881
1214
|
logSyncDebug('documents_snapshot_refresh_failed', {
|
|
882
1215
|
workspaceId: currentWorkspaceId,
|
|
883
1216
|
error: String(error?.message || error || '')
|
|
884
1217
|
});
|
|
1218
|
+
return false;
|
|
885
1219
|
}
|
|
886
1220
|
finally {
|
|
887
1221
|
markWorkspaceSyncReferenceSnapshotReady('documents');
|
|
@@ -890,15 +1224,15 @@ export function useSyncOrchestrator(input) {
|
|
|
890
1224
|
const refreshWorkspaceSyncAiProfilesSnapshot = useCallback(async () => {
|
|
891
1225
|
if (runtimeMode !== 'local') {
|
|
892
1226
|
setWorkspaceSyncAiProfilesLastSkipReason('runtime-not-local');
|
|
893
|
-
return;
|
|
1227
|
+
return false;
|
|
894
1228
|
}
|
|
895
1229
|
if (!isValidWorkspaceKey(currentWorkspaceId)) {
|
|
896
1230
|
setWorkspaceSyncAiProfilesLastSkipReason('workspace-id-invalid');
|
|
897
|
-
return;
|
|
1231
|
+
return false;
|
|
898
1232
|
}
|
|
899
1233
|
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated)) {
|
|
900
1234
|
setWorkspaceSyncAiProfilesLastSkipReason(!authSessionResolved ? 'auth-unresolved' : 'auth-required');
|
|
901
|
-
return;
|
|
1235
|
+
return false;
|
|
902
1236
|
}
|
|
903
1237
|
setWorkspaceSyncAiProfilesLastSkipReason(null);
|
|
904
1238
|
try {
|
|
@@ -909,9 +1243,11 @@ export function useSyncOrchestrator(input) {
|
|
|
909
1243
|
if (!res.ok) {
|
|
910
1244
|
setWorkspaceSyncAiProfilesLastFetchError(`HTTP ${res.status}`);
|
|
911
1245
|
setWorkspaceSyncAiProfilesLastFetchAt(new Date().toISOString());
|
|
912
|
-
return;
|
|
1246
|
+
return false;
|
|
913
1247
|
}
|
|
914
|
-
const data = await res.json()
|
|
1248
|
+
const data = await res.json();
|
|
1249
|
+
if (!Array.isArray(data?.aiProfiles))
|
|
1250
|
+
return false;
|
|
915
1251
|
const rawAiProfiles = Array.isArray(data?.aiProfiles) ? data.aiProfiles : [];
|
|
916
1252
|
setWorkspaceSyncAiProfilesRawCount(rawAiProfiles.length);
|
|
917
1253
|
const aiProfiles = Array.isArray(data?.aiProfiles)
|
|
@@ -923,22 +1259,14 @@ export function useSyncOrchestrator(input) {
|
|
|
923
1259
|
setWorkspaceSyncAiProfilesLastFetchAt(new Date().toISOString());
|
|
924
1260
|
const fingerprint = typeof data?.fingerprint === 'string'
|
|
925
1261
|
? data.fingerprint
|
|
926
|
-
:
|
|
927
|
-
entry.id,
|
|
928
|
-
entry.updatedAt,
|
|
929
|
-
entry.name,
|
|
930
|
-
entry.username,
|
|
931
|
-
entry.archivedAt ?? '',
|
|
932
|
-
entry.archivedReason ?? '',
|
|
933
|
-
entry.mergedIntoProfileId ?? '',
|
|
934
|
-
entry.rosterStateUpdatedAt ?? ''
|
|
935
|
-
].join(':')).sort());
|
|
1262
|
+
: getAiProfileSyncSnapshotFingerprint(aiProfiles);
|
|
936
1263
|
if (fingerprint === workspaceSyncAiProfilesFingerprintRef.current)
|
|
937
|
-
return;
|
|
1264
|
+
return true;
|
|
938
1265
|
workspaceSyncAiProfilesFingerprintRef.current = fingerprint;
|
|
939
1266
|
workspaceSyncAiProfilesRef.current = aiProfiles;
|
|
940
1267
|
setWorkspaceSyncAiProfiles(aiProfiles);
|
|
941
1268
|
setWorkspaceSyncAiProfilesFingerprint(fingerprint);
|
|
1269
|
+
return true;
|
|
942
1270
|
}
|
|
943
1271
|
catch (error) {
|
|
944
1272
|
setWorkspaceSyncAiProfilesLastFetchError(String(error?.message || error || 'unknown-error'));
|
|
@@ -947,6 +1275,7 @@ export function useSyncOrchestrator(input) {
|
|
|
947
1275
|
workspaceId: currentWorkspaceId,
|
|
948
1276
|
error: String(error?.message || error || '')
|
|
949
1277
|
});
|
|
1278
|
+
return false;
|
|
950
1279
|
}
|
|
951
1280
|
finally {
|
|
952
1281
|
markWorkspaceSyncReferenceSnapshotReady('aiProfiles');
|
|
@@ -954,19 +1283,21 @@ export function useSyncOrchestrator(input) {
|
|
|
954
1283
|
}, [runtimeMode, currentWorkspaceId, cloudAuthConfigured, authSessionResolved, isAuthenticated, markWorkspaceSyncReferenceSnapshotReady]);
|
|
955
1284
|
const refreshWorkspaceSyncAssetsSnapshot = useCallback(async () => {
|
|
956
1285
|
if (runtimeMode !== 'local')
|
|
957
|
-
return;
|
|
1286
|
+
return false;
|
|
958
1287
|
if (!isValidWorkspaceKey(currentWorkspaceId))
|
|
959
|
-
return;
|
|
1288
|
+
return false;
|
|
960
1289
|
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated))
|
|
961
|
-
return;
|
|
1290
|
+
return false;
|
|
962
1291
|
try {
|
|
963
1292
|
const res = await fetch(`/api/taskforce/sync/workspace/assets?workspaceId=${encodeURIComponent(currentWorkspaceId)}`, {
|
|
964
1293
|
method: 'GET',
|
|
965
1294
|
credentials: 'include'
|
|
966
1295
|
});
|
|
967
1296
|
if (!res.ok)
|
|
968
|
-
return;
|
|
969
|
-
const data = await res.json()
|
|
1297
|
+
return false;
|
|
1298
|
+
const data = await res.json();
|
|
1299
|
+
if (!Array.isArray(data?.assets))
|
|
1300
|
+
return false;
|
|
970
1301
|
const assets = Array.isArray(data?.assets)
|
|
971
1302
|
? data.assets
|
|
972
1303
|
.map((entry) => ({
|
|
@@ -998,18 +1329,20 @@ export function useSyncOrchestrator(input) {
|
|
|
998
1329
|
? data.fingerprint
|
|
999
1330
|
: JSON.stringify(assets.map((entry) => `${entry.path}:${entry.updatedAt}:${entry.contentBase64.length}`).sort());
|
|
1000
1331
|
if (fingerprint === workspaceSyncAssetsFingerprintRef.current)
|
|
1001
|
-
return;
|
|
1332
|
+
return true;
|
|
1002
1333
|
workspaceSyncAssetsFingerprintRef.current = fingerprint;
|
|
1003
1334
|
workspaceSyncAssetsRef.current = assets;
|
|
1004
1335
|
workspaceSyncKnownAssetPathsRef.current = knownAssetPaths;
|
|
1005
1336
|
setWorkspaceSyncAssets(assets);
|
|
1006
1337
|
setWorkspaceSyncAssetsFingerprint(fingerprint);
|
|
1338
|
+
return true;
|
|
1007
1339
|
}
|
|
1008
1340
|
catch (error) {
|
|
1009
1341
|
logSyncDebug('assets_snapshot_refresh_failed', {
|
|
1010
1342
|
workspaceId: currentWorkspaceId,
|
|
1011
1343
|
error: String(error?.message || error || '')
|
|
1012
1344
|
});
|
|
1345
|
+
return false;
|
|
1013
1346
|
}
|
|
1014
1347
|
finally {
|
|
1015
1348
|
markWorkspaceSyncReferenceSnapshotReady('assets');
|
|
@@ -1017,19 +1350,21 @@ export function useSyncOrchestrator(input) {
|
|
|
1017
1350
|
}, [runtimeMode, currentWorkspaceId, cloudAuthConfigured, authSessionResolved, isAuthenticated, markWorkspaceSyncReferenceSnapshotReady]);
|
|
1018
1351
|
const refreshWorkspaceSyncPlanningEntitiesSnapshot = useCallback(async () => {
|
|
1019
1352
|
if (runtimeMode !== 'local')
|
|
1020
|
-
return;
|
|
1353
|
+
return false;
|
|
1021
1354
|
if (!isValidWorkspaceKey(currentWorkspaceId))
|
|
1022
|
-
return;
|
|
1355
|
+
return false;
|
|
1023
1356
|
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated))
|
|
1024
|
-
return;
|
|
1357
|
+
return false;
|
|
1025
1358
|
try {
|
|
1026
1359
|
const res = await fetch(`/api/taskforce/planning/bootstrap?workspaceId=${encodeURIComponent(currentWorkspaceId)}`, {
|
|
1027
1360
|
method: 'GET',
|
|
1028
1361
|
credentials: 'include'
|
|
1029
1362
|
});
|
|
1030
1363
|
if (!res.ok)
|
|
1031
|
-
return;
|
|
1032
|
-
const data = await res.json()
|
|
1364
|
+
return false;
|
|
1365
|
+
const data = await res.json();
|
|
1366
|
+
if (!Array.isArray(data?.initiatives) || !Array.isArray(data?.workstreams))
|
|
1367
|
+
return false;
|
|
1033
1368
|
const nextInitiatives = Array.isArray(data?.initiatives)
|
|
1034
1369
|
? data.initiatives.filter((entry) => (Boolean(entry && typeof entry === 'object' && typeof entry.id === 'string')))
|
|
1035
1370
|
: [];
|
|
@@ -1038,29 +1373,33 @@ export function useSyncOrchestrator(input) {
|
|
|
1038
1373
|
: [];
|
|
1039
1374
|
workspaceInitiativesRef.current = nextInitiatives;
|
|
1040
1375
|
workspaceWorkstreamsRef.current = nextWorkstreams;
|
|
1376
|
+
return true;
|
|
1041
1377
|
}
|
|
1042
1378
|
catch (error) {
|
|
1043
1379
|
logSyncDebug('planning_snapshot_refresh_failed', {
|
|
1044
1380
|
workspaceId: currentWorkspaceId,
|
|
1045
1381
|
error: String(error?.message || error || '')
|
|
1046
1382
|
});
|
|
1383
|
+
return false;
|
|
1047
1384
|
}
|
|
1048
1385
|
}, [runtimeMode, currentWorkspaceId, cloudAuthConfigured, authSessionResolved, isAuthenticated]);
|
|
1049
1386
|
const refreshWorkspaceSyncDocumentReviewSessionsSnapshot = useCallback(async () => {
|
|
1050
1387
|
if (runtimeMode !== 'local')
|
|
1051
|
-
return;
|
|
1388
|
+
return false;
|
|
1052
1389
|
if (!isValidWorkspaceKey(currentWorkspaceId))
|
|
1053
|
-
return;
|
|
1390
|
+
return false;
|
|
1054
1391
|
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated))
|
|
1055
|
-
return;
|
|
1392
|
+
return false;
|
|
1056
1393
|
try {
|
|
1057
1394
|
const res = await fetch(`/api/taskforce/sync/workspace/document-reviews?workspaceId=${encodeURIComponent(currentWorkspaceId)}`, {
|
|
1058
1395
|
method: 'GET',
|
|
1059
1396
|
credentials: 'include'
|
|
1060
1397
|
});
|
|
1061
1398
|
if (!res.ok)
|
|
1062
|
-
return;
|
|
1063
|
-
const data = await res.json()
|
|
1399
|
+
return false;
|
|
1400
|
+
const data = await res.json();
|
|
1401
|
+
if (!Array.isArray(data?.sessions))
|
|
1402
|
+
return false;
|
|
1064
1403
|
const sessions = Array.isArray(data?.sessions)
|
|
1065
1404
|
? data.sessions
|
|
1066
1405
|
.map((entry) => ({
|
|
@@ -1088,6 +1427,8 @@ export function useSyncOrchestrator(input) {
|
|
|
1088
1427
|
anchor: entry?.anchor ?? null,
|
|
1089
1428
|
order: Number.isFinite(Number(entry?.order)) ? Math.max(0, Math.floor(Number(entry.order))) : 0,
|
|
1090
1429
|
authorActorId: typeof entry?.authorActorId === 'string' && entry.authorActorId.trim().length > 0 ? entry.authorActorId.trim() : null,
|
|
1430
|
+
updatedByActorId: typeof entry?.updatedByActorId === 'string' && entry.updatedByActorId.trim().length > 0 ? entry.updatedByActorId.trim() : null,
|
|
1431
|
+
deletedByActorId: typeof entry?.deletedByActorId === 'string' && entry.deletedByActorId.trim().length > 0 ? entry.deletedByActorId.trim() : null,
|
|
1091
1432
|
createdAt: String(entry?.createdAt || '').trim(),
|
|
1092
1433
|
updatedAt: String(entry?.updatedAt || entry?.createdAt || '').trim(),
|
|
1093
1434
|
deletedAt: typeof entry?.deletedAt === 'string' && entry.deletedAt.trim().length > 0 ? entry.deletedAt.trim() : null
|
|
@@ -1101,18 +1442,20 @@ export function useSyncOrchestrator(input) {
|
|
|
1101
1442
|
...comments.map((entry) => `${entry.id}:${entry.sessionId}:${entry.updatedAt}:${entry.deletedAt || ''}`).sort()
|
|
1102
1443
|
]);
|
|
1103
1444
|
if (fingerprint === workspaceSyncDocumentReviewSessionsFingerprintRef.current)
|
|
1104
|
-
return;
|
|
1445
|
+
return true;
|
|
1105
1446
|
workspaceSyncDocumentReviewSessionsFingerprintRef.current = fingerprint;
|
|
1106
1447
|
workspaceSyncDocumentReviewSessionsRef.current = sessions;
|
|
1107
1448
|
workspaceSyncDocumentReviewCommentsRef.current = comments;
|
|
1108
1449
|
setWorkspaceSyncDocumentReviewSessions(sessions);
|
|
1109
1450
|
setWorkspaceSyncDocumentReviewSessionsFingerprint(fingerprint);
|
|
1451
|
+
return true;
|
|
1110
1452
|
}
|
|
1111
1453
|
catch (error) {
|
|
1112
1454
|
logSyncDebug('document_review_sessions_snapshot_refresh_failed', {
|
|
1113
1455
|
workspaceId: currentWorkspaceId,
|
|
1114
1456
|
error: String(error?.message || error || '')
|
|
1115
1457
|
});
|
|
1458
|
+
return false;
|
|
1116
1459
|
}
|
|
1117
1460
|
finally {
|
|
1118
1461
|
markWorkspaceSyncReferenceSnapshotReady('documentReviewSessions');
|
|
@@ -1120,19 +1463,21 @@ export function useSyncOrchestrator(input) {
|
|
|
1120
1463
|
}, [runtimeMode, currentWorkspaceId, cloudAuthConfigured, authSessionResolved, isAuthenticated, markWorkspaceSyncReferenceSnapshotReady]);
|
|
1121
1464
|
const refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot = useCallback(async () => {
|
|
1122
1465
|
if (runtimeMode !== 'local')
|
|
1123
|
-
return;
|
|
1466
|
+
return false;
|
|
1124
1467
|
if (!isValidWorkspaceKey(currentWorkspaceId))
|
|
1125
|
-
return;
|
|
1468
|
+
return false;
|
|
1126
1469
|
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated))
|
|
1127
|
-
return;
|
|
1470
|
+
return false;
|
|
1128
1471
|
try {
|
|
1129
1472
|
const res = await fetch(`/api/taskforce/sync/workspace/annotated-attachments?workspaceId=${encodeURIComponent(currentWorkspaceId)}`, {
|
|
1130
1473
|
method: 'GET',
|
|
1131
1474
|
credentials: 'include'
|
|
1132
1475
|
});
|
|
1133
1476
|
if (!res.ok)
|
|
1134
|
-
return;
|
|
1135
|
-
const data = await res.json()
|
|
1477
|
+
return false;
|
|
1478
|
+
const data = await res.json();
|
|
1479
|
+
if (!Array.isArray(data?.sessions))
|
|
1480
|
+
return false;
|
|
1136
1481
|
const sessions = Array.isArray(data?.sessions)
|
|
1137
1482
|
? data.sessions
|
|
1138
1483
|
.map((entry) => ({
|
|
@@ -1158,22 +1503,94 @@ export function useSyncOrchestrator(input) {
|
|
|
1158
1503
|
? data.fingerprint
|
|
1159
1504
|
: JSON.stringify(sessions.map((entry) => `${entry.id}:${entry.updatedAt}:${entry.taskId}:${entry.baseImageAssetId}:${entry.annotations.length}:${entry.deletedAt || ''}`).sort());
|
|
1160
1505
|
if (fingerprint === workspaceSyncAnnotatedAttachmentSessionsFingerprintRef.current)
|
|
1161
|
-
return;
|
|
1506
|
+
return true;
|
|
1162
1507
|
workspaceSyncAnnotatedAttachmentSessionsFingerprintRef.current = fingerprint;
|
|
1163
1508
|
workspaceSyncAnnotatedAttachmentSessionsRef.current = sessions;
|
|
1164
1509
|
setWorkspaceSyncAnnotatedAttachmentSessions(sessions);
|
|
1165
1510
|
setWorkspaceSyncAnnotatedAttachmentSessionsFingerprint(fingerprint);
|
|
1511
|
+
return true;
|
|
1166
1512
|
}
|
|
1167
1513
|
catch (error) {
|
|
1168
1514
|
logSyncDebug('annotated_attachment_sessions_snapshot_refresh_failed', {
|
|
1169
1515
|
workspaceId: currentWorkspaceId,
|
|
1170
1516
|
error: String(error?.message || error || '')
|
|
1171
1517
|
});
|
|
1518
|
+
return false;
|
|
1172
1519
|
}
|
|
1173
1520
|
finally {
|
|
1174
1521
|
markWorkspaceSyncReferenceSnapshotReady('annotatedAttachmentSessions');
|
|
1175
1522
|
}
|
|
1176
1523
|
}, [runtimeMode, currentWorkspaceId, cloudAuthConfigured, authSessionResolved, isAuthenticated, markWorkspaceSyncReferenceSnapshotReady]);
|
|
1524
|
+
const refreshWorkspaceSyncTaskforceAgentsSnapshot = useCallback(async () => {
|
|
1525
|
+
if (runtimeMode !== 'local')
|
|
1526
|
+
return false;
|
|
1527
|
+
if (!isValidWorkspaceKey(currentWorkspaceId))
|
|
1528
|
+
return false;
|
|
1529
|
+
if (cloudAuthConfigured && (!authSessionResolved || !isAuthenticated))
|
|
1530
|
+
return false;
|
|
1531
|
+
try {
|
|
1532
|
+
const res = await fetch(`/api/taskforce/sync/workspace/taskforce-agents?workspaceId=${encodeURIComponent(currentWorkspaceId)}`, {
|
|
1533
|
+
method: 'GET',
|
|
1534
|
+
credentials: 'include'
|
|
1535
|
+
});
|
|
1536
|
+
if (!res.ok)
|
|
1537
|
+
return false;
|
|
1538
|
+
const data = await res.json();
|
|
1539
|
+
if (!Array.isArray(data?.agents)
|
|
1540
|
+
|| !Array.isArray(data?.roles)
|
|
1541
|
+
|| !Array.isArray(data?.skills)
|
|
1542
|
+
|| !Array.isArray(data?.conversations))
|
|
1543
|
+
return false;
|
|
1544
|
+
const agents = Array.isArray(data?.agents)
|
|
1545
|
+
? data.agents
|
|
1546
|
+
.map((entry) => normalizeWorkspaceSyncTaskforceAgentSnapshotEntry(entry))
|
|
1547
|
+
.filter((entry) => entry.id.length > 0 && entry.workspaceId.length > 0)
|
|
1548
|
+
: [];
|
|
1549
|
+
const conversations = Array.isArray(data?.conversations)
|
|
1550
|
+
? data.conversations
|
|
1551
|
+
.map((entry) => normalizeWorkspaceSyncAgentConversationSnapshotEntry(entry))
|
|
1552
|
+
.filter((entry) => (entry.id.length > 0
|
|
1553
|
+
&& entry.workspaceId.length > 0
|
|
1554
|
+
&& entry.agentId.length > 0))
|
|
1555
|
+
: [];
|
|
1556
|
+
const roles = Array.isArray(data?.roles)
|
|
1557
|
+
? data.roles
|
|
1558
|
+
.map((entry) => normalizeAgentRoleSyncPayload(entry, currentWorkspaceId))
|
|
1559
|
+
.filter((entry) => Boolean(entry))
|
|
1560
|
+
: [];
|
|
1561
|
+
const skills = data.skills
|
|
1562
|
+
.map((entry) => normalizeTaskforceAgentSkillSyncPayload(entry, currentWorkspaceId))
|
|
1563
|
+
.filter((entry) => (Boolean(entry && entry.id.length > 0 && entry.workspaceId.length > 0)));
|
|
1564
|
+
const fingerprint = typeof data?.fingerprint === 'string'
|
|
1565
|
+
? data.fingerprint
|
|
1566
|
+
: JSON.stringify([
|
|
1567
|
+
...agents.map((entry) => `${entry.id}:${entry.updatedAt}:${entry.deletedAt || ''}:${entry.name}:${entry.modelTier}`).sort(),
|
|
1568
|
+
...roles.map((entry) => `${entry.id}:${entry.updatedAt}:${entry.deletedAt || ''}:${entry.currentRevision}:${entry.currentContentHash}`).sort(),
|
|
1569
|
+
...skills.map((entry) => `${entry.id}:${entry.updatedAt}:${entry.revision}:${entry.contentHash}:${entry.lifecycleStatus}`).sort(),
|
|
1570
|
+
...conversations.map((entry) => `${entry.id}:${entry.agentId}:${entry.updatedAt}:${entry.deletedAt || ''}:${entry.messages.length}`).sort()
|
|
1571
|
+
]);
|
|
1572
|
+
if (fingerprint === workspaceSyncTaskforceAgentsFingerprintRef.current)
|
|
1573
|
+
return true;
|
|
1574
|
+
workspaceSyncTaskforceAgentsFingerprintRef.current = fingerprint;
|
|
1575
|
+
workspaceSyncTaskforceAgentsRef.current = agents;
|
|
1576
|
+
workspaceSyncAgentRolesRef.current = roles;
|
|
1577
|
+
workspaceSyncTaskforceAgentSkillsRef.current = skills;
|
|
1578
|
+
workspaceSyncAgentConversationsRef.current = conversations;
|
|
1579
|
+
setWorkspaceSyncTaskforceAgents(agents);
|
|
1580
|
+
setWorkspaceSyncTaskforceAgentsFingerprint(fingerprint);
|
|
1581
|
+
return true;
|
|
1582
|
+
}
|
|
1583
|
+
catch (error) {
|
|
1584
|
+
logSyncDebug('taskforce_agents_snapshot_refresh_failed', {
|
|
1585
|
+
workspaceId: currentWorkspaceId,
|
|
1586
|
+
error: String(error?.message || error || '')
|
|
1587
|
+
});
|
|
1588
|
+
return false;
|
|
1589
|
+
}
|
|
1590
|
+
finally {
|
|
1591
|
+
markWorkspaceSyncReferenceSnapshotReady('taskforceAgents');
|
|
1592
|
+
}
|
|
1593
|
+
}, [runtimeMode, currentWorkspaceId, cloudAuthConfigured, authSessionResolved, isAuthenticated, markWorkspaceSyncReferenceSnapshotReady]);
|
|
1177
1594
|
const seedWorkspaceSnapshotPushBaseline = useCallback(() => {
|
|
1178
1595
|
workspaceLastPushedTaskIdsRef.current = new Set([...workspaceTasksRef.current, ...workspaceArchivedTasksRef.current]
|
|
1179
1596
|
.map((entry) => String(entry?.id || '').trim())
|
|
@@ -1186,6 +1603,13 @@ export function useSyncOrchestrator(input) {
|
|
|
1186
1603
|
...workspaceArchivedTasksRef.current.map((entry) => [String(entry?.id || '').trim(), taskSyncResourceAdapter.getChangeKey({ ...entry, isArchived: true })])
|
|
1187
1604
|
]
|
|
1188
1605
|
.filter(([id]) => id.length > 0));
|
|
1606
|
+
workspaceLastPushedTaskRelationshipChangeKeysRef.current = new Map(workspaceTaskRelationshipsRef.current
|
|
1607
|
+
.map((entry) => [String(entry?.id || '').trim(), getTaskRelationshipSyncChangeKey(entry)])
|
|
1608
|
+
.filter(([id]) => id.length > 0));
|
|
1609
|
+
workspaceLastPushedTaxonomyChangeKeyRef.current = getTaxonomySyncChangeKey({
|
|
1610
|
+
taxonomyState: workspaceTaxonomyStateRef.current,
|
|
1611
|
+
taxonomies: workspaceTaxonomiesRef.current,
|
|
1612
|
+
});
|
|
1189
1613
|
workspaceLastPushedInitiativeIdsRef.current = new Set(workspaceInitiativesRef.current
|
|
1190
1614
|
.map((entry) => String(entry?.id || '').trim())
|
|
1191
1615
|
.filter((id) => id.length > 0));
|
|
@@ -1237,6 +1661,38 @@ export function useSyncOrchestrator(input) {
|
|
|
1237
1661
|
workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef.current = new Map(workspaceSyncAnnotatedAttachmentSessionsRef.current
|
|
1238
1662
|
.map((entry) => [String(entry?.id || '').trim(), String(entry?.updatedAt || entry?.createdAt || '').trim()])
|
|
1239
1663
|
.filter(([id]) => id.length > 0));
|
|
1664
|
+
workspaceLastPushedTaskforceAgentIdsRef.current = new Set([
|
|
1665
|
+
...workspaceSyncTaskforceAgentsRef.current
|
|
1666
|
+
.map((entry) => String(entry?.id || '').trim()),
|
|
1667
|
+
...workspaceSyncAgentRolesRef.current
|
|
1668
|
+
.map((entry) => `agent-role:${String(entry?.id || '').trim()}`),
|
|
1669
|
+
]
|
|
1670
|
+
.filter((id) => id.length > 0));
|
|
1671
|
+
workspaceLastPushedTaskforceAgentWatermarksRef.current = new Map([
|
|
1672
|
+
...workspaceSyncTaskforceAgentsRef.current
|
|
1673
|
+
.map((entry) => [
|
|
1674
|
+
String(entry?.id || '').trim(),
|
|
1675
|
+
String(entry?.deletedAt || entry?.updatedAt || entry?.createdAt || '').trim(),
|
|
1676
|
+
]),
|
|
1677
|
+
...workspaceSyncAgentRolesRef.current
|
|
1678
|
+
.map((entry) => [
|
|
1679
|
+
`agent-role:${String(entry?.id || '').trim()}`,
|
|
1680
|
+
String(entry?.deletedAt || entry?.updatedAt || entry?.createdAt || '').trim(),
|
|
1681
|
+
]),
|
|
1682
|
+
]
|
|
1683
|
+
.filter(([id]) => id.length > 0));
|
|
1684
|
+
workspaceLastPushedTaskforceAgentSkillIdsRef.current = new Set(workspaceSyncTaskforceAgentSkillsRef.current
|
|
1685
|
+
.map((entry) => String(entry?.id || '').trim())
|
|
1686
|
+
.filter((id) => id.length > 0));
|
|
1687
|
+
workspaceLastPushedTaskforceAgentSkillWatermarksRef.current = new Map(workspaceSyncTaskforceAgentSkillsRef.current
|
|
1688
|
+
.map((entry) => [String(entry?.id || '').trim(), String(entry?.updatedAt || entry?.createdAt || '').trim()])
|
|
1689
|
+
.filter(([id]) => id.length > 0));
|
|
1690
|
+
workspaceLastPushedAgentConversationIdsRef.current = new Set(workspaceSyncAgentConversationsRef.current
|
|
1691
|
+
.map((entry) => String(entry?.id || '').trim())
|
|
1692
|
+
.filter((id) => id.length > 0));
|
|
1693
|
+
workspaceLastPushedAgentConversationWatermarksRef.current = new Map(workspaceSyncAgentConversationsRef.current
|
|
1694
|
+
.map((entry) => [String(entry?.id || '').trim(), String(entry?.deletedAt || entry?.updatedAt || entry?.createdAt || '').trim()])
|
|
1695
|
+
.filter(([id]) => id.length > 0));
|
|
1240
1696
|
workspaceLastPushedTaskEventWatermarksRef.current = new Map(flattenTaskEvents(workspaceTasksRef.current, workspaceArchivedTasksRef.current, workspaceInitiativesRef.current, workspaceWorkstreamsRef.current)
|
|
1241
1697
|
.map((entry) => [String(entry?.id || '').trim(), String(entry?.createdAt || '').trim()])
|
|
1242
1698
|
.filter(([id]) => id.length > 0));
|
|
@@ -1244,7 +1700,7 @@ export function useSyncOrchestrator(input) {
|
|
|
1244
1700
|
workspaceBaselineResetReasonRef.current = persisted ? null : 'storage-write-failed';
|
|
1245
1701
|
}, [persistWorkspaceSyncWatermarksSnapshotBestEffort]);
|
|
1246
1702
|
const refreshLocalWorkspaceTaskCollections = useCallback(async () => {
|
|
1247
|
-
const [tasksRes, archiveRes] = await Promise.all([
|
|
1703
|
+
const [tasksRes, archiveRes, relationshipsRes] = await Promise.all([
|
|
1248
1704
|
fetch('/api/taskforce/tasks', {
|
|
1249
1705
|
method: 'GET',
|
|
1250
1706
|
credentials: 'include'
|
|
@@ -1252,31 +1708,41 @@ export function useSyncOrchestrator(input) {
|
|
|
1252
1708
|
fetch('/api/taskforce/archive', {
|
|
1253
1709
|
method: 'GET',
|
|
1254
1710
|
credentials: 'include'
|
|
1711
|
+
}),
|
|
1712
|
+
fetch('/api/taskforce/task-relationships', {
|
|
1713
|
+
method: 'GET',
|
|
1714
|
+
credentials: 'include'
|
|
1255
1715
|
})
|
|
1256
1716
|
]);
|
|
1257
|
-
if (tasksRes.ok) {
|
|
1258
|
-
|
|
1259
|
-
const normalizedTasks = Array.isArray(tasksPayload?.tasks)
|
|
1260
|
-
? tasksPayload.tasks.map((task) => normalizeTaskFromApi(task))
|
|
1261
|
-
: [];
|
|
1262
|
-
setTasks(normalizedTasks);
|
|
1717
|
+
if (!tasksRes.ok || !archiveRes.ok || !relationshipsRes.ok) {
|
|
1718
|
+
throw new Error('Required task collection refresh failed.');
|
|
1263
1719
|
}
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1720
|
+
const [tasksPayload, archivePayload, relationshipPayload] = await Promise.all([
|
|
1721
|
+
tasksRes.json(),
|
|
1722
|
+
archiveRes.json(),
|
|
1723
|
+
relationshipsRes.json()
|
|
1724
|
+
]);
|
|
1725
|
+
if (!Array.isArray(tasksPayload?.tasks)
|
|
1726
|
+
|| !Array.isArray(archivePayload?.archived)
|
|
1727
|
+
|| !Array.isArray(relationshipPayload?.relationships)) {
|
|
1728
|
+
throw new Error('Required task collection refresh returned an invalid response.');
|
|
1273
1729
|
}
|
|
1730
|
+
const normalizedTasks = tasksPayload.tasks.map((task) => normalizeTaskFromApi(task));
|
|
1731
|
+
const normalizedArchive = archivePayload.archived.map((task) => ({
|
|
1732
|
+
...normalizeTaskFromApi(task),
|
|
1733
|
+
isArchived: true
|
|
1734
|
+
}));
|
|
1735
|
+
workspaceTasksRef.current = normalizedTasks;
|
|
1736
|
+
workspaceArchivedTasksRef.current = normalizedArchive;
|
|
1737
|
+
updateWorkspaceTaskRelationships(relationshipPayload.relationships);
|
|
1738
|
+
setTasks(normalizedTasks);
|
|
1739
|
+
setArchivedTasks(normalizedArchive);
|
|
1274
1740
|
await fetchPlanningEntities().catch(() => {
|
|
1275
1741
|
logSyncDebug('refresh_planning_entities_failed', {
|
|
1276
1742
|
workspaceId: currentWorkspaceId
|
|
1277
1743
|
});
|
|
1278
1744
|
});
|
|
1279
|
-
}, [currentWorkspaceId, fetchPlanningEntities, setArchivedTasks, setTasks]);
|
|
1745
|
+
}, [currentWorkspaceId, fetchPlanningEntities, setArchivedTasks, setTasks, updateWorkspaceTaskRelationships]);
|
|
1280
1746
|
// === SECTION: Auth failure handling & sync readiness ===
|
|
1281
1747
|
const { handleSyncAuthFailure, ensureWorkspaceSyncReady } = useMemo(() => createSyncAuthCoordinator({
|
|
1282
1748
|
currentWorkspaceId,
|
|
@@ -1307,91 +1773,107 @@ export function useSyncOrchestrator(input) {
|
|
|
1307
1773
|
persistWorkspaceSyncPatchSafely
|
|
1308
1774
|
]);
|
|
1309
1775
|
// === SECTION: Push/Pull sync ===
|
|
1310
|
-
const transferCoordinator = useMemo(() =>
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1776
|
+
const transferCoordinator = useMemo(() => {
|
|
1777
|
+
const capturedSelection = workspaceSyncRemoteServicesSelection;
|
|
1778
|
+
if (!workspaceSyncEngineRemoteServices)
|
|
1779
|
+
return null;
|
|
1780
|
+
return createWorkspaceTransferCoordinator({
|
|
1781
|
+
cloudAuthConfigured,
|
|
1782
|
+
runtimeMode,
|
|
1783
|
+
initiativeFeedActivationEnabled,
|
|
1784
|
+
combinedFeedActivationEnabled,
|
|
1785
|
+
combinedFeedCoverage,
|
|
1786
|
+
workspaceCloudSyncEnabled,
|
|
1787
|
+
currentWorkspaceId,
|
|
1788
|
+
workspaceSyncPhase,
|
|
1789
|
+
isAuthenticated,
|
|
1790
|
+
checkAuthSession,
|
|
1791
|
+
resolveCloudAuthUrl,
|
|
1792
|
+
ensureCloudWorkspaceReadyForSync,
|
|
1793
|
+
ensureWorkspaceSyncReady,
|
|
1794
|
+
handleSyncAuthFailure,
|
|
1795
|
+
clearWorkspaceRetry,
|
|
1796
|
+
clearWorkspaceIssue,
|
|
1797
|
+
isWorkspaceRetryPending,
|
|
1798
|
+
isDurableRecoveryBlockingOrdinaryPush,
|
|
1799
|
+
isExecutionAuthorized: () => (isBrowserSyncRemoteServicesSelectionAuthorized({
|
|
1800
|
+
current: workspaceSyncRemoteServicesSelectionRef.current
|
|
1801
|
+
?? { mode: 'blocked', remoteServices: null },
|
|
1802
|
+
captured: capturedSelection,
|
|
1803
|
+
browserSchedulingAllowed: isBrowserWorkspaceSyncAuthorized(),
|
|
1804
|
+
onDenied: () => {
|
|
1805
|
+
const authority = browserSyncAuthorityRef.current;
|
|
1806
|
+
if (!authority.serverCommandMode
|
|
1807
|
+
|| browserExecutionFenceDiagnosticEpochRef.current
|
|
1808
|
+
=== authority.authorityEpoch)
|
|
1809
|
+
return;
|
|
1810
|
+
browserExecutionFenceDiagnosticEpochRef.current =
|
|
1811
|
+
authority.authorityEpoch;
|
|
1812
|
+
reportSyncEvent(currentWorkspaceId, {
|
|
1813
|
+
eventType: 'handshake',
|
|
1814
|
+
status: 'error',
|
|
1815
|
+
statusCode: 409,
|
|
1816
|
+
errorMessage: 'Browser cloud execution was blocked by persisted server ownership.',
|
|
1817
|
+
details: {
|
|
1818
|
+
errorCode: 'SYNC_BROWSER_EXECUTION_FENCED_BY_SERVER_OWNER',
|
|
1819
|
+
authorityEpoch: authority.authorityEpoch,
|
|
1820
|
+
capturedTransportMode: capturedSelection.mode,
|
|
1821
|
+
},
|
|
1822
|
+
});
|
|
1823
|
+
},
|
|
1824
|
+
})),
|
|
1825
|
+
scheduleWorkspaceSyncRetry,
|
|
1826
|
+
persistWorkspaceSyncPatchSafely,
|
|
1827
|
+
persistWorkspaceSyncPatchBestEffort,
|
|
1828
|
+
persistWorkspaceSyncWatermarksSnapshotBestEffort,
|
|
1829
|
+
refreshWorkspaceAiProfilePushBaselineFromPersistence,
|
|
1830
|
+
reportSyncEvent,
|
|
1831
|
+
acquireWorkspaceSyncLease,
|
|
1832
|
+
releaseWorkspaceSyncLease,
|
|
1833
|
+
recordWorkspaceSyncCompletion,
|
|
1834
|
+
reportWorkspaceWindowContention,
|
|
1835
|
+
refreshWorkspaceSyncMarkdownDocumentsSnapshot,
|
|
1836
|
+
refreshWorkspaceSyncAiProfilesSnapshot,
|
|
1837
|
+
refreshWorkspaceSyncAssetsSnapshot,
|
|
1838
|
+
refreshWorkspaceSyncTaxonomySnapshot,
|
|
1839
|
+
refreshWorkspaceSyncPlanningEntitiesSnapshot,
|
|
1840
|
+
refreshWorkspaceSyncDocumentReviewSessionsSnapshot,
|
|
1841
|
+
refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot,
|
|
1842
|
+
refreshWorkspaceSyncTaskforceAgentsSnapshot,
|
|
1843
|
+
refreshLocalWorkspaceTaskCollections,
|
|
1844
|
+
buildWorkspaceSyncPayload,
|
|
1845
|
+
buildWorkspaceSyncSignature,
|
|
1846
|
+
seedWorkspaceSnapshotPushBaseline,
|
|
1847
|
+
shouldSuppressAttachBootstrapPush,
|
|
1848
|
+
recordSuppressedEventIds: (...args) => (realtimeBridgeRef.current.recordSuppressedEventIds(...args)),
|
|
1849
|
+
runtime: workspaceSyncEngineRuntime,
|
|
1850
|
+
localServices: workspaceSyncEngineLocalServices,
|
|
1851
|
+
remoteServices: workspaceSyncEngineRemoteServices,
|
|
1852
|
+
setWorkspaceSyncBusy,
|
|
1853
|
+
setUserGlobalSyncStatus,
|
|
1854
|
+
setUserGlobalSyncError,
|
|
1855
|
+
setWorkspaceLastErrorMessage,
|
|
1856
|
+
setWorkspaceLastErrorAt,
|
|
1857
|
+
setWorkspaceLastPullAt,
|
|
1858
|
+
setWorkspaceLastPushAt,
|
|
1859
|
+
setWorkspaceSyncPendingChanges,
|
|
1860
|
+
setTasks,
|
|
1861
|
+
setArchivedTasks,
|
|
1862
|
+
scheduleTask: (callback, delayMs) => {
|
|
1863
|
+
const timeoutId = window.setTimeout(callback, delayMs);
|
|
1864
|
+
return { cancel: () => window.clearTimeout(timeoutId) };
|
|
1865
|
+
},
|
|
1866
|
+
logDebug: logSyncDebug,
|
|
1867
|
+
notifyAiProfilesMutated: dispatchTaskforceAiProfilesMutated,
|
|
1868
|
+
notifyAgentsMutated: dispatchTaskforceAgentsMutated,
|
|
1869
|
+
notifyAgentSkillsMutated: dispatchTaskforceAgentSkillsMutated
|
|
1870
|
+
});
|
|
1871
|
+
}, [
|
|
1393
1872
|
cloudAuthConfigured,
|
|
1394
1873
|
runtimeMode,
|
|
1874
|
+
initiativeFeedActivationEnabled,
|
|
1875
|
+
combinedFeedActivationEnabled,
|
|
1876
|
+
combinedFeedCoverage,
|
|
1395
1877
|
workspaceCloudSyncEnabled,
|
|
1396
1878
|
currentWorkspaceId,
|
|
1397
1879
|
workspaceSyncPhase,
|
|
@@ -1404,29 +1886,47 @@ export function useSyncOrchestrator(input) {
|
|
|
1404
1886
|
handleSyncAuthFailure,
|
|
1405
1887
|
clearWorkspaceRetry,
|
|
1406
1888
|
clearWorkspaceIssue,
|
|
1889
|
+
isDurableRecoveryBlockingOrdinaryPush,
|
|
1407
1890
|
scheduleWorkspaceSyncRetry,
|
|
1408
1891
|
persistWorkspaceSyncPatchSafely,
|
|
1409
1892
|
persistWorkspaceSyncPatchBestEffort,
|
|
1410
1893
|
persistWorkspaceSyncWatermarksSnapshotBestEffort,
|
|
1894
|
+
refreshWorkspaceAiProfilePushBaselineFromPersistence,
|
|
1411
1895
|
reportSyncEvent,
|
|
1412
1896
|
acquireWorkspaceSyncLease,
|
|
1413
1897
|
releaseWorkspaceSyncLease,
|
|
1898
|
+
recordWorkspaceSyncCompletion,
|
|
1414
1899
|
reportWorkspaceWindowContention,
|
|
1415
1900
|
refreshWorkspaceSyncMarkdownDocumentsSnapshot,
|
|
1416
1901
|
refreshWorkspaceSyncAiProfilesSnapshot,
|
|
1417
1902
|
refreshWorkspaceSyncAssetsSnapshot,
|
|
1903
|
+
refreshWorkspaceSyncTaxonomySnapshot,
|
|
1418
1904
|
refreshWorkspaceSyncPlanningEntitiesSnapshot,
|
|
1419
1905
|
refreshWorkspaceSyncDocumentReviewSessionsSnapshot,
|
|
1420
1906
|
refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot,
|
|
1907
|
+
refreshWorkspaceSyncTaskforceAgentsSnapshot,
|
|
1421
1908
|
refreshLocalWorkspaceTaskCollections,
|
|
1422
1909
|
buildWorkspaceSyncPayload,
|
|
1423
1910
|
buildWorkspaceSyncSignature,
|
|
1424
1911
|
seedWorkspaceSnapshotPushBaseline,
|
|
1425
1912
|
shouldSuppressAttachBootstrapPush,
|
|
1913
|
+
workspaceSyncRemoteServicesSelection,
|
|
1914
|
+
workspaceSyncEngineRemoteServices,
|
|
1426
1915
|
setTasks,
|
|
1427
1916
|
setArchivedTasks
|
|
1428
1917
|
]);
|
|
1429
|
-
|
|
1918
|
+
useEffect(() => {
|
|
1919
|
+
transferCoordinator?.resumeDeferredWork();
|
|
1920
|
+
}, [browserSyncAuthority.authorityEpoch, transferCoordinator]);
|
|
1921
|
+
useEffect(() => () => transferCoordinator?.dispose(), [transferCoordinator]);
|
|
1922
|
+
const pushWorkspaceChangesToCloud = useCallback((signature, options) => (transferCoordinator
|
|
1923
|
+
? transferCoordinator.pushWorkspaceChangesToCloud(signature, options)
|
|
1924
|
+
: Promise.resolve(false)), [transferCoordinator]);
|
|
1925
|
+
const pullWorkspaceChangesFromCloud = useCallback((options) => (transferCoordinator
|
|
1926
|
+
? transferCoordinator.pullWorkspaceChangesFromCloud(options)
|
|
1927
|
+
: Promise.resolve(false)), [transferCoordinator]);
|
|
1928
|
+
const pullWorkspaceChangesFromCloudRef = useRef(pullWorkspaceChangesFromCloud);
|
|
1929
|
+
pullWorkspaceChangesFromCloudRef.current = pullWorkspaceChangesFromCloud;
|
|
1430
1930
|
const realtimeBridgeRef = useRef({
|
|
1431
1931
|
handleRealtimeSignal: () => { },
|
|
1432
1932
|
recordSuppressedEventIds: () => { },
|
|
@@ -1442,6 +1942,9 @@ export function useSyncOrchestrator(input) {
|
|
|
1442
1942
|
realtimeSuppressedEventIdsRef,
|
|
1443
1943
|
clearWorkspaceRetry,
|
|
1444
1944
|
isWorkspaceRetryPending,
|
|
1945
|
+
isExecutionAuthorized: isBrowserWorkspaceSyncAuthorized,
|
|
1946
|
+
isServerOwned: () => (isServerOwnedBrowserSyncAuthority(browserSyncAuthorityRef.current)),
|
|
1947
|
+
signalServerWake: (eventIds) => localCoordinator.signalWake('realtime', eventIds),
|
|
1445
1948
|
pullWorkspaceChangesFromCloud
|
|
1446
1949
|
}), [
|
|
1447
1950
|
cloudAuthConfigured,
|
|
@@ -1450,12 +1953,16 @@ export function useSyncOrchestrator(input) {
|
|
|
1450
1953
|
workspaceSyncPhase,
|
|
1451
1954
|
clearWorkspaceRetry,
|
|
1452
1955
|
isWorkspaceRetryPending,
|
|
1956
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
1957
|
+
localCoordinator.signalWake,
|
|
1453
1958
|
pullWorkspaceChangesFromCloud
|
|
1454
1959
|
]);
|
|
1455
1960
|
realtimeBridgeRef.current = realtimeBridge;
|
|
1456
1961
|
const realtimeSocketUrl = resolveWebSocketUrl('/taskforce-ws');
|
|
1457
1962
|
const normalizedRealtimeUserId = String(authUserId || '').trim();
|
|
1458
1963
|
const realtimeEnabled = Boolean(realtimeSyncEnabled
|
|
1964
|
+
&& (isBrowserWorkspaceSyncAuthorized()
|
|
1965
|
+
|| browserSyncAuthority.serverCommandMode)
|
|
1459
1966
|
&& cloudAuthConfigured
|
|
1460
1967
|
&& runtimeMode === 'local'
|
|
1461
1968
|
&& workspaceCloudSyncEnabled
|
|
@@ -1478,8 +1985,28 @@ export function useSyncOrchestrator(input) {
|
|
|
1478
1985
|
useEffect(() => {
|
|
1479
1986
|
return () => realtimeBridge.clearRealtimePullDebounce();
|
|
1480
1987
|
}, [realtimeBridge]);
|
|
1988
|
+
useEffect(() => {
|
|
1989
|
+
if (browserSyncAuthority.browserSchedulingAllowed)
|
|
1990
|
+
return;
|
|
1991
|
+
clearWorkspaceRetry();
|
|
1992
|
+
realtimeBridgeRef.current.clearRealtimePullDebounce();
|
|
1993
|
+
}, [
|
|
1994
|
+
browserSyncAuthority.authorityEpoch,
|
|
1995
|
+
browserSyncAuthority.browserSchedulingAllowed,
|
|
1996
|
+
clearWorkspaceRetry,
|
|
1997
|
+
]);
|
|
1481
1998
|
// === SECTION: Repair & manual retry ===
|
|
1482
1999
|
const saveWorkspaceCloudSyncSettings = useCallback(async (settings) => {
|
|
2000
|
+
if (browserSyncAuthority.serverCommandMode) {
|
|
2001
|
+
await localCoordinator.issueCommand(settings.enabled ? 'EnableSync' : 'DisableSync');
|
|
2002
|
+
return { success: true };
|
|
2003
|
+
}
|
|
2004
|
+
if (!isBrowserWorkspaceSyncAuthorized()) {
|
|
2005
|
+
return {
|
|
2006
|
+
success: false,
|
|
2007
|
+
error: 'Workspace sync ownership is changing. Wait for the coordinator to become ready.',
|
|
2008
|
+
};
|
|
2009
|
+
}
|
|
1483
2010
|
return saveWorkspaceCloudSyncSettingsBase(settings, {
|
|
1484
2011
|
cloudAuthConfigured,
|
|
1485
2012
|
isAuthenticated,
|
|
@@ -1489,7 +2016,10 @@ export function useSyncOrchestrator(input) {
|
|
|
1489
2016
|
saveWorkspaceCloudSyncSettingsBase,
|
|
1490
2017
|
cloudAuthConfigured,
|
|
1491
2018
|
isAuthenticated,
|
|
1492
|
-
ensureCloudWorkspaceReadyForSync
|
|
2019
|
+
ensureCloudWorkspaceReadyForSync,
|
|
2020
|
+
browserSyncAuthority.serverCommandMode,
|
|
2021
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
2022
|
+
localCoordinator,
|
|
1493
2023
|
]);
|
|
1494
2024
|
const retryUserGlobalSettingsSync = useCallback(async () => {
|
|
1495
2025
|
await syncUserGlobalSettings({ preferCloudOnFirstSync: false });
|
|
@@ -1499,40 +2029,8 @@ export function useSyncOrchestrator(input) {
|
|
|
1499
2029
|
workspaceCloudSyncEnabled,
|
|
1500
2030
|
workspaceSyncPhase,
|
|
1501
2031
|
workspaceLastPullAt,
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
workspaceForceFullAiProfilePushRef,
|
|
1505
|
-
workspaceStartupRepairRanRef,
|
|
1506
|
-
workspaceStartupFullReconcileRanRef,
|
|
1507
|
-
workspaceFullReconcileInFlightRef,
|
|
1508
|
-
workspacePullCursorRef,
|
|
1509
|
-
workspaceAttachBootstrapBaselineSignatureRef,
|
|
1510
|
-
workspaceCaptureAttachBootstrapBaselineRef,
|
|
1511
|
-
workspacePendingSignatureRef,
|
|
1512
|
-
workspaceLastPushedSignatureRef,
|
|
1513
|
-
workspaceLastPushedWatermarksRef,
|
|
1514
|
-
workspaceLastPushedTaskChangeKeysRef,
|
|
1515
|
-
workspaceLastPushedInitiativeIdsRef,
|
|
1516
|
-
workspaceLastPushedInitiativeWatermarksRef,
|
|
1517
|
-
workspaceLastPushedWorkstreamIdsRef,
|
|
1518
|
-
workspaceLastPushedWorkstreamWatermarksRef,
|
|
1519
|
-
workspaceLastPushedAiProfileIdsRef,
|
|
1520
|
-
workspaceLastPushedAiProfileWatermarksRef,
|
|
1521
|
-
workspaceLastPushedAiProfileChangeKeysRef,
|
|
1522
|
-
workspaceLastPushedDocumentPathsRef,
|
|
1523
|
-
workspaceLastPushedDocumentWatermarksRef,
|
|
1524
|
-
workspaceLastPushedAssetPathsRef,
|
|
1525
|
-
workspaceLastPushedAssetWatermarksRef,
|
|
1526
|
-
workspaceLastPushedDocumentReviewSessionIdsRef,
|
|
1527
|
-
workspaceLastPushedDocumentReviewSessionWatermarksRef,
|
|
1528
|
-
workspaceLastPushedDocumentReviewCommentIdsRef,
|
|
1529
|
-
workspaceLastPushedDocumentReviewCommentWatermarksRef,
|
|
1530
|
-
workspaceLastPushedAnnotatedAttachmentSessionIdsRef,
|
|
1531
|
-
workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef,
|
|
1532
|
-
workspaceLastPushedTaskEventWatermarksRef,
|
|
1533
|
-
workspaceBaselineResetReasonRef,
|
|
1534
|
-
bootstrapPhaseStartedAtRef,
|
|
1535
|
-
bootstrapLastProgressAtRef,
|
|
2032
|
+
runtime: workspaceSyncEngineRuntime,
|
|
2033
|
+
localServices: workspaceSyncEngineLocalServices,
|
|
1536
2034
|
acquireWorkspaceSyncLease,
|
|
1537
2035
|
releaseWorkspaceSyncLease,
|
|
1538
2036
|
forceClearWorkspaceSyncLease,
|
|
@@ -1548,13 +2046,17 @@ export function useSyncOrchestrator(input) {
|
|
|
1548
2046
|
cloudAuthConfigured,
|
|
1549
2047
|
runtimeMode,
|
|
1550
2048
|
isAuthenticated,
|
|
1551
|
-
checkAuthSession
|
|
2049
|
+
checkAuthSession,
|
|
2050
|
+
isExecutionAuthorized: isBrowserWorkspaceSyncAuthorized,
|
|
2051
|
+
coordinatorGeneration: localCoordinator.snapshot?.state?.coordinatorGeneration ?? null,
|
|
1552
2052
|
}), [
|
|
1553
2053
|
currentWorkspaceId,
|
|
1554
2054
|
taxonomyStateFingerprint,
|
|
1555
2055
|
workspaceCloudSyncEnabled,
|
|
1556
2056
|
workspaceSyncPhase,
|
|
1557
2057
|
workspaceLastPullAt,
|
|
2058
|
+
workspaceSyncEngineRuntime,
|
|
2059
|
+
workspaceSyncEngineLocalServices,
|
|
1558
2060
|
acquireWorkspaceSyncLease,
|
|
1559
2061
|
releaseWorkspaceSyncLease,
|
|
1560
2062
|
forceClearWorkspaceSyncLease,
|
|
@@ -1570,9 +2072,45 @@ export function useSyncOrchestrator(input) {
|
|
|
1570
2072
|
cloudAuthConfigured,
|
|
1571
2073
|
runtimeMode,
|
|
1572
2074
|
isAuthenticated,
|
|
1573
|
-
checkAuthSession
|
|
2075
|
+
checkAuthSession,
|
|
2076
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
2077
|
+
localCoordinator.snapshot?.state?.coordinatorGeneration,
|
|
2078
|
+
]);
|
|
2079
|
+
const retryWorkspaceCloudSync = useCallback(async () => {
|
|
2080
|
+
if (browserSyncAuthority.serverCommandMode) {
|
|
2081
|
+
const coordinatorSnapshot = localCoordinator.snapshot
|
|
2082
|
+
|| await localCoordinator.refresh();
|
|
2083
|
+
if (!coordinatorSnapshot || coordinatorSnapshot.credential.status !== 'ready') {
|
|
2084
|
+
return false;
|
|
2085
|
+
}
|
|
2086
|
+
await localCoordinator.issueCommand('Retry');
|
|
2087
|
+
return true;
|
|
2088
|
+
}
|
|
2089
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2090
|
+
return false;
|
|
2091
|
+
return recoveryCoordinator.retryWorkspaceCloudSync();
|
|
2092
|
+
}, [
|
|
2093
|
+
browserSyncAuthority.serverCommandMode,
|
|
2094
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
2095
|
+
localCoordinator,
|
|
2096
|
+
recoveryCoordinator,
|
|
2097
|
+
]);
|
|
2098
|
+
const resetWorkspaceSyncCursorAndPull = useCallback(async () => {
|
|
2099
|
+
if (browserSyncAuthority.serverCommandMode) {
|
|
2100
|
+
void localCoordinator.issueCommand('Repair').catch(() => {
|
|
2101
|
+
// Coordinator status owns durable error and retry presentation.
|
|
2102
|
+
});
|
|
2103
|
+
return;
|
|
2104
|
+
}
|
|
2105
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2106
|
+
return;
|
|
2107
|
+
await recoveryCoordinator.resetWorkspaceSyncCursorAndPull();
|
|
2108
|
+
}, [
|
|
2109
|
+
browserSyncAuthority.serverCommandMode,
|
|
2110
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
2111
|
+
localCoordinator,
|
|
2112
|
+
recoveryCoordinator,
|
|
1574
2113
|
]);
|
|
1575
|
-
const { retryWorkspaceCloudSync, resetWorkspaceSyncCursorAndPull } = recoveryCoordinator;
|
|
1576
2114
|
// === SECTION: Diagnostics & reactive effects ===
|
|
1577
2115
|
const getWorkspaceSyncDiagnostics = useCallback(() => {
|
|
1578
2116
|
const pushReadiness = resolvePushSyncReadiness({
|
|
@@ -1618,7 +2156,7 @@ export function useSyncOrchestrator(input) {
|
|
|
1618
2156
|
lastPullAt: workspaceLastPullAt,
|
|
1619
2157
|
lastPushAt: workspaceLastPushAt,
|
|
1620
2158
|
lastErrorAt: workspaceLastErrorAt,
|
|
1621
|
-
pendingChanges: workspaceSyncPendingChanges,
|
|
2159
|
+
pendingChanges: workspaceSyncPendingChanges + (workspaceSyncV3OutboxStatus?.activeDepth || 0),
|
|
1622
2160
|
lastErrorMessage: workspaceLastErrorMessage,
|
|
1623
2161
|
recommendedAction: workspaceSyncRecommendedAction,
|
|
1624
2162
|
pushBlockedReason: pushReadiness.allowed ? null : pushReadiness.reason,
|
|
@@ -1639,9 +2177,16 @@ export function useSyncOrchestrator(input) {
|
|
|
1639
2177
|
documentReviewSessionSnapshotFingerprint: workspaceSyncDocumentReviewSessionsFingerprint,
|
|
1640
2178
|
annotatedAttachmentSessionSnapshotCount: workspaceSyncAnnotatedAttachmentSessions.length,
|
|
1641
2179
|
annotatedAttachmentSessionSnapshotFingerprint: workspaceSyncAnnotatedAttachmentSessionsFingerprint,
|
|
2180
|
+
taskforceAgentSnapshotCount: workspaceSyncTaskforceAgents.length,
|
|
2181
|
+
taskforceAgentSnapshotFingerprint: workspaceSyncTaskforceAgentsFingerprint,
|
|
1642
2182
|
lastPushedAiProfileCount: workspaceLastPushedAiProfileIdsRef.current.size,
|
|
1643
2183
|
lastPushedAiProfileWatermarkCount: workspaceLastPushedAiProfileWatermarksRef.current.size,
|
|
1644
|
-
|
|
2184
|
+
lastPushedTaskforceAgentCount: workspaceLastPushedTaskforceAgentIdsRef.current.size,
|
|
2185
|
+
lastPushedTaskforceAgentWatermarkCount: workspaceLastPushedTaskforceAgentWatermarksRef.current.size,
|
|
2186
|
+
lastPushedAgentConversationCount: workspaceLastPushedAgentConversationIdsRef.current.size,
|
|
2187
|
+
lastPushedAgentConversationWatermarkCount: workspaceLastPushedAgentConversationWatermarksRef.current.size,
|
|
2188
|
+
forceFullAiProfilePushQueued: workspaceForceFullAiProfilePushRef.current === true,
|
|
2189
|
+
durableOutbox: workspaceSyncV3OutboxStatus
|
|
1645
2190
|
};
|
|
1646
2191
|
}, [
|
|
1647
2192
|
cloudAuthConfigured,
|
|
@@ -1657,6 +2202,7 @@ export function useSyncOrchestrator(input) {
|
|
|
1657
2202
|
workspaceLastPushAt,
|
|
1658
2203
|
workspaceLastErrorAt,
|
|
1659
2204
|
workspaceSyncPendingChanges,
|
|
2205
|
+
workspaceSyncV3OutboxStatus,
|
|
1660
2206
|
workspaceLastErrorMessage,
|
|
1661
2207
|
workspaceSyncRecommendedAction,
|
|
1662
2208
|
workspaceSyncMarkdownDocuments.length,
|
|
@@ -1670,6 +2216,8 @@ export function useSyncOrchestrator(input) {
|
|
|
1670
2216
|
workspaceSyncDocumentReviewSessionsFingerprint,
|
|
1671
2217
|
workspaceSyncAnnotatedAttachmentSessions.length,
|
|
1672
2218
|
workspaceSyncAnnotatedAttachmentSessionsFingerprint,
|
|
2219
|
+
workspaceSyncTaskforceAgents.length,
|
|
2220
|
+
workspaceSyncTaskforceAgentsFingerprint,
|
|
1673
2221
|
isWorkspaceRetryPending
|
|
1674
2222
|
]);
|
|
1675
2223
|
useEffect(() => {
|
|
@@ -1692,6 +2240,7 @@ export function useSyncOrchestrator(input) {
|
|
|
1692
2240
|
void refreshWorkspaceSyncAssetsSnapshot();
|
|
1693
2241
|
void refreshWorkspaceSyncDocumentReviewSessionsSnapshot();
|
|
1694
2242
|
void refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot();
|
|
2243
|
+
void refreshWorkspaceSyncTaskforceAgentsSnapshot();
|
|
1695
2244
|
const handleContextAssetsMutated = (event) => {
|
|
1696
2245
|
const detail = event.detail;
|
|
1697
2246
|
const eventWorkspaceId = String(detail?.workspaceId || '').trim() || 'default';
|
|
@@ -1707,8 +2256,28 @@ export function useSyncOrchestrator(input) {
|
|
|
1707
2256
|
void refreshWorkspaceSyncAiProfilesSnapshot();
|
|
1708
2257
|
void refreshWorkspaceSyncAssetsSnapshot();
|
|
1709
2258
|
};
|
|
2259
|
+
const handleTaskforceAgentsMutated = (event) => {
|
|
2260
|
+
const detail = event.detail;
|
|
2261
|
+
const eventWorkspaceId = String(detail?.workspaceId || '').trim() || 'default';
|
|
2262
|
+
if (eventWorkspaceId !== currentWorkspaceId)
|
|
2263
|
+
return;
|
|
2264
|
+
if (String(detail?.reason || '').trim() === 'sync-apply')
|
|
2265
|
+
return;
|
|
2266
|
+
void refreshWorkspaceSyncTaskforceAgentsSnapshot();
|
|
2267
|
+
};
|
|
2268
|
+
const handleTaskforceAgentSkillsMutated = (event) => {
|
|
2269
|
+
const detail = event.detail;
|
|
2270
|
+
const eventWorkspaceId = String(detail?.workspaceId || '').trim() || 'default';
|
|
2271
|
+
if (eventWorkspaceId !== currentWorkspaceId)
|
|
2272
|
+
return;
|
|
2273
|
+
if (String(detail?.reason || '').trim() === 'sync-apply')
|
|
2274
|
+
return;
|
|
2275
|
+
void refreshWorkspaceSyncTaskforceAgentsSnapshot();
|
|
2276
|
+
};
|
|
1710
2277
|
window.addEventListener(TASKFORCE_CONTEXT_ASSETS_MUTATED_EVENT, handleContextAssetsMutated);
|
|
1711
2278
|
window.addEventListener(TASKFORCE_AI_PROFILES_MUTATED_EVENT, handleAiProfilesMutated);
|
|
2279
|
+
window.addEventListener(TASKFORCE_AGENTS_MUTATED_EVENT, handleTaskforceAgentsMutated);
|
|
2280
|
+
window.addEventListener(TASKFORCE_AGENT_SKILLS_MUTATED_EVENT, handleTaskforceAgentSkillsMutated);
|
|
1712
2281
|
const docsIntervalId = window.setInterval(() => {
|
|
1713
2282
|
void refreshWorkspaceSyncMarkdownDocumentsSnapshot();
|
|
1714
2283
|
}, workspaceDocumentsRefreshIntervalMs);
|
|
@@ -1724,14 +2293,20 @@ export function useSyncOrchestrator(input) {
|
|
|
1724
2293
|
const annotatedAttachmentSessionsIntervalId = window.setInterval(() => {
|
|
1725
2294
|
void refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot();
|
|
1726
2295
|
}, workspaceDocumentsRefreshIntervalMs);
|
|
2296
|
+
const taskforceAgentsIntervalId = window.setInterval(() => {
|
|
2297
|
+
void refreshWorkspaceSyncTaskforceAgentsSnapshot();
|
|
2298
|
+
}, workspaceDocumentsRefreshIntervalMs);
|
|
1727
2299
|
return () => {
|
|
1728
2300
|
window.removeEventListener(TASKFORCE_CONTEXT_ASSETS_MUTATED_EVENT, handleContextAssetsMutated);
|
|
1729
2301
|
window.removeEventListener(TASKFORCE_AI_PROFILES_MUTATED_EVENT, handleAiProfilesMutated);
|
|
2302
|
+
window.removeEventListener(TASKFORCE_AGENTS_MUTATED_EVENT, handleTaskforceAgentsMutated);
|
|
2303
|
+
window.removeEventListener(TASKFORCE_AGENT_SKILLS_MUTATED_EVENT, handleTaskforceAgentSkillsMutated);
|
|
1730
2304
|
window.clearInterval(docsIntervalId);
|
|
1731
2305
|
window.clearInterval(aiProfilesIntervalId);
|
|
1732
2306
|
window.clearInterval(assetsIntervalId);
|
|
1733
2307
|
window.clearInterval(documentReviewSessionsIntervalId);
|
|
1734
2308
|
window.clearInterval(annotatedAttachmentSessionsIntervalId);
|
|
2309
|
+
window.clearInterval(taskforceAgentsIntervalId);
|
|
1735
2310
|
};
|
|
1736
2311
|
}, [
|
|
1737
2312
|
cloudAuthConfigured,
|
|
@@ -1746,6 +2321,7 @@ export function useSyncOrchestrator(input) {
|
|
|
1746
2321
|
refreshWorkspaceSyncAssetsSnapshot,
|
|
1747
2322
|
refreshWorkspaceSyncDocumentReviewSessionsSnapshot,
|
|
1748
2323
|
refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot,
|
|
2324
|
+
refreshWorkspaceSyncTaskforceAgentsSnapshot,
|
|
1749
2325
|
workspaceDocumentsRefreshIntervalMs
|
|
1750
2326
|
]);
|
|
1751
2327
|
// When task attachments change (e.g., after the MCP save_task_attachment tool writes a
|
|
@@ -1762,6 +2338,8 @@ export function useSyncOrchestrator(input) {
|
|
|
1762
2338
|
refreshWorkspaceSyncContextAssetSnapshots();
|
|
1763
2339
|
}, [cloudAuthConfigured, runtimeMode, workspaceCloudSyncEnabled, authSessionResolved, isAuthenticated, taskAttachmentsFingerprint, refreshWorkspaceSyncContextAssetSnapshots]);
|
|
1764
2340
|
useEffect(() => {
|
|
2341
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2342
|
+
return;
|
|
1765
2343
|
if (!shouldScheduleWorkspaceReactivePush({
|
|
1766
2344
|
cloudAuthConfigured,
|
|
1767
2345
|
runtimeMode,
|
|
@@ -1776,6 +2354,9 @@ export function useSyncOrchestrator(input) {
|
|
|
1776
2354
|
return;
|
|
1777
2355
|
if (!signature || signature === workspaceLastPushedSignatureRef.current)
|
|
1778
2356
|
return;
|
|
2357
|
+
if (workspaceBlockedPushSignatureRef.current === signature)
|
|
2358
|
+
return;
|
|
2359
|
+
workspaceBlockedPushSignatureRef.current = '';
|
|
1779
2360
|
const pendingPayload = buildWorkspaceSyncPayload();
|
|
1780
2361
|
setWorkspaceSyncPendingChanges(pendingPayload.changes.length);
|
|
1781
2362
|
if (workspacePushInFlightRef.current || workspacePullInFlightRef.current) {
|
|
@@ -1783,6 +2364,12 @@ export function useSyncOrchestrator(input) {
|
|
|
1783
2364
|
return;
|
|
1784
2365
|
}
|
|
1785
2366
|
const timeoutId = window.setTimeout(() => {
|
|
2367
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2368
|
+
return;
|
|
2369
|
+
if (workspacePushInFlightRef.current || workspacePullInFlightRef.current) {
|
|
2370
|
+
workspacePendingSignatureRef.current = buildWorkspaceSyncSignature();
|
|
2371
|
+
return;
|
|
2372
|
+
}
|
|
1786
2373
|
void pushWorkspaceChangesToCloud(signature);
|
|
1787
2374
|
}, 1500);
|
|
1788
2375
|
return () => window.clearTimeout(timeoutId);
|
|
@@ -1802,11 +2389,16 @@ export function useSyncOrchestrator(input) {
|
|
|
1802
2389
|
workspaceSyncAssetsFingerprint,
|
|
1803
2390
|
workspaceSyncDocumentReviewSessionsFingerprint,
|
|
1804
2391
|
workspaceSyncAnnotatedAttachmentSessionsFingerprint,
|
|
2392
|
+
workspaceSyncTaskforceAgentsFingerprint,
|
|
1805
2393
|
pushWorkspaceChangesToCloud,
|
|
1806
2394
|
workspacePushInFlightRef,
|
|
1807
|
-
workspacePullInFlightRef
|
|
2395
|
+
workspacePullInFlightRef,
|
|
2396
|
+
browserSyncAuthority.authorityEpoch,
|
|
2397
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
1808
2398
|
]);
|
|
1809
2399
|
useEffect(() => {
|
|
2400
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2401
|
+
return;
|
|
1810
2402
|
if (!shouldStartWorkspacePushWatchdog({
|
|
1811
2403
|
cloudAuthConfigured,
|
|
1812
2404
|
runtimeMode,
|
|
@@ -1817,13 +2409,18 @@ export function useSyncOrchestrator(input) {
|
|
|
1817
2409
|
}))
|
|
1818
2410
|
return;
|
|
1819
2411
|
const intervalId = window.setInterval(() => {
|
|
2412
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2413
|
+
return;
|
|
1820
2414
|
if (workspacePushInFlightRef.current || workspacePullInFlightRef.current)
|
|
1821
2415
|
return;
|
|
1822
2416
|
if (isWorkspaceRetryPending())
|
|
1823
2417
|
return;
|
|
1824
|
-
const signature =
|
|
2418
|
+
const signature = buildWorkspaceSyncSignature();
|
|
1825
2419
|
if (!signature || signature === workspaceLastPushedSignatureRef.current)
|
|
1826
2420
|
return;
|
|
2421
|
+
if (workspaceBlockedPushSignatureRef.current === signature)
|
|
2422
|
+
return;
|
|
2423
|
+
workspaceBlockedPushSignatureRef.current = '';
|
|
1827
2424
|
const pendingPayload = buildWorkspaceSyncPayload();
|
|
1828
2425
|
setWorkspaceSyncPendingChanges(pendingPayload.changes.length);
|
|
1829
2426
|
if (pendingPayload.changes.length === 0)
|
|
@@ -1842,7 +2439,9 @@ export function useSyncOrchestrator(input) {
|
|
|
1842
2439
|
buildWorkspaceSyncPayload,
|
|
1843
2440
|
pushWorkspaceChangesToCloud,
|
|
1844
2441
|
isWorkspaceRetryPending,
|
|
1845
|
-
workspacePushWatchdogIntervalMs
|
|
2442
|
+
workspacePushWatchdogIntervalMs,
|
|
2443
|
+
browserSyncAuthority.authorityEpoch,
|
|
2444
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
1846
2445
|
]);
|
|
1847
2446
|
useEffect(() => {
|
|
1848
2447
|
if (cloudAuthConfigured && runtimeMode === 'local' && workspaceCloudSyncEnabled)
|
|
@@ -1856,6 +2455,8 @@ export function useSyncOrchestrator(input) {
|
|
|
1856
2455
|
clearWorkspaceRetry
|
|
1857
2456
|
]);
|
|
1858
2457
|
useEffect(() => {
|
|
2458
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2459
|
+
return;
|
|
1859
2460
|
const pullPolicy = resolveWorkspaceAutomaticPullPolicy({
|
|
1860
2461
|
cloudAuthConfigured,
|
|
1861
2462
|
runtimeMode,
|
|
@@ -1868,10 +2469,14 @@ export function useSyncOrchestrator(input) {
|
|
|
1868
2469
|
if (!pullPolicy.shouldStart)
|
|
1869
2470
|
return;
|
|
1870
2471
|
if (pullPolicy.shouldKickOffImmediately) {
|
|
1871
|
-
void
|
|
2472
|
+
void pullWorkspaceChangesFromCloudRef.current();
|
|
1872
2473
|
}
|
|
1873
2474
|
const intervalId = window.setInterval(() => {
|
|
1874
|
-
|
|
2475
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2476
|
+
return;
|
|
2477
|
+
if (wasWorkspaceSyncOperationCompletedRecently(currentWorkspaceId, 'pull', workspacePullIntervalMs))
|
|
2478
|
+
return;
|
|
2479
|
+
void pullWorkspaceChangesFromCloudRef.current();
|
|
1875
2480
|
}, workspacePullIntervalMs);
|
|
1876
2481
|
return () => {
|
|
1877
2482
|
window.clearInterval(intervalId);
|
|
@@ -1883,11 +2488,16 @@ export function useSyncOrchestrator(input) {
|
|
|
1883
2488
|
authSessionResolved,
|
|
1884
2489
|
workspaceSyncPhase,
|
|
1885
2490
|
workspaceLastPullAt,
|
|
2491
|
+
currentWorkspaceId,
|
|
1886
2492
|
isWorkspaceRetryPending,
|
|
1887
|
-
|
|
1888
|
-
workspacePullIntervalMs
|
|
2493
|
+
wasWorkspaceSyncOperationCompletedRecently,
|
|
2494
|
+
workspacePullIntervalMs,
|
|
2495
|
+
browserSyncAuthority.authorityEpoch,
|
|
2496
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
1889
2497
|
]);
|
|
1890
2498
|
useEffect(() => {
|
|
2499
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2500
|
+
return;
|
|
1891
2501
|
if (!shouldStartWorkspacePeriodicFullReconcile({
|
|
1892
2502
|
cloudAuthConfigured,
|
|
1893
2503
|
runtimeMode,
|
|
@@ -1898,10 +2508,12 @@ export function useSyncOrchestrator(input) {
|
|
|
1898
2508
|
}))
|
|
1899
2509
|
return;
|
|
1900
2510
|
const intervalId = window.setInterval(() => {
|
|
2511
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2512
|
+
return;
|
|
1901
2513
|
if (workspaceFullReconcileInFlightRef.current)
|
|
1902
2514
|
return;
|
|
1903
2515
|
workspaceFullReconcileInFlightRef.current = true;
|
|
1904
|
-
void
|
|
2516
|
+
void pullWorkspaceChangesFromCloudRef.current({ forceCursorNull: true }).finally(() => {
|
|
1905
2517
|
workspaceFullReconcileInFlightRef.current = false;
|
|
1906
2518
|
});
|
|
1907
2519
|
}, WORKSPACE_FULL_RECONCILE_INTERVAL_MS);
|
|
@@ -1913,7 +2525,8 @@ export function useSyncOrchestrator(input) {
|
|
|
1913
2525
|
authSessionResolved,
|
|
1914
2526
|
isAuthenticated,
|
|
1915
2527
|
workspaceSyncPhase,
|
|
1916
|
-
|
|
2528
|
+
browserSyncAuthority.authorityEpoch,
|
|
2529
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
1917
2530
|
]);
|
|
1918
2531
|
useEffect(() => {
|
|
1919
2532
|
if (runtimeMode !== 'local' || !isAuthenticated)
|
|
@@ -1958,6 +2571,8 @@ export function useSyncOrchestrator(input) {
|
|
|
1958
2571
|
// missing or stale-tombstoned metadata — a common result of a crash between file write
|
|
1959
2572
|
// and DB upsert. The repair only adds missing records; it never deletes files.
|
|
1960
2573
|
useEffect(() => {
|
|
2574
|
+
if (!isBrowserWorkspaceSyncAuthorized())
|
|
2575
|
+
return;
|
|
1961
2576
|
if (!shouldRunWorkspaceStartupRepair({
|
|
1962
2577
|
cloudAuthConfigured,
|
|
1963
2578
|
runtimeMode,
|
|
@@ -2003,9 +2618,65 @@ export function useSyncOrchestrator(input) {
|
|
|
2003
2618
|
refreshWorkspaceSyncMarkdownDocumentsSnapshot,
|
|
2004
2619
|
refreshWorkspaceSyncAiProfilesSnapshot,
|
|
2005
2620
|
refreshWorkspaceSyncAssetsSnapshot,
|
|
2006
|
-
refreshWorkspaceSyncDocumentReviewSessionsSnapshot
|
|
2621
|
+
refreshWorkspaceSyncDocumentReviewSessionsSnapshot,
|
|
2622
|
+
browserSyncAuthority.authorityEpoch,
|
|
2623
|
+
isBrowserWorkspaceSyncAuthorized,
|
|
2007
2624
|
]);
|
|
2008
2625
|
// === SECTION: Return value ===
|
|
2626
|
+
const localCoordinatorDataVersion = (localCoordinatorAttachmentEnabled
|
|
2627
|
+
&& localCoordinator.phase === 'ready'
|
|
2628
|
+
&& localCoordinator.snapshot?.state.activeWorkspaceId === currentWorkspaceId)
|
|
2629
|
+
? {
|
|
2630
|
+
coordinatorGeneration: localCoordinator.snapshot.state.coordinatorGeneration,
|
|
2631
|
+
localDataVersion: localCoordinator.snapshot.state.localDataVersion,
|
|
2632
|
+
}
|
|
2633
|
+
: null;
|
|
2634
|
+
const localCoordinatorStatus = localCoordinatorAttachmentEnabled
|
|
2635
|
+
? {
|
|
2636
|
+
phase: localCoordinator.phase,
|
|
2637
|
+
snapshot: localCoordinator.snapshot,
|
|
2638
|
+
errorMessage: localCoordinator.error?.message || null,
|
|
2639
|
+
}
|
|
2640
|
+
: null;
|
|
2641
|
+
const switchLocalCoordinatorWorkspace = useCallback(async (targetWorkspaceId) => {
|
|
2642
|
+
if (runtimeMode !== 'local'
|
|
2643
|
+
|| !localCoordinatorAttachmentEnabled)
|
|
2644
|
+
return false;
|
|
2645
|
+
if (localCoordinator.phase !== 'ready'
|
|
2646
|
+
|| !localCoordinator.snapshot) {
|
|
2647
|
+
throw new LocalSyncCoordinatorBrowserClientError('The local sync coordinator is not ready to switch workspaces.', 'SYNC_COORDINATOR_UNAVAILABLE', 409);
|
|
2648
|
+
}
|
|
2649
|
+
await localCoordinator.switchWorkspace(targetWorkspaceId);
|
|
2650
|
+
return true;
|
|
2651
|
+
}, [
|
|
2652
|
+
localCoordinator,
|
|
2653
|
+
localCoordinatorAttachmentEnabled,
|
|
2654
|
+
runtimeMode,
|
|
2655
|
+
]);
|
|
2656
|
+
const transferLocalCoordinatorOwnership = useCallback(async (targetMode) => {
|
|
2657
|
+
if (runtimeMode !== 'local'
|
|
2658
|
+
|| !localCoordinatorAttachmentEnabled)
|
|
2659
|
+
return false;
|
|
2660
|
+
if (localCoordinator.phase !== 'ready'
|
|
2661
|
+
|| !localCoordinator.snapshot) {
|
|
2662
|
+
throw new LocalSyncCoordinatorBrowserClientError('The local sync coordinator is not ready to transfer ownership.', 'SYNC_COORDINATOR_UNAVAILABLE', 409);
|
|
2663
|
+
}
|
|
2664
|
+
await localCoordinator.transferOwnership(targetMode);
|
|
2665
|
+
if (targetMode === 'server') {
|
|
2666
|
+
await localCoordinator.issueCommand(workspaceCloudSyncEnabled ? 'EnableSync' : 'DisableSync');
|
|
2667
|
+
if (workspaceCloudSyncEnabled) {
|
|
2668
|
+
void localCoordinator.issueCommand('Sync').catch(() => {
|
|
2669
|
+
// Coordinator status owns durable error and retry presentation.
|
|
2670
|
+
});
|
|
2671
|
+
}
|
|
2672
|
+
}
|
|
2673
|
+
return true;
|
|
2674
|
+
}, [
|
|
2675
|
+
localCoordinator,
|
|
2676
|
+
localCoordinatorAttachmentEnabled,
|
|
2677
|
+
runtimeMode,
|
|
2678
|
+
workspaceCloudSyncEnabled,
|
|
2679
|
+
]);
|
|
2009
2680
|
return {
|
|
2010
2681
|
userGlobalSyncStatus,
|
|
2011
2682
|
setUserGlobalSyncStatus,
|
|
@@ -2023,7 +2694,12 @@ export function useSyncOrchestrator(input) {
|
|
|
2023
2694
|
workspaceSyncSummary,
|
|
2024
2695
|
workspaceSyncRecommendedAction,
|
|
2025
2696
|
workspaceSyncBusy,
|
|
2026
|
-
workspaceSyncPendingChanges,
|
|
2697
|
+
workspaceSyncPendingChanges: workspaceSyncPendingChanges + (workspaceSyncV3OutboxStatus?.activeDepth || 0),
|
|
2698
|
+
workspaceTaskRelationships,
|
|
2699
|
+
localCoordinatorDataVersion,
|
|
2700
|
+
localCoordinatorStatus,
|
|
2701
|
+
switchLocalCoordinatorWorkspace,
|
|
2702
|
+
transferLocalCoordinatorOwnership,
|
|
2027
2703
|
syncInFlightRef,
|
|
2028
2704
|
workspaceRetryAt,
|
|
2029
2705
|
isWorkspaceRetryPending,
|